16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński/* Authors:
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński * Krzysztof Kosiński <tweenk.pl@gmail.com>
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz * Jon A. Cruz <jon@joncruz.org>
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński *
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński * Copyright (C) 2009 Authors
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński * Released under GNU GPL, read the file 'COPYING' for more information
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński */
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński#ifndef SEEN_UI_TOOL_CURVE_DRAG_POINT_H
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński#define SEEN_UI_TOOL_CURVE_DRAG_POINT_H
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński#include "ui/tool/control-point.h"
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński#include "ui/tool/node.h"
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskiclass SPDesktop;
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskinamespace Inkscape {
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskinamespace UI {
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskiclass PathManipulator;
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskistruct PathSharedData;
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz// This point should be invisible to the user - use the invisible_cset from control-point.h
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz// TODO make some methods from path-manipulator.cpp public so that this point doesn't have
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz// to be declared as a friend
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz/**
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz * An invisible point used to drag curves. This point is used by PathManipulator to allow editing
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz * of path segments by dragging them. It is defined in a separate file so that the node tool
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz * can check if the mouseovered control point is a curve drag point and update the cursor
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz * accordingly, without the need to drag in the full PathManipulator header.
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz */
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskiclass CurveDragPoint : public ControlPoint {
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskipublic:
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński CurveDragPoint(PathManipulator &pm);
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński void setSize(double sz) { _setSize(sz); }
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński void setTimeValue(double t) { _t = t; }
9120b0e3c36c1d15f4918f762b8998f4dab34f1cDiederik van Lierop double getTimeValue() { return _t; }
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński void setIterator(NodeList::iterator i) { first = i; }
9120b0e3c36c1d15f4918f762b8998f4dab34f1cDiederik van Lierop NodeList::iterator getIterator() { return first; }
5f19756f48574526dda8abedebf811c9d1456e80Markus Engel virtual bool _eventHandler(Inkscape::UI::Tools::ToolBase *event_context, GdkEvent *event);
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosińskiprotected:
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz virtual Glib::ustring _getTip(unsigned state) const;
16e7cf17a1bc8bb0d79dfa6adc4f75b843fb6d16Krzysztof Kosiński virtual void dragged(Geom::Point &, GdkEventMotion *);
16e7cf17a1bc8bb0d79dfa6adc4f75b843fb6d16Krzysztof Kosiński virtual bool grabbed(GdkEventMotion *);
16e7cf17a1bc8bb0d79dfa6adc4f75b843fb6d16Krzysztof Kosiński virtual void ungrabbed(GdkEventButton *);
16e7cf17a1bc8bb0d79dfa6adc4f75b843fb6d16Krzysztof Kosiński virtual bool clicked(GdkEventButton *);
16e7cf17a1bc8bb0d79dfa6adc4f75b843fb6d16Krzysztof Kosiński virtual bool doubleclicked(GdkEventButton *);
16e7cf17a1bc8bb0d79dfa6adc4f75b843fb6d16Krzysztof Kosiński
9a8c99c1f18c1d69fee4fe12c455121abf6de6f3Krzysztof Kosińskiprivate:
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński double _t;
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński PathManipulator &_pm;
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński NodeList::iterator first;
7128efb0d57297be0fbe4ef91c30fff5d1f94006Jon A. Cruz
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński static bool _drags_stroke;
0d68d82e47abab250c99dd534da2e2d26b697b2dKrzysztof Kosiński static bool _segment_was_degenerate;
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński static Geom::Point _stroke_drag_origin;
9120b0e3c36c1d15f4918f762b8998f4dab34f1cDiederik van Lierop void _insertNode(bool take_selection);
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński};
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński} // namespace UI
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński} // namespace Inkscape
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński#endif
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński/*
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński Local Variables:
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński mode:c++
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński c-file-style:"stroustrup"
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński indent-tabs-mode:nil
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński fill-column:99
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński End:
16a8c7d5e433b176636a4a1260c42ea43932110bKrzysztof Kosiński*/
a4030d5ca449e7e384bc699cd249ee704faaeab0Chris Morgan// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 :