diff options
author | Vincent Sanders <vince@kyllikki.org> | 2016-03-09 11:37:09 +0000 |
---|---|---|
committer | Vincent Sanders <vince@kyllikki.org> | 2016-03-09 11:37:09 +0000 |
commit | 571af764a5df6bfd4c036c1b0e09dcca090bcc11 (patch) | |
tree | 1efd2c2f5c34a443e4705da283f51e300a6d9f42 /gtk/toolbar.c | |
parent | 8ee04cf68fadb48b877afbe775c13a8a1938f47a (diff) | |
download | netsurf-571af764a5df6bfd4c036c1b0e09dcca090bcc11.tar.gz netsurf-571af764a5df6bfd4c036c1b0e09dcca090bcc11.tar.bz2 |
completely remove remaining GTK theme code
Removes the theme code from GTK by moving the small remaining parts to
being implementation details within the toolbar implementation.
Diffstat (limited to 'gtk/toolbar.c')
-rw-r--r-- | gtk/toolbar.c | 235 |
1 files changed, 234 insertions, 1 deletions
diff --git a/gtk/toolbar.c b/gtk/toolbar.c index d37d98985..f5aa7fd3f 100644 --- a/gtk/toolbar.c +++ b/gtk/toolbar.c @@ -29,7 +29,6 @@ #include "gtk/gui.h" #include "gtk/scaffolding.h" #include "gtk/search.h" -#include "gtk/theme.h" #include "gtk/throbber.h" #include "gtk/window.h" #include "gtk/compat.h" @@ -69,6 +68,240 @@ possible into the store */ static struct nsgtk_toolbar_custom_store store; static struct nsgtk_toolbar_custom_store *window = &store; + +enum image_sets { + IMAGE_SET_MAIN_MENU = 0, + IMAGE_SET_RCLICK_MENU, + IMAGE_SET_POPUP_MENU, + IMAGE_SET_BUTTONS, + IMAGE_SET_COUNT +}; + +typedef enum search_buttons { + SEARCH_BACK_BUTTON = 0, + SEARCH_FORWARD_BUTTON, + SEARCH_CLOSE_BUTTON, + SEARCH_BUTTONS_COUNT +} nsgtk_search_buttons; + +struct nsgtk_theme { + GtkImage *image[PLACEHOLDER_BUTTON]; + GtkImage *searchimage[SEARCH_BUTTONS_COUNT]; + /* apng throbber element */ +}; + +/** + * get default image for buttons / menu items from gtk stock items. + * + * \param tbbutton button reference + * \param iconsize The size of icons to select. + * \return default images. + */ +static GtkImage * +nsgtk_theme_image_default(nsgtk_toolbar_button tbbutton, GtkIconSize iconsize) +{ + GtkImage *image; /* The GTK image to return */ + + switch(tbbutton) { + +#define BUTTON_IMAGE(p, q) \ + case p##_BUTTON: \ + image = GTK_IMAGE(nsgtk_image_new_from_stock(q, iconsize)); \ + break + + BUTTON_IMAGE(BACK, NSGTK_STOCK_GO_BACK); + BUTTON_IMAGE(FORWARD, NSGTK_STOCK_GO_FORWARD); + BUTTON_IMAGE(STOP, NSGTK_STOCK_STOP); + BUTTON_IMAGE(RELOAD, NSGTK_STOCK_REFRESH); + BUTTON_IMAGE(HOME, NSGTK_STOCK_HOME); + BUTTON_IMAGE(NEWWINDOW, "gtk-new"); + BUTTON_IMAGE(NEWTAB, "gtk-new"); + BUTTON_IMAGE(OPENFILE, NSGTK_STOCK_OPEN); + BUTTON_IMAGE(CLOSETAB, NSGTK_STOCK_CLOSE); + BUTTON_IMAGE(CLOSEWINDOW, NSGTK_STOCK_CLOSE); + BUTTON_IMAGE(SAVEPAGE, NSGTK_STOCK_SAVE_AS); + BUTTON_IMAGE(PRINTPREVIEW, "gtk-print-preview"); + BUTTON_IMAGE(PRINT, "gtk-print"); + BUTTON_IMAGE(QUIT, "gtk-quit"); + BUTTON_IMAGE(CUT, "gtk-cut"); + BUTTON_IMAGE(COPY, "gtk-copy"); + BUTTON_IMAGE(PASTE, "gtk-paste"); + BUTTON_IMAGE(DELETE, "gtk-delete"); + BUTTON_IMAGE(SELECTALL, "gtk-select-all"); + BUTTON_IMAGE(FIND, NSGTK_STOCK_FIND); + BUTTON_IMAGE(PREFERENCES, "gtk-preferences"); + BUTTON_IMAGE(ZOOMPLUS, "gtk-zoom-in"); + BUTTON_IMAGE(ZOOMMINUS, "gtk-zoom-out"); + BUTTON_IMAGE(ZOOMNORMAL, "gtk-zoom-100"); + BUTTON_IMAGE(FULLSCREEN, "gtk-fullscreen"); + BUTTON_IMAGE(VIEWSOURCE, "gtk-index"); + BUTTON_IMAGE(CONTENTS, "gtk-help"); + BUTTON_IMAGE(ABOUT, "gtk-about"); +#undef BUTTON_IMAGE + + case HISTORY_BUTTON: + image = GTK_IMAGE(gtk_image_new_from_pixbuf(arrow_down_pixbuf)); + break; + + default: + image = GTK_IMAGE(nsgtk_image_new_from_stock("gtk-missing-image", + iconsize)); + break; + + } + return image; + +} + +/** + * Get default image for search buttons / menu items from gtk stock items + * + * \param tbbutton search button reference + * \param iconsize The size of icons to select. + * \return default search image. + */ + +static GtkImage * +nsgtk_theme_searchimage_default(nsgtk_search_buttons tbbutton, + GtkIconSize iconsize) +{ + switch (tbbutton) { + + case (SEARCH_BACK_BUTTON): + return GTK_IMAGE(nsgtk_image_new_from_stock(NSGTK_STOCK_GO_BACK, + iconsize)); + case (SEARCH_FORWARD_BUTTON): + return GTK_IMAGE(nsgtk_image_new_from_stock(NSGTK_STOCK_GO_FORWARD, + iconsize)); + case (SEARCH_CLOSE_BUTTON): + return GTK_IMAGE(nsgtk_image_new_from_stock(NSGTK_STOCK_CLOSE, + iconsize)); + default: + return NULL; + } +} + +/** + * initialise a theme structure with gtk images + */ +static struct nsgtk_theme *nsgtk_theme_load(GtkIconSize iconsize) +{ + struct nsgtk_theme *theme = malloc(sizeof(struct nsgtk_theme)); + int btnloop; + + if (theme == NULL) { + warn_user("NoMemory", 0); + return NULL; + } + + for (btnloop = BACK_BUTTON; btnloop < PLACEHOLDER_BUTTON ; btnloop++) { + theme->image[btnloop] = nsgtk_theme_image_default(btnloop, iconsize); + } + + for (btnloop = SEARCH_BACK_BUTTON; btnloop < SEARCH_BUTTONS_COUNT; btnloop++) { + theme->searchimage[btnloop] = nsgtk_theme_searchimage_default(btnloop, iconsize); + } + return theme; +} + + + +/* exported function documented in gtk/toolbar.h */ +void nsgtk_theme_implement(struct nsgtk_scaffolding *g) +{ + struct nsgtk_theme *theme[IMAGE_SET_COUNT]; + int i; + struct nsgtk_button_connect *button; + struct gtk_search *search; + + theme[IMAGE_SET_MAIN_MENU] = nsgtk_theme_load(GTK_ICON_SIZE_MENU); + theme[IMAGE_SET_RCLICK_MENU] = nsgtk_theme_load(GTK_ICON_SIZE_MENU); + theme[IMAGE_SET_POPUP_MENU] = nsgtk_theme_load(GTK_ICON_SIZE_MENU); + theme[IMAGE_SET_BUTTONS] = nsgtk_theme_load(GTK_ICON_SIZE_LARGE_TOOLBAR); + + for (i = BACK_BUTTON; i < PLACEHOLDER_BUTTON; i++) { + if ((i == URL_BAR_ITEM) || (i == THROBBER_ITEM) || + (i == WEBSEARCH_ITEM)) + continue; + + button = nsgtk_scaffolding_button(g, i); + if (button == NULL) + continue; + + /* gtk_image_menu_item_set_image accepts NULL image */ + if ((button->main != NULL) && + (theme[IMAGE_SET_MAIN_MENU] != NULL)) { + nsgtk_image_menu_item_set_image( + GTK_WIDGET(button->main), + GTK_WIDGET(theme[IMAGE_SET_MAIN_MENU]->image[i])); + gtk_widget_show_all(GTK_WIDGET(button->main)); + } + if ((button->rclick != NULL) && + (theme[IMAGE_SET_RCLICK_MENU] != NULL)) { + nsgtk_image_menu_item_set_image(GTK_WIDGET(button->rclick), + GTK_WIDGET( + theme[IMAGE_SET_RCLICK_MENU]-> + image[i])); + gtk_widget_show_all(GTK_WIDGET(button->rclick)); + } + if ((button->popup != NULL) && + (theme[IMAGE_SET_POPUP_MENU] != NULL)) { + nsgtk_image_menu_item_set_image(GTK_WIDGET(button->popup), + GTK_WIDGET( + theme[IMAGE_SET_POPUP_MENU]-> + image[i])); + gtk_widget_show_all(GTK_WIDGET(button->popup)); + } + if ((button->location != -1) && (button->button != NULL) && + (theme[IMAGE_SET_BUTTONS] != NULL)) { + gtk_tool_button_set_icon_widget( + GTK_TOOL_BUTTON(button->button), + GTK_WIDGET( + theme[IMAGE_SET_BUTTONS]-> + image[i])); + gtk_widget_show_all(GTK_WIDGET(button->button)); + } + } + + /* set search bar images */ + search = nsgtk_scaffolding_search(g); + if ((search != NULL) && (theme[IMAGE_SET_MAIN_MENU] != NULL)) { + /* gtk_tool_button_set_icon_widget accepts NULL image */ + if (search->buttons[SEARCH_BACK_BUTTON] != NULL) { + gtk_tool_button_set_icon_widget( + search->buttons[SEARCH_BACK_BUTTON], + GTK_WIDGET(theme[IMAGE_SET_MAIN_MENU]-> + searchimage[SEARCH_BACK_BUTTON])); + gtk_widget_show_all(GTK_WIDGET( + search->buttons[SEARCH_BACK_BUTTON])); + } + if (search->buttons[SEARCH_FORWARD_BUTTON] != NULL) { + gtk_tool_button_set_icon_widget( + search->buttons[SEARCH_FORWARD_BUTTON], + GTK_WIDGET(theme[IMAGE_SET_MAIN_MENU]-> + searchimage[SEARCH_FORWARD_BUTTON])); + gtk_widget_show_all(GTK_WIDGET( + search->buttons[ + SEARCH_FORWARD_BUTTON])); + } + if (search->buttons[SEARCH_CLOSE_BUTTON] != NULL) { + gtk_tool_button_set_icon_widget( + search->buttons[SEARCH_CLOSE_BUTTON], + GTK_WIDGET(theme[IMAGE_SET_MAIN_MENU]-> + searchimage[SEARCH_CLOSE_BUTTON])); + gtk_widget_show_all(GTK_WIDGET( + search->buttons[SEARCH_CLOSE_BUTTON])); + } + } + + for (i = 0; i < IMAGE_SET_COUNT; i++) { + if (theme[i] != NULL) { + free(theme[i]); + } + } +} + + /** * callback function to iterate toolbar's widgets */ |