X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fdialogs%2Fswatches.cpp;h=3a41c1ec4a4629b096f828952bd921657a997711;hb=569ef8f6dbacc8a8b0b933d02a806c2e091ce02b;hp=31e91562b2964824d70b20838ed5ce179805f15c;hpb=3cc86195f8421708895b8cfd3dcc1eea5dbf50d2;p=inkscape.git diff --git a/src/dialogs/swatches.cpp b/src/dialogs/swatches.cpp index 31e91562b..3a41c1ec4 100644 --- a/src/dialogs/swatches.cpp +++ b/src/dialogs/swatches.cpp @@ -30,6 +30,7 @@ #include "path-prefix.h" #include "swatches.h" #include "sp-item.h" +#include "prefs-utils.h" #include "eek-preview.h" @@ -97,10 +98,10 @@ typedef enum { } colorFlavorType; static const GtkTargetEntry sourceColorEntries[] = { -#if ENABLE_LCMS +#if ENABLE_MAGIC_COLORS // {"application/x-inkscape-color-id", GTK_TARGET_SAME_APP, APP_X_INKY_COLOR_ID}, {"application/x-inkscape-color", 0, APP_X_INKY_COLOR}, -#endif // ENABLE_LCMS +#endif // ENABLE_MAGIC_COLORS {"application/x-color", 0, APP_X_COLOR}, {"text/plain", 0, TEXT_DATA}, }; @@ -112,6 +113,9 @@ void ColorItem::_dragGetColorData( GtkWidget *widget, guint time, gpointer user_data) { + (void)widget; + (void)drag_context; + (void)time; static GdkAtom typeXColor = gdk_atom_intern("application/x-color", FALSE); static GdkAtom typeText = gdk_atom_intern("text/plain", FALSE); @@ -187,6 +191,7 @@ void ColorItem::_dragGetColorData( GtkWidget *widget, static void dragBegin( GtkWidget *widget, GdkDragContext* dc, gpointer data ) { + (void)widget; ColorItem* item = reinterpret_cast(data); if ( item ) { @@ -213,18 +218,31 @@ static void dragBegin( GtkWidget *widget, GdkDragContext* dc, gpointer data ) // return TRUE; // } -static void bouncy( GtkWidget* widget, gpointer callback_data ) { - ColorItem* item = reinterpret_cast(callback_data); - if ( item ) { - item->buttonClicked(false); +static gboolean onButtonPressed (GtkWidget *widget, GdkEventButton *event, gpointer userdata) +{ + (void)widget; + /* single click with the right mouse button? */ + if(event->type == GDK_BUTTON_RELEASE) + { + ColorItem* item = reinterpret_cast(userdata); + if(item) + { + if (event->button == 1) + { + if(event->state & GDK_SHIFT_MASK) + item->buttonClicked(true); /* the button was pressed with shift held down. set the stroke */ + else item->buttonClicked(false); + return TRUE; /* we handled this */ + } + else if (event->button == 3) + { + item->buttonClicked(true); + return TRUE; /* we handled this */ + } + } } -} -static void bouncy2( GtkWidget* widget, gint arg1, gpointer callback_data ) { - ColorItem* item = reinterpret_cast(callback_data); - if ( item ) { - item->buttonClicked(true); - } + return FALSE; /* we did not handle this */ } static void dieDieDie( GtkObject *obj, gpointer user_data ) @@ -233,10 +251,10 @@ static void dieDieDie( GtkObject *obj, gpointer user_data ) } static const GtkTargetEntry destColorTargets[] = { -#if ENABLE_LCMS +#if ENABLE_MAGIC_COLORS // {"application/x-inkscape-color-id", GTK_TARGET_SAME_APP, APP_X_INKY_COLOR_ID}, {"application/x-inkscape-color", 0, APP_X_INKY_COLOR}, -#endif // ENABLE_LCMS +#endif // ENABLE_MAGIC_COLORS {"application/x-color", 0, APP_X_COLOR}, }; @@ -250,6 +268,11 @@ void ColorItem::_dropDataIn( GtkWidget *widget, guint event_time, gpointer user_data) { + (void)widget; + (void)drag_context; + (void)x; + (void)y; + (void)event_time; // g_message(" droppy droppy %d", info); switch (info) { case APP_X_INKY_COLOR: @@ -416,7 +439,8 @@ void ColorItem::_colorDefChanged(void* data) str = 0; if ( bruteForce( document, rroot, paletteName, item->def.getR(), item->def.getG(), item->def.getB() ) ) { - sp_document_done( document ); + sp_document_done( document , SP_VERB_DIALOG_SWATCHES, + _("Change color definition")); } } } @@ -477,15 +501,10 @@ Gtk::Widget* ColorItem::getPreview(PreviewStyle style, ViewType view, Inkscape:: sigc::signal type_signal_something; */ g_signal_connect( G_OBJECT(newBlot->gobj()), - "clicked", - G_CALLBACK(bouncy), - this); - - g_signal_connect( G_OBJECT(newBlot->gobj()), - "alt-clicked", - G_CALLBACK(bouncy2), + "button-release-event", + G_CALLBACK(onButtonPressed), this); - + gtk_drag_source_set( GTK_WIDGET(newBlot->gobj()), GDK_BUTTON1_MASK, sourceColorEntries, @@ -550,7 +569,8 @@ void ColorItem::buttonClicked(bool secondary) sp_desktop_set_style(desktop, css); sp_repr_css_attr_unref(css); - sp_document_done (sp_desktop_document (desktop)); + sp_document_done (sp_desktop_document (desktop), SP_VERB_DIALOG_SWATCHES, + secondary? _("Set stroke color from swatch") : _("Set fill color from swatch")); } } @@ -593,12 +613,12 @@ bool parseNum( char*& str, int& val ) { static bool getBlock( std::string& dst, guchar ch, std::string const str ) { bool good = false; - size_t pos = str.find(ch); + std::string::size_type pos = str.find(ch); if ( pos != std::string::npos ) { - size_t pos2 = str.find( '(', pos ); + std::string::size_type pos2 = str.find( '(', pos ); if ( pos2 != std::string::npos ) { - size_t endPos = str.find( ')', pos2 ); + std::string::size_type endPos = str.find( ')', pos2 ); if ( endPos != std::string::npos ) { dst = str.substr( pos2 + 1, (endPos - pos2 - 1) ); good = true; @@ -611,7 +631,7 @@ static bool getBlock( std::string& dst, guchar ch, std::string const str ) static bool popVal( guint64& numVal, std::string& str ) { bool good = false; - size_t endPos = str.find(','); + std::string::size_type endPos = str.find(','); if ( endPos == std::string::npos ) { endPos = str.length(); } @@ -641,11 +661,11 @@ void ColorItem::_wireMagicColors( void* p ) { for ( std::vector::iterator it = onceMore->_colors.begin(); it != onceMore->_colors.end(); ++it ) { - size_t pos = (*it)->def.descr.find("*{"); + std::string::size_type pos = (*it)->def.descr.find("*{"); if ( pos != std::string::npos ) { std::string subby = (*it)->def.descr.substr( pos + 2 ); - size_t endPos = subby.find("}*"); + std::string::size_type endPos = subby.find("}*"); if ( endPos != std::string::npos ) { subby.erase( endPos ); @@ -836,7 +856,9 @@ void _loadPaletteFile( gchar const *filename ) } while ( result && !hasErr ); if ( !hasErr ) { possible.push_back(onceMore); +#if ENABLE_MAGIC_COLORS ColorItem::_wireMagicColors( onceMore ); +#endif // ENABLE_MAGIC_COLORS } else { delete onceMore; } @@ -915,15 +937,33 @@ SwatchesPanel& SwatchesPanel::getInstance() /** * Constructor */ -SwatchesPanel::SwatchesPanel() : - Inkscape::UI::Widget::Panel( "dialogs.swatches", true ), +SwatchesPanel::SwatchesPanel(gchar const* prefsPath) : + Inkscape::UI::Widget::Panel( Glib::ustring(), prefsPath, true ), _holder(0) { + Gtk::RadioMenuItem* hotItem = 0; _holder = new PreviewHolder(); loadEmUp(); if ( !possible.empty() ) { - JustForNow* first = possible.front(); + JustForNow* first = 0; + gchar const* targetName = 0; + if ( _prefs_path ) { + targetName = prefs_get_string_attribute( _prefs_path, "palette" ); + if ( targetName ) { + for ( std::vector::iterator iter = possible.begin(); iter != possible.end(); ++iter ) { + if ( (*iter)->_name == targetName ) { + first = *iter; + break; + } + } + } + } + + if ( !first ) { + first = possible.front(); + } + if ( first->_prefWidth > 0 ) { _holder->setColumnPref( first->_prefWidth ); } @@ -938,6 +978,9 @@ SwatchesPanel::SwatchesPanel() : for ( std::vector::iterator it = possible.begin(); it != possible.end(); it++ ) { JustForNow* curr = *it; Gtk::RadioMenuItem* single = manage(new Gtk::RadioMenuItem(groupOne, curr->_name)); + if ( curr == first ) { + hotItem = single; + } _regItem( single, 3, i ); i++; } @@ -951,6 +994,9 @@ SwatchesPanel::SwatchesPanel() : show_all_children(); restorePanelPrefs(); + if ( hotItem ) { + hotItem->set_active(); + } } SwatchesPanel::~SwatchesPanel() @@ -976,6 +1022,11 @@ void SwatchesPanel::_handleAction( int setId, int itemId ) if ( itemId >= 0 && itemId < static_cast(possible.size()) ) { _holder->clear(); JustForNow* curr = possible[itemId]; + + if ( _prefs_path ) { + prefs_set_string_attribute( _prefs_path, "palette", curr->_name.c_str() ); + } + if ( curr->_prefWidth > 0 ) { _holder->setColumnPref( curr->_prefWidth ); }