diff options
| author | Jon A. Cruz <jon@joncruz.org> | 2006-03-28 08:02:12 +0000 |
|---|---|---|
| committer | joncruz <joncruz@users.sourceforge.net> | 2006-03-28 08:02:12 +0000 |
| commit | 588c950321e61f4831b0891f3554616bf84b9cf8 (patch) | |
| tree | a4df441110b27045e02f2834e6d64bbf4fb620e9 /src/dialogs/eek-preview.cpp | |
| parent | preserve (but not use yet) rotation center when making tiled clones (diff) | |
| download | inkscape-588c950321e61f4831b0891f3554616bf84b9cf8.tar.gz inkscape-588c950321e61f4831b0891f3554616bf84b9cf8.zip | |
Experimenting with linked colors.
(bzr r316)
Diffstat (limited to 'src/dialogs/eek-preview.cpp')
| -rw-r--r-- | src/dialogs/eek-preview.cpp | 80 |
1 files changed, 77 insertions, 3 deletions
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; |
