diff options
| author | Alex Valavanis <valavanisalex@gmail.com> | 2012-12-25 11:43:51 +0000 |
|---|---|---|
| committer | Alex Valavanis <valavanisalex@googlemail.com> | 2012-12-25 11:43:51 +0000 |
| commit | fb8cf55bb100230a014c52e9e351a60b29dd033e (patch) | |
| tree | 7710d57beea3b164858599f02680e689694308cb /src/widgets/desktop-widget.cpp | |
| parent | desktop-widget: Cleanup GTK+ 3 grid rendering and ruler redrawing (diff) | |
| download | inkscape-fb8cf55bb100230a014c52e9e351a60b29dd033e.tar.gz inkscape-fb8cf55bb100230a014c52e9e351a60b29dd033e.zip | |
desktop-widget: Use GtkStyleContext for GTK+ 3 widget rendering
(bzr r11984)
Diffstat (limited to 'src/widgets/desktop-widget.cpp')
| -rw-r--r-- | src/widgets/desktop-widget.cpp | 56 |
1 files changed, 24 insertions, 32 deletions
diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp index 95e68b5c1..97b226d74 100644 --- a/src/widgets/desktop-widget.cpp +++ b/src/widgets/desktop-widget.cpp @@ -381,20 +381,25 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) sp_ruler_set_metric(SP_RULER(dtw->hruler), SP_PT); gtk_widget_set_tooltip_text (dtw->hruler_box, gettext(sp_unit_get_plural (&sp_unit_get_by_id(SP_UNIT_PT)))); gtk_container_add (GTK_CONTAINER (eventbox), dtw->hruler); - guint xthickness = gtk_widget_get_style(widget)->xthickness; - guint ythickness = gtk_widget_get_style(widget)->ythickness; g_signal_connect (G_OBJECT (eventbox), "button_press_event", G_CALLBACK (sp_dt_hruler_event), dtw); g_signal_connect (G_OBJECT (eventbox), "button_release_event", G_CALLBACK (sp_dt_hruler_event), dtw); g_signal_connect (G_OBJECT (eventbox), "motion_notify_event", G_CALLBACK (sp_dt_hruler_event), dtw); #if GTK_CHECK_VERSION(3,0,0) + GtkBorder border; + GtkStyleContext *context = gtk_widget_get_style_context(widget); + gtk_style_context_get_border(context, static_cast<GtkStateFlags>(0), &border); + GtkWidget *tbl = gtk_grid_new(); GtkWidget *canvas_tbl = gtk_grid_new(); - gtk_widget_set_margin_left(eventbox, xthickness); - gtk_widget_set_margin_right(eventbox, xthickness); + gtk_widget_set_margin_left(eventbox, border.left); + gtk_widget_set_margin_right(eventbox, border.right); gtk_grid_attach(GTK_GRID(canvas_tbl), eventbox, 1, 0, 1, 1); #else + guint xthickness = gtk_widget_get_style(widget)->xthickness; + guint ythickness = gtk_widget_get_style(widget)->ythickness; + GtkWidget *tbl = gtk_table_new(2, 3, FALSE); GtkWidget *canvas_tbl = gtk_table_new(3, 3, FALSE); @@ -414,8 +419,8 @@ void SPDesktopWidget::init( SPDesktopWidget *dtw ) gtk_container_add (GTK_CONTAINER (eventbox), GTK_WIDGET (dtw->vruler)); #if GTK_CHECK_VERSION(3,0,0) - gtk_widget_set_margin_top(eventbox, ythickness); - gtk_widget_set_margin_bottom(eventbox, ythickness); + gtk_widget_set_margin_top(eventbox, border.top); + gtk_widget_set_margin_bottom(eventbox, border.bottom); gtk_grid_attach(GTK_GRID(canvas_tbl), eventbox, 0, 1, 1, 1); #else gtk_table_attach(GTK_TABLE (canvas_tbl), eventbox, 0, 1, 1, 2, @@ -1700,29 +1705,6 @@ SPDesktopWidget::viewSetPosition (Geom::Point p) void sp_desktop_widget_update_rulers (SPDesktopWidget *dtw) { - sp_desktop_widget_update_hruler(dtw); - sp_desktop_widget_update_vruler(dtw); -} - -void -sp_desktop_widget_update_hruler (SPDesktopWidget *dtw) -{ - /* The viewbox (in integers) must exactly match the size of SPCanvasbuf's pixel buffer. - * This is important because the former is being used for drawing the ruler, whereas - * the latter is used for drawing e.g. the grids and guides. Only when the viewbox - * coincides with the pixel buffer, everything will line up nicely. - */ - Geom::IntRect viewbox = dtw->canvas->getViewboxIntegers(); - - double const scale = dtw->desktop->current_zoom(); - double s = viewbox.min()[Geom::X] / scale - dtw->ruler_origin[Geom::X]; - double e = viewbox.max()[Geom::X] / scale - dtw->ruler_origin[Geom::X]; - sp_ruler_set_range(SP_RULER(dtw->hruler), s, e, (e - s)); -} - -void -sp_desktop_widget_update_vruler (SPDesktopWidget *dtw) -{ /* The viewbox (in integers) must exactly match the size of SPCanvasbuf's pixel buffer. * This is important because the former is being used for drawing the ruler, whereas * the latter is used for drawing e.g. the grids and guides. Only when the viewbox @@ -1731,9 +1713,19 @@ sp_desktop_widget_update_vruler (SPDesktopWidget *dtw) Geom::IntRect viewbox = dtw->canvas->getViewboxIntegers(); double const scale = dtw->desktop->current_zoom(); - double s = viewbox.min()[Geom::Y] / -scale - dtw->ruler_origin[Geom::Y]; - double e = viewbox.max()[Geom::Y] / -scale - dtw->ruler_origin[Geom::Y]; - sp_ruler_set_range(SP_RULER(dtw->vruler), s, e, (e - s)); + double lower_x = viewbox.min()[Geom::X] / scale - dtw->ruler_origin[Geom::X]; + double upper_x = viewbox.max()[Geom::X] / scale - dtw->ruler_origin[Geom::X]; + sp_ruler_set_range(SP_RULER(dtw->hruler), + lower_x, + upper_x, + (upper_x - lower_x)); + + double lower_y = viewbox.min()[Geom::Y] / -scale - dtw->ruler_origin[Geom::Y]; + double upper_y = viewbox.max()[Geom::Y] / -scale - dtw->ruler_origin[Geom::Y]; + sp_ruler_set_range(SP_RULER(dtw->vruler), + lower_y, + upper_y, + (upper_y - lower_y)); } |
