[gimp] app: make GimpFgBgEditor and GimpFgBgView honor border and padding
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: make GimpFgBgEditor and GimpFgBgView honor border and padding
- Date: Sun, 24 Jun 2018 12:02:40 +0000 (UTC)
commit 72bc216f4a289ed4d96f5f7177127bcf756820f8
Author: Michael Natterer <mitch gimp org>
Date: Sun Jun 24 13:56:08 2018 +0200
app: make GimpFgBgEditor and GimpFgBgView honor border and padding
and give them CSS names. Set an appropriate padding for GimpFgBgView
in notebook tabs in the theme CSS.
app/widgets/gimpfgbgeditor.c | 173 ++++++++++++++++++++++++++-----------------
app/widgets/gimpfgbgview.c | 57 +++++++-------
themes/System/gimp.css | 4 +
3 files changed, 136 insertions(+), 98 deletions(-)
---
diff --git a/app/widgets/gimpfgbgeditor.c b/app/widgets/gimpfgbgeditor.c
index 8b416d9e13..e2846ab307 100644
--- a/app/widgets/gimpfgbgeditor.c
+++ b/app/widgets/gimpfgbgeditor.c
@@ -146,6 +146,8 @@ gimp_fg_bg_editor_class_init (GimpFgBgEditorClass *klass)
GIMP_TYPE_ACTIVE_COLOR,
GIMP_ACTIVE_COLOR_FOREGROUND,
GIMP_PARAM_READWRITE));
+
+ gtk_widget_class_set_css_name (widget_class, "GimpFgBgEditor");
}
static void
@@ -153,6 +155,7 @@ gimp_fg_bg_editor_init (GimpFgBgEditor *editor)
{
editor->active_color = GIMP_ACTIVE_COLOR_FOREGROUND;
+ gtk_widget_set_can_focus (GTK_WIDGET (editor), FALSE);
gtk_event_box_set_visible_window (GTK_EVENT_BOX (editor), FALSE);
gtk_widget_add_events (GTK_WIDGET (editor),
@@ -244,25 +247,29 @@ gimp_fg_bg_editor_draw (GtkWidget *widget,
{
GimpFgBgEditor *editor = GIMP_FG_BG_EDITOR (widget);
GtkStyleContext *style = gtk_widget_get_style_context (widget);
- GtkAllocation allocation;
GtkBorder border;
+ GtkBorder padding;
+ GdkRectangle rect;
gint width, height;
gint default_w, default_h;
gint swap_w, swap_h;
- gint rect_w, rect_h;
GimpRGB color;
GimpRGB transformed_color;
- gtk_widget_get_allocation (widget, &allocation);
-
gtk_style_context_save (style);
- gtk_style_context_add_class (style, GTK_STYLE_CLASS_BUTTON);
- gtk_style_context_get_border (style, gtk_widget_get_state_flags (widget),
+ width = gtk_widget_get_allocated_width (widget);
+ height = gtk_widget_get_allocated_height (widget);
+
+ gtk_style_context_get_border (style, gtk_style_context_get_state (style),
&border);
+ gtk_style_context_get_padding (style, gtk_style_context_get_state (style),
+ &padding);
- width = allocation.width;
- height = allocation.height;
+ border.left += padding.left;
+ border.right += padding.right;
+ border.top += padding.top;
+ border.bottom += padding.bottom;
/* draw the default colors pixbuf */
if (! editor->default_icon)
@@ -275,7 +282,8 @@ gimp_fg_bg_editor_draw (GtkWidget *widget,
if (default_w < width / 2 && default_h < height / 2)
{
gdk_cairo_set_source_pixbuf (cr, editor->default_icon,
- 0, height - default_h);
+ border.left,
+ height - border.bottom - default_h);
cairo_paint (cr);
}
else
@@ -294,7 +302,8 @@ gimp_fg_bg_editor_draw (GtkWidget *widget,
if (swap_w < width / 2 && swap_h < height / 2)
{
gdk_cairo_set_source_pixbuf (cr, editor->swap_icon,
- width - swap_w, 0);
+ width - border.right - swap_w,
+ border.top);
cairo_paint (cr);
}
else
@@ -302,15 +311,15 @@ gimp_fg_bg_editor_draw (GtkWidget *widget,
swap_w = swap_h = 0;
}
- rect_h = height - MAX (default_h, swap_h) - 2;
- rect_w = width - MAX (default_w, swap_w) - 4;
+ rect.width = width - MAX (default_w, swap_w) - 4 - border.top - border.bottom;
+ rect.height = height - MAX (default_h, swap_h) - 2 - border.left - border.right;
- if (rect_h > (height * 3 / 4))
- rect_w = MAX (rect_w - (rect_h - ((height * 3 / 4))),
- width * 2 / 3);
+ if (rect.height > (height * 3 / 4))
+ rect.width = MAX (rect.width - (rect.height - ((height * 3 / 4))),
+ width * 2 / 3);
- editor->rect_width = rect_w;
- editor->rect_height = rect_h;
+ editor->rect_width = rect.width;
+ editor->rect_height = rect.height;
if (! editor->transform)
@@ -318,6 +327,9 @@ gimp_fg_bg_editor_draw (GtkWidget *widget,
/* draw the background area */
+ rect.x = width - rect.width - border.right;
+ rect.y = height - rect.height - border.bottom;
+
if (editor->context)
{
gimp_context_get_background (editor->context, &color);
@@ -334,11 +346,7 @@ gimp_fg_bg_editor_draw (GtkWidget *widget,
gimp_cairo_set_source_rgb (cr, &transformed_color);
- cairo_rectangle (cr,
- width - rect_w + border.left,
- height - rect_h + border.top,
- rect_w - (border.left + border.right),
- rect_h - (border.top + border.bottom));
+ cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height);
cairo_fill (cr);
if (editor->color_config &&
@@ -347,12 +355,14 @@ gimp_fg_bg_editor_draw (GtkWidget *widget,
color.b < 0.0 || color.b > 1.0))
{
GimpRGB color;
- gint side = MIN (rect_w, rect_h) * 2 / 3;
+ gint side = MIN (rect.width, rect.height) * 2 / 3;
+ gint corner_x = rect.x + rect.width;
+ gint corner_y = rect.y + rect.height;
- cairo_move_to (cr, width, height);
- cairo_line_to (cr, width - side, height);
- cairo_line_to (cr, width, height - side);
- cairo_line_to (cr, width, height);
+ cairo_move_to (cr, corner_x, corner_y);
+ cairo_line_to (cr, corner_x - side, corner_y);
+ cairo_line_to (cr, corner_x, corner_y - side);
+ cairo_close_path (cr);
gimp_color_config_get_out_of_gamut_color (editor->color_config,
&color);
@@ -366,14 +376,16 @@ gimp_fg_bg_editor_draw (GtkWidget *widget,
GIMP_ACTIVE_COLOR_FOREGROUND ?
0 : GTK_STATE_FLAG_ACTIVE);
- gtk_render_frame (style, cr,
- width - rect_w,
- height - rect_h,
- rect_w, rect_h);
+ gtk_style_context_add_class (style, GTK_STYLE_CLASS_FRAME);
+
+ gtk_render_frame (style, cr, rect.x, rect.y, rect.width, rect.height);
/* draw the foreground area */
+ rect.x = border.left;
+ rect.y = border.top;
+
if (editor->context)
{
gimp_context_get_foreground (editor->context, &color);
@@ -390,11 +402,7 @@ gimp_fg_bg_editor_draw (GtkWidget *widget,
gimp_cairo_set_source_rgb (cr, &transformed_color);
- cairo_rectangle (cr,
- border.left,
- border.top,
- rect_w - (border.left + border.right),
- rect_h - (border.top + border.bottom));
+ cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height);
cairo_fill (cr);
if (editor->color_config &&
@@ -403,12 +411,14 @@ gimp_fg_bg_editor_draw (GtkWidget *widget,
color.b < 0.0 || color.b > 1.0))
{
GimpRGB color;
- gint side = MIN (rect_w, rect_h) * 2 / 3;
+ gint side = MIN (rect.width, rect.height) * 2 / 3;
+ gint corner_x = rect.x;
+ gint corner_y = rect.y;
- cairo_move_to (cr, 0, 0);
- cairo_line_to (cr, 0, side);
- cairo_line_to (cr, side, 0);
- cairo_line_to (cr, 0, 0);
+ cairo_move_to (cr, corner_x, corner_y);
+ cairo_line_to (cr, corner_x + side, corner_y);
+ cairo_line_to (cr, corner_x, corner_y + side);
+ cairo_close_path (cr);
gimp_color_config_get_out_of_gamut_color (editor->color_config,
&color);
@@ -422,9 +432,7 @@ gimp_fg_bg_editor_draw (GtkWidget *widget,
GIMP_ACTIVE_COLOR_BACKGROUND ?
0 : GTK_STATE_FLAG_ACTIVE);
- gtk_render_frame (style, cr,
- 0, 0,
- rect_w, rect_h);
+ gtk_render_frame (style, cr, rect.x, rect.y, rect.width, rect.height);
gtk_style_context_restore (style);
@@ -436,28 +444,61 @@ gimp_fg_bg_editor_target (GimpFgBgEditor *editor,
gint x,
gint y)
{
- GtkAllocation allocation;
- gint width;
- gint height;
- gint rect_w = editor->rect_width;
- gint rect_h = editor->rect_height;
-
- gtk_widget_get_allocation (GTK_WIDGET (editor), &allocation);
-
- width = allocation.width;
- height = allocation.height;
-
- if (x > 0 && x < rect_w && y > 0 && y < rect_h)
- return FOREGROUND_AREA;
- else if (x > (width - rect_w) && x < width &&
- y > (height - rect_h) && y < height)
- return BACKGROUND_AREA;
- else if (x > 0 && x < (width - rect_w) &&
- y > rect_h && y < height)
- return DEFAULT_AREA;
- else if (x > rect_w && x < width &&
- y > 0 && y < (height - rect_h))
- return SWAP_AREA;
+ GtkWidget *widget = GTK_WIDGET (editor);
+ GtkStyleContext *style = gtk_widget_get_style_context (widget);
+ GtkBorder border;
+ GtkBorder padding;
+ gint width;
+ gint height;
+ gint rect_w = editor->rect_width;
+ gint rect_h = editor->rect_height;
+ gint button_width;
+ gint button_height;
+
+ width = gtk_widget_get_allocated_width (widget);
+ height = gtk_widget_get_allocated_height (widget);
+
+ gtk_style_context_get_border (style, gtk_style_context_get_state (style),
+ &border);
+ gtk_style_context_get_padding (style, gtk_style_context_get_state (style),
+ &padding);
+
+ border.left += padding.left;
+ border.right += padding.right;
+ border.top += padding.top;
+ border.bottom += padding.bottom;
+
+ button_width = width - border.left - border.right - rect_w;
+ button_height = height - border.top - border.bottom - rect_h;
+
+ if (x > border.left &&
+ x < border.left + rect_w &&
+ y > border.top &&
+ y < border.top + rect_h)
+ {
+ return FOREGROUND_AREA;
+ }
+ else if (x > width - border.right - rect_w &&
+ x < width - border.right &&
+ y > height - border.bottom - rect_h &&
+ y < height - border.bottom)
+ {
+ return BACKGROUND_AREA;
+ }
+ else if (x > border.left &&
+ x < border.left + button_width &&
+ y > border.top + rect_h &&
+ y < height - border.bottom)
+ {
+ return DEFAULT_AREA;
+ }
+ else if (x > border.left + rect_w &&
+ x < width - border.right &&
+ y > border.top &&
+ y < border.top + button_height)
+ {
+ return SWAP_AREA;
+ }
return INVALID_AREA;
}
diff --git a/app/widgets/gimpfgbgview.c b/app/widgets/gimpfgbgview.c
index f5de729cd4..00185e1435 100644
--- a/app/widgets/gimpfgbgview.c
+++ b/app/widgets/gimpfgbgview.c
@@ -86,6 +86,8 @@ gimp_fg_bg_view_class_init (GimpFgBgViewClass *klass)
NULL, NULL,
GIMP_TYPE_CONTEXT,
GIMP_PARAM_READWRITE));
+
+ gtk_widget_class_set_css_name (widget_class, "GimpFgBgView");
}
static void
@@ -157,33 +159,35 @@ gimp_fg_bg_view_draw (GtkWidget *widget,
GtkStyleContext *style = gtk_widget_get_style_context (widget);
GtkAllocation allocation;
GtkBorder border;
- gint outline_width;
- gint outline_offset;
- gint rect_w, rect_h;
+ GtkBorder padding;
+ GdkRectangle rect;
GimpRGB color;
gtk_widget_get_allocation (widget, &allocation);
gtk_style_context_save (style);
- gtk_style_context_get (style, gtk_style_context_get_state (style),
- "outline-width", &outline_width,
- "outline-offset", &outline_offset,
- NULL);
+ gtk_style_context_get_border (style, gtk_style_context_get_state (style),
+ &border);
+ gtk_style_context_get_padding (style, gtk_style_context_get_state (style),
+ &padding);
- border.left = outline_width + ABS (outline_offset);
- border.right = outline_width + ABS (outline_offset);
- border.top = outline_width + ABS (outline_offset);
- border.bottom = outline_width + ABS (outline_offset);
+ border.left += padding.left;
+ border.right += padding.right;
+ border.top += padding.top;
+ border.bottom += padding.bottom;
- rect_w = allocation.width * 3 / 4;
- rect_h = allocation.height * 3 / 4;
+ rect.width = (allocation.width - border.left - border.right) * 3 / 4;
+ rect.height = (allocation.height - border.top - border.bottom) * 3 / 4;
if (! view->transform)
gimp_fg_bg_view_create_transform (view);
/* draw the background area */
+ rect.x = allocation.width - rect.width - border.right;
+ rect.y = allocation.height - rect.height - border.bottom;
+
if (view->context)
{
gimp_context_get_background (view->context, &color);
@@ -198,23 +202,19 @@ gimp_fg_bg_view_draw (GtkWidget *widget,
gimp_cairo_set_source_rgb (cr, &color);
- cairo_rectangle (cr,
- allocation.width - rect_w + border.left,
- allocation.height - rect_h + border.top,
- rect_w - (border.left + border.right),
- rect_h - (border.top + border.bottom));
+ cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height);
cairo_fill (cr);
}
- gtk_style_context_set_state (style, GTK_STATE_FLAG_ACTIVE);
+ gtk_style_context_add_class (style, GTK_STYLE_CLASS_FRAME);
- gtk_render_frame (style, cr,
- allocation.width - rect_w,
- allocation.height - rect_h,
- rect_w, rect_h);
+ gtk_render_frame (style, cr, rect.x, rect.y, rect.width, rect.height);
/* draw the foreground area */
+ rect.x = border.left;
+ rect.y = border.top;
+
if (view->context)
{
gimp_context_get_foreground (view->context, &color);
@@ -229,18 +229,11 @@ gimp_fg_bg_view_draw (GtkWidget *widget,
gimp_cairo_set_source_rgb (cr, &color);
- cairo_rectangle (cr,
- border.left,
- border.top,
- rect_w - (border.left + border.right),
- rect_h - (border.top + border.bottom));
+ cairo_rectangle (cr, rect.x, rect.y, rect.width, rect.height);
cairo_fill (cr);
}
- gtk_style_context_set_state (style, 0);
-
- gtk_render_frame (style, cr,
- 0, 0, rect_w, rect_h);
+ gtk_render_frame (style, cr, rect.x, rect.y, rect.width, rect.height);
gtk_style_context_restore (style);
diff --git a/themes/System/gimp.css b/themes/System/gimp.css
index c279f3332d..7e5763b2f2 100644
--- a/themes/System/gimp.css
+++ b/themes/System/gimp.css
@@ -49,6 +49,10 @@ GimpColorHistory button {
padding: 4px 6px 4px 6px;
}
+tab GimpFgBgView {
+ padding: 6px 6px 6px 6px;
+}
+
GimpDock {
font-size: smaller;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]