X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fdialogs%2Fswatches.cpp;h=3a41c1ec4a4629b096f828952bd921657a997711;hb=569ef8f6dbacc8a8b0b933d02a806c2e091ce02b;hp=a4b9a0d7d12ef2e3205e70b5e72208706d35df38;hpb=ac57bf96045ac2c465a3b9df5daba43e03e8b3e1;p=inkscape.git diff --git a/src/dialogs/swatches.cpp b/src/dialogs/swatches.cpp index a4b9a0d7d..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: @@ -387,7 +410,7 @@ void ColorItem::_colorDefChanged(void* data) { SPDesktop *desktop = SP_ACTIVE_DESKTOP; if ( desktop ) { - SPDocument* document = SP_DT_DOCUMENT( desktop ); + SPDocument* document = sp_desktop_document( desktop ); Inkscape::XML::Node *rroot = sp_document_repr_root( document ); if ( rroot ) { @@ -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")); } } } @@ -426,7 +450,7 @@ void ColorItem::_colorDefChanged(void* data) } -Gtk::Widget* ColorItem::getPreview(PreviewStyle style, ViewType view, Gtk::BuiltinIconSize size) +Gtk::Widget* ColorItem::getPreview(PreviewStyle style, ViewType view, Inkscape::IconSize size) { Gtk::Widget* widget = 0; if ( style == PREVIEW_STYLE_BLURB ) { @@ -435,7 +459,7 @@ Gtk::Widget* ColorItem::getPreview(PreviewStyle style, ViewType view, Gtk::Built widget = lbl; } else { Glib::ustring blank(" "); - if ( size == Gtk::ICON_SIZE_MENU ) { + if ( size == Inkscape::ICON_SIZE_MENU || size == Inkscape::ICON_SIZE_DECORATION ) { blank = " "; } @@ -477,15 +501,10 @@ Gtk::Widget* ColorItem::getPreview(PreviewStyle style, ViewType view, Gtk::Built 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_DT_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; } @@ -856,6 +878,7 @@ static void loadEmUp() std::list sources; sources.push_back( profile_path("palettes") ); sources.push_back( g_strdup(INKSCAPE_PALETTESDIR) ); + sources.push_back( g_strdup(CREATE_PALETTESDIR) ); // Use this loop to iterate through a list of possible document locations. while (!sources.empty()) { @@ -872,13 +895,13 @@ static void loadEmUp() gchar *filename = 0; while ((filename = (gchar *)g_dir_read_name(directory)) != NULL) { gchar* lower = g_ascii_strdown( filename, -1 ); - if ( g_str_has_suffix(lower, ".gpl") ) { +// if ( g_str_has_suffix(lower, ".gpl") ) { gchar* full = g_build_filename(dirname, filename, NULL); if ( !Inkscape::IO::file_test( full, (GFileTest)(G_FILE_TEST_IS_DIR ) ) ) { _loadPaletteFile(full); } g_free(full); - } +// } g_free(lower); } g_dir_close(directory); @@ -914,15 +937,33 @@ SwatchesPanel& SwatchesPanel::getInstance() /** * Constructor */ -SwatchesPanel::SwatchesPanel() : - Inkscape::UI::Widget::Panel ("dialogs.swatches"), +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 ); } @@ -937,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++; } @@ -950,6 +994,9 @@ SwatchesPanel::SwatchesPanel() : show_all_children(); restorePanelPrefs(); + if ( hotItem ) { + hotItem->set_active(); + } } SwatchesPanel::~SwatchesPanel() @@ -975,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 ); }