diff options
Diffstat (limited to 'src/gtkext')
-rw-r--r-- | src/gtkext/Makefile.am | 3 | ||||
-rw-r--r-- | src/gtkext/gtkbinarystrip.c | 5 | ||||
-rw-r--r-- | src/gtkext/theme.c | 102 | ||||
-rw-r--r-- | src/gtkext/theme.h | 39 |
4 files changed, 147 insertions, 2 deletions
diff --git a/src/gtkext/Makefile.am b/src/gtkext/Makefile.am index 5c1dec4..c028f6b 100644 --- a/src/gtkext/Makefile.am +++ b/src/gtkext/Makefile.am @@ -14,7 +14,8 @@ libgtkext_la_SOURCES = \ gtksourceview.h gtksourceview.c \ gtkviewpanel-int.h \ gtkviewpanel.h gtkviewpanel.c \ - support.h support.c + support.h support.c \ + theme.h theme.c libgtkext_la_LIBADD = \ graph/libgtkextgraph.la diff --git a/src/gtkext/gtkbinarystrip.c b/src/gtkext/gtkbinarystrip.c index 2381fd6..4ed5cf9 100644 --- a/src/gtkext/gtkbinarystrip.c +++ b/src/gtkext/gtkbinarystrip.c @@ -311,6 +311,7 @@ static gboolean gtk_binary_strip_draw(GtkWidget *widget, cairo_t *cr) GExeFormat *format; /* Format du binaire */ GBinPortion *portions; /* Portions binaires à dessiner*/ GdkRectangle full; /* Taille totale de la surface */ + GtkStyleContext *context; /* Contexte du thème actuel */ GdkRGBA *color; /* Couleur du curseur */ strip = GTK_BINARY_STRIP(widget); @@ -328,7 +329,9 @@ static gboolean gtk_binary_strip_draw(GtkWidget *widget, cairo_t *cr) full.width = gtk_widget_get_allocated_width(widget); full.height = gtk_widget_get_allocated_height(widget) - 1; - g_binary_portion_draw(portions, cr, &full); + context = gtk_widget_get_style_context(widget); + + g_binary_portion_draw(portions, context, cr, &full); /* Dessin de la position */ diff --git a/src/gtkext/theme.c b/src/gtkext/theme.c new file mode 100644 index 0000000..493692a --- /dev/null +++ b/src/gtkext/theme.c @@ -0,0 +1,102 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * theme.c - prototypes pour l'ajout d'extensions au thème GTK + * + * Copyright (C) 2009-2012 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * OpenIDA is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * OpenIDA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include "theme.h" + + +#include <config.h> + + + +static const char *_themes_directories[] = { + + PACKAGE_SOURCE_DIR G_DIR_SEPARATOR_S "themes", + PACKAGE_DATA_DIR G_DIR_SEPARATOR_S "themes", + NULL + +}; + + + +/****************************************************************************** +* * +* Paramètres : - * +* * +* Description : Charge le thème GTK pour les composants spécifiques. * +* * +* Retour : true ou false selon le bilan de l'opération. * +* * +* Remarques : - * +* * +******************************************************************************/ + +bool load_extra_gtk_theme(void) +{ + GdkScreen *screen; /* Ecran(s) concerné(s) */ + GtkCssProvider *provider; /* Fournisseur par défaut */ + const char **iter_f; /* Boucle de parcours #1 */ + bool done; /* Traitement d'un fichier */ + const char **iter_d; /* Boucle de parcours #2 */ + gchar *filename; /* Chemin d'accès constitué */ + + static const char *css_files[] = { + "portions.css", + NULL + }; + + screen = gdk_screen_get_default(); + provider = gtk_css_provider_get_default(); + + done = true; + + for (iter_f = css_files; *iter_f != NULL; iter_f++) + { + done = false; + + for (iter_d = _themes_directories; *iter_d != NULL && !done; iter_d++) + { + filename = g_strdup_printf("%s%s%s", *iter_d, G_DIR_SEPARATOR_S, *iter_f); + + if (g_file_test(filename, G_FILE_TEST_EXISTS)) + { + done = gtk_css_provider_load_from_path(provider, filename, NULL); + + if (done) + gtk_style_context_add_provider_for_screen(screen, GTK_STYLE_PROVIDER(provider), + GTK_STYLE_PROVIDER_PRIORITY_USER); + + } + + g_free(filename); + + } + + if (!done) + break; + + } + + return done; + +} diff --git a/src/gtkext/theme.h b/src/gtkext/theme.h new file mode 100644 index 0000000..78650cb --- /dev/null +++ b/src/gtkext/theme.h @@ -0,0 +1,39 @@ + +/* Chrysalide - Outil d'analyse de fichiers binaires + * theme.h - prototypes pour l'ajout d'extensions au thème GTK + * + * Copyright (C) 2014 Cyrille Bagard + * + * This file is part of Chrysalide. + * + * OpenIDA is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * OpenIDA is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#ifndef _GTKEXT_THEME_H +#define _GTKEXT_THEME_H + + +#include <stdbool.h> +#include <gtk/gtk.h> + + + +/* Charge le thème GTK pour les composants spécifiques. */ +bool load_extra_gtk_theme(void); + + + +#endif /* _GTKEXT_THEME_H */ |