=== modified file 'src/ui/dialog/color-item.cpp' --- src/ui/dialog/color-item.cpp 2012-07-05 21:39:08 +0000 +++ src/ui/dialog/color-item.cpp 2012-09-24 23:27:55 +0000 @@ -546,7 +546,7 @@ | (_isLive ? PREVIEW_LINK_OTHER:0)) ); } -Gtk::Widget* ColorItem::getPreview(PreviewStyle style, ViewType view, ::PreviewSize size, guint ratio) +Gtk::Widget* ColorItem::getPreview(PreviewStyle style, ViewType view, ::PreviewSize size, guint ratio, guint border) { Gtk::Widget* widget = 0; if ( style == PREVIEW_STYLE_BLURB) { @@ -565,7 +565,7 @@ _regenPreview(preview); - eek_preview_set_details( preview, (::PreviewStyle)style, (::ViewType)view, (::PreviewSize)size, ratio ); + eek_preview_set_details( preview, (::PreviewStyle)style, (::ViewType)view, (::PreviewSize)size, ratio, border ); def.addCallback( _colorDefChanged, this ); === modified file 'src/ui/dialog/color-item.h' --- src/ui/dialog/color-item.h 2012-01-03 01:11:07 +0000 +++ src/ui/dialog/color-item.h 2012-09-24 23:27:52 +0000 @@ -53,7 +53,8 @@ virtual Gtk::Widget* getPreview(PreviewStyle style, ViewType view, ::PreviewSize size, - guint ratio); + guint ratio, + guint border); void buttonClicked(bool secondary = false); void setGradient(SPGradient *grad); === modified file 'src/ui/previewable.h' --- src/ui/previewable.h 2010-11-17 02:12:56 +0000 +++ src/ui/previewable.h 2012-09-24 23:29:06 +0000 @@ -35,12 +35,13 @@ VIEW_TYPE_GRID } ViewType; + class Previewable { public: // TODO need to add some nice parameters virtual ~Previewable() {} - virtual Gtk::Widget* getPreview( PreviewStyle style, ViewType view, ::PreviewSize size, guint ratio ) = 0; + virtual Gtk::Widget* getPreview( PreviewStyle style, ViewType view, ::PreviewSize size, guint ratio, guint border) = 0; }; === modified file 'src/ui/previewfillable.h' --- src/ui/previewfillable.h 2012-04-10 10:38:21 +0000 +++ src/ui/previewfillable.h 2012-09-24 23:22:42 +0000 @@ -35,6 +35,7 @@ virtual guint getPreviewRatio() const = 0; virtual void setWrap( bool b ) = 0; virtual bool getWrap() const = 0; + virtual void setBorder( guint border ) = 0; }; === modified file 'src/ui/previewholder.cpp' --- src/ui/previewholder.cpp 2012-06-09 15:43:34 +0000 +++ src/ui/previewholder.cpp 2012-09-24 23:24:28 +0000 @@ -12,6 +12,7 @@ #include "previewholder.h" +#include "preferences.h" #include #include @@ -38,7 +39,8 @@ _baseSize(PREVIEW_SIZE_SMALL), _ratio(100), _view(VIEW_TYPE_LIST), - _wrap(false) + _wrap(false), + _border(0) { _scroller = manage(new Gtk::ScrolledWindow()); _insides = manage(new Gtk::Table( 1, 2 )); @@ -77,13 +79,13 @@ int i = items.size() - 1; if ( _view == VIEW_TYPE_LIST ) { - Gtk::Widget* label = manage(preview->getPreview(PREVIEW_STYLE_BLURB, VIEW_TYPE_LIST, _baseSize, _ratio)); - Gtk::Widget* thing = manage(preview->getPreview(PREVIEW_STYLE_PREVIEW, VIEW_TYPE_LIST, _baseSize, _ratio)); + Gtk::Widget* label = manage(preview->getPreview(PREVIEW_STYLE_BLURB, VIEW_TYPE_LIST, _baseSize, _ratio, _border)); + Gtk::Widget* thing = manage(preview->getPreview(PREVIEW_STYLE_PREVIEW, VIEW_TYPE_LIST, _baseSize, _ratio, _border)); _insides->attach( *thing, 0, 1, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); _insides->attach( *label, 1, 2, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK ); } else { - Gtk::Widget* thing = manage(items[i]->getPreview(PREVIEW_STYLE_PREVIEW, VIEW_TYPE_GRID, _baseSize, _ratio)); + Gtk::Widget* thing = manage(items[i]->getPreview(PREVIEW_STYLE_PREVIEW, VIEW_TYPE_GRID, _baseSize, _ratio, _border)); int width = 1; int height = 1; @@ -195,6 +197,12 @@ } } +void PreviewHolder::setBorder( guint border ) +{ + _border = border; + rebuildUI(); +} + void PreviewHolder::setColumnPref( int cols ) { _prefCols = cols; @@ -304,12 +312,15 @@ if ( _view == VIEW_TYPE_LIST ) { _insides = manage(new Gtk::Table( 1, 2 )); _insides->set_col_spacings( 8 ); + if (_border == 2) { + _insides->set_row_spacings( 1 ); + } for ( unsigned int i = 0; i < items.size(); i++ ) { - Gtk::Widget* label = manage(items[i]->getPreview(PREVIEW_STYLE_BLURB, _view, _baseSize, _ratio)); + Gtk::Widget* label = manage(items[i]->getPreview(PREVIEW_STYLE_BLURB, _view, _baseSize, _ratio, _border)); //label->set_alignment(Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER); - Gtk::Widget* thing = manage(items[i]->getPreview(PREVIEW_STYLE_PREVIEW, _view, _baseSize, _ratio)); + Gtk::Widget* thing = manage(items[i]->getPreview(PREVIEW_STYLE_PREVIEW, _view, _baseSize, _ratio, _border)); _insides->attach( *thing, 0, 1, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); _insides->attach( *label, 1, 2, i, i+1, Gtk::FILL|Gtk::EXPAND, Gtk::SHRINK ); @@ -322,11 +333,15 @@ int height = 1; for ( unsigned int i = 0; i < items.size(); i++ ) { - Gtk::Widget* thing = manage(items[i]->getPreview(PREVIEW_STYLE_PREVIEW, _view, _baseSize, _ratio)); + Gtk::Widget* thing = manage(items[i]->getPreview(PREVIEW_STYLE_PREVIEW, _view, _baseSize, _ratio, _border)); if ( !_insides ) { calcGridSize( thing, items.size(), width, height ); _insides = manage(new Gtk::Table( height, width )); + if (_border == 2) { + _insides->set_col_spacings( 1 ); + _insides->set_row_spacings( 1 ); + } } _insides->attach( *thing, col, col+1, row, row+1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND ); === modified file 'src/ui/previewholder.h' --- src/ui/previewholder.h 2012-06-09 15:43:34 +0000 +++ src/ui/previewholder.h 2012-09-25 00:00:24 +0000 @@ -42,6 +42,7 @@ virtual guint getPreviewRatio() const { return _ratio; } virtual void setWrap( bool b ); virtual bool getWrap() const { return _wrap; } + virtual void setBorder( guint border ); protected: virtual void on_size_allocate( Gtk::Allocation& allocation ); @@ -62,6 +63,7 @@ guint _ratio; ViewType _view; bool _wrap; + guint _border; }; } //namespace UI === modified file 'src/ui/widget/panel.cpp' --- src/ui/widget/panel.cpp 2012-04-30 23:08:33 +0000 +++ src/ui/widget/panel.cpp 2012-09-24 23:56:44 +0000 @@ -42,7 +42,8 @@ static const int PANEL_SETTING_MODE = 1; static const int PANEL_SETTING_SHAPE = 2; static const int PANEL_SETTING_WRAP = 3; -static const int PANEL_SETTING_NEXTFREE = 4; +static const int PANEL_SETTING_BORDER = 4; +static const int PANEL_SETTING_NEXTFREE = 5; void Panel::prep() { @@ -93,7 +94,7 @@ Glib::ustring tmp("<"); _anchor = SP_ANCHOR_CENTER; - guint panel_size = 0, panel_mode = 0, panel_ratio = 100; + guint panel_size = 0, panel_mode = 0, panel_ratio = 100, panel_border = 0; bool panel_wrap = 0; if (!_prefs_path.empty()) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); @@ -101,6 +102,7 @@ panel_size = prefs->getIntLimited(_prefs_path + "/panel_size", 1, 0, PREVIEW_SIZE_HUGE); panel_mode = prefs->getIntLimited(_prefs_path + "/panel_mode", 1, 0, 10); panel_ratio = prefs->getIntLimited(_prefs_path + "/panel_ratio", 100, 0, 500 ); + panel_border = prefs->getIntLimited(_prefs_path + "/panel_border", BORDER_SOLID, 0, 2 ); } _menu = new Gtk::Menu(); @@ -198,6 +200,42 @@ } { + Glib::ustring widthItemLabel(C_("Swatches", "Border")); + + //TRANSLATORS: Indicates border of colour swatches + const gchar *widthLabels[] = { + NC_("Swatches border", "None"), + NC_("Swatches border", "Solid"), + NC_("Swatches border", "Spaced"), + }; + + Gtk::MenuItem *item = manage( new Gtk::MenuItem(widthItemLabel)); + Gtk::Menu *type_menu = manage(new Gtk::Menu()); + item->set_submenu(*type_menu); + _menu->append(*item); + + Gtk::RadioMenuItem::Group widthGroup; + + guint values[] = {0, 1, 2}; + guint hot_index = 0; + for ( guint i = 0; i < G_N_ELEMENTS(widthLabels); ++i ) { + // Assume all values are in increasing order + if ( values[i] <= panel_border ) { + hot_index = i; + } + } + for ( guint i = 0; i < G_N_ELEMENTS(widthLabels); ++i ) { + Glib::ustring _label(g_dpgettext2(NULL, "Swatches border", widthLabels[i])); + Gtk::RadioMenuItem *_item = manage(new Gtk::RadioMenuItem(widthGroup, _label)); + type_menu->append(*_item); + if ( i <= hot_index ) { + _item->set_active(true); + } + _item->signal_activate().connect(sigc::bind(sigc::mem_fun(*this, &Panel::_bounceCall), PANEL_SETTING_BORDER, values[i])); + } + } + + { //TRANSLATORS: "Wrap" indicates how colour swatches are displayed Glib::ustring wrap_label(C_("Swatches","Wrap")); Gtk::CheckMenuItem *check = manage(new Gtk::CheckMenuItem(wrap_label)); @@ -259,6 +297,7 @@ _bounceCall(PANEL_SETTING_MODE, panel_mode); _bounceCall(PANEL_SETTING_SHAPE, panel_ratio); _bounceCall(PANEL_SETTING_WRAP, panel_wrap); + _bounceCall(PANEL_SETTING_BORDER, panel_border); } void Panel::setLabel(Glib::ustring const &label) @@ -323,7 +362,7 @@ void Panel::restorePanelPrefs() { - guint panel_size = 0, panel_mode = 0, panel_ratio = 100; + guint panel_size = 0, panel_mode = 0, panel_ratio = 100, panel_border = 0; bool panel_wrap = 0; if (!_prefs_path.empty()) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); @@ -331,11 +370,13 @@ panel_size = prefs->getIntLimited(_prefs_path + "/panel_size", 1, 0, PREVIEW_SIZE_HUGE); panel_mode = prefs->getIntLimited(_prefs_path + "/panel_mode", 1, 0, 10); panel_ratio = prefs->getIntLimited(_prefs_path + "/panel_ratio", 000, 0, 500 ); + panel_border = prefs->getIntLimited(_prefs_path + "/panel_border", BORDER_SOLID, 0, 2 ); } _bounceCall(PANEL_SETTING_SIZE, panel_size); _bounceCall(PANEL_SETTING_MODE, panel_mode); _bounceCall(PANEL_SETTING_SHAPE, panel_ratio); _bounceCall(PANEL_SETTING_WRAP, panel_wrap); + _bounceCall(PANEL_SETTING_BORDER, panel_border); } sigc::signal &Panel::signalResponse() @@ -426,6 +467,15 @@ _fillable->setStyle(curr_size, curr_type, j); } break; + case PANEL_SETTING_BORDER: + if (!_prefs_path.empty()) { + Inkscape::Preferences *prefs = Inkscape::Preferences::get(); + prefs->setInt(_prefs_path + "/panel_border", j); + } + if ( _fillable ) { + _fillable->setBorder(j); + } + break; case PANEL_SETTING_WRAP: if (!_prefs_path.empty()) { Inkscape::Preferences *prefs = Inkscape::Preferences::get(); === modified file 'src/widgets/eek-preview.cpp' --- src/widgets/eek-preview.cpp 2012-06-24 23:19:00 +0000 +++ src/widgets/eek-preview.cpp 2012-09-24 23:54:11 +0000 @@ -42,6 +42,7 @@ #include #include "eek-preview.h" +#include "preferences.h" #define PRIME_BUTTON_MAGIC_NUMBER 1 @@ -224,13 +225,13 @@ 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, preview->_r, preview->_g, preview->_b }; + gint insetX = 1; + gint insetY = 1; #if GTK_CHECK_VERSION(3,0,0) GtkStyleContext *context = gtk_widget_get_style_context(widget); @@ -247,30 +248,45 @@ #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)}; - - gdk_cairo_set_source_color(cr, &fg); - gdk_cairo_rectangle(cr, &rect); - cairo_paint(cr); - - if ( preview->_previewPixbuf ) { - GtkDrawingArea *da = &(preview->drawing); + if (preview->_border == BORDER_NONE) { + insetX = 0; + insetY = 0; + cairo_set_source_rgb(cr, preview->_r/65535.0, preview->_g/65535.0, preview->_b/65535.0 ); + cairo_rectangle(cr, 0, 0, allocation.width, allocation.height); + cairo_fill(cr); + } else if (preview->_border == BORDER_SOLID) { + cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); + cairo_rectangle(cr, 0, 0, allocation.width, allocation.height); + cairo_fill(cr); + + cairo_set_source_rgb(cr, preview->_r/65535.0, preview->_g/65535.0, preview->_b/65535.0 ); + cairo_rectangle(cr, insetX, insetY, allocation.width - (0 ), allocation.height - (0 )); + cairo_fill(cr); + } else { + cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); + cairo_rectangle(cr, 0, 0, allocation.width, allocation.height); + cairo_fill(cr); + + cairo_set_source_rgb(cr, preview->_r/65535.0, preview->_g/65535.0, preview->_b/65535.0 ); + cairo_rectangle(cr, insetX, insetY, allocation.width - (insetX *2), allocation.height - (insetY * 2 )); + cairo_fill(cr); + } + + 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); @@ -278,11 +294,12 @@ gint w = gdk_window_get_width(da_window); gint h = gdk_window_get_height(da_window); #else - gint w = 0; - gint h = 0; + 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); @@ -293,10 +310,13 @@ } GdkPixbuf *pix = (preview->_scaled) ? preview->_scaled : preview->_previewPixbuf; + + + gdk_cairo_set_source_pixbuf(cr, pix, 0, 0); cairo_paint(cr); cairo_destroy(cr); - } + } if ( preview->_linked ) { /* Draw arrow */ @@ -752,7 +772,7 @@ } } -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 +786,7 @@ ratio = PREVIEW_MAX_RATIO; } preview->_ratio = ratio; - + preview->_border = border; gtk_widget_queue_draw(GTK_WIDGET(preview)); } @@ -802,7 +822,7 @@ preview->_view = VIEW_TYPE_LIST; preview->_size = PREVIEW_SIZE_SMALL; preview->_ratio = 100; - + preview->_border = BORDER_NONE; preview->_previewPixbuf = 0; preview->_scaled = 0; === modified file 'src/widgets/eek-preview.h' --- src/widgets/eek-preview.h 2011-10-23 08:01:33 +0000 +++ src/widgets/eek-preview.h 2012-09-24 23:29:13 +0000 @@ -90,6 +90,13 @@ PREVIEW_LINK_ALL = 31 } LinkType; + +typedef enum { + BORDER_NONE = 0, + BORDER_SOLID, + BORDER_SPACED +} BorderStyle; + typedef struct _EekPreview EekPreview; typedef struct _EekPreviewClass EekPreviewClass; @@ -113,6 +120,7 @@ PreviewSize _size; guint _ratio; guint _linked; + guint _border; GdkPixbuf* _previewPixbuf; GdkPixbuf* _scaled; }; @@ -128,7 +136,7 @@ GType eek_preview_get_type(void) G_GNUC_CONST; GtkWidget* eek_preview_new(void); -void eek_preview_set_details( EekPreview* splat, PreviewStyle prevstyle, ViewType view, PreviewSize size, guint ratio ); +void eek_preview_set_details( EekPreview* splat, PreviewStyle prevstyle, ViewType view, PreviewSize size, guint ratio, guint); void eek_preview_set_color( EekPreview* splat, int r, int g, int b ); void eek_preview_set_pixbuf( EekPreview* splat, GdkPixbuf* pixbuf );