summaryrefslogtreecommitdiff
path: root/src/gtkext/gtkviewpanel.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gtkext/gtkviewpanel.c')
-rw-r--r--src/gtkext/gtkviewpanel.c152
1 files changed, 104 insertions, 48 deletions
diff --git a/src/gtkext/gtkviewpanel.c b/src/gtkext/gtkviewpanel.c
index 4d5a57e..8672bb9 100644
--- a/src/gtkext/gtkviewpanel.c
+++ b/src/gtkext/gtkviewpanel.c
@@ -24,9 +24,15 @@
#include "gtkviewpanel.h"
+#include <math.h>
+
+
#include "gtkviewpanel-int.h"
+/* Amplitude de l'arrondi pour les coins */
+#define BORDER_CORNER_RADIUS 10.0
+
/* Procède à l'initialisation de l'afficheur générique. */
static void gtk_view_panel_class_init(GtkViewPanelClass *);
@@ -49,9 +55,6 @@ static void gtk_view_panel_realize(GtkWidget *);
/* S'adapte à la surface concédée par le composant parent. */
static void gtk_view_panel_size_allocate(GtkWidget *, GtkAllocation *);
-/* Met à jour l'affichage du composant d'affichage. */
-static gboolean gtk_view_panel_draw(GtkWidget *, cairo_t *);
-
/* Fournit la hauteur idéale pour le composant d'affichage. */
static void gtk_view_panel_get_preferred_height(GtkWidget *, gint *, gint *);
@@ -120,7 +123,6 @@ static void gtk_view_panel_class_init(GtkViewPanelClass *class)
widget_class->destroy = gtk_view_panel_destroy;
widget_class->realize = gtk_view_panel_realize;
widget_class->size_allocate = gtk_view_panel_size_allocate;
- widget_class->draw = gtk_view_panel_draw;
widget_class->get_preferred_height = gtk_view_panel_get_preferred_height;
widget_class->get_preferred_width = gtk_view_panel_get_preferred_width;
@@ -356,50 +358,6 @@ static void gtk_view_panel_size_allocate(GtkWidget *widget, GtkAllocation *alloc
/******************************************************************************
* *
-* Paramètres : widget = composant GTK à redessiner. *
-* cr = contexte graphique associé à l'événement. *
-* *
-* Description : Met à jour l'affichage du composant d'affichage. *
-* *
-* Retour : FALSE pour poursuivre la propagation de l'événement. *
-* *
-* Remarques : - *
-* *
-******************************************************************************/
-
-static gboolean gtk_view_panel_draw(GtkWidget *widget, cairo_t *cr)
-{
- GtkViewPanel *panel; /* Autre version du composant */
- GtkRequisition req; /* Taille allouée à l'élément */
- GtkStyleContext *context; /* Contexte du thème actuel */
-
- GTK_WIDGET_CLASS(gtk_view_panel_parent_class)->draw(widget, cr);
-
- panel = GTK_VIEW_PANEL(widget);
-
- if (panel->show_border)
- {
- gtk_widget_get_preferred_size(widget, NULL, &req);
-
- context = gtk_widget_get_style_context(widget);
-
- gtk_style_context_save(context);
-
- gtk_style_context_add_class(context, GTK_STYLE_CLASS_FRAME);
-
- gtk_render_frame(context, cr, 0, 0, req.width, req.height);
-
- gtk_style_context_restore(context);
-
- }
-
- return FALSE;
-
-}
-
-
-/******************************************************************************
-* *
* Paramètres : widget = composant GTK à examiner. *
* minimum = hauteur minimale à préciser ou NULL. [OUT] *
* natural = hauteur idéale à préciser ou NULL. [OUT] *
@@ -730,6 +688,104 @@ void gtk_view_panel_show_border(GtkViewPanel *panel, bool show)
/******************************************************************************
* *
+* Paramètres : panel = composant GTK à venir consulter. *
+* cr = contexte graphique associé à l'événement. *
+* offset = décallage éventuel à appliquer. *
+* *
+* Description : Définit un chemin décrivant la bordure autour du panneau. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void gtk_view_panel_define_border_path(GtkViewPanel *panel, cairo_t *cr, gint off_x, gint off_y)
+{
+ GtkRequisition req; /* Taille allouée à l'élément */
+ double degrees; /* Conversion en degrés */
+
+ gtk_widget_get_preferred_size(GTK_WIDGET(panel), NULL, &req);
+
+ degrees = M_PI / 180.0;
+
+ cairo_new_sub_path(cr);
+
+ cairo_arc(cr,
+ off_x + req.width - BORDER_CORNER_RADIUS - 0.5,
+ off_y + BORDER_CORNER_RADIUS + 0.5,
+ BORDER_CORNER_RADIUS, -90 * degrees, 0 * degrees);
+
+ cairo_arc(cr,
+ off_x + req.width - BORDER_CORNER_RADIUS - 0.5,
+ off_y + req.height - BORDER_CORNER_RADIUS - 0.5,
+ BORDER_CORNER_RADIUS, 0 * degrees, 90 * degrees);
+
+ cairo_arc(cr,
+ off_x + BORDER_CORNER_RADIUS + 0.5,
+ off_y + req.height - BORDER_CORNER_RADIUS - 0.5,
+ BORDER_CORNER_RADIUS, 90 * degrees, 180 * degrees);
+
+ cairo_arc(cr,
+ off_x + BORDER_CORNER_RADIUS + 0.5,
+ off_y + BORDER_CORNER_RADIUS + 0.5,
+ BORDER_CORNER_RADIUS, 180 * degrees, 270 * degrees);
+
+ cairo_close_path(cr);
+
+}
+
+
+/******************************************************************************
+* *
+* Paramètres : panel = composant GTK à venir consulter. *
+* cr = contexte graphique associé à l'événement. *
+* *
+* Description : Dessine si besoin est une bordure autour du composant. *
+* *
+* Retour : - *
+* *
+* Remarques : - *
+* *
+******************************************************************************/
+
+void gtk_view_panel_draw_border(GtkViewPanel *panel, cairo_t *cr)
+{
+ GtkWidget *widget; /* Autre version du composant */
+ GtkRequisition req; /* Taille allouée à l'élément */
+ GtkStyleContext *context; /* Contexte du thème actuel */
+ GdkRGBA color; /* Couleur de thème récupérée */
+
+ if (panel->show_border)
+ {
+ widget = GTK_WIDGET(panel);
+
+ gtk_widget_get_preferred_size(widget, NULL, &req);
+
+ context = gtk_widget_get_style_context(widget);
+
+ gtk_style_context_save(context);
+
+ gtk_style_context_add_class(context, GTK_STYLE_CLASS_FRAME);
+
+ gtk_style_context_get_border_color(context, GTK_STATE_FLAG_ACTIVE, &color);
+
+ cairo_set_source_rgba(cr, color.red, color.green, color.blue, color.alpha);
+
+ cairo_set_line_width(cr, 1.0);
+
+ gtk_view_panel_define_border_path(panel, cr, 0, 0);
+ cairo_stroke(cr);
+
+ gtk_style_context_restore(context);
+
+ }
+
+}
+
+
+/******************************************************************************
+* *
* Paramètres : panel = composant GTK à mettre à jour. *
* binary = binaire associé à intégrer. *
* view = aspect du binaire à présenter. *