From: John Spray Date: Mon, 13 Feb 2006 01:53:22 +0000 (+0000) Subject: Get lots of nice icons from the desktop theme X-Git-Tag: 1.6.10~13607 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=b67c8595516a4e85828a9eb623452e86063ea39b;p=features.git Get lots of nice icons from the desktop theme git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@13224 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/frontends/gtk/ChangeLog b/src/frontends/gtk/ChangeLog index 98e3b54af3..de74942329 100644 --- a/src/frontends/gtk/ChangeLog +++ b/src/frontends/gtk/ChangeLog @@ -1,3 +1,7 @@ +2006-02-13 John Spray + * ghelpers.C: implement Gtk::IconTheme stuff for getting + lots more icons from the theme. + 2006-02-12 John Spray * GMenubar.C: assume backend strings in latin1 (bug 1954) * GDocument.C, GtkLengthEntry.C: replace comboBoxTextSet with diff --git a/src/frontends/gtk/ghelpers.C b/src/frontends/gtk/ghelpers.C index fabd52992e..fa894a3cad 100644 --- a/src/frontends/gtk/ghelpers.C +++ b/src/frontends/gtk/ghelpers.C @@ -61,6 +61,11 @@ Gtk::BuiltinStockID getGTKStockIcon(FuncRequest const & func) case LFUN_ITAL: return Gtk::Stock::ITALIC; case LFUN_FILE_OPEN: return Gtk::Stock::OPEN; case LFUN_RECONFIGURE: return Gtk::Stock::REFRESH; + case LFUN_LABEL_GOTO: + case LFUN_BOOKMARK_GOTO: return Gtk::Stock::JUMP_TO; + case LFUN_GOTONOTE: return Gtk::Stock::GO_FORWARD; + case LFUN_ACCEPT_ALL_CHANGES: return Gtk::Stock::APPLY; + case LFUN_REJECT_ALL_CHANGES: return Gtk::Stock::CANCEL; case LFUN_DIALOG_SHOW: if (func.argument == "findreplace") return Gtk::Stock::FIND_AND_REPLACE; @@ -72,6 +77,8 @@ Gtk::BuiltinStockID getGTKStockIcon(FuncRequest const & func) return Gtk::Stock::PREFERENCES; else if (func.argument == "document") return Gtk::Stock::PROPERTIES; + else if (func.argument == "aboutlyx") + return Gtk::Stock::ABOUT; else return Gtk::Stock::MISSING_IMAGE; break; @@ -80,36 +87,95 @@ Gtk::BuiltinStockID getGTKStockIcon(FuncRequest const & func) } +Glib::ustring getGTKThemeIcon(FuncRequest const & func) +{ + switch (func.action) { + case LFUN_TABULAR_INSERT: return "stock_insert-table"; + case LFUN_MATH_MODE: return "stock_insert-math-object"; + case LFUN_EMPH: return "stock_text_italic"; + case LFUN_DIALOG_SHOW_NEW_INSET: + if (func.argument == "graphics") + return "stock_placeholder-picture"; + if (func.argument == "include") + return "stock_insert-file"; + break; + case LFUN_DIALOG_SHOW: + if (func.argument == "spellchecker") + return "stock_spellcheck"; + else if (func.argument == "character") + return "stock_font"; + break; + case LFUN_DEPTH_PLUS: return "format-indent-more"; + case LFUN_DEPTH_MIN: return "format-indent-less"; + case LFUN_LAYOUT: + if (func.argument == "Enumerate") + return "stock_list_enum"; + else if (func.argument == "Itemize") + return "stock_list_bullet"; + break; + case LFUN_FREEFONT_APPLY: return "stock_font-formatting-toggle"; + case LFUN_THESAURUS_ENTRY: return "stock_thesaurus"; + case LFUN_URL: return "stock_insert-url"; + case LFUN_TABULAR_FEATURE: + if (func.argument == "append-row") + return "stock_insert-rows"; + else if (func.argument == "append-column") + return "stock_insert-columns"; + else if (func.argument == "delete-row") + return "stock_delete-row"; + else if (func.argument == "delete-column") + return "stock_delete-column"; + else if (func.argument == "valign-top") + return "stock_cell-align-top"; + else if (func.argument == "valign-middle") + return "stock_cell-align-center"; + else if (func.argument == "valign-bottom") + return "stock_cell-align-bottom"; + else if (func.argument == "align-left") + return "gtk-justify-left"; + else if (func.argument == "align-center") + return "gtk-justify-center"; + else if (func.argument == "align-right") + return "gtk-justify-right"; + break; + + case LFUN_BOOKMARK_SAVE: return "stock_add-bookmark"; + case LFUN_INSERT_NOTE: return "stock_insert-note"; + case LFUN_LAYOUT_PARAGRAPH: return "stock_format-paragraph"; + case LFUN_MENUNEWTMPLT: return "stock_new-template"; + //case LFUN_INSET_ERT: return "gnome-mime-application-x-tex"; + } + return ""; +} + + Gtk::Image *getGTKIcon(FuncRequest const & func, Gtk::IconSize const & size) { - /*static Glib::RefPtr theme; + static Glib::RefPtr theme; if (!theme) - theme = Gtk::IconTheme::get_default();*/ + theme = Gtk::IconTheme::get_default(); - Gtk::Image *image = NULL; + // TODO: cache these values somewhere else + int iconwidth = 16; + int iconheight = 16; + Gtk::IconSize::lookup(size, iconwidth, iconheight); + // TODO: this stuff is called every menu view - needs + // caching somewhere, or maybe GTK does enough of that for us. + Gtk::Image *image = NULL; Gtk::BuiltinStockID const stockID = getGTKStockIcon(func); if (stockID != Gtk::Stock::MISSING_IMAGE) { - // Prefer stock gtk graphics image = Gtk::manage(new Gtk::Image(stockID, size)); } else { - /*if (func.action == LFUN_MENUNEW) { - std::cerr << "Looking for icon\n"; - std::vector icons = theme->list_icons("mimetypes"); - for (std::vector::iterator it = icons.begin(); it != icons.end(); ++it) { - std::cerr << (*it) << "\n"; - } - std::vector paths = theme->get_search_path(); - for (std::vector::iterator it = paths.begin(); it != paths.end(); ++it) { - std::cerr << (*it) << "\n"; - } - std::cerr << theme->get_example_icon_name() << "\n"; - if (theme->has_icon("table-center")) { - std::cerr << "Found icon\n"; - Glib::RefPtr pbuf = theme->load_icon("table-center", 64, Gtk::ICON_LOOKUP_USE_BUILTIN); - image = Gtk::manage(new Gtk::Image(pbuf)); + Glib::ustring iconname = getGTKThemeIcon (func); + if (iconname != "") { + if (theme->has_icon(iconname)) { + Glib::RefPtr pbuf = theme->load_icon(iconname, iconwidth, Gtk::ICON_LOOKUP_FORCE_SVG); + if (pbuf) { + image = Gtk::manage(new Gtk::Image(pbuf)); + } } - }*/ + } } return image;