[gnumeric] Fix printing of sheet object widgets. [#705650] [#705653]



commit 63a932a66548e2f7f6a755537ad034ae53d25230
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date:   Thu Aug 8 10:24:11 2013 -0600

    Fix printing of sheet object widgets. [#705650] [#705653]
    
    2013-08-08  Andreas J. Guelzow <aguelzow pyrshep ca>
    
        * src/sheet-object-widget.c (sheet_widget_frame_draw_cairo): use
        cairo version for Gnuemric too.
        (sheet_widget_button_draw_cairo): ditto
        (sheet_widget_scrollbar_draw_cairo): ditto
        (sheet_widget_spinbutton_draw_cairo): ditto
        (sheet_widget_slider_draw_cairo): ditto
        (sheet_widget_checkbox_draw_cairo): ditto
        (sheet_widget_radio_button_draw_cairo): ditto
        (sheet_widget_list_draw_cairo): ditto
        (sheet_widget_combo_draw_cairo): ditto

 ChangeLog                 |   13 +
 NEWS                      |    1 +
 src/sheet-object-widget.c |  654 +++++++++++++++++++++------------------------
 3 files changed, 319 insertions(+), 349 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index baa42f3..4d2b67d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2013-08-08  Andreas J. Guelzow <aguelzow pyrshep ca>
+
+       * src/sheet-object-widget.c (sheet_widget_frame_draw_cairo): use
+       cairo version for Gnuemric too.
+       (sheet_widget_button_draw_cairo): ditto
+       (sheet_widget_scrollbar_draw_cairo): ditto
+       (sheet_widget_spinbutton_draw_cairo): ditto
+       (sheet_widget_slider_draw_cairo): ditto
+       (sheet_widget_checkbox_draw_cairo): ditto
+       (sheet_widget_radio_button_draw_cairo): ditto
+       (sheet_widget_list_draw_cairo): ditto
+       (sheet_widget_combo_draw_cairo): ditto
+
 2013-08-08  Morten Welinder  <terra gnome org>
 
        * src/parse-util.c (r1c1_get_index): Handle integer overflow.
diff --git a/NEWS b/NEWS
index f9efc21..0b3a422 100644
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,7 @@ Andreas:
        * Fix Excel XML import. [#705223]
        * Fix documentation. [#705541]
        * Avoid crashing when printing sheet object widgets from ssconvert. [#705638]
+       * Fix printing of sheet object widgets. [#705650] [#705653]
 
 Jean:
        * Fix text wrap inside sheet objects. [#704417]
diff --git a/src/sheet-object-widget.c b/src/sheet-object-widget.c
index a880e18..7a68c3a 100644
--- a/src/sheet-object-widget.c
+++ b/src/sheet-object-widget.c
@@ -226,6 +226,7 @@ static void
 sheet_widget_draw_cairo (SheetObject const *so, cairo_t *cr,
                         double width, double height)
 {
+       /* This is the default for so widgets without their own method */
        /* See bugs #705638 and #705640 */
        if (NULL != gdk_screen_get_default ()) {
                GtkWidget *win = gtk_offscreen_window_new ();
@@ -614,45 +615,40 @@ static void
 sheet_widget_frame_draw_cairo (SheetObject const *so, cairo_t *cr,
                               double width, double height)
 {
-       /* See bugs #705638 and #705640 */
-       if (NULL != gdk_screen_get_default ()) {
-               sheet_widget_draw_cairo (so, cr, width, height);
-       } else {
-               SheetWidgetFrame *swf = GNM_SOW_FRAME (so);
+       SheetWidgetFrame *swf = GNM_SOW_FRAME (so);
 
-               int theight = 0, twidth = 0;
-               cairo_save (cr);
-               cairo_move_to (cr, 10, 0);
+       int theight = 0, twidth = 0;
+       cairo_save (cr);
+       cairo_move_to (cr, 10, 0);
 
-               cairo_save (cr);
-               draw_cairo_text (cr, swf->label, &twidth, &theight, FALSE);
-               cairo_restore (cr);
+       cairo_save (cr);
+       draw_cairo_text (cr, swf->label, &twidth, &theight, FALSE);
+       cairo_restore (cr);
 
-               cairo_set_line_width (cr, 1);
-               cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
-               cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
-               cairo_new_path (cr);
-               cairo_move_to (cr, 6, theight/2);
-               cairo_line_to (cr, 0, theight/2);
-               cairo_line_to (cr, 0, height);
-               cairo_line_to (cr, width, height);
-               cairo_line_to (cr, width, theight/2);
-               cairo_line_to (cr, 14 + twidth, theight/2);
-               cairo_stroke (cr);
+       cairo_set_line_width (cr, 1);
+       cairo_set_line_cap (cr, CAIRO_LINE_CAP_ROUND);
+       cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
+       cairo_new_path (cr);
+       cairo_move_to (cr, 6, theight/2);
+       cairo_line_to (cr, 0, theight/2);
+       cairo_line_to (cr, 0, height);
+       cairo_line_to (cr, width, height);
+       cairo_line_to (cr, width, theight/2);
+       cairo_line_to (cr, 14 + twidth, theight/2);
+       cairo_stroke (cr);
 
-               cairo_set_source_rgb(cr, 0.8, 0.8, 0.8);
-               cairo_new_path (cr);
-               cairo_move_to (cr, 6, theight/2 + 1);
-               cairo_line_to (cr, 1, theight/2 + 1);
-               cairo_line_to (cr, 1, height - 1);
-               cairo_line_to (cr, width - 1, height - 1);
-               cairo_line_to (cr, width - 1, theight/2 + 1);
-               cairo_line_to (cr, 14 + twidth, theight/2 + 1);
-               cairo_stroke (cr);
+       cairo_set_source_rgb(cr, 0.8, 0.8, 0.8);
+       cairo_new_path (cr);
+       cairo_move_to (cr, 6, theight/2 + 1);
+       cairo_line_to (cr, 1, theight/2 + 1);
+       cairo_line_to (cr, 1, height - 1);
+       cairo_line_to (cr, width - 1, height - 1);
+       cairo_line_to (cr, width - 1, theight/2 + 1);
+       cairo_line_to (cr, 14 + twidth, theight/2 + 1);
+       cairo_stroke (cr);
 
-               cairo_new_path (cr);
-               cairo_restore (cr);
-       }
+       cairo_new_path (cr);
+       cairo_restore (cr);
 }
 
 SOW_MAKE_TYPE (frame, Frame,
@@ -1132,58 +1128,53 @@ static void
 sheet_widget_button_draw_cairo (SheetObject const *so, cairo_t *cr,
                                double width, double height)
 {
-       /* See bugs #705638 and #705640 */
-       if (NULL != gdk_screen_get_default ()) {
-               sheet_widget_draw_cairo (so, cr, width, height);
-       } else {
-               SheetWidgetButton *swb = GNM_SOW_BUTTON (so);
-               PangoLayout *layout = pango_cairo_create_layout (cr);
-               GtkStyle *style = gtk_style_new ();
-               double const scale_h = 72. / gnm_app_display_dpi_get (TRUE);
-               double const scale_v = 72. / gnm_app_display_dpi_get (FALSE);
-               int twidth, theight;
-               int const half_line = 1.5;
-               int radius = 10;
+       SheetWidgetButton *swb = GNM_SOW_BUTTON (so);
+       PangoLayout *layout = pango_cairo_create_layout (cr);
+       GtkStyle *style = gtk_style_new ();
+       double const scale_h = 72. / gnm_app_display_dpi_get (TRUE);
+       double const scale_v = 72. / gnm_app_display_dpi_get (FALSE);
+       int twidth, theight;
+       int const half_line = 1.5;
+       int radius = 10;
 
-               if (height < 3 * radius)
-                       radius = height / 3.;
-               if (width < 3 * radius)
-                       radius = width / 3.;
-               if (radius < 1)
-                       radius = 1;
+       if (height < 3 * radius)
+               radius = height / 3.;
+       if (width < 3 * radius)
+               radius = width / 3.;
+       if (radius < 1)
+               radius = 1;
 
-               cairo_save (cr);
-               cairo_set_line_width (cr, 2 * half_line);
-               cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
+       cairo_save (cr);
+       cairo_set_line_width (cr, 2 * half_line);
+       cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
 
-               cairo_new_path (cr);
-               cairo_arc (cr, radius + half_line, radius + half_line, radius, M_PI, - M_PI/2);
-               cairo_arc (cr, width - (radius + half_line), radius + half_line,
-                          radius, - M_PI/2, 0);
-               cairo_arc (cr, width - (radius + half_line), height - (radius + half_line),
-                          radius, 0, M_PI/2);
-               cairo_arc (cr, (radius + half_line), height - (radius + half_line),
-                          radius, M_PI/2, M_PI);
-               cairo_close_path (cr);
-               cairo_stroke (cr);
+       cairo_new_path (cr);
+       cairo_arc (cr, radius + half_line, radius + half_line, radius, M_PI, - M_PI/2);
+       cairo_arc (cr, width - (radius + half_line), radius + half_line,
+                  radius, - M_PI/2, 0);
+       cairo_arc (cr, width - (radius + half_line), height - (radius + half_line),
+                  radius, 0, M_PI/2);
+       cairo_arc (cr, (radius + half_line), height - (radius + half_line),
+                  radius, M_PI/2, M_PI);
+       cairo_close_path (cr);
+       cairo_stroke (cr);
 
-               cairo_set_source_rgb(cr, 0, 0, 0);
-               pango_layout_set_font_description (layout, style->font_desc);
-               pango_layout_set_single_paragraph_mode (layout, TRUE);
-               pango_layout_set_text (layout, swb->label, -1);
-               pango_layout_set_attributes (layout, swb->markup);
-               pango_layout_get_pixel_size (layout, &twidth, &theight);
+       cairo_set_source_rgb(cr, 0, 0, 0);
+       pango_layout_set_font_description (layout, style->font_desc);
+       pango_layout_set_single_paragraph_mode (layout, TRUE);
+       pango_layout_set_text (layout, swb->label, -1);
+       pango_layout_set_attributes (layout, swb->markup);
+       pango_layout_get_pixel_size (layout, &twidth, &theight);
 
-               cairo_move_to (cr, width/2., height/2.);
-               cairo_scale (cr, scale_h, scale_v);
-               cairo_rel_move_to (cr, - twidth/2., - theight/2.);
-               pango_cairo_show_layout (cr, layout);
-               g_object_unref (layout);
-               g_object_unref (style);
+       cairo_move_to (cr, width/2., height/2.);
+       cairo_scale (cr, scale_h, scale_v);
+       cairo_rel_move_to (cr, - twidth/2., - theight/2.);
+       pango_cairo_show_layout (cr, layout);
+       g_object_unref (layout);
+       g_object_unref (style);
 
-               cairo_new_path (cr);
-               cairo_restore (cr);
-       }
+       cairo_new_path (cr);
+       cairo_restore (cr);
 }
 
 SOW_MAKE_TYPE (button, Button,
@@ -1878,18 +1869,13 @@ static void
 sheet_widget_scrollbar_draw_cairo (SheetObject const *so, cairo_t *cr,
                                   double width, double height)
 {
-       /* See bugs #705638 and #705640 */
-       if (NULL != gdk_screen_get_default ()) {
-               sheet_widget_draw_cairo (so, cr, width, height);
-       } else {
-               SheetWidgetAdjustment *swa = GNM_SOW_ADJUSTMENT (so);
-               if (swa->horizontal)
-                       sheet_widget_scrollbar_horizontal_draw_cairo
-                               (so, cr, width, height);
-               else
-                       sheet_widget_scrollbar_vertical_draw_cairo
-                               (so, cr, width, height);
-       }
+       SheetWidgetAdjustment *swa = GNM_SOW_ADJUSTMENT (so);
+       if (swa->horizontal)
+               sheet_widget_scrollbar_horizontal_draw_cairo
+                       (so, cr, width, height);
+       else
+               sheet_widget_scrollbar_vertical_draw_cairo
+                       (so, cr, width, height);
 }
 
 static void
@@ -1946,59 +1932,54 @@ static void
 sheet_widget_spinbutton_draw_cairo (SheetObject const *so, cairo_t *cr,
                                    double width, double height)
 {
-       /* See bugs #705638 and #705640 */
-       if (NULL != gdk_screen_get_default ()) {
-               sheet_widget_draw_cairo (so, cr, width, height);
-       } else {
-               SheetWidgetAdjustment *swa = GNM_SOW_ADJUSTMENT (so);
-               GtkAdjustment *adjustment = swa->adjustment;
-               double value = gtk_adjustment_get_value (adjustment);
-               int ivalue = (int) value;
-               double halfheight = height/2;
-               char *str;
-
-               cairo_save (cr);
-               cairo_set_line_width (cr, 0.5);
-               cairo_set_source_rgb(cr, 0, 0, 0);
+       SheetWidgetAdjustment *swa = GNM_SOW_ADJUSTMENT (so);
+       GtkAdjustment *adjustment = swa->adjustment;
+       double value = gtk_adjustment_get_value (adjustment);
+       int ivalue = (int) value;
+       double halfheight = height/2;
+       char *str;
 
-               cairo_new_path (cr);
-               cairo_move_to (cr, 0, 0);
-               cairo_line_to (cr, width, 0);
-               cairo_line_to (cr, width, height);
-               cairo_line_to (cr, 0, height);
-               cairo_close_path (cr);
-               cairo_stroke (cr);
+       cairo_save (cr);
+       cairo_set_line_width (cr, 0.5);
+       cairo_set_source_rgb(cr, 0, 0, 0);
 
-               cairo_new_path (cr);
-               cairo_move_to (cr, width - 10, 0);
-               cairo_rel_line_to (cr, 0, height);
-               cairo_stroke (cr);
+       cairo_new_path (cr);
+       cairo_move_to (cr, 0, 0);
+       cairo_line_to (cr, width, 0);
+       cairo_line_to (cr, width, height);
+       cairo_line_to (cr, 0, height);
+       cairo_close_path (cr);
+       cairo_stroke (cr);
 
-               cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
+       cairo_new_path (cr);
+       cairo_move_to (cr, width - 10, 0);
+       cairo_rel_line_to (cr, 0, height);
+       cairo_stroke (cr);
 
-               cairo_new_path (cr);
-               cairo_move_to (cr, width - 5, 3);
-               cairo_rel_line_to (cr, 3, 3);
-               cairo_rel_line_to (cr, -6, 0);
-               cairo_close_path (cr);
-               cairo_fill (cr);
+       cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
 
-               cairo_new_path (cr);
-               cairo_move_to (cr, width - 5, height - 3);
-               cairo_rel_line_to (cr, 3, -3);
-               cairo_rel_line_to (cr, -6, 0);
-               cairo_close_path (cr);
-               cairo_fill (cr);
+       cairo_new_path (cr);
+       cairo_move_to (cr, width - 5, 3);
+       cairo_rel_line_to (cr, 3, 3);
+       cairo_rel_line_to (cr, -6, 0);
+       cairo_close_path (cr);
+       cairo_fill (cr);
 
-               str = g_strdup_printf ("%i", ivalue);
-               cairo_set_source_rgb(cr, 0, 0, 0);
-               cairo_move_to (cr, 4., halfheight);
-               draw_cairo_text (cr, str, NULL, NULL, TRUE);
-               g_free (str);
+       cairo_new_path (cr);
+       cairo_move_to (cr, width - 5, height - 3);
+       cairo_rel_line_to (cr, 3, -3);
+       cairo_rel_line_to (cr, -6, 0);
+       cairo_close_path (cr);
+       cairo_fill (cr);
 
-               cairo_new_path (cr);
-               cairo_restore (cr);
-       }
+       str = g_strdup_printf ("%i", ivalue);
+       cairo_set_source_rgb(cr, 0, 0, 0);
+       cairo_move_to (cr, 4., halfheight);
+       draw_cairo_text (cr, str, NULL, NULL, TRUE);
+       g_free (str);
+
+       cairo_new_path (cr);
+       cairo_restore (cr);
 }
 
 static void
@@ -2102,16 +2083,11 @@ static void
 sheet_widget_slider_draw_cairo (SheetObject const *so, cairo_t *cr,
                                double width, double height)
 {
-       /* See bugs #705638 and #705640 */
-       if (NULL != gdk_screen_get_default ()) {
-               sheet_widget_draw_cairo (so, cr, width, height);
-       } else {
-               SheetWidgetAdjustment *swa = GNM_SOW_ADJUSTMENT (so);
-               if (swa->horizontal)
-                       sheet_widget_slider_horizontal_draw_cairo (so, cr, width, height);
-               else
-                       sheet_widget_slider_vertical_draw_cairo (so, cr, width, height);
-       }
+       SheetWidgetAdjustment *swa = GNM_SOW_ADJUSTMENT (so);
+       if (swa->horizontal)
+               sheet_widget_slider_horizontal_draw_cairo (so, cr, width, height);
+       else
+               sheet_widget_slider_vertical_draw_cairo (so, cr, width, height);
 }
 
 static void
@@ -2587,49 +2563,44 @@ sheet_widget_checkbox_set_label (SheetObject *so, char const *str)
 
 static void
 sheet_widget_checkbox_draw_cairo (SheetObject const *so, cairo_t *cr,
-                                 double width, double height)
+                                 G_GNUC_UNUSED double width, double height)
 {
-       /* See bugs #705638 and #705640 */
-       if (NULL != gdk_screen_get_default ()) {
-               sheet_widget_draw_cairo (so, cr, width, height);
-       } else {
-               SheetWidgetCheckbox const *swc = GNM_SOW_CHECKBOX (so);
-               double halfheight = height/2;
+       SheetWidgetCheckbox const *swc = GNM_SOW_CHECKBOX (so);
+       double halfheight = height/2;
+
+       cairo_save (cr);
+       cairo_set_line_width (cr, 0.5);
+       cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
 
-               cairo_save (cr);
-               cairo_set_line_width (cr, 0.5);
-               cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
+       cairo_new_path (cr);
+       cairo_move_to (cr, 4, halfheight - 4);
+       cairo_rel_line_to (cr, 0, 8);
+       cairo_rel_line_to (cr, 8., 0);
+       cairo_rel_line_to (cr, 0., -8.);
+       cairo_rel_line_to (cr, -8., 0.);
+       cairo_close_path (cr);
+       cairo_fill_preserve (cr);
+       cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
+       cairo_stroke (cr);
 
+       if (swc->value) {
                cairo_new_path (cr);
                cairo_move_to (cr, 4, halfheight - 4);
-               cairo_rel_line_to (cr, 0, 8);
-               cairo_rel_line_to (cr, 8., 0);
-               cairo_rel_line_to (cr, 0., -8.);
+               cairo_rel_line_to (cr, 8., 8.);
+               cairo_rel_line_to (cr, -8., 0.);
+               cairo_rel_line_to (cr, 8., -8.);
                cairo_rel_line_to (cr, -8., 0.);
                cairo_close_path (cr);
-               cairo_fill_preserve (cr);
-               cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
+               cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);
                cairo_stroke (cr);
+       }
 
-               if (swc->value) {
-                       cairo_new_path (cr);
-                       cairo_move_to (cr, 4, halfheight - 4);
-                       cairo_rel_line_to (cr, 8., 8.);
-                       cairo_rel_line_to (cr, -8., 0.);
-                       cairo_rel_line_to (cr, 8., -8.);
-                       cairo_rel_line_to (cr, -8., 0.);
-                       cairo_close_path (cr);
-                       cairo_set_line_join (cr, CAIRO_LINE_JOIN_BEVEL);
-                       cairo_stroke (cr);
-               }
-
-               cairo_move_to (cr, 4. + 8. + 4, halfheight);
+       cairo_move_to (cr, 4. + 8. + 4, halfheight);
 
-               draw_cairo_text (cr, swc->label, NULL, NULL, TRUE);
+       draw_cairo_text (cr, swc->label, NULL, NULL, TRUE);
 
-               cairo_new_path (cr);
-               cairo_restore (cr);
-       }
+       cairo_new_path (cr);
+       cairo_restore (cr);
 }
 
 
@@ -3234,42 +3205,37 @@ sheet_widget_radio_button_user_config (SheetObject *so, SheetControl *sc)
 
 static void
 sheet_widget_radio_button_draw_cairo (SheetObject const *so, cairo_t *cr,
-                                     double width, double height)
+                                     G_GNUC_UNUSED double width, double height)
 {
-       /* See bugs #705638 and #705640 */
-       if (NULL != gdk_screen_get_default ()) {
-               sheet_widget_draw_cairo (so, cr, width, height);
-       } else {
-               SheetWidgetRadioButton const *swr = GNM_SOW_RADIO_BUTTON (so);
-               double halfheight = height/2;
+       SheetWidgetRadioButton const *swr = GNM_SOW_RADIO_BUTTON (so);
+       double halfheight = height/2;
+
+       cairo_save (cr);
+       cairo_set_line_width (cr, 0.5);
+       cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
 
-               cairo_save (cr);
-               cairo_set_line_width (cr, 0.5);
-               cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
+       cairo_new_path (cr);
+       cairo_move_to (cr, 4. + 8., halfheight);
+       cairo_arc (cr, 4. + 4., halfheight, 4., 0., 2*M_PI);
+       cairo_close_path (cr);
+       cairo_fill_preserve (cr);
+       cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
+       cairo_stroke (cr);
 
+       if (swr->active) {
                cairo_new_path (cr);
-               cairo_move_to (cr, 4. + 8., halfheight);
-               cairo_arc (cr, 4. + 4., halfheight, 4., 0., 2*M_PI);
+               cairo_move_to (cr, 4. + 6.5, halfheight);
+               cairo_arc (cr, 4. + 4., halfheight, 2.5, 0., 2*M_PI);
                cairo_close_path (cr);
-               cairo_fill_preserve (cr);
-               cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
-               cairo_stroke (cr);
-
-               if (swr->active) {
-                       cairo_new_path (cr);
-                       cairo_move_to (cr, 4. + 6.5, halfheight);
-                       cairo_arc (cr, 4. + 4., halfheight, 2.5, 0., 2*M_PI);
-                       cairo_close_path (cr);
-                       cairo_fill (cr);
-               }
+               cairo_fill (cr);
+       }
 
-               cairo_move_to (cr, 4. + 8. + 4, halfheight);
+       cairo_move_to (cr, 4. + 8. + 4, halfheight);
 
-               draw_cairo_text (cr, swr->label, NULL, NULL, TRUE);
+       draw_cairo_text (cr, swr->label, NULL, NULL, TRUE);
 
-               cairo_new_path (cr);
-               cairo_restore (cr);
-       }
+       cairo_new_path (cr);
+       cairo_restore (cr);
 }
 
 SOW_MAKE_TYPE (radio_button, RadioButton,
@@ -3779,118 +3745,113 @@ static void
 sheet_widget_list_draw_cairo (SheetObject const *so, cairo_t *cr,
                              double width, double height)
 {
-       /* See bugs #705638 and #705640 */
-       if (NULL != gdk_screen_get_default ()) {
-               sheet_widget_draw_cairo (so, cr, width, height);
-       } else {
-               SheetWidgetListBase *swl = GNM_SOW_LIST_BASE (so);
+       SheetWidgetListBase *swl = GNM_SOW_LIST_BASE (so);
 
-               cairo_save (cr);
-               cairo_set_line_width (cr, 0.5);
-               cairo_set_source_rgb(cr, 0, 0, 0);
+       cairo_save (cr);
+       cairo_set_line_width (cr, 0.5);
+       cairo_set_source_rgb(cr, 0, 0, 0);
 
-               cairo_new_path (cr);
-               cairo_move_to (cr, 0, 0);
-               cairo_line_to (cr, width, 0);
-               cairo_line_to (cr, width, height);
-               cairo_line_to (cr, 0, height);
-               cairo_close_path (cr);
-               cairo_stroke (cr);
+       cairo_new_path (cr);
+       cairo_move_to (cr, 0, 0);
+       cairo_line_to (cr, width, 0);
+       cairo_line_to (cr, width, height);
+       cairo_line_to (cr, 0, height);
+       cairo_close_path (cr);
+       cairo_stroke (cr);
 
-               cairo_new_path (cr);
-               cairo_move_to (cr, width - 10, 0);
-               cairo_rel_line_to (cr, 0, height);
-               cairo_stroke (cr);
+       cairo_new_path (cr);
+       cairo_move_to (cr, width - 10, 0);
+       cairo_rel_line_to (cr, 0, height);
+       cairo_stroke (cr);
 
-               cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
+       cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
 
-               cairo_new_path (cr);
-               cairo_move_to (cr, width - 5 -3, height - 12);
-               cairo_rel_line_to (cr, 6, 0);
-               cairo_rel_line_to (cr, -3, 8);
-               cairo_close_path (cr);
-               cairo_fill (cr);
+       cairo_new_path (cr);
+       cairo_move_to (cr, width - 5 -3, height - 12);
+       cairo_rel_line_to (cr, 6, 0);
+       cairo_rel_line_to (cr, -3, 8);
+       cairo_close_path (cr);
+       cairo_fill (cr);
 
-               cairo_new_path (cr);
-               cairo_move_to (cr, width - 5 -3, 12);
-               cairo_rel_line_to (cr, 6, 0);
-               cairo_rel_line_to (cr, -3, -8);
-               cairo_close_path (cr);
-               cairo_fill (cr);
+       cairo_new_path (cr);
+       cairo_move_to (cr, width - 5 -3, 12);
+       cairo_rel_line_to (cr, 6, 0);
+       cairo_rel_line_to (cr, -3, -8);
+       cairo_close_path (cr);
+       cairo_fill (cr);
 
-               if (swl->model != NULL) {
-                       GtkTreeIter iter;
-                       GString*str = g_string_new (NULL);
-                       PangoLayout *layout = pango_cairo_create_layout (cr);
-                       /* Using GtkStyle does not seem to work in ssconvert */
-                       /* GtkStyle *style = gtk_style_new (); */
-                       PangoFontDescription *desc;
-                       double const scale_h = 72. / gnm_app_display_dpi_get (TRUE);
-                       double const scale_v = 72. / gnm_app_display_dpi_get (FALSE);
-                       int twidth = 0, theight = 0;
-                       PangoLayoutIter *pliter;
-                       int y0, y1, i;
-                       double dy0 = 0, dy1 = 0;
-                       gboolean got_line = TRUE;
+       if (swl->model != NULL) {
+               GtkTreeIter iter;
+               GString*str = g_string_new (NULL);
+               PangoLayout *layout = pango_cairo_create_layout (cr);
+               /* Using GtkStyle does not seem to work in ssconvert */
+               /* GtkStyle *style = gtk_style_new (); */
+               PangoFontDescription *desc;
+               double const scale_h = 72. / gnm_app_display_dpi_get (TRUE);
+               double const scale_v = 72. / gnm_app_display_dpi_get (FALSE);
+               int twidth = 0, theight = 0;
+               PangoLayoutIter *pliter;
+               int y0, y1, i;
+               double dy0 = 0, dy1 = 0;
+               gboolean got_line = TRUE;
 
                        
+               cairo_new_path (cr);
+               cairo_rectangle (cr, 2, 1, width - 2 - 12, height - 2);
+               cairo_clip (cr);
+               if (gtk_tree_model_get_iter_first (swl->model, &iter))
+                       do {
+                               char *astr = NULL, *newline;
+                               gtk_tree_model_get (swl->model, &iter, 0, &astr, -1);
+                               while (NULL != (newline = strchr (astr, '\n')))
+                                       *newline = ' ';
+                               g_string_append (str, astr);
+                               g_string_append_c (str, '\n');
+                               g_free (astr);
+                       } while (gtk_tree_model_iter_next (swl->model, &iter));
+
+               /* pango_layout_set_font_description (layout, style->font_desc); */
+               desc = pango_font_description_from_string ("sans 10");
+               pango_context_set_font_description
+                       (pango_layout_get_context (layout), desc);
+               pango_layout_set_single_paragraph_mode (layout, FALSE);
+               pango_layout_set_spacing (layout, 3 * PANGO_SCALE);
+               pango_layout_set_text (layout, str->str, -1);
+               pango_layout_get_pixel_size (layout, &twidth, &theight);
+
+               cairo_translate (cr, 4., 2.);
+               cairo_scale (cr, scale_h, scale_v);
+
+               pliter = pango_layout_get_iter (layout);
+               for (i = 1; i < swl->selection; i++)
+                       got_line = pango_layout_iter_next_line (pliter);
+
+               if (got_line) {
+                       pango_layout_iter_get_line_yrange (pliter, &y0, &y1);
+                       dy0 = y0 / (double)PANGO_SCALE;
+                       dy1 = y1 / (double)PANGO_SCALE;
+
+                       if (dy1 > (height - 4)/scale_v)
+                               cairo_translate (cr, 0, (height - 4)/scale_v - dy1);
+
                        cairo_new_path (cr);
-                       cairo_rectangle (cr, 2, 1, width - 2 - 12, height - 2);
-                       cairo_clip (cr);
-                       if (gtk_tree_model_get_iter_first (swl->model, &iter))
-                               do {
-                                       char *astr = NULL, *newline;
-                                       gtk_tree_model_get (swl->model, &iter, 0, &astr, -1);
-                                       while (NULL != (newline = strchr (astr, '\n')))
-                                               *newline = ' ';
-                                       g_string_append (str, astr);
-                                       g_string_append_c (str, '\n');
-                                       g_free (astr);
-                               } while (gtk_tree_model_iter_next (swl->model, &iter));
-
-                       /* pango_layout_set_font_description (layout, style->font_desc); */
-                       desc = pango_font_description_from_string ("sans 10");
-                       pango_context_set_font_description
-                               (pango_layout_get_context (layout), desc);
-                       pango_layout_set_single_paragraph_mode (layout, FALSE);
-                       pango_layout_set_spacing (layout, 3 * PANGO_SCALE);
-                       pango_layout_set_text (layout, str->str, -1);
-                       pango_layout_get_pixel_size (layout, &twidth, &theight);
-
-                       cairo_translate (cr, 4., 2.);
-                       cairo_scale (cr, scale_h, scale_v);
-
-                       pliter = pango_layout_get_iter (layout);
-                       for (i = 1; i < swl->selection; i++)
-                               got_line = pango_layout_iter_next_line (pliter);
-
-                       if (got_line) {
-                               pango_layout_iter_get_line_yrange (pliter, &y0, &y1);
-                               dy0 = y0 / (double)PANGO_SCALE;
-                               dy1 = y1 / (double)PANGO_SCALE;
-
-                               if (dy1 > (height - 4)/scale_v)
-                                       cairo_translate (cr, 0, (height - 4)/scale_v - dy1);
-
-                               cairo_new_path (cr);
-                               cairo_rectangle (cr, -4/scale_h, dy0,
-                                                width/scale_h, dy1 - dy0);
-                               cairo_set_source_rgb(cr, 0.8, 0.8, 0.8);
-                               cairo_fill (cr);
-                       }
-                       pango_layout_iter_free (pliter);
-                       cairo_set_source_rgb(cr, 0, 0, 0);
-                       pango_cairo_show_layout (cr, layout);
-                       g_object_unref (layout);
-                       /* g_object_unref (style); */
-                       pango_font_description_free (desc);
-
-                       g_string_free (str, TRUE);
+                       cairo_rectangle (cr, -4/scale_h, dy0,
+                                        width/scale_h, dy1 - dy0);
+                       cairo_set_source_rgb(cr, 0.8, 0.8, 0.8);
+                       cairo_fill (cr);
                }
+               pango_layout_iter_free (pliter);
+               cairo_set_source_rgb(cr, 0, 0, 0);
+               pango_cairo_show_layout (cr, layout);
+               g_object_unref (layout);
+               /* g_object_unref (style); */
+               pango_font_description_free (desc);
 
-               cairo_new_path (cr);
-               cairo_restore (cr);
+               g_string_free (str, TRUE);
        }
+
+       cairo_new_path (cr);
+       cairo_restore (cr);
 }
 
 static void
@@ -3979,56 +3940,51 @@ static void
 sheet_widget_combo_draw_cairo (SheetObject const *so, cairo_t *cr,
                               double width, double height)
 {
-       /* See bugs #705638 and #705640 */
-       if (NULL != gdk_screen_get_default ()) {
-               sheet_widget_draw_cairo (so, cr, width, height);
-       } else {
-               SheetWidgetListBase *swl = GNM_SOW_LIST_BASE (so);
-               double halfheight = height/2;
+       SheetWidgetListBase *swl = GNM_SOW_LIST_BASE (so);
+       double halfheight = height/2;
 
-               cairo_save (cr);
-               cairo_set_line_width (cr, 0.5);
-               cairo_set_source_rgb(cr, 0, 0, 0);
+       cairo_save (cr);
+       cairo_set_line_width (cr, 0.5);
+       cairo_set_source_rgb(cr, 0, 0, 0);
 
-               cairo_new_path (cr);
-               cairo_move_to (cr, 0, 0);
-               cairo_line_to (cr, width, 0);
-               cairo_line_to (cr, width, height);
-               cairo_line_to (cr, 0, height);
-               cairo_close_path (cr);
-               cairo_stroke (cr);
+       cairo_new_path (cr);
+       cairo_move_to (cr, 0, 0);
+       cairo_line_to (cr, width, 0);
+       cairo_line_to (cr, width, height);
+       cairo_line_to (cr, 0, height);
+       cairo_close_path (cr);
+       cairo_stroke (cr);
 
-               cairo_new_path (cr);
-               cairo_move_to (cr, width - 10, 0);
-               cairo_rel_line_to (cr, 0, height);
-               cairo_stroke (cr);
+       cairo_new_path (cr);
+       cairo_move_to (cr, width - 10, 0);
+       cairo_rel_line_to (cr, 0, height);
+       cairo_stroke (cr);
 
-               cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
+       cairo_set_source_rgb(cr, 0.5, 0.5, 0.5);
 
-               cairo_new_path (cr);
-               cairo_move_to (cr, width - 5 -3, halfheight - 4);
-               cairo_rel_line_to (cr, 6, 0);
-               cairo_rel_line_to (cr, -3, 8);
-               cairo_close_path (cr);
-               cairo_fill (cr);
+       cairo_new_path (cr);
+       cairo_move_to (cr, width - 5 -3, halfheight - 4);
+       cairo_rel_line_to (cr, 6, 0);
+       cairo_rel_line_to (cr, -3, 8);
+       cairo_close_path (cr);
+       cairo_fill (cr);
 
-               cairo_set_source_rgb(cr, 0, 0, 0);
-               cairo_move_to (cr, 4., halfheight);
-
-               if (swl->model != NULL) {
-                       GtkTreeIter iter;
-                       if (gtk_tree_model_iter_nth_child (swl->model, &iter, NULL,
-                                                          swl->selection - 1)) {
-                               char *str = NULL;
-                               gtk_tree_model_get (swl->model, &iter, 0, &str, -1);
-                               draw_cairo_text (cr, str, NULL, NULL, TRUE);
-                               g_free (str);
-                       }
-               }
+       cairo_set_source_rgb(cr, 0, 0, 0);
+       cairo_move_to (cr, 4., halfheight);
 
-               cairo_new_path (cr);
-               cairo_restore (cr);
+       if (swl->model != NULL) {
+               GtkTreeIter iter;
+               if (gtk_tree_model_iter_nth_child (swl->model, &iter, NULL,
+                                                  swl->selection - 1)) {
+                       char *str = NULL;
+                       gtk_tree_model_get (swl->model, &iter, 0, &str, -1);
+                       draw_cairo_text (cr, str, NULL, NULL, TRUE);
+                       g_free (str);
+               }
        }
+
+       cairo_new_path (cr);
+       cairo_restore (cr);
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]