summaryrefslogtreecommitdiffstats
path: root/src/widgets/eek-preview.cpp
diff options
context:
space:
mode:
authorsu_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
commit7ec903c9898f872dbd9426ed7a62e1969fdb7be7 (patch)
treea306139e829118a83516af02279c9eafd3440eaa /src/widgets/eek-preview.cpp
parentHershey Text: whitespace; py: docstring, modeline; inx: fix attribute value (diff)
parentTranslations.Spanish translation update by Lucas Vieites. (diff)
downloadinkscape-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.cpp129
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;