]> Dogcows Code - chaz/openbox/blobdiff - render/font.c
you can create dialog windows called "prompts" which have a message and some buttons...
[chaz/openbox] / render / font.c
index a32bf7ce0a5ae995f3c3bcf567d22917d2c41289..205eab5e3a14ee8b0a08e2cd8c7c4e94d415494f 100644 (file)
@@ -109,6 +109,7 @@ RrFont *RrFontOpen(const RrInstance *inst, const gchar *name, gint size,
     /* setup the layout */
     pango_layout_set_font_description(out->layout, out->font_desc);
     pango_layout_set_single_paragraph_mode(out->layout, TRUE);
+    pango_layout_set_wrap(out->layout, PANGO_WRAP_WORD_CHAR);
 
     /* get the ascent and descent */
     measure_font(inst, out);
@@ -139,12 +140,14 @@ void RrFontClose(RrFont *f)
 }
 
 static void font_measure_full(const RrFont *f, const gchar *str,
-                              gint *x, gint *y, gint shadow_x, gint shadow_y)
+                              gint *x, gint *y, gint shadow_x, gint shadow_y,
+                              gint maxwidth)
 {
     PangoRectangle rect;
 
     pango_layout_set_text(f->layout, str, -1);
-    pango_layout_set_width(f->layout, -1);
+    pango_layout_set_width(f->layout,
+                           (maxwidth <= 0 ? -1 : maxwidth * PANGO_SCALE));
 
     /* pango_layout_get_pixel_extents lies! this is the right way to get the
        size of the text's area */
@@ -163,11 +166,12 @@ static void font_measure_full(const RrFont *f, const gchar *str,
 }
 
 RrSize *RrFontMeasureString(const RrFont *f, const gchar *str,
-                            gint shadow_x, gint shadow_y)
+                            gint shadow_x, gint shadow_y, gint maxwidth)
 {
     RrSize *size;
     size = g_new(RrSize, 1);
-    font_measure_full(f, str, &size->width, &size->height, shadow_x, shadow_y);
+    font_measure_full(f, str, &size->width, &size->height, shadow_x, shadow_y,
+                      maxwidth);
     return size;
 }
 
@@ -244,7 +248,7 @@ void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *area)
     pango_layout_get_pixel_extents(t->font->layout, NULL, &rect);
     mw = rect.width;
 
-    /* pango_layout_set_alignment doesn't work with 
+    /* pango_layout_set_alignment doesn't work with
        pango_xft_render_layout_line */
     switch (t->justify) {
     case RR_JUSTIFY_LEFT:
@@ -278,11 +282,11 @@ void RrFontDraw(XftDraw *d, RrTextureText *t, RrRect *area)
     c.pixel = t->color->pixel;
 
     if (t->shortcut) {
-        const gchar *c = t->string + t->shortcut_pos;
+        const gchar *s = t->string + t->shortcut_pos;
 
         t->font->shortcut_underline->start_index = t->shortcut_pos;
         t->font->shortcut_underline->end_index = t->shortcut_pos +
-            (g_utf8_next_char(c) - c);
+            (g_utf8_next_char(s) - s);
 
         /* the attributes are owned by the layout.
            re-add the attributes to the layout after changing the
This page took 0.023076 seconds and 4 git commands to generate.