[waimea] Re: Cairo 1.0.2 compliant

Mathieu Berland mathieubrlnd at yahoo.fr
Mon Jan 30 00:41:39 EET 2006


Hi, some of you sent me mails about troubles with this patch. I made 
some other tests and no, it doesn't work as expected under Xephyr, 
Xnest, and even X. In fact, I discovered I've no problem because I 
launch Waimea from Gdm, don't ask me why.

By the way, I registered on this mailing list a few day ago and I did't 
see that similar patches have already been done last september, sorry.



Le 25 janv. 06, à 20:43, Mathieu Berland a écrit :

> Hi all,
>
> I made a patch from the last dist tarball for waimea to build with 
> Cairo 1.0.2.
>
> (last dist tarball seems to be here :
> http://lists.freedesktop.org/archives/waimea/2006-January/000193.html )
>
> Note that I've only made the diff in the source directory (no autoconf 
> and others...). I've named this version 0.6.0, if David agree ;-)
>
> And..... note that I don't know anything to Cairo ! I've made the 
> modifications from the great '<old function>_deprecated_by_<new 
> function>' macros. Waimea builds and works on my Debian 
> powerpc-unstable GNU/Linux but I'm not sure of what I've made.
>
> Regards.
>
>
>
> =========================================================
>
> diff -urN waimea-0.5.1/src/Event.cc waimea-0.6.0/src/Event.cc
> --- waimea-0.5.1/src/Event.cc	2006-01-18 20:11:41.000000000 +0100
> +++ waimea-0.6.0/src/Event.cc	2006-01-21 14:48:55.000000000 +0100
> @@ -146,18 +146,6 @@
>                  if (*it == dw) it = __render_list.erase(it);
>                  else it++;
>              }
> -
> -            static cairo_t *cr = NULL;
> -            if (cr == NULL) {
> -                cr = cairo_create();
> -                /* XXX: cairo need a call to this function for text
> -                   support to be initialized, will probably dissapear 
> soon. */
> -                cairo_set_target_drawable(cr, waimea->display,
> -                                          
> DefaultRootWindow(waimea->display));
> -            }
> -
> -            dw->renderWindow(cr);
> -
>          } else {
>              FD_ZERO(&rfds);
>              FD_SET(xfd, &rfds);
> diff -urN waimea-0.5.1/src/Render.cc waimea-0.6.0/src/Render.cc
> --- waimea-0.5.1/src/Render.cc	2006-01-18 20:11:41.000000000 +0100
> +++ waimea-0.6.0/src/Render.cc	2006-01-18 21:25:20.000000000 +0100
> @@ -364,21 +364,21 @@
>          if (crsurface) {
>              groupsurface =
>                  cairo_surface_create_similar(crsurface,
> -                                             CAIRO_FORMAT_ARGB32,
> +                                             
> CAIRO_CONTENT_COLOR_ALPHA,
>                                               width, height);
>          } else if (parent_surface) {
>            groupsurface =
>                  cairo_surface_create_similar(parent_surface,
> -                                             CAIRO_FORMAT_ARGB32,
> +                                             
> CAIRO_CONTENT_COLOR_ALPHA,
>                                               width, height);
>          } else {
>              if (ws->waimea->client_side_rendering) {
>                  data = new unsigned char[width * height * 
> sizeof(WaPixel)];
>                  memset (data, 0, width * height * sizeof(WaPixel));
>                  groupsurface =
> -                    cairo_surface_create_for_image((char *) data,
> -                                                   
> CAIRO_FORMAT_ARGB32,
> -                                                   width, height, 
> width * 4);
> +                    cairo_image_surface_create_for_data(data,
> +                                                        
> CAIRO_FORMAT_ARGB32,
> +                                                        width, 
> height, width * 4);
>              } else {
>                  GC gc;
>                  XGCValues gcv;
> @@ -400,8 +400,8 @@
>              }
>          }
>
> -        cairo_set_target_surface(cr, groupsurface);
> -        cairo_default_matrix(cr);
> +        cr = cairo_create(groupsurface);
> +        cairo_identity_matrix(cr);
>          cairo_set_operator(cr, RENDER_OPERATOR_DEFAULT);
>          list<RenderOp *>::iterator oit = operations.begin();
>          for (; oit != operations.end(); oit++) {
> @@ -419,13 +419,14 @@
>      }
>
>      if (crsurface) {
> -        cairo_set_target_surface(cr, crsurface);
> +        cr = cairo_create(crsurface);
>          cairo_set_operator(cr, RENDER_OPERATOR_DEFAULT);
>          if (xrop_set) cairo_set_operator(cr, xrop);
>          cairo_translate(cr, x, y);
>          cairo_rotate(cr, rotation);
> -        cairo_set_alpha(cr, opacity);
> -        cairo_show_surface(cr, cache_surface->crsurface, width, 
> height);
> +        cairo_paint_with_alpha(cr, opacity);
> +        cairo_set_source_surface(cr, cache_surface->crsurface, width, 
> height);
> +        cairo_paint(cr);
>      }
>
>      if (return_surface)
> @@ -822,11 +823,8 @@
>        if (rx != ry) {
>          cairo_matrix_t *matrix;
>
> -        matrix = cairo_matrix_create ();
>          cairo_matrix_scale (matrix, ry / rx, 1.0);
>          cairo_pattern_set_matrix (pattern, matrix);
> -
> -        cairo_matrix_destroy (matrix);
>        }
>      } break;
>      case GroupPatternType: {
> @@ -842,13 +840,13 @@
>          group->return_surface = NULL;
>          group->parent_surface = NULL;
>
> -        cairo_default_matrix(cr);
> +        cairo_identity_matrix(cr);
>          cairo_move_to(cr, 0.0, 0.0);
>          pattern = 
> cairo_pattern_create_for_surface(subsurface->crsurface);
>          subsurface->unref();
>          cairo_restore(cr);
>        } else {
> -        cairo_set_rgb_color (cr, 1.0, 1.0, 1.0);
> +        cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
>          return;
>        }
>      } break;
> @@ -857,23 +855,23 @@
>    int stops = 0;
>    list<WaColorStop *>::iterator it = color_stops.begin();
>    for (; it != color_stops.end(); ++it) {
> -    cairo_pattern_add_color_stop (pattern, (*it)->offset,
> -                                  (*it)->color->red,
> -                                  (*it)->color->green,
> -                                  (*it)->color->blue,
> -                                  (*it)->color->alpha);
> +    cairo_pattern_add_color_stop_rgba (pattern, (*it)->offset,
> +                                       (*it)->color->red,
> +                                       (*it)->color->green,
> +                                       (*it)->color->blue,
> +                                       (*it)->color->alpha);
>      stops++;
>    }
>
>    if (stops == 0) {
> -    cairo_pattern_add_color_stop (pattern, 0.0, 0.0, 0.0, 0.0, 1.0);
> -    cairo_pattern_add_color_stop (pattern, 1.0, 1.0, 1.0, 1.0, 1.0);
> +    cairo_pattern_add_color_stop_rgba (pattern, 0.0, 0.0, 0.0, 0.0, 
> 1.0);
> +    cairo_pattern_add_color_stop_rgba (pattern, 1.0, 1.0, 1.0, 1.0, 
> 1.0);
>    }
>
>    cairo_pattern_set_filter (pattern, filter);
>    cairo_pattern_set_extend (pattern, extend);
>
> -  cairo_set_pattern (cr, pattern);
> +  cairo_set_source (cr, pattern);
>
>    cairo_pattern_destroy (pattern);
>  }
> @@ -1098,7 +1096,7 @@
>            fill_color.setcairo_color(cr);
>            if (fill_pattern)
>              fill_pattern->setcairo_pattern(dwo, cr, NULL, w, h);
> -          cairo_set_alpha(cr, fill_color.alpha);
> +          cairo_paint_with_alpha(cr, fill_color.alpha);
>            cairo_fill(cr);
>            cairo_restore(cr);
>          }
> @@ -1417,7 +1415,7 @@
>      if (name) delete [] name;
>      if (bg_group) bg_group->unref();
>      clear();
> -    if (font) cairo_font_destroy(font);
> +    if (font) cairo_font_face_destroy(font);
>  }
>
>  void RenderOpText::clear(void) {
> @@ -1592,20 +1590,14 @@
>      calc_length(bottom_spacing, bottom_spacing_u, dwo->ws->vdpi, h,
>                  &bottom_space);
>
> -    cairo_default_matrix(cr);
> +    cairo_identity_matrix(cr);
>
>      if (!font) {
> -        cairo_select_font(cr, family, slant, weight);
> -        /* font = cairo_current_font(cr);
> -        if (!font)
> -          return;
> -
> -        cairo_font_reference (font);
> -        */
> +        cairo_select_font_face(cr, family, slant, weight);
>      } else
> -      cairo_set_font (cr, font);
> +      cairo_set_font_face (cr, font);
>
> -    cairo_scale_font (cr, font_size);
> +    cairo_set_font_size (cr, font_size);
>
>      if (is_static)
>          text = utf8;
> @@ -1645,7 +1637,7 @@
>              str[end_offset] = '\0';
>              sinfo->text = str;
>
> -            cairo_text_extents(cr, (unsigned char *) sinfo->text, 
> &extents);
> +            cairo_text_extents(cr, sinfo->text, &extents);
>              str_y_pos = extents.height - extents.y_bearing;
>              str_width = extents.width;
>              str_height = extents.height;
> @@ -1658,9 +1650,9 @@
>              if (textptr[end_offset] == '\t') {
>                  double tab, with_space;
>                  if (space_width < 0.0) {
> -                    cairo_text_extents(cr, (unsigned char *) "1 1", 
> &extents);
> +                    cairo_text_extents(cr, "1 1", &extents);
>                      with_space = extents.width;
> -                    cairo_text_extents(cr, (unsigned char *) "11", 
> &extents);
> +                    cairo_text_extents(cr, "11", &extents);
>                      space_width = with_space - extents.width;
>                  }
>                  tab = ceil((linfo->width + space_width) / tab_space);
> @@ -1731,13 +1723,13 @@
>      cairo_save(cr);
>
>      text_region = cairo_surface_create_similar(
> -        cairo_current_target_surface(cr), CAIRO_FORMAT_ARGB32,
> +        cairo_get_target(cr), CAIRO_CONTENT_COLOR_ALPHA,
>          (unsigned int) ceil(width), (unsigned int) ceil(height));
>
> -    cairo_set_target_surface(cr, text_region);
> +    cr = cairo_create(text_region);
>
>      if (bg_group) {
> -        bg_group->parent_surface = cairo_current_target_surface(cr);
> +        bg_group->parent_surface = cairo_get_target(cr);
>          bg_group->return_surface = &subsurface;
>          cairo_save(cr);
>          bg_group->render(dwo, cr, NULL, (unsigned int) ceil(width),
> @@ -1750,9 +1742,9 @@
>              cairo_pattern_t *pattern;
>
>              cairo_save(cr);
> -            cairo_surface_set_repeat(subsurface->crsurface, true);
>              pattern = 
> cairo_pattern_create_for_surface(subsurface->crsurface);
> -            cairo_set_pattern(cr, pattern);
> +            cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
> +            cairo_set_source(cr, pattern);
>              cairo_pattern_destroy(pattern);
>              cairo_rectangle(cr, 0.0, 0.0, ceil(width), ceil(height));
>              cairo_fill(cr);
> @@ -1777,7 +1769,7 @@
>              if (stroke || fill_pattern) {
>                cairo_move_to(cr, (int) (left_space + (*sit)->x + 
> pos_x),
>                              (int) (y_off + y_pos));
> -              cairo_text_path(cr, (unsigned char *) (*sit)->text);
> +              cairo_text_path(cr, (*sit)->text);
>                cairo_move_to(cr, 0.0, 0.0);
>                draw(dwo, cr, crsurface, WA_ROUND_U(width),
>                     WA_ROUND_U(height));
> @@ -1787,12 +1779,12 @@
>                  cairo_move_to(cr, (int) (left_space + (*sit)->x + 
> pos_x +
>                                           shadow_x_offset),
>                                (int) (y_off + y_pos + 
> shadow_y_offset));
> -                cairo_show_text(cr, (unsigned char *) (*sit)->text);
> +                cairo_show_text(cr, (*sit)->text);
>                }
>                fill_color.setcairo_color(cr);
>                cairo_move_to(cr, (int) (left_space + (*sit)->x + 
> pos_x),
>                              (int) (y_off + y_pos));
> -              cairo_show_text(cr, (unsigned char *) (*sit)->text);
> +              cairo_show_text(cr, (*sit)->text);
>              }
>          }
>
> @@ -1804,8 +1796,9 @@
>      if (x || y) cairo_translate(cr, x, y);
>      if (xrop_set) cairo_set_operator(cr, xrop);
>      if (rotation) cairo_rotate(cr, rotation);
> -    cairo_show_surface(cr, text_region, (unsigned int) ceil(width),
> +    cairo_set_source_surface(cr, text_region, (unsigned int) 
> ceil(width),
>                         (unsigned int) ceil(height));
> +    cairo_paint(cr);
>
>      cairo_surface_destroy(text_region);
>
> @@ -1848,7 +1841,7 @@
>      calcPositionAndSize(w, h, dwo->ws->hdpi, dwo->ws->vdpi, &x, &y,
>                          &width, &height);
>
> -    if (color.alpha == 1.0) cairo_set_operator(cr, 
> CAIRO_OPERATOR_SRC);
> +    if (color.alpha == 1.0) cairo_set_operator(cr, 
> CAIRO_OPERATOR_SOURCE);
>      if (xrop_set) cairo_set_operator(cr, xrop);
>      color.setcairo_color(cr);
>      cairo_rectangle(cr, x, y, width, height);
> @@ -1934,54 +1927,58 @@
>
>      switch (scale) {
>          case ImageNormalScaleType:
> -            cairo_default_matrix(cr);
> +            cairo_identity_matrix(cr);
>
>              if (width != img->width || height != img->height) {
>                  if (xrop_set) cairo_set_operator(cr, xrop);
> -                cairo_operator_t op = cairo_current_operator(cr);
> +                cairo_operator_t op = cairo_get_operator(cr);
>
> -                cairo_surface_t *target = 
> cairo_current_target_surface(cr);
> +                cairo_surface_t *target = cairo_get_target(cr);
>                  cairo_surface_t *scaled =
> -                    cairo_surface_create_similar(target, 
> CAIRO_FORMAT_ARGB32,
> +                    cairo_surface_create_similar(target, 
> CAIRO_CONTENT_COLOR_ALPHA,
>                                                   (int) width + 2,
>                                                   (int) height + 2);
> -                cairo_set_target_surface(cr, scaled);
> +                cr = cairo_create(scaled);
>                  cairo_scale(cr, (double) width / (img->width -
>                                                    ((img->width > 1)? 
> 1: 0)),
>                              (double) height / (img->height -
>                                                 ((img->height > 1)? 1: 
> 0)));
> -                cairo_surface_set_filter(img->crsurface, filter);
> -                cairo_set_operator(cr, CAIRO_OPERATOR_SRC);
> -                cairo_show_surface(cr, img->crsurface,
> -                                   img->width + 1, img->height + 1);
> -                cairo_set_target_surface(cr, target);
> -                cairo_default_matrix(cr);
> +                pattern = 
> cairo_pattern_create_for_surface(img->crsurface);
> +                cairo_pattern_set_filter(pattern, filter);
> +                cairo_set_operator(cr, CAIRO_OPERATOR_SOURCE);
> +                cairo_set_source_surface(cr, img->crsurface,
> +                                         img->width + 1, img->height 
> + 1);
> +                cairo_paint(cr);
> +                cr = cairo_create(target);
> +                cairo_identity_matrix(cr);
>                  cairo_translate(cr, x, y);
>                  cairo_set_operator(cr, op);
> -                cairo_show_surface(cr, scaled, (int) width + 2,
> -                                   (int) height + 2);
> +                cairo_set_source_surface(cr, scaled, (int) width + 2,
> +                                         (int) height + 2);
> +                cairo_paint(cr);
>                  cairo_surface_destroy(scaled);
>              } else {
>                  if (xrop_set) cairo_set_operator(cr, xrop);
>                  cairo_translate(cr, x, y);
>                  cairo_rotate(cr, rotation);
> -                cairo_show_surface(cr, img->crsurface,
> -                                   img->width + 1, img->height + 1);
> +                cairo_set_source_surface(cr, img->crsurface,
> +                                         img->width + 1, img->height 
> + 1);
> +                cairo_paint(cr);
>              }
>              break;
>          case ImageTileScaleType: {
> -            cairo_default_matrix(cr);
> -            cairo_surface_set_repeat(img->crsurface, true);
> +            cairo_identity_matrix(cr);
>              cairo_translate(cr, x, y);
>              cairo_rectangle(cr, 0, 0, width, height);
>              cairo_move_to(cr, 0.0, 0.0);
> -            cairo_default_matrix(cr);
> +            cairo_identity_matrix(cr);
>              pattern = 
> cairo_pattern_create_for_surface(img->crsurface);
> -            cairo_set_pattern(cr, pattern);
> +            cairo_pattern_set_extend(pattern, CAIRO_EXTEND_REPEAT);
> +            cairo_set_source(cr, pattern);
>              cairo_pattern_destroy(pattern);
>              if (xrop_set) cairo_set_operator(cr, xrop);
>              cairo_fill(cr);
> -            cairo_surface_set_repeat(img->crsurface, false);
> +            cairo_pattern_set_extend(pattern, CAIRO_EXTEND_NONE);
>          } break;
>      }
>
> @@ -2275,16 +2272,19 @@
>      cairo_operator_t crop;
>  } operator_map[] = {
>      { "clear", CAIRO_OPERATOR_CLEAR },
> -    { "src", CAIRO_OPERATOR_SRC },
> -    { "dst", CAIRO_OPERATOR_DST },
> +
> +    { "source", CAIRO_OPERATOR_SOURCE },
>      { "over", CAIRO_OPERATOR_OVER },
> -    { "overreverse", CAIRO_OPERATOR_OVER_REVERSE },
>      { "in", CAIRO_OPERATOR_IN },
> -    { "inreverse", CAIRO_OPERATOR_IN_REVERSE },
>      { "out", CAIRO_OPERATOR_OUT },
> -    { "outreverse", CAIRO_OPERATOR_OUT_REVERSE },
>      { "atop", CAIRO_OPERATOR_ATOP },
> -    { "atopreverse", CAIRO_OPERATOR_ATOP_REVERSE },
> +
> +    { "dest", CAIRO_OPERATOR_DEST },
> +    { "destover", CAIRO_OPERATOR_DEST_OVER },
> +    { "destin", CAIRO_OPERATOR_DEST_IN },
> +    { "destout", CAIRO_OPERATOR_DEST_OUT },
> +    { "destatop", CAIRO_OPERATOR_DEST_ATOP },
> +
>      { "xor", CAIRO_OPERATOR_XOR },
>      { "add", CAIRO_OPERATOR_ADD },
>      { "saturate", CAIRO_OPERATOR_SATURATE }
> diff -urN waimea-0.5.1/src/Render.hh waimea-0.6.0/src/Render.hh
> --- waimea-0.5.1/src/Render.hh	2006-01-18 20:11:41.000000000 +0100
> +++ waimea-0.6.0/src/Render.hh	2006-01-18 20:55:39.000000000 +0100
> @@ -247,8 +247,8 @@
>      double getOpacity(void) { return alpha; }
>
>      inline void setcairo_color(cairo_t *cr) {
> -        cairo_set_rgb_color(cr, red, green, blue);
> -        cairo_set_alpha(cr, alpha);
> +        cairo_set_source_rgb(cr, red, green, blue);
> +        cairo_paint_with_alpha(cr, alpha);
>      }
>
>      double red, green, blue, alpha;
> @@ -503,7 +503,7 @@
>      HorizontalAlignment text_halign;
>      WaColor shadow_color;
>      char *family;
> -    cairo_font_t *font;
> +    cairo_font_face_t *font;
>      RenderGroup *bg_group;
>      cairo_font_weight_t weight;
>      cairo_font_slant_t slant;
> diff -urN waimea-0.5.1/src/Screen.cc waimea-0.6.0/src/Screen.cc
> --- waimea-0.5.1/src/Screen.cc	2006-01-18 20:11:41.000000000 +0100
> +++ waimea-0.6.0/src/Screen.cc	2006-01-18 20:17:41.000000000 +0100
> @@ -1561,10 +1561,10 @@
>
>      if (waimea->client_side_rendering) {
>          data = rgba;
> -        surface = cairo_surface_create_for_image((char *) rgba,
> -                                                 CAIRO_FORMAT_ARGB32,
> -                                                 width, height,
> -                                                 width * 
> sizeof(WaPixel));
> +        surface = cairo_image_surface_create_for_data(rgba,
> +                                                      
> CAIRO_FORMAT_ARGB32,
> +                                                      width, height,
> +                                                      width * 
> sizeof(WaPixel));
>      } else {
>          pixmap = XCreatePixmap(display, id, width, height, 32);
>          XImage *image = XCreateImage(display, visual, 32, ZPixmap, 0,
> diff -urN waimea-0.5.1/src/Style.cc waimea-0.6.0/src/Style.cc
> --- waimea-0.5.1/src/Style.cc	2006-01-18 20:11:41.000000000 +0100
> +++ waimea-0.6.0/src/Style.cc	2006-01-18 20:34:21.000000000 +0100
> @@ -647,9 +647,9 @@
>                    (bgsurface)? bgsurface->height: 0,
>                    p_x, p_y, w, h);
>                  root_surface =
> -                  cairo_surface_create_for_image((char *) root_data,
> -                                                 CAIRO_FORMAT_ARGB32,
> -                                                 w, h, w * 
> sizeof(WaPixel));
> +                  cairo_image_surface_create_for_data(root_data,
> +                                                      
> CAIRO_FORMAT_ARGB32,
> +                                                      w, h, w * 
> sizeof(WaPixel));
>                } else {
>                  root_pixmap = ws->getRootBgPixmap(
>                    (bgsurface)? bgsurface->pixmap: None,
> @@ -679,13 +679,14 @@
>          sb->style->parent_surface = NULL;
>
>          if (root_surface) {
> -            cairo_set_target_surface(cr, root_surface);
> +            cr = cairo_create(root_surface);
>              cairo_set_operator(cr, RENDER_OPERATOR_DEFAULT);
>              if (sb->style->xrop_set)
>                  cairo_set_operator(cr, sb->style->xrop);
> -            cairo_set_alpha(cr, sb->style->opacity);
> -            cairo_default_matrix(cr);
> -            cairo_show_surface(cr, return_surface->crsurface, w, h);
> +            cairo_paint_with_alpha(cr, sb->style->opacity);
> +            cairo_identity_matrix(cr);
> +            cairo_set_source_surface(cr, return_surface->crsurface, 
> w, h);
> +            cairo_paint(cr);
>          }
>
>          if (shape) {
> @@ -695,9 +696,9 @@
>                  shape_data = new unsigned char[w * h * 
> sizeof(WaPixel)];
>                  memset (shape_data, 0, w * h * sizeof(WaPixel));
>                  alpha_surface =
> -                    cairo_surface_create_for_image((char *) 
> shape_data,
> -                                                   
> CAIRO_FORMAT_ARGB32,
> -                                                   w, h, w * 
> sizeof(WaPixel));
> +                    cairo_image_surface_create_for_data(shape_data,
> +                                                        
> CAIRO_FORMAT_ARGB32,
> +                                                        w, h, w * 
> sizeof(WaPixel));
>              } else {
>                  GC gc;
>                  XGCValues gcv;
> @@ -715,15 +716,16 @@
>                                                ws->colormap);
>              }
>
> -            cairo_set_target_surface(cr, alpha_surface);
> +            cr = cairo_create(alpha_surface);
>
>              if (sb->style->shapemask) {
>                  cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
>                  sb->style->shapemask->render(this, cr, alpha_surface, 
> w, h);
>              } else {
>                  cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
> -                cairo_set_alpha(cr, sb->style->opacity);
> -                cairo_show_surface(cr, return_surface->crsurface, w, 
> h);
> +                cairo_paint_with_alpha(cr, sb->style->opacity);
> +                cairo_set_source_surface(cr, 
> return_surface->crsurface, w, h);
> +                cairo_paint(cr);
>              }
>
>              if (ws->waimea->client_side_rendering) {
>
> =========================================================
>


	

	
		
___________________________________________________________________________ 
Nouveau : téléphonez moins cher avec Yahoo! Messenger ! Découvez les tarifs exceptionnels pour appeler la France et l'international.
Téléchargez sur http://fr.messenger.yahoo.com



More information about the waimea mailing list