[gnumeric] GnmItemBar: fix colouring problem.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] GnmItemBar: fix colouring problem.
- Date: Fri, 11 Apr 2014 14:46:05 +0000 (UTC)
commit ae2ed4213baaf2c99127f491ae48a90db8063d69
Author: Morten Welinder <terra gnome org>
Date: Fri Apr 11 10:45:30 2014 -0400
GnmItemBar: fix colouring problem.
ChangeLog | 7 ++++++
NEWS | 1 +
src/item-bar.c | 57 +++++++++++++++++++++++++++++++++++--------------------
3 files changed, 44 insertions(+), 21 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index bace495..c9cb746 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2014-04-11 Morten Welinder <terra gnome org>
+
+ * src/item-bar.c: Get colours when we draw; only get sizing
+ relevant information at odd times, in particular when parent
+ widgets may be insensitive, such as during a load-onto-pristine.
+ Fixes #728007.
+
2014-04-10 Morten Welinder <terra gnome org>
* src/item-bar.c (ib_reload_style): Add debug code.
diff --git a/NEWS b/NEWS
index 7b967f5..1a280de 100644
--- a/NEWS
+++ b/NEWS
@@ -14,6 +14,7 @@ Morten:
* Attempt a workaround for Ubuntu scroll bars.
* Fix odf parse problems.
* Fix array editing.
+ * Fix column/row header colouring problem. [#728007]
--------------------------------------------------------------------------
Gnumeric 1.12.13
diff --git a/src/item-bar.c b/src/item-bar.c
index 8e549ce..47e7054 100644
--- a/src/item-bar.c
+++ b/src/item-bar.c
@@ -60,6 +60,9 @@ struct _GnmItemBar {
PangoFont *selection_fonts[3];
int selection_font_ascents[3];
PangoRectangle selection_logical_sizes[3];
+
+ GdkRGBA grouping_color;
+
GtkBorder padding;
};
@@ -104,7 +107,25 @@ static const GtkStateFlags selection_type_flags[3] = {
static void
-ib_reload_style (GnmItemBar *ib)
+ib_reload_color_style (GnmItemBar *ib)
+{
+ GocItem *item = GOC_ITEM (ib);
+ GtkStyleContext *context = goc_item_get_style_context (item);
+ unsigned ui;
+
+ gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL,
+ &ib->grouping_color);
+ ib->grouping_color.red = 1;
+
+ for (ui = 0; ui < G_N_ELEMENTS (selection_type_flags); ui++) {
+ GtkStateFlags state = selection_type_flags[ui];
+ gtk_style_context_get_color
+ (context, state, &ib->selection_colors[ui]);
+ }
+}
+
+static void
+ib_reload_sizing_style (GnmItemBar *ib)
{
GocItem *item = GOC_ITEM (ib);
SheetControlGUI * const scg = ib->pane->simple.scg;
@@ -129,9 +150,6 @@ ib_reload_style (GnmItemBar *ib)
gtk_style_context_set_state (context, state);
- gtk_style_context_get_color
- (context, state, &ib->selection_colors[ui]);
-
gtk_style_context_get (context, state, "font", &desc, NULL);
pango_font_description_set_size (desc,
zoom_factor * pango_font_description_get_size (desc));
@@ -164,16 +182,6 @@ ib_reload_style (GnmItemBar *ib)
&ib->selection_logical_sizes[ui]);
}
- if (sheet->index_in_wb == 0 && gnm_debug_flag ("item-bar-style")) {
- if (ib->selection_colors[0].red == 1 &&
- ib->selection_colors[0].green == 1 &&
- ib->selection_colors[0].blue == 1) {
- g_printerr ("White item bar text\n");
- } else {
- g_printerr ("Non-white item bar text\n");
- }
- }
-
gtk_style_context_get_padding (context, GTK_STATE_FLAG_NORMAL,
&ib->padding);
@@ -210,7 +218,7 @@ gnm_item_bar_calc_size (GnmItemBar *ib)
unsigned ui;
ib_dispose_fonts (ib);
- ib_reload_style (ib);
+ ib_reload_sizing_style (ib);
ib->cell_height = 0;
ib->cell_width = 0;
@@ -336,7 +344,14 @@ ib_draw_cell (GnmItemBar const * const ib, cairo_t *cr,
rect->width - 2, rect->height - 2);
cairo_clip (cr);
- gdk_cairo_set_source_rgba (cr, &ib->selection_colors[type]);
+ if (1) {
+ GdkRGBA c;
+
+ gtk_style_context_get_color (ctxt, selection_type_flags[type], &c);
+ gdk_cairo_set_source_rgba (cr, &c);
+ } else {
+ gdk_cairo_set_source_rgba (cr, &ib->selection_colors[type]);
+ }
cairo_translate (cr,
rect->x + ib->padding.left +
@@ -363,7 +378,7 @@ item_bar_draw_region (GocItem const *item, cairo_t *cr,
{
double scale = item->canvas->pixels_per_unit;
int x0, x1, y0, y1;
- GnmItemBar const *ib = GNM_ITEM_BAR (item);
+ GnmItemBar *ib = GNM_ITEM_BAR (item);
GnmPane const *pane = ib->pane;
SheetControlGUI const *scg = pane->simple.scg;
Sheet const *sheet = scg_sheet (scg);
@@ -380,14 +395,14 @@ item_bar_draw_region (GocItem const *item, cairo_t *cr,
gboolean const rtl = sheet->text_is_rtl != FALSE;
int shadow;
int first_line_offset = 1;
- GdkRGBA color;
GtkStyleContext *ctxt = goc_item_get_style_context (item);
gtk_style_context_save (ctxt);
- gtk_style_context_get_color (ctxt, GTK_STATE_FLAG_NORMAL, &color);
goc_canvas_c2w (item->canvas, x_0, y_0, &x0, &y0);
goc_canvas_c2w (item->canvas, x_1, y_1, &x1, &y1);
+ ib_reload_color_style (ib);
+
if (ib->is_col_header) {
int const inc = gnm_item_bar_group_size (ib, sheet->cols.max_outline_level);
int const base_pos = .2 * inc;
@@ -453,7 +468,7 @@ item_bar_draw_region (GocItem const *item, cairo_t *cr,
cairo_set_line_width (cr, 2.0);
cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);
- gdk_cairo_set_source_rgba (cr, &color);
+ gdk_cairo_set_source_rgba (cr, &ib->grouping_color);
if (!draw_right) {
next = sheet_col_get_info (sheet, col + 1);
prev_level = next->outline_level;
@@ -612,7 +627,7 @@ item_bar_draw_region (GocItem const *item, cairo_t *cr,
cairo_set_line_width (cr, 2.0);
cairo_set_line_cap (cr, CAIRO_LINE_CAP_BUTT);
cairo_set_line_join (cr, CAIRO_LINE_JOIN_MITER);
- gdk_cairo_set_source_rgba (cr, &color);
+ gdk_cairo_set_source_rgba (cr, &ib->grouping_color);
if (!draw_below) {
next = sheet_row_get_info (sheet, row + 1);
points[0].y = top;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]