[gtk+] Make GtkTextView use GtkStyleContext
- From: Carlos Garnacho <carlosg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] Make GtkTextView use GtkStyleContext
- Date: Wed, 15 Dec 2010 02:18:54 +0000 (UTC)
commit 66800aa212b3b086996d5a22f4eca151b679f309
Author: Carlos Garnacho <carlosg gnome org>
Date: Tue Dec 14 20:26:52 2010 +0100
Make GtkTextView use GtkStyleContext
GtkTextAppearance still uses GdkColors, even though it could
switch to GdkRGBA with little hassle as it seems sheldomly used
out there.
gtk/gtkstylecontext.h | 7 +++
gtk/gtktextview.c | 139 +++++++++++++++++++++++++++++--------------------
2 files changed, 90 insertions(+), 56 deletions(-)
---
diff --git a/gtk/gtkstylecontext.h b/gtk/gtkstylecontext.h
index 5ea5d2b..80d5abc 100644
--- a/gtk/gtkstylecontext.h
+++ b/gtk/gtkstylecontext.h
@@ -331,6 +331,13 @@ struct _GtkStyleContextClass
#define GTK_STYLE_CLASS_NOTEBOOK "notebook"
/**
+ * GTK_STYLE_CLASS_VIEW:
+ *
+ * A widget class defining a view, such as iconviews or treeviews
+ */
+#define GTK_STYLE_CLASS_VIEW "view"
+
+/**
* GTK_STYLE_CLASS_INFO:
*
* A widget class for an area displaying an informational message,
diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c
index 0a49786..1696c70 100644
--- a/gtk/gtktextview.c
+++ b/gtk/gtktextview.c
@@ -304,14 +304,13 @@ static void gtk_text_view_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static void gtk_text_view_realize (GtkWidget *widget);
static void gtk_text_view_unrealize (GtkWidget *widget);
-static void gtk_text_view_style_set (GtkWidget *widget,
- GtkStyle *previous_style);
+static void gtk_text_view_style_updated (GtkWidget *widget);
static void gtk_text_view_direction_changed (GtkWidget *widget,
GtkTextDirection previous_direction);
static void gtk_text_view_grab_notify (GtkWidget *widget,
gboolean was_grabbed);
-static void gtk_text_view_state_changed (GtkWidget *widget,
- GtkStateType previous_state);
+static void gtk_text_view_state_flags_changed (GtkWidget *widget,
+ GtkStateFlags previous_state);
static gint gtk_text_view_event (GtkWidget *widget,
GdkEvent *event);
@@ -409,8 +408,7 @@ static void gtk_text_view_get_first_para_iter (GtkTextView *text_vi
GtkTextIter *iter);
static void gtk_text_view_update_layout_width (GtkTextView *text_view);
static void gtk_text_view_set_attributes_from_style (GtkTextView *text_view,
- GtkTextAttributes *values,
- GtkStyle *style);
+ GtkTextAttributes *values);
static void gtk_text_view_ensure_layout (GtkTextView *text_view);
static void gtk_text_view_destroy_layout (GtkTextView *text_view);
static void gtk_text_view_check_keymap_direction (GtkTextView *text_view);
@@ -603,10 +601,10 @@ gtk_text_view_class_init (GtkTextViewClass *klass)
widget_class->destroy = gtk_text_view_destroy;
widget_class->realize = gtk_text_view_realize;
widget_class->unrealize = gtk_text_view_unrealize;
- widget_class->style_set = gtk_text_view_style_set;
+ widget_class->style_updated = gtk_text_view_style_updated;
widget_class->direction_changed = gtk_text_view_direction_changed;
widget_class->grab_notify = gtk_text_view_grab_notify;
- widget_class->state_changed = gtk_text_view_state_changed;
+ widget_class->state_flags_changed = gtk_text_view_state_flags_changed;
widget_class->get_preferred_width = gtk_text_view_get_preferred_width;
widget_class->get_preferred_height = gtk_text_view_get_preferred_height;
widget_class->size_allocate = gtk_text_view_size_allocate;
@@ -3949,11 +3947,14 @@ gtk_text_view_realize (GtkWidget *widget)
GtkAllocation allocation;
GtkTextView *text_view;
GtkTextViewPrivate *priv;
+ GtkStyleContext *context;
+ GtkStateFlags state;
GdkWindow *window;
GdkWindowAttr attributes;
gint attributes_mask;
GSList *tmp_list;
-
+ GdkRGBA color;
+
text_view = GTK_TEXT_VIEW (widget);
priv = text_view->priv;
@@ -3977,11 +3978,11 @@ gtk_text_view_realize (GtkWidget *widget)
gtk_widget_set_window (widget, window);
gdk_window_set_user_data (window, widget);
- /* must come before text_window_realize calls */
- gtk_widget_style_attach (widget);
+ context = gtk_widget_get_style_context (widget);
+ state = gtk_widget_get_state_flags (widget);
- gdk_window_set_background (window,
- >k_widget_get_style (widget)->bg[gtk_widget_get_state (widget)]);
+ gtk_style_context_get_background_color (context, state, &color);
+ gdk_window_set_background_rgba (window, &color);
text_window_realize (priv->text_window, widget);
@@ -4066,42 +4067,47 @@ gtk_text_view_unrealize (GtkWidget *widget)
static void
gtk_text_view_set_background (GtkTextView *text_view)
{
- GtkStyle *style;
- GtkStateType state;
+ GtkStyleContext *context;
+ GtkStateFlags state;
GtkWidget *widget;
GtkTextViewPrivate *priv;
+ GdkRGBA color;
widget = GTK_WIDGET (text_view);
priv = text_view->priv;
- style = gtk_widget_get_style (widget);
- state = gtk_widget_get_state (widget);
+ context = gtk_widget_get_style_context (widget);
+ state = gtk_widget_get_state_flags (widget);
+
+ /* Set bin window background */
+ gtk_style_context_save (context);
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_VIEW);
+
+ gtk_style_context_get_background_color (context, state, &color);
+ gdk_window_set_background_rgba (priv->text_window->bin_window, &color);
- gdk_window_set_background (gtk_widget_get_window (widget),
- &style->bg[state]);
+ gtk_style_context_restore (context);
- gdk_window_set_background (priv->text_window->bin_window,
- &style->base[state]);
+ /* Set lateral panes background */
+ gtk_style_context_get_background_color (context, state, &color);
+
+ gdk_window_set_background_rgba (gtk_widget_get_window (widget), &color);
if (priv->left_window)
- gdk_window_set_background (priv->left_window->bin_window,
- &style->bg[state]);
+ gdk_window_set_background_rgba (priv->left_window->bin_window, &color);
+
if (priv->right_window)
- gdk_window_set_background (priv->right_window->bin_window,
- &style->bg[state]);
+ gdk_window_set_background_rgba (priv->right_window->bin_window, &color);
if (priv->top_window)
- gdk_window_set_background (priv->top_window->bin_window,
- &style->bg[state]);
+ gdk_window_set_background_rgba (priv->top_window->bin_window, &color);
if (priv->bottom_window)
- gdk_window_set_background (priv->bottom_window->bin_window,
- &style->bg[state]);
+ gdk_window_set_background_rgba (priv->bottom_window->bin_window, &color);
}
static void
-gtk_text_view_style_set (GtkWidget *widget,
- GtkStyle *previous_style)
+gtk_text_view_style_updated (GtkWidget *widget)
{
GtkTextView *text_view;
GtkTextViewPrivate *priv;
@@ -4115,11 +4121,10 @@ gtk_text_view_style_set (GtkWidget *widget,
gtk_text_view_set_background (text_view);
}
- if (priv->layout && previous_style)
+ if (priv->layout && priv->layout->default_style)
{
gtk_text_view_set_attributes_from_style (text_view,
- priv->layout->default_style,
- gtk_widget_get_style (widget));
+ priv->layout->default_style);
ltr_context = gtk_widget_create_pango_context (widget);
pango_context_set_base_dir (ltr_context, PANGO_DIRECTION_LTR);
@@ -4148,8 +4153,8 @@ gtk_text_view_direction_changed (GtkWidget *widget,
}
static void
-gtk_text_view_state_changed (GtkWidget *widget,
- GtkStateType previous_state)
+gtk_text_view_state_flags_changed (GtkWidget *widget,
+ GtkStateFlags previous_state)
{
GtkTextView *text_view = GTK_TEXT_VIEW (widget);
GdkCursor *cursor;
@@ -4870,13 +4875,14 @@ gtk_text_view_draw_focus (GtkWidget *widget,
NULL);
if (gtk_widget_has_focus (widget) && !interior_focus)
- {
- gtk_paint_focus (gtk_widget_get_style (widget), cr,
- gtk_widget_get_state (widget),
- widget, "textview",
- 0, 0,
- gtk_widget_get_allocated_width (widget),
- gtk_widget_get_allocated_height (widget));
+ {
+ GtkStyleContext *context;
+
+ context = gtk_widget_get_style_context (widget);
+
+ gtk_render_focus (context, cr, 0, 0,
+ gtk_widget_get_allocated_width (widget),
+ gtk_widget_get_allocated_height (widget));
}
}
@@ -6535,16 +6541,30 @@ gtk_text_view_end_selection_drag (GtkTextView *text_view)
static void
gtk_text_view_set_attributes_from_style (GtkTextView *text_view,
- GtkTextAttributes *values,
- GtkStyle *style)
+ GtkTextAttributes *values)
{
- values->appearance.bg_color = style->base[GTK_STATE_NORMAL];
- values->appearance.fg_color = style->text[GTK_STATE_NORMAL];
+ GtkStyleContext *context;
+ GdkRGBA bg_color, fg_color;
+ GtkStateFlags state;
+
+ context = gtk_widget_get_style_context (GTK_WIDGET (text_view));
+ state = gtk_widget_get_state_flags (GTK_WIDGET (text_view));
+
+ gtk_style_context_get_background_color (context, state, &bg_color);
+ gtk_style_context_get_color (context, state, &fg_color);
+
+ values->appearance.bg_color.red = CLAMP (bg_color.red * 65535. + 0.5, 0, 65535);
+ values->appearance.bg_color.green = CLAMP (bg_color.green * 65535. + 0.5, 0, 65535);
+ values->appearance.bg_color.blue = CLAMP (bg_color.blue * 65535. + 0.5, 0, 65535);
+
+ values->appearance.fg_color.red = CLAMP (fg_color.red * 65535. + 0.5, 0, 65535);
+ values->appearance.fg_color.green = CLAMP (fg_color.green * 65535. + 0.5, 0, 65535);
+ values->appearance.fg_color.blue = CLAMP (fg_color.blue * 65535. + 0.5, 0, 65535);
if (values->font)
pango_font_description_free (values->font);
- values->font = pango_font_description_copy (style->font_desc);
+ values->font = pango_font_description_copy (gtk_style_context_get_font (context, state));
}
static void
@@ -6638,10 +6658,7 @@ gtk_text_view_ensure_layout (GtkTextView *text_view)
style = gtk_text_attributes_new ();
- gtk_widget_ensure_style (widget);
- gtk_text_view_set_attributes_from_style (text_view,
- style,
- gtk_widget_get_style (widget));
+ gtk_text_view_set_attributes_from_style (text_view, style);
style->pixels_above_lines = priv->pixels_above_lines;
style->pixels_below_lines = priv->pixels_below_lines;
@@ -8352,10 +8369,13 @@ static void
text_window_realize (GtkTextWindow *win,
GtkWidget *widget)
{
+ GtkStyleContext *context;
+ GtkStateFlags state;
GdkWindow *window;
GdkWindowAttr attributes;
gint attributes_mask;
GdkCursor *cursor;
+ GdkRGBA color;
attributes.window_type = GDK_WINDOW_CHILD;
attributes.x = win->allocation.x;
@@ -8397,6 +8417,9 @@ text_window_realize (GtkTextWindow *win,
gdk_window_show (win->bin_window);
gdk_window_set_user_data (win->bin_window, win->widget);
+ context = gtk_widget_get_style_context (widget);
+ state = gtk_widget_get_state_flags (widget);
+
if (win->type == GTK_TEXT_WINDOW_TEXT)
{
if (gtk_widget_is_sensitive (widget))
@@ -8411,14 +8434,18 @@ text_window_realize (GtkTextWindow *win,
gtk_im_context_set_client_window (GTK_TEXT_VIEW (widget)->priv->im_context,
win->window);
+ gtk_style_context_save (context);
+ gtk_style_context_add_class (context, GTK_STYLE_CLASS_VIEW);
+
+ gtk_style_context_get_background_color (context, state, &color);
+ gdk_window_set_background_rgba (win->bin_window, &color);
- gdk_window_set_background (win->bin_window,
- >k_widget_get_style (widget)->base[gtk_widget_get_state (widget)]);
+ gtk_style_context_restore (context);
}
else
{
- gdk_window_set_background (win->bin_window,
- >k_widget_get_style (widget)->bg[gtk_widget_get_state (widget)]);
+ gtk_style_context_get_background_color (context, state, &color);
+ gdk_window_set_background_rgba (win->bin_window, &color);
}
g_object_set_qdata (G_OBJECT (win->window),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]