diff options
Diffstat (limited to 'src/draw-context.cpp')
| -rw-r--r-- | src/draw-context.cpp | 165 |
1 files changed, 59 insertions, 106 deletions
diff --git a/src/draw-context.cpp b/src/draw-context.cpp index 51d8ca3cd..09366526a 100644 --- a/src/draw-context.cpp +++ b/src/draw-context.cpp @@ -50,14 +50,6 @@ using Inkscape::DocumentUndo; -static void sp_draw_context_dispose(GObject *object); - -static void sp_draw_context_setup(SPEventContext *ec); -static void sp_draw_context_set(SPEventContext *ec, Inkscape::Preferences::Entry *val); -static void sp_draw_context_finish(SPEventContext *ec); - -static gint sp_draw_context_root_handler(SPEventContext *event_context, GdkEvent *event); - static void spdc_selection_changed(Inkscape::Selection *sel, SPDrawContext *dc); static void spdc_selection_modified(Inkscape::Selection *sel, guint flags, SPDrawContext *dc); @@ -74,146 +66,109 @@ static void spdc_flush_white(SPDrawContext *dc, SPCurve *gc); static void spdc_reset_white(SPDrawContext *dc); static void spdc_free_colors(SPDrawContext *dc); -G_DEFINE_TYPE(SPDrawContext, sp_draw_context, SP_TYPE_EVENT_CONTEXT); +SPDrawContext::SPDrawContext() : SPEventContext() { + this->selection = 0; + this->grab = 0; + this->anchor_statusbar = false; -static void sp_draw_context_class_init(SPDrawContextClass *klass) -{ - GObjectClass *object_class; - SPEventContextClass *ec_class; + this->attach = FALSE; - object_class = (GObjectClass *)klass; - ec_class = SP_EVENT_CONTEXT_CLASS(klass); + this->red_color = 0xff00007f; + this->blue_color = 0x0000ff7f; + this->green_color = 0x00ff007f; + this->red_curve_is_valid = false; - object_class->dispose = sp_draw_context_dispose; + this->red_bpath = NULL; + this->red_curve = NULL; - ec_class->setup = sp_draw_context_setup; - ec_class->set = sp_draw_context_set; - ec_class->finish = sp_draw_context_finish; - ec_class->root_handler = sp_draw_context_root_handler; -} - -static void sp_draw_context_init(SPDrawContext *dc) -{ - dc->attach = FALSE; + this->blue_bpath = NULL; + this->blue_curve = NULL; - dc->red_color = 0xff00007f; - dc->blue_color = 0x0000ff7f; - dc->green_color = 0x00ff007f; - dc->red_curve_is_valid = false; + this->green_bpaths = NULL; + this->green_curve = NULL; + this->green_anchor = NULL; + this->green_closed = false; - dc->red_bpath = NULL; - dc->red_curve = NULL; - - dc->blue_bpath = NULL; - dc->blue_curve = NULL; - - dc->green_bpaths = NULL; - dc->green_curve = NULL; - dc->green_anchor = NULL; - dc->green_closed = false; - - dc->white_item = NULL; - dc->white_curves = NULL; - dc->white_anchors = NULL; - - dc->sa = NULL; - dc->ea = NULL; + this->white_item = NULL; + this->white_curves = NULL; + this->white_anchors = NULL; - dc->waiting_LPE_type = Inkscape::LivePathEffect::INVALID_LPE; + this->sa = NULL; + this->ea = NULL; - new (&dc->sel_changed_connection) sigc::connection(); - new (&dc->sel_modified_connection) sigc::connection(); + this->waiting_LPE_type = Inkscape::LivePathEffect::INVALID_LPE; } -static void sp_draw_context_dispose(GObject *object) -{ - SPDrawContext *dc = SP_DRAW_CONTEXT(object); - - dc->sel_changed_connection.~connection(); - dc->sel_modified_connection.~connection(); - - if (dc->grab) { - sp_canvas_item_ungrab(dc->grab, GDK_CURRENT_TIME); - dc->grab = NULL; +SPDrawContext::~SPDrawContext() { + if (this->grab) { + sp_canvas_item_ungrab(this->grab, GDK_CURRENT_TIME); + this->grab = NULL; } - if (dc->selection) { - dc->selection = NULL; + if (this->selection) { + this->selection = NULL; } - spdc_free_colors(dc); - - G_OBJECT_CLASS(sp_draw_context_parent_class)->dispose(object); + spdc_free_colors(this); } -static void sp_draw_context_setup(SPEventContext *ec) -{ - SPDrawContext *dc = SP_DRAW_CONTEXT(ec); - SPDesktop *dt = ec->desktop; - - if ((SP_EVENT_CONTEXT_CLASS(sp_draw_context_parent_class))->setup) { - (SP_EVENT_CONTEXT_CLASS(sp_draw_context_parent_class))->setup(ec); - } +void SPDrawContext::setup() { + SPEventContext::setup(); - dc->selection = sp_desktop_selection(dt); + this->selection = sp_desktop_selection(desktop); // Connect signals to track selection changes - dc->sel_changed_connection = dc->selection->connectChanged( - sigc::bind(sigc::ptr_fun(&spdc_selection_changed), dc) + this->sel_changed_connection = this->selection->connectChanged( + sigc::bind(sigc::ptr_fun(&spdc_selection_changed), this) ); - dc->sel_modified_connection = dc->selection->connectModified( - sigc::bind(sigc::ptr_fun(&spdc_selection_modified), dc) + this->sel_modified_connection = this->selection->connectModified( + sigc::bind(sigc::ptr_fun(&spdc_selection_modified), this) ); // Create red bpath - dc->red_bpath = sp_canvas_bpath_new(sp_desktop_sketch(ec->desktop), NULL); - sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(dc->red_bpath), dc->red_color, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); + this->red_bpath = sp_canvas_bpath_new(sp_desktop_sketch(this->desktop), NULL); + sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(this->red_bpath), this->red_color, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); // Create red curve - dc->red_curve = new SPCurve(); + this->red_curve = new SPCurve(); // Create blue bpath - dc->blue_bpath = sp_canvas_bpath_new(sp_desktop_sketch(ec->desktop), NULL); - sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(dc->blue_bpath), dc->blue_color, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); + this->blue_bpath = sp_canvas_bpath_new(sp_desktop_sketch(this->desktop), NULL); + sp_canvas_bpath_set_stroke(SP_CANVAS_BPATH(this->blue_bpath), this->blue_color, 1.0, SP_STROKE_LINEJOIN_MITER, SP_STROKE_LINECAP_BUTT); // Create blue curve - dc->blue_curve = new SPCurve(); + this->blue_curve = new SPCurve(); // Create green curve - dc->green_curve = new SPCurve(); + this->green_curve = new SPCurve(); // No green anchor by default - dc->green_anchor = NULL; - dc->green_closed = FALSE; + this->green_anchor = NULL; + this->green_closed = FALSE; - dc->attach = TRUE; - spdc_attach_selection(dc, dc->selection); + this->attach = TRUE; + spdc_attach_selection(this, this->selection); } -static void sp_draw_context_finish(SPEventContext *ec) -{ - SPDrawContext *dc = SP_DRAW_CONTEXT(ec); - - dc->sel_changed_connection.disconnect(); - dc->sel_modified_connection.disconnect(); +void SPDrawContext::finish() { + this->sel_changed_connection.disconnect(); + this->sel_modified_connection.disconnect(); - if (dc->grab) { - sp_canvas_item_ungrab(dc->grab, GDK_CURRENT_TIME); + if (this->grab) { + sp_canvas_item_ungrab(this->grab, GDK_CURRENT_TIME); } - if (dc->selection) { - dc->selection = NULL; + if (this->selection) { + this->selection = NULL; } - spdc_free_colors(dc); + spdc_free_colors(this); } -static void sp_draw_context_set(SPEventContext */*ec*/, Inkscape::Preferences::Entry */*val*/) -{ +void SPDrawContext::set(const Inkscape::Preferences::Entry& value) { } -gint sp_draw_context_root_handler(SPEventContext *ec, GdkEvent *event) -{ +bool SPDrawContext::root_handler(GdkEvent* event) { gint ret = FALSE; switch (event->type) { @@ -237,9 +192,7 @@ gint sp_draw_context_root_handler(SPEventContext *ec, GdkEvent *event) } if (!ret) { - if ((SP_EVENT_CONTEXT_CLASS(sp_draw_context_parent_class))->root_handler) { - ret = (SP_EVENT_CONTEXT_CLASS(sp_draw_context_parent_class))->root_handler(ec, event); - } + ret = SPEventContext::root_handler(event); } return ret; |
