[gnumeric] Improve printing of checkboxes and radio buttons.
- From: Andreas J. Guelzow <guelzow src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Improve printing of checkboxes and radio buttons.
- Date: Fri, 24 Sep 2010 20:33:15 +0000 (UTC)
commit c16d66ac9ea07d1e0299c5f1dc4bb3c26893ed73
Author: Andreas J Guelzow <aguelzow pyrshep ca>
Date: Fri Sep 24 14:31:14 2010 -0600
Improve printing of checkboxes and radio buttons.
2010-09-22 Andreas J. Guelzow <aguelzow pyrshep ca>
* src/sheet-object-widget.c (SOW_MAKE_TYPE): add fn_draw_cairo and
change all usages using sheet_widget_draw_cairo as default
(sheet_widget_checkbox_draw_cairo): new
(sheet_widget_radio_button_draw_cairo): new
ChangeLog | 11 ++++-
NEWS | 1 +
src/sheet-object-widget.c | 110 ++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 118 insertions(+), 4 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index e589090..e5a5b3b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,14 @@
2010-09-22 Andreas J. Guelzow <aguelzow pyrshep ca>
- * src/sheet-object-widget.c (sheet_widget_draw_cairo): avoid dereferencing
- NULL pointer
+ * src/sheet-object-widget.c (SOW_MAKE_TYPE): add fn_draw_cairo and
+ change all usages using sheet_widget_draw_cairo as default
+ (sheet_widget_checkbox_draw_cairo): new
+ (sheet_widget_radio_button_draw_cairo): new
+
+2010-09-22 Andreas J. Guelzow <aguelzow pyrshep ca>
+
+ * src/sheet-object-widget.c (sheet_widget_draw_cairo): avoid
+ dereferencing NULL pointer
2010-09-21 Morten Welinder <terra gnome org>
diff --git a/NEWS b/NEWS
index d3e9ca5..11c43b9 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,7 @@ Andreas:
* Permit ctrl-click specification of sort columns.
* Set ODF files to save by default as ODF files. [#629962]
* Fix ssconvert crash on form controls. [#630335]
+ * Improve printing of checkboxes and radio buttons.
Jean:
* Export/import tick label rotation angle. [#629675]
diff --git a/src/sheet-object-widget.c b/src/sheet-object-widget.c
index 06b2b11..a27e2a4 100644
--- a/src/sheet-object-widget.c
+++ b/src/sheet-object-widget.c
@@ -23,6 +23,7 @@
#include <gnumeric-config.h>
#include <glib/gi18n-lib.h>
#include "gnumeric.h"
+#include "application.h"
#include "sheet-object-widget-impl.h"
#include "widgets/gnm-radiobutton.h"
#include "gnm-pane.h"
@@ -179,7 +180,8 @@ static GSF_CLASS (SOWidgetView, so_widget_view,
#define SOW_MAKE_TYPE(n1, n2, fn_config, fn_set_sheet, fn_clear_sheet, fn_foreach_dep, \
fn_copy, fn_write_sax, fn_prep_sax_parser, \
- fn_get_property, fn_set_property, class_init_code) \
+ fn_get_property, fn_set_property, \
+ fn_draw_cairo, class_init_code) \
\
static void \
sheet_widget_ ## n1 ## _class_init (GObjectClass *object_class) \
@@ -197,7 +199,7 @@ sheet_widget_ ## n1 ## _class_init (GObjectClass *object_class) \
so_class->copy = fn_copy; \
so_class->write_xml_sax = fn_write_sax; \
so_class->prep_sax_parser = fn_prep_sax_parser; \
- so_class->draw_cairo = &sheet_widget_draw_cairo; \
+ so_class->draw_cairo = fn_draw_cairo; \
sow_class->create_widget = &sheet_widget_ ## n1 ## _create_widget; \
{ class_init_code; } \
} \
@@ -566,6 +568,7 @@ SOW_MAKE_TYPE (frame, Frame,
sheet_widget_frame_prep_sax_parser,
sheet_widget_frame_get_property,
sheet_widget_frame_set_property,
+ sheet_widget_draw_cairo,
{
g_object_class_install_property
(object_class, SOF_PROP_TEXT,
@@ -1040,6 +1043,7 @@ SOW_MAKE_TYPE (button, Button,
sheet_widget_button_prep_sax_parser,
sheet_widget_button_get_property,
sheet_widget_button_set_property,
+ sheet_widget_draw_cairo,
{
g_object_class_install_property
(object_class, SOB_PROP_TEXT,
@@ -1608,6 +1612,7 @@ SOW_MAKE_TYPE (adjustment, Adjustment,
sheet_widget_adjustment_prep_sax_parser,
sheet_widget_adjustment_get_property,
sheet_widget_adjustment_set_property,
+ sheet_widget_draw_cairo,
{
g_object_class_install_property
(object_class, SWA_PROP_HORIZONTAL,
@@ -2222,6 +2227,59 @@ 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)
+{
+ SheetWidgetCheckbox const *swc = SHEET_WIDGET_CHECKBOX (so);
+ double halfheight = height/2;
+ PangoLayout *layout = pango_cairo_create_layout (cr);
+ PangoFontDescription *desc;
+ double const scale_h = 72. / gnm_app_display_dpi_get (TRUE);
+ double const scale_v = 72. / gnm_app_display_dpi_get (FALSE);
+
+ 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, 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_stroke (cr);
+ }
+
+ cairo_move_to (cr, 4. + 8. + 4, halfheight - 5.5);
+ 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, TRUE);
+ pango_layout_set_text (layout, swc->label, -1);
+ cairo_scale (cr, scale_h, scale_v);
+ pango_cairo_show_layout (cr, layout);
+ g_object_unref (G_OBJECT (layout));
+ pango_font_description_free (desc);
+ cairo_new_path (cr);
+ cairo_restore (cr);
+}
+
+
+
SOW_MAKE_TYPE (checkbox, Checkbox,
sheet_widget_checkbox_user_config,
sheet_widget_checkbox_set_sheet,
@@ -2232,6 +2290,7 @@ SOW_MAKE_TYPE (checkbox, Checkbox,
sheet_widget_checkbox_prep_sax_parser,
sheet_widget_checkbox_get_property,
sheet_widget_checkbox_set_property,
+ sheet_widget_checkbox_draw_cairo,
{
g_object_class_install_property
(object_class, SOC_PROP_ACTIVE,
@@ -2821,6 +2880,51 @@ sheet_widget_radio_button_user_config (SheetObject *so, SheetControl *sc)
gtk_widget_show (state->dialog);
}
+static void
+sheet_widget_radio_button_draw_cairo (SheetObject const *so, cairo_t *cr,
+ double width, double height)
+{
+ SheetWidgetRadioButton const *swr = SHEET_WIDGET_RADIO_BUTTON (so);
+ double halfheight = height/2;
+ PangoLayout *layout = pango_cairo_create_layout (cr);
+ PangoFontDescription *desc;
+ double const scale_h = 72. / gnm_app_display_dpi_get (TRUE);
+ double const scale_v = 72. / gnm_app_display_dpi_get (FALSE);
+
+ 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. + 6.5, halfheight);
+ cairo_arc (cr, 4. + 4., halfheight, 2.5, 0., 2*M_PI);
+ cairo_close_path (cr);
+ cairo_fill (cr);
+ }
+
+ cairo_move_to (cr, 4. + 8. + 4, halfheight - 5.5);
+ 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, TRUE);
+ pango_layout_set_text (layout, swr->label, -1);
+ cairo_scale (cr, scale_h, scale_v);
+ pango_cairo_show_layout (cr, layout);
+ g_object_unref (G_OBJECT (layout));
+ pango_font_description_free (desc);
+ cairo_new_path (cr);
+ cairo_restore (cr);
+}
+
SOW_MAKE_TYPE (radio_button, RadioButton,
sheet_widget_radio_button_user_config,
sheet_widget_radio_button_set_sheet,
@@ -2831,6 +2935,7 @@ SOW_MAKE_TYPE (radio_button, RadioButton,
sheet_widget_radio_button_prep_sax_parser,
sheet_widget_radio_button_get_property,
sheet_widget_radio_button_set_property,
+ sheet_widget_radio_button_draw_cairo,
{
g_object_class_install_property
(object_class, SOR_PROP_ACTIVE,
@@ -3081,6 +3186,7 @@ SOW_MAKE_TYPE (list_base, ListBase,
sheet_widget_list_base_prep_sax_parser,
NULL,
NULL,
+ sheet_widget_draw_cairo,
{
list_base_signals[LIST_BASE_MODEL_CHANGED] = g_signal_new ("model-changed",
SHEET_WIDGET_LIST_BASE_TYPE,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]