summaryrefslogtreecommitdiffstats
path: root/src/display
diff options
context:
space:
mode:
authorJon A. Cruz <jon@joncruz.org>2012-05-03 02:06:15 +0000
committerJon A. Cruz <jon@joncruz.org>2012-05-03 02:06:15 +0000
commit3198928b491fb91cdd177505c051659f89aa4158 (patch)
tree8cf8b51a36ba7e865d3c41984746ae35a26c9e6a /src/display
parentFind dialog: better user message (diff)
downloadinkscape-3198928b491fb91cdd177505c051659f89aa4158.tar.gz
inkscape-3198928b491fb91cdd177505c051659f89aa4158.zip
Adding base configurable sizing of controls/handles.
(bzr r11316)
Diffstat (limited to 'src/display')
-rw-r--r--src/display/guideline.cpp7
-rw-r--r--src/display/sp-canvas-item.h29
-rw-r--r--src/display/sp-canvas.cpp33
3 files changed, 49 insertions, 20 deletions
diff --git a/src/display/guideline.cpp b/src/display/guideline.cpp
index dad989655..652f4e2d7 100644
--- a/src/display/guideline.cpp
+++ b/src/display/guideline.cpp
@@ -5,6 +5,7 @@
* Lauris Kaplinski <lauris@kaplinski.com>
* Johan Engelen
* Maximilian Albert <maximilian.albert@gmail.com>
+ * Jon A. Cruz <jon@joncruz.org>
*
* Copyright (C) 2000-2002 Lauris Kaplinski
* Copyright (C) 2007 Johan Engelen
@@ -24,6 +25,9 @@
#include "desktop.h"
#include "sp-namedview.h"
#include "display/sp-canvas.h"
+#include "ui/control-manager.h"
+
+using Inkscape::ControlManager;
static void sp_guideline_class_init(SPGuideLineClass *c);
static void sp_guideline_init(SPGuideLine *guideline);
@@ -228,7 +232,8 @@ static double sp_guideline_point(SPCanvasItem *item, Geom::Point p, SPCanvasItem
SPCanvasItem *sp_guideline_new(SPCanvasGroup *parent, char* label, Geom::Point point_on_line, Geom::Point normal)
{
SPCanvasItem *item = sp_canvas_item_new(parent, SP_TYPE_GUIDELINE, NULL);
- SPCanvasItem *origin = sp_canvas_item_new(parent, SP_TYPE_CTRLPOINT, NULL);
+ SPCanvasItem *origin = ControlManager::getManager().createControl(parent, Inkscape::CTRL_TYPE_ORIGIN);
+ ControlManager::getManager().track(origin);
SPGuideLine *gl = SP_GUIDELINE(item);
SPCtrlPoint *cp = SP_CTRLPOINT(origin);
diff --git a/src/display/sp-canvas-item.h b/src/display/sp-canvas-item.h
index 0a6d343b2..8baa09401 100644
--- a/src/display/sp-canvas-item.h
+++ b/src/display/sp-canvas-item.h
@@ -41,6 +41,23 @@ typedef struct _SPCanvasItemClass SPCanvasItemClass;
#define SP_IS_CANVAS_ITEM(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), SP_TYPE_CANVAS_ITEM))
#define SP_CANVAS_ITEM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS((o), SP_TYPE_CANVAS_ITEM, SPCanvasItemClass))
+namespace Inkscape
+{
+
+// Rough initial set. Most likely needs refinement.
+enum ControlType {
+ CTRL_TYPE_UNKNOWN,
+ CTRL_TYPE_ADJ_HANDLE,
+ CTRL_TYPE_ANCHOR,
+ CTRL_TYPE_POINT,
+ CTRL_TYPE_ROTATE,
+ CTRL_TYPE_SIZER,
+ CTRL_TYPE_SHAPER,
+ CTRL_TYPE_ORIGIN
+};
+
+} // namespace Inkscape
+
/**
* An SPCanvasItem refers to a SPCanvas and to its parent item; it has
* four coordinates, a bounding rectangle, and a transformation matrix.
@@ -51,10 +68,15 @@ struct SPCanvasItem : public GtkObject {
SPCanvas *canvas;
SPCanvasItem *parent;
- double x1, y1, x2, y2;
+ double x1;
+ double y1;
+ double x2;
+ double y2;
Geom::Rect bounds;
Geom::Affine xform;
-
+
+ Inkscape::ControlType ctrlType;
+
// Replacement for custom GtkObject flag enumeration
gboolean visible;
gboolean need_update;
@@ -74,6 +96,9 @@ struct _SPCanvasItemClass : public GtkObjectClass {
void (* viewbox_changed) (SPCanvasItem *item, Geom::IntRect const &new_area);
};
+/**
+ * Constructs new SPCanvasItem on SPCanvasGroup.
+ */
SPCanvasItem *sp_canvas_item_new(SPCanvasGroup *parent, GType type, const gchar *first_arg_name, ...);
G_END_DECLS
diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp
index 0f650bf4a..22aad2442 100644
--- a/src/display/sp-canvas.cpp
+++ b/src/display/sp-canvas.cpp
@@ -405,31 +405,30 @@ void sp_canvas_item_class_init(SPCanvasItemClass *klass)
void sp_canvas_item_init(SPCanvasItem *item)
{
+ item->xform = Geom::Affine(Geom::identity());
+ item->ctrlType = Inkscape::CTRL_TYPE_UNKNOWN;
+
// TODO items should not be visible on creation - this causes kludges with items
// that should be initially invisible; examples of such items: node handles, the CtrlRect
// used for rubberbanding, path outline, etc.
item->visible = TRUE;
- item->xform = Geom::Affine(Geom::identity());
}
} // namespace
-/**
- * Constructs new SPCanvasItem on SPCanvasGroup.
- */
SPCanvasItem *sp_canvas_item_new(SPCanvasGroup *parent, GType type, gchar const *first_arg_name, ...)
{
va_list args;
g_return_val_if_fail(parent != NULL, NULL);
- g_return_val_if_fail(SP_IS_CANVAS_GROUP (parent), NULL);
+ g_return_val_if_fail(SP_IS_CANVAS_GROUP(parent), NULL);
g_return_val_if_fail(g_type_is_a(type, SPCanvasItem::getType()), NULL);
- SPCanvasItem *item = SP_CANVAS_ITEM (g_object_new (type, NULL));
+ SPCanvasItem *item = SP_CANVAS_ITEM(g_object_new(type, NULL));
- va_start (args, first_arg_name);
- sp_canvas_item_construct (item, parent, first_arg_name, args);
- va_end (args);
+ va_start(args, first_arg_name);
+ sp_canvas_item_construct(item, parent, first_arg_name, args);
+ va_end(args);
return item;
}
@@ -438,17 +437,17 @@ namespace {
void sp_canvas_item_construct(SPCanvasItem *item, SPCanvasGroup *parent, gchar const *first_arg_name, va_list args)
{
- g_return_if_fail (SP_IS_CANVAS_GROUP (parent));
- g_return_if_fail (SP_IS_CANVAS_ITEM (item));
+ g_return_if_fail(SP_IS_CANVAS_GROUP(parent));
+ g_return_if_fail(SP_IS_CANVAS_ITEM(item));
- item->parent = SP_CANVAS_ITEM (parent);
+ item->parent = SP_CANVAS_ITEM(parent);
item->canvas = item->parent->canvas;
- g_object_set_valist (G_OBJECT (item), first_arg_name, args);
+ g_object_set_valist(G_OBJECT(item), first_arg_name, args);
SP_CANVAS_GROUP(item->parent)->add(item);
- sp_canvas_item_request_update (item);
+ sp_canvas_item_request_update(item);
}
} // namespace
@@ -458,7 +457,7 @@ void sp_canvas_item_construct(SPCanvasItem *item, SPCanvasGroup *parent, gchar c
*/
static void redraw_if_visible(SPCanvasItem *item)
{
- if(item->visible) {
+ if (item->visible) {
int x0 = (int)(item->x1);
int x1 = (int)(item->x2);
int y0 = (int)(item->y1);
@@ -528,11 +527,11 @@ static void sp_canvas_item_invoke_update(SPCanvasItem *item, Geom::Affine const
// apply object flags to child flags
int child_flags = flags & ~SP_CANVAS_UPDATE_REQUESTED;
- if(item->need_update) {
+ if (item->need_update) {
child_flags |= SP_CANVAS_UPDATE_REQUESTED;
}
- if(item->need_affine) {
+ if (item->need_affine) {
child_flags |= SP_CANVAS_UPDATE_AFFINE;
}