diff options
| author | su_v <suv-sf@users.sourceforge.net> | 2012-12-16 05:41:25 +0000 |
|---|---|---|
| committer | ~suv <suv-sf@users.sourceforge.net> | 2012-12-16 05:41:25 +0000 |
| commit | 7ec903c9898f872dbd9426ed7a62e1969fdb7be7 (patch) | |
| tree | a306139e829118a83516af02279c9eafd3440eaa /src/widgets/eek-preview.cpp | |
| parent | Hershey Text: whitespace; py: docstring, modeline; inx: fix attribute value (diff) | |
| parent | Translations.Spanish translation update by Lucas Vieites. (diff) | |
| download | inkscape-7ec903c9898f872dbd9426ed7a62e1969fdb7be7.tar.gz inkscape-7ec903c9898f872dbd9426ed7a62e1969fdb7be7.zip | |
merge from trunk (r11955)
(bzr r11687.1.3)
Diffstat (limited to 'src/widgets/eek-preview.cpp')
| -rw-r--r-- | src/widgets/eek-preview.cpp | 129 |
1 files changed, 78 insertions, 51 deletions
diff --git a/src/widgets/eek-preview.cpp b/src/widgets/eek-preview.cpp index 595c289f2..535a5d101 100644 --- a/src/widgets/eek-preview.cpp +++ b/src/widgets/eek-preview.cpp @@ -42,6 +42,7 @@ using std::min; #include <gtk/gtk.h> #include "eek-preview.h" +#include "preferences.h" #define PRIME_BUTTON_MAGIC_NUMBER 1 @@ -224,13 +225,32 @@ static gboolean eek_preview_expose_event( GtkWidget* widget, GdkEventExpose* /* static gboolean eek_preview_draw(GtkWidget* widget, cairo_t* cr) { - GtkStyle* style = gtk_widget_get_style(widget); - GtkAllocation allocation; - gtk_widget_get_allocation (widget, &allocation); - EekPreview* preview = EEK_PREVIEW(widget); - GdkColor fg = {0, preview->_r, preview->_g, preview->_b}; - gint insetX = 0; - gint insetY = 0; + GtkStyle* style = gtk_widget_get_style(widget); + GtkAllocation allocation; + gtk_widget_get_allocation(widget, &allocation); + EekPreview* preview = EEK_PREVIEW(widget); + + GdkColor fg = { 0, + static_cast<guint16>(preview->_r), + static_cast<guint16>(preview->_g), + static_cast<guint16>(preview->_b)}; + + gint insetTop = 0, insetBottom = 0; + gint insetLeft = 0, insetRight = 0; + + if (preview->_border == BORDER_SOLID) { + insetTop = 1; + insetLeft = 1; + } + if (preview->_border == BORDER_SOLID_LAST_ROW) { + insetTop = insetBottom = 1; + insetLeft = 1; + } + if (preview->_border == BORDER_WIDE) { + insetTop = insetBottom = 1; + insetLeft = insetRight = 1; + } + #if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context = gtk_widget_get_style_context(widget); @@ -247,60 +267,64 @@ static gboolean eek_preview_draw(GtkWidget* widget, cairo_t* cr) #else GdkWindow* window = gtk_widget_get_window(widget); - gtk_paint_flat_box( style, - window, - (GtkStateType)gtk_widget_get_state(widget), - GTK_SHADOW_NONE, - NULL, - widget, - NULL, - 0, 0, - allocation.width, allocation.height); + gtk_paint_flat_box( style, + window, + (GtkStateType)gtk_widget_get_state(widget), + GTK_SHADOW_NONE, + NULL, + widget, + NULL, + 0, 0, + allocation.width, allocation.height); gdk_colormap_alloc_color( gdk_colormap_get_system(), &fg, FALSE, TRUE ); #endif - GdkRectangle rect = {insetX, - insetY, - allocation.width - (insetX * 2), - allocation.height - (insetY * 2)}; + // Border + if (preview->_border != BORDER_NONE) { + cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); + cairo_rectangle(cr, 0, 0, allocation.width, allocation.height); + cairo_fill(cr); + } - gdk_cairo_set_source_color(cr, &fg); - gdk_cairo_rectangle(cr, &rect); - cairo_paint(cr); + cairo_set_source_rgb(cr, preview->_r/65535.0, preview->_g/65535.0, preview->_b/65535.0 ); + cairo_rectangle(cr, insetLeft, insetTop, allocation.width - (insetLeft + insetRight), allocation.height - (insetTop + insetBottom)); + cairo_fill(cr); - if ( preview->_previewPixbuf ) { - GtkDrawingArea *da = &(preview->drawing); + if ( preview->_previewPixbuf ) { + GtkDrawingArea *da = &(preview->drawing); GdkWindow *da_window = gtk_widget_get_window(GTK_WIDGET(da)); cairo_t *cr = gdk_cairo_create(da_window); -#if GTK_CHECK_VERSION(2,24,0) gint w = gdk_window_get_width(da_window); gint h = gdk_window_get_height(da_window); -#else - gint w = 0; - gint h = 0; - gdk_drawable_get_size(da_window, &w, &h); -#endif - + if ((w != preview->_scaledW) || (h != preview->_scaledH)) { - if (preview->_scaled) { - g_object_unref(preview->_scaled); - } - preview->_scaled = gdk_pixbuf_scale_simple(preview->_previewPixbuf, w, h, GDK_INTERP_BILINEAR); - preview->_scaledW = w; - preview->_scaledH = h; + if (preview->_scaled) { + g_object_unref(preview->_scaled); } + preview->_scaled = gdk_pixbuf_scale_simple(preview->_previewPixbuf, w - (insetLeft + insetRight), h - (insetTop + insetBottom), GDK_INTERP_BILINEAR); + preview->_scaledW = w - (insetLeft + insetRight); + preview->_scaledH = h - (insetTop + insetBottom); + } + + GdkPixbuf *pix = (preview->_scaled) ? preview->_scaled : preview->_previewPixbuf; + + // Border + if (preview->_border != BORDER_NONE) { + cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); + cairo_rectangle(cr, 0, 0, allocation.width, allocation.height); + cairo_fill(cr); + } - GdkPixbuf *pix = (preview->_scaled) ? preview->_scaled : preview->_previewPixbuf; - gdk_cairo_set_source_pixbuf(cr, pix, 0, 0); + gdk_cairo_set_source_pixbuf(cr, pix, insetLeft, insetTop); cairo_paint(cr); cairo_destroy(cr); - } + } if ( preview->_linked ) { /* Draw arrow */ - GdkRectangle possible = {insetX, insetY, (allocation.width - (insetX * 2)), (allocation.height - (insetY * 2)) }; + GdkRectangle possible = {insetLeft, insetTop, (allocation.width - (insetLeft + insetRight)), (allocation.height - (insetTop + insetBottom)) }; GdkRectangle area = {possible.x, possible.y, possible.width / 2, possible.height / 2 }; /* Make it square */ @@ -370,7 +394,7 @@ static gboolean eek_preview_draw(GtkWidget* widget, cairo_t* cr) } if ( preview->_linked & PREVIEW_LINK_OTHER ) { - GdkRectangle otherArea = {insetX, area.y, area.width, area.height}; + GdkRectangle otherArea = {insetLeft, area.y, area.width, area.height}; if ( otherArea.height < possible.height ) { otherArea.y = possible.y + (possible.height - otherArea.height) / 2; } @@ -524,7 +548,8 @@ static gboolean eek_preview_button_press_cb( GtkWidget* widget, GdkEventButton* gtk_widget_grab_focus(widget); } - if ( event->button == PRIME_BUTTON_MAGIC_NUMBER ) { + if ( event->button == PRIME_BUTTON_MAGIC_NUMBER || + event->button == 2 ) { preview->_hot = TRUE; if ( preview->_within ) { gtk_widget_set_state( widget, GTK_STATE_ACTIVE ); @@ -541,8 +566,10 @@ static gboolean eek_preview_button_release_cb( GtkWidget* widget, GdkEventButton EekPreview* preview = EEK_PREVIEW(widget); preview->_hot = FALSE; gtk_widget_set_state( widget, GTK_STATE_NORMAL ); - if ( preview->_within && event->button == PRIME_BUTTON_MAGIC_NUMBER ) { - gboolean isAlt = (event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK; + if ( preview->_within && + (event->button == PRIME_BUTTON_MAGIC_NUMBER || event->button == 2)) { + gboolean isAlt = ( ((event->state & GDK_SHIFT_MASK) == GDK_SHIFT_MASK) || + (event->button == 2)); if ( isAlt ) { g_signal_emit( widget, eek_preview_signals[ALTCLICKED_SIGNAL], 0, 2 ); @@ -554,7 +581,7 @@ static gboolean eek_preview_button_release_cb( GtkWidget* widget, GdkEventButton return FALSE; } -gboolean eek_preview_key_press_event( GtkWidget* widget, GdkEventKey* event) +static gboolean eek_preview_key_press_event( GtkWidget* widget, GdkEventKey* event) { (void)widget; (void)event; @@ -562,7 +589,7 @@ gboolean eek_preview_key_press_event( GtkWidget* widget, GdkEventKey* event) return FALSE; } -gboolean eek_preview_key_release_event( GtkWidget* widget, GdkEventKey* event) +static gboolean eek_preview_key_release_event( GtkWidget* widget, GdkEventKey* event) { (void)widget; (void)event; @@ -752,7 +779,7 @@ void eek_preview_set_focus_on_click( EekPreview* preview, gboolean focus_on_clic } } -void eek_preview_set_details( EekPreview* preview, PreviewStyle prevstyle, ViewType view, PreviewSize size, guint ratio ) +void eek_preview_set_details( EekPreview* preview, PreviewStyle prevstyle, ViewType view, PreviewSize size, guint ratio, guint border ) { preview->_prevstyle = prevstyle; preview->_view = view; @@ -766,7 +793,7 @@ void eek_preview_set_details( EekPreview* preview, PreviewStyle prevstyle, ViewT ratio = PREVIEW_MAX_RATIO; } preview->_ratio = ratio; - + preview->_border = border; gtk_widget_queue_draw(GTK_WIDGET(preview)); } @@ -802,7 +829,7 @@ static void eek_preview_init( EekPreview *preview ) preview->_view = VIEW_TYPE_LIST; preview->_size = PREVIEW_SIZE_SMALL; preview->_ratio = 100; - + preview->_border = BORDER_NONE; preview->_previewPixbuf = 0; preview->_scaled = 0; |
