Use pango_cairo_show_error_underline. (#340141, Behdad Esfahbod)

2006-12-22  Matthias Clasen  <mclasen@redhat.com>

        * gdk/gdkpango.c: Use pango_cairo_show_error_underline.
        (#340141, Behdad Esfahbod)
This commit is contained in:
Matthias Clasen 2006-12-22 17:06:30 +00:00 committed by Matthias Clasen
parent 7f0d30a0cc
commit 1bed6b434c
2 changed files with 9 additions and 85 deletions

View File

@ -1,5 +1,8 @@
2006-12-22 Matthias Clasen <mclasen@redhat.com> 2006-12-22 Matthias Clasen <mclasen@redhat.com>
* gdk/gdkpango.c: Use pango_cairo_show_error_underline.
(#340141, Behdad Esfahbod)
* configure.in: Check for getc_unlocked. * configure.in: Check for getc_unlocked.
* gtk/xdgmime/xdgmimemagic.c: Use getc if getc_unlocked is * gtk/xdgmime/xdgmimemagic.c: Use getc if getc_unlocked is

View File

@ -251,85 +251,6 @@ gdk_pango_renderer_draw_glyphs (PangoRenderer *renderer,
pango_cairo_show_glyph_string (cr, font, glyphs); pango_cairo_show_glyph_string (cr, font, glyphs);
} }
/* Draws an error underline that looks like one of:
* H E H
* /\ /\ /\ /\ /\ -
* A/ \ / \ / \ A/ \ / \ |
* \ \ / \ / /D \ \ / \ |
* \ \/ C \/ / \ \/ C \ | height = HEIGHT_SQUARES * square
* \ /\ F / \ F /\ \ |
* \ / \ / \ / \ \G |
* \ / \ / \ / \ / |
* \/ \/ \/ \/ -
* B B
* |----|
* unit_width = (HEIGHT_SQUARES - 1) * square
*
* The x, y, width, height passed in give the desired bounding box;
* x/width are adjusted to make the underline a integer number of units
* wide.
*/
#define HEIGHT_SQUARES 2.5
/* Cut-and-pasted between here and pango/pango/pangocairo-render.c */
static void
draw_error_underline (cairo_t *cr,
double x,
double y,
double width,
double height)
{
double square = height / HEIGHT_SQUARES;
double unit_width = (HEIGHT_SQUARES - 1) * square;
int width_units = (width + unit_width / 2) / unit_width;
double y_top, y_bottom;
int i;
x += (width - width_units * unit_width) / 2;
width = width_units * unit_width;
y_top = y;
y_bottom = y + height;
/* Bottom of squiggle */
cairo_move_to (cr, x - square / 2, y_top + square / 2); /* A */
for (i = 0; i < width_units; i += 2)
{
double x_middle = x + (i + 1) * unit_width;
double x_right = x + (i + 2) * unit_width;
cairo_line_to (cr, x_middle, y_bottom); /* B */
if (i + 1 == width_units)
/* Nothing */;
else if (i + 2 == width_units)
cairo_line_to (cr, x_right + square / 2, y_top + square / 2); /* D */
else
cairo_line_to (cr, x_right, y_top + square); /* C */
}
/* Top of squiggle */
for (i -= 2; i >= 0; i -= 2)
{
double x_left = x + i * unit_width;
double x_middle = x + (i + 1) * unit_width;
double x_right = x + (i + 2) * unit_width;
if (i + 1 == width_units)
cairo_line_to (cr, x_middle + square / 2, y_bottom - square / 2); /* G */
else {
if (i + 2 == width_units)
cairo_line_to (cr, x_right, y_top); /* E */
cairo_line_to (cr, x_middle, y_bottom - square); /* F */
}
cairo_line_to (cr, x_left, y_top); /* H */
}
cairo_close_path (cr);
cairo_fill (cr);
}
static void static void
gdk_pango_renderer_draw_rectangle (PangoRenderer *renderer, gdk_pango_renderer_draw_rectangle (PangoRenderer *renderer,
PangoRenderPart part, PangoRenderPart part,
@ -379,15 +300,15 @@ gdk_pango_renderer_draw_error_underline (PangoRenderer *renderer,
{ {
cairo_save (cr); cairo_save (cr);
emboss_context (gdk_renderer, cr); emboss_context (gdk_renderer, cr);
draw_error_underline (cr, pango_cairo_show_error_underline (cr,
(double)x / PANGO_SCALE, (double)y / PANGO_SCALE, (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
(double)width / PANGO_SCALE, (double)height / PANGO_SCALE); (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
cairo_restore (cr); cairo_restore (cr);
} }
draw_error_underline (cr, pango_cairo_show_error_underline (cr,
(double)x / PANGO_SCALE, (double)y / PANGO_SCALE, (double)x / PANGO_SCALE, (double)y / PANGO_SCALE,
(double)width / PANGO_SCALE, (double)height / PANGO_SCALE); (double)width / PANGO_SCALE, (double)height / PANGO_SCALE);
} }
static void static void