X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fdialogs%2Feek-preview.cpp;fp=src%2Fdialogs%2Feek-preview.cpp;h=d2ac8db5de4cc3242c6f4cccb560d520363b2da5;hb=5898a8b4ebef3235a99e22de3dcde529d0538986;hp=74cf0abf77d4737709dfec651c37d670b49e4b69;hpb=46bd663ea26867959a260b7190a72944605bdebe;p=inkscape.git diff --git a/src/dialogs/eek-preview.cpp b/src/dialogs/eek-preview.cpp index 74cf0abf7..d2ac8db5d 100644 --- a/src/dialogs/eek-preview.cpp +++ b/src/dialogs/eek-preview.cpp @@ -53,9 +53,15 @@ static GtkWidgetClass* parent_class = 0; void eek_preview_set_color( EekPreview* preview, int r, int g, int b ) { - preview->_r = r; - preview->_g = g; - preview->_b = b; + if ( (preview->_r = r) + || (preview->_g = g) + || (preview->_b = b) ) { + preview->_r = r; + preview->_g = g; + preview->_b = b; + + gtk_widget_queue_draw(GTK_WIDGET(preview)); + } } @@ -171,6 +177,59 @@ gboolean eek_preview_expose_event( GtkWidget* widget, GdkEventExpose* event ) insetX, insetY, widget->allocation.width - (insetX * 2), widget->allocation.height - (insetY * 2) ); + if ( preview->_linked ) { + /* Draw arrow */ + GdkRectangle possible = {insetX, insetY, (widget->allocation.width - (insetX * 2)), (widget->allocation.height - (insetY * 2)) }; + GdkRectangle area = {possible.x, possible.y, possible.width / 2, possible.height / 2 }; + + /* Make it square */ + if ( area.width > area.height ) + area.width = area.height; + if ( area.height > area.width ) + area.height = area.width; + + /* Center it horizontally */ + if ( area.width < possible.width ) { + int diff = (possible.width - area.width) / 2; + area.x += diff; + } + + + if ( preview->_linked & PREVIEW_LINK_IN ) { + gtk_paint_arrow( style, + widget->window, + (GtkStateType)widget->state, + GTK_SHADOW_ETCHED_IN, + NULL, /* clip area. &area, */ + widget, /* may be NULL */ + NULL, /* detail */ + GTK_ARROW_DOWN, + FALSE, + area.x, area.y, + area.width, area.height + ); + } + + if ( area.height < possible.height ) { + area.y = possible.y + (possible.height - area.height); + } + + if ( preview->_linked & PREVIEW_LINK_OUT ) { + gtk_paint_arrow( style, + widget->window, + (GtkStateType)widget->state, + GTK_SHADOW_ETCHED_OUT, + NULL, /* clip area. &area, */ + widget, /* may be NULL */ + NULL, /* detail */ + GTK_ARROW_UP, + FALSE, + area.x, area.y, + area.width, area.height + ); + } + } + if ( GTK_WIDGET_HAS_FOCUS(widget) ) { gtk_paint_focus( style, widget->window, @@ -424,6 +483,21 @@ static void eek_preview_class_init( EekPreviewClass *klass ) ); } +void eek_preview_set_linked( EekPreview* splat, LinkType link ) +{ + link = (LinkType)(link & PREVIEW_LINK_BOTH); + if ( link != (LinkType)splat->_linked ) { + splat->_linked = link; + + gtk_widget_queue_draw( GTK_WIDGET(splat) ); + } +} + +LinkType eek_preview_get_linked( EekPreview* splat ) +{ + return (LinkType)splat->_linked; +} + gboolean eek_preview_get_focus_on_click( EekPreview* preview ) { return preview->_takesFocus;