summaryrefslogtreecommitdiffstats
path: root/src/display
diff options
context:
space:
mode:
authorJabier Arraiza Cenoz <jabier.arraiza@marker.es>2015-12-08 02:02:40 +0000
committerjabiertxof <jabier.arraiza@marker.es>2015-12-08 02:02:40 +0000
commit2f87fb8f6ee1c0d16ef54e546462ac659acab51f (patch)
tree9948abff72f547c04c1c5d19a5578cb30e6c4d95 /src/display
parentstatic code analysis (diff)
parentupdate to trunk (diff)
downloadinkscape-2f87fb8f6ee1c0d16ef54e546462ac659acab51f.tar.gz
inkscape-2f87fb8f6ee1c0d16ef54e546462ac659acab51f.zip
merge lp:~inkscape.dev/inkscape/lock_guides
(bzr r14512)
Diffstat (limited to 'src/display')
-rw-r--r--src/display/guideline.cpp18
-rw-r--r--src/display/guideline.h2
-rw-r--r--src/display/sp-ctrlpoint.cpp28
-rw-r--r--src/display/sp-ctrlpoint.h6
4 files changed, 42 insertions, 12 deletions
diff --git a/src/display/guideline.cpp b/src/display/guideline.cpp
index 44bbd14bd..4b7ea59ab 100644
--- a/src/display/guideline.cpp
+++ b/src/display/guideline.cpp
@@ -53,6 +53,7 @@ static void sp_guideline_init(SPGuideLine *gl)
{
gl->rgba = 0x0000ff7f;
+ gl->locked = false;
gl->normal_to_line = Geom::Point(0,1);
gl->angle = 3.14159265358979323846/2;
gl->point_on_line = Geom::Point(0,0);
@@ -177,9 +178,16 @@ static void sp_guideline_update(SPCanvasItem *item, Geom::Affine const &affine,
gl->affine = affine;
+ if (gl->locked) {
+ sp_ctrlpoint_set_circle(gl->origin, false);
+ sp_ctrlpoint_set_lenght(gl->origin, 6);
+ } else {
+ sp_ctrlpoint_set_circle(gl->origin, true);
+ sp_ctrlpoint_set_lenght(gl->origin, 4);
+ }
sp_ctrlpoint_set_coords(gl->origin, gl->point_on_line);
sp_canvas_item_request_update(SP_CANVAS_ITEM (gl->origin));
-
+
Geom::Point pol_transformed = gl->point_on_line*affine;
if (gl->is_horizontal()) {
sp_canvas_update_bbox (item, -1000000, round(pol_transformed[Geom::Y] - 16), 1000000, round(pol_transformed[Geom::Y] + 1));
@@ -189,6 +197,7 @@ static void sp_guideline_update(SPCanvasItem *item, Geom::Affine const &affine,
//TODO: labels in angled guidelines are not showing up for some reason.
sp_canvas_update_bbox (item, -1000000, -1000000, 1000000, 1000000);
}
+
}
// Returns 0.0 if point is on the guideline
@@ -219,6 +228,7 @@ SPCanvasItem *sp_guideline_new(SPCanvasGroup *parent, char* label, Geom::Point p
normal.normalize();
gl->label = label;
+ gl->locked = false;
gl->normal_to_line = normal;
gl->angle = tan( -gl->normal_to_line[Geom::X] / gl->normal_to_line[Geom::Y]);
sp_guideline_set_position(gl, point_on_line);
@@ -238,6 +248,12 @@ void sp_guideline_set_label(SPGuideLine *gl, const char* label)
sp_canvas_item_request_update(SP_CANVAS_ITEM (gl));
}
+void sp_guideline_set_locked(SPGuideLine *gl, const bool locked)
+{
+ gl->locked = locked;
+ sp_canvas_item_request_update(SP_CANVAS_ITEM (gl));
+}
+
void sp_guideline_set_position(SPGuideLine *gl, Geom::Point point_on_line)
{
gl->point_on_line = point_on_line;
diff --git a/src/display/guideline.h b/src/display/guideline.h
index 2d9a87d9b..778517f1d 100644
--- a/src/display/guideline.h
+++ b/src/display/guideline.h
@@ -32,6 +32,7 @@ struct SPGuideLine {
guint32 rgba;
char* label;
+ bool locked;
Geom::Point normal_to_line;
Geom::Point point_on_line;
double angle;
@@ -51,6 +52,7 @@ GType sp_guideline_get_type();
SPCanvasItem *sp_guideline_new(SPCanvasGroup *parent, char* label, Geom::Point point_on_line, Geom::Point normal);
void sp_guideline_set_label(SPGuideLine *gl, const char* label);
+void sp_guideline_set_locked(SPGuideLine *gl, const bool locked);
void sp_guideline_set_position(SPGuideLine *gl, Geom::Point point_on_line);
void sp_guideline_set_normal(SPGuideLine *gl, Geom::Point normal_to_line);
void sp_guideline_set_color(SPGuideLine *gl, unsigned int rgba);
diff --git a/src/display/sp-ctrlpoint.cpp b/src/display/sp-ctrlpoint.cpp
index 1082cb1b3..19dbbc130 100644
--- a/src/display/sp-ctrlpoint.cpp
+++ b/src/display/sp-ctrlpoint.cpp
@@ -42,7 +42,8 @@ sp_ctrlpoint_init (SPCtrlPoint *ctrlpoint)
ctrlpoint->rgba = 0x0000ff7f;
ctrlpoint->pt[Geom::X] = ctrlpoint->pt[Geom::Y] = 0.0;
ctrlpoint->item=NULL;
- ctrlpoint->radius = 2;
+ ctrlpoint->lenght = 4;
+ ctrlpoint->is_circle = true;
}
static void sp_ctrlpoint_destroy(SPCanvasItem *object)
@@ -75,8 +76,11 @@ sp_ctrlpoint_render (SPCanvasItem *item, SPCanvasBuf *buf)
cairo_new_path(buf->ct);
Geom::Point pt = cp->pt * cp->affine;
-
- cairo_arc(buf->ct, pt[Geom::X] - buf->rect.left(), pt[Geom::Y] - buf->rect.top(), cp->radius, 0.0, 2 * M_PI);
+ if( cp->is_circle ) {
+ cairo_arc(buf->ct, pt[Geom::X] - buf->rect.left(), pt[Geom::Y] - buf->rect.top(), cp->lenght/2.0, 0.0, 2 * M_PI);
+ } else {
+ cairo_rectangle(buf->ct, pt[Geom::X] - buf->rect.left() - cp->lenght/2.0, pt[Geom::Y] - buf->rect.top() - cp->lenght/2.0 , cp->lenght, cp->lenght);
+ }
cairo_stroke(buf->ct);
}
@@ -96,10 +100,10 @@ static void sp_ctrlpoint_update(SPCanvasItem *item, Geom::Affine const &affine,
Geom::Point pt = cp->pt * affine;
- item->x1 = pt[Geom::X] - cp->radius;
- item->y1 = pt[Geom::Y] - cp->radius;
- item->x2 = pt[Geom::X] + cp->radius;
- item->y2 = pt[Geom::Y] + cp->radius;
+ item->x1 = pt[Geom::X] - cp->lenght;
+ item->y1 = pt[Geom::Y] - cp->lenght;
+ item->x2 = pt[Geom::X] + cp->lenght;
+ item->y2 = pt[Geom::Y] + cp->lenght;
item->canvas->requestRedraw((int)item->x1 - 15, (int)item->y1 - 15,
(int)item->x1 + 15, (int)item->y1 + 15);
@@ -142,9 +146,15 @@ sp_ctrlpoint_set_coords (SPCtrlPoint *cp, const Geom::Point pt)
}
void
-sp_ctrlpoint_set_radius (SPCtrlPoint *cp, const double r)
+sp_ctrlpoint_set_lenght (SPCtrlPoint *cp, const double r)
+{
+ cp->lenght = r;
+}
+
+void
+sp_ctrlpoint_set_circle (SPCtrlPoint *cp, const bool circle)
{
- cp->radius = r;
+ cp->is_circle = circle;
}
/*
diff --git a/src/display/sp-ctrlpoint.h b/src/display/sp-ctrlpoint.h
index a7a5475b7..02e61caf0 100644
--- a/src/display/sp-ctrlpoint.h
+++ b/src/display/sp-ctrlpoint.h
@@ -25,7 +25,8 @@ struct SPCtrlPoint : public SPCanvasItem {
guint32 rgba;
Geom::Point pt;
Geom::Affine affine;
- double radius;
+ double lenght;
+ bool is_circle;
};
struct SPCtrlPointClass : public SPCanvasItemClass{};
@@ -34,7 +35,8 @@ GType sp_ctrlpoint_get_type (void);
void sp_ctrlpoint_set_color (SPCtrlPoint *cp, guint32 rgba);
void sp_ctrlpoint_set_coords (SPCtrlPoint *cp, const gdouble x, const gdouble y);
void sp_ctrlpoint_set_coords (SPCtrlPoint *cp, const Geom::Point pt);
-void sp_ctrlpoint_set_radius (SPCtrlPoint *cp, const double r);
+void sp_ctrlpoint_set_lenght (SPCtrlPoint *cp, const double r);
+void sp_ctrlpoint_set_circle (SPCtrlPoint *cp, const bool circle);