[gimp] app: change the default item line cap to round
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: change the default item line cap to round
- Date: Sun, 26 Sep 2010 15:41:09 +0000 (UTC)
commit b0a22bc28573e9aafde33a80c3337c6677fa4271
Author: Michael Natterer <mitch gimp org>
Date: Sun Sep 26 17:40:10 2010 +0200
app: change the default item line cap to round
but add and API to configure it and set it to suare for handles which
are always axis-aligned.
app/display/gimpcanvashandle.c | 3 +
app/display/gimpcanvasitem.c | 117 +++++++++++++++++++++++++++++++---
app/display/gimpcanvasitem.h | 2 +
app/display/gimpdisplayshell-style.c | 2 -
4 files changed, 113 insertions(+), 11 deletions(-)
---
diff --git a/app/display/gimpcanvashandle.c b/app/display/gimpcanvashandle.c
index e77034d..d13b83b 100644
--- a/app/display/gimpcanvashandle.c
+++ b/app/display/gimpcanvashandle.c
@@ -156,6 +156,9 @@ gimp_canvas_handle_init (GimpCanvasHandle *handle)
{
GimpCanvasHandlePrivate *private = GET_PRIVATE (handle);
+ gimp_canvas_item_set_line_cap (GIMP_CANVAS_ITEM (handle),
+ CAIRO_LINE_CAP_SQUARE);
+
private->start_angle = 0.0;
private->slice_angle = 2.0 * G_PI;
}
diff --git a/app/display/gimpcanvasitem.c b/app/display/gimpcanvasitem.c
index 2bdf056..ed9a256 100644
--- a/app/display/gimpcanvasitem.c
+++ b/app/display/gimpcanvasitem.c
@@ -32,12 +32,21 @@
#include "gimpdisplayshell-style.h"
+enum
+{
+ PROP_0,
+ PROP_LINE_CAP,
+ PROP_HIGHLIGHT
+};
+
+
typedef struct _GimpCanvasItemPrivate GimpCanvasItemPrivate;
struct _GimpCanvasItemPrivate
{
- gboolean highlight;
- gint suspend_stroking;
+ cairo_line_cap_t line_cap;
+ gboolean highlight;
+ gint suspend_stroking;
};
#define GET_PRIVATE(item) \
@@ -48,6 +57,15 @@ struct _GimpCanvasItemPrivate
/* local function prototypes */
+static void gimp_canvas_item_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void gimp_canvas_item_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec);
+
static void gimp_canvas_item_real_draw (GimpCanvasItem *item,
GimpDisplayShell *shell,
cairo_t *cr);
@@ -64,8 +82,27 @@ G_DEFINE_TYPE (GimpCanvasItem, gimp_canvas_item,
static void
gimp_canvas_item_class_init (GimpCanvasItemClass *klass)
{
- klass->draw = gimp_canvas_item_real_draw;
- klass->get_extents = gimp_canvas_item_real_get_extents;
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->set_property = gimp_canvas_item_set_property;
+ object_class->get_property = gimp_canvas_item_get_property;
+
+ klass->draw = gimp_canvas_item_real_draw;
+ klass->get_extents = gimp_canvas_item_real_get_extents;
+
+ g_object_class_install_property (object_class, PROP_LINE_CAP,
+ g_param_spec_int ("line-cap",
+ NULL, NULL,
+ CAIRO_LINE_CAP_BUTT,
+ CAIRO_LINE_CAP_SQUARE,
+ CAIRO_LINE_CAP_ROUND,
+ GIMP_PARAM_READWRITE));
+
+ g_object_class_install_property (object_class, PROP_HIGHLIGHT,
+ g_param_spec_boolean ("highlight",
+ NULL, NULL,
+ FALSE,
+ GIMP_PARAM_READWRITE));
g_type_class_add_private (klass, sizeof (GimpCanvasItemPrivate));
}
@@ -73,6 +110,57 @@ gimp_canvas_item_class_init (GimpCanvasItemClass *klass)
static void
gimp_canvas_item_init (GimpCanvasItem *item)
{
+ GimpCanvasItemPrivate *private = GET_PRIVATE (item);
+
+ private->line_cap = CAIRO_LINE_CAP_ROUND;
+ private->highlight = FALSE;
+ private->suspend_stroking = 0;
+}
+
+static void
+gimp_canvas_item_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ GimpCanvasItemPrivate *private = GET_PRIVATE (object);
+
+ switch (property_id)
+ {
+ case PROP_LINE_CAP:
+ private->line_cap = g_value_get_int (value);
+ break;
+ case PROP_HIGHLIGHT:
+ private->highlight = g_value_get_boolean (value);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+gimp_canvas_item_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ GimpCanvasItemPrivate *private = GET_PRIVATE (object);
+
+ switch (property_id)
+ {
+ case PROP_LINE_CAP:
+ g_value_set_int (value, private->line_cap);
+ break;
+ case PROP_HIGHLIGHT:
+ g_value_set_boolean (value, private->highlight);
+ break;
+
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
}
static void
@@ -120,16 +208,25 @@ gimp_canvas_item_get_extents (GimpCanvasItem *item,
}
void
+gimp_canvas_item_set_line_cap (GimpCanvasItem *item,
+ cairo_line_cap_t line_cap)
+{
+ g_return_if_fail (GIMP_IS_CANVAS_ITEM (item));
+
+ g_object_set (item,
+ "line-cap", line_cap,
+ NULL);
+}
+
+void
gimp_canvas_item_set_highlight (GimpCanvasItem *item,
gboolean highlight)
{
- GimpCanvasItemPrivate *private;
-
g_return_if_fail (GIMP_IS_CANVAS_ITEM (item));
- private = GET_PRIVATE (item);
-
- private->highlight = highlight ? TRUE : FALSE;
+ g_object_set (item,
+ "highlight", highlight,
+ NULL);
}
void
@@ -170,6 +267,8 @@ _gimp_canvas_item_stroke (GimpCanvasItem *item,
if (private->suspend_stroking == 0)
{
+ cairo_set_line_cap (cr, private->line_cap);
+
gimp_display_shell_set_tool_bg_style (shell, cr);
cairo_stroke_preserve (cr);
diff --git a/app/display/gimpcanvasitem.h b/app/display/gimpcanvasitem.h
index fa14af6..4a3182e 100644
--- a/app/display/gimpcanvasitem.h
+++ b/app/display/gimpcanvasitem.h
@@ -60,6 +60,8 @@ void gimp_canvas_item_draw (GimpCanvasItem *item,
GdkRegion * gimp_canvas_item_get_extents (GimpCanvasItem *item,
GimpDisplayShell *shell);
+void gimp_canvas_item_set_line_cap (GimpCanvasItem *item,
+ cairo_line_cap_t line_cap);
void gimp_canvas_item_set_highlight (GimpCanvasItem *item,
gboolean highlight);
diff --git a/app/display/gimpdisplayshell-style.c b/app/display/gimpdisplayshell-style.c
index 3feb98b..a78633a 100644
--- a/app/display/gimpdisplayshell-style.c
+++ b/app/display/gimpdisplayshell-style.c
@@ -330,7 +330,6 @@ gimp_display_shell_set_tool_bg_style (GimpDisplayShell *shell,
g_return_if_fail (cr != NULL);
cairo_set_line_width (cr, 3.0);
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
gimp_cairo_set_source_rgba (cr, &tool_bg);
@@ -345,7 +344,6 @@ gimp_display_shell_set_tool_fg_style (GimpDisplayShell *shell,
g_return_if_fail (cr != NULL);
cairo_set_line_width (cr, 1.0);
- cairo_set_line_cap (cr, CAIRO_LINE_CAP_SQUARE);
cairo_set_line_join (cr, CAIRO_LINE_JOIN_ROUND);
if (highlight)
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]