Inkscape
Vector Graphics Editor
Loading...
Searching...
No Matches
desktop.h
Go to the documentation of this file.
1// SPDX-License-Identifier: GPL-2.0-or-later
5/*
6 * Authors:
7 * Lauris Kaplinski <lauris@kaplinski.com>
8 * Frank Felfe <innerspace@iname.com>
9 * MenTaLguY <mental@rydia.net>
10 * bulia byak <buliabyak@users.sf.net>
11 * Ralf Stephan <ralf@ark.in-berlin.de>
12 * John Bintz <jcoswell@coswellproductions.org>
13 * Johan Engelen <j.b.c.engelen@ewi.utwente.nl>
14 * Jon A. Cruz <jon@joncruz.org>
15 * Abhishek Sharma
16 *
17 * Copyright (C) 2007 Jon A. Cruz
18 * Copyright (C) 2006-2008 Johan Engelen
19 * Copyright (C) 2006 John Bintz
20 * Copyright (C) 2004 MenTaLguY
21 * Copyright (C) 1999-2002 Lauris Kaplinski
22 * Copyright (C) 2000-2001 Ximian, Inc.
23 *
24 * Released under GNU GPL v2+, read the file 'COPYING' for more information.
25 */
26
27#ifndef INKSCAPE_DESKTOP_H
28#define INKSCAPE_DESKTOP_H
29
30#include <cstddef>
31#include <list>
32#include <memory>
33#include <string>
34#include <vector>
35#include <optional>
36#include <glibmm/refptr.h>
37#include <glibmm/ustring.h>
38#include <gtk/gtk.h> // EventController et al.
39#include <gdkmm/toplevel.h>
40#include <sigc++/signal.h>
41#include <2geom/affine.h>
42#include <2geom/transforms.h>
43#include <2geom/parallelogram.h>
44
45#include "display/rendermode.h"
46#include <sigc++/scoped_connection.h>
47#include "message-stack.h"
48#include "object/sp-gradient.h" // TODO refactor enums out to their own .h file
49
50namespace Gtk {
51class Box;
52class Toolbar;
53class Widget;
54class Window;
55} // namespace Gtk
56
61struct StopOnTrue {
62 using result_type = bool;
63
64 template<typename T_iterator>
65 result_type operator()(T_iterator first, T_iterator last) const {
66 for (; first != last; ++first)
67 if (*first) return true;
68 return false;
69 }
70};
71
77 using result_type = int;
78
79 template<typename T_iterator>
80 result_type operator()(T_iterator first, T_iterator last) const {
81 for (; first != last; ++first)
82 if (*first) return *first;
83 return 0;
84 }
85};
86
87// ------- Inkscape --------
88class SPCSSAttr;
89class SPDesktopWidget;
90class SPItem;
91class SPNamedView;
92class SPObject;
93class SPStyle;
94class SPStop;
95
96class InkscapeWindow;
98
99namespace Inkscape {
100struct CanvasEvent;
101class LayerManager;
102class PageManager;
103class MessageContext;
104class MessageStack;
105class Selection;
106
107class CanvasItem;
108class CanvasItemCatchall;
109class CanvasItemDrawing;
110class CanvasItemGroup;
111class CanvasItemRotate;
112
113namespace UI {
114
116
117namespace Dialog {
118class DialogContainer;
119} // namespace Dialog
120
121namespace Tools {
122class ToolBase;
123class TextTool;
124} // namespace Tools
125
126namespace Widget {
127class Canvas;
128class Dock;
129} // namespace Widget
130
131} // namespace UI
132
133namespace Display {
135class TemporaryItem;
137class SnapIndicator;
138} // namespace Display
139
140} // namespace Inkscape
141
142inline constexpr double SP_DESKTOP_ZOOM_MAX = 256.00;
143inline constexpr double SP_DESKTOP_ZOOM_MIN = 0.01;
144
149{
150public:
152 ~SPDesktop();
153
154 SPDesktop(SPDesktop const &) = delete;
155 SPDesktop &operator=(SPDesktop const &) = delete;
156 SPDesktop(SPDesktop &&) = delete;
158
159 SPDocument *doc() const { return document; }
162
164
165private:
167 std::unique_ptr<Inkscape::MessageStack> _message_stack;
168 std::unique_ptr<Inkscape::MessageContext> _tips_message_context;
169 std::unique_ptr<Inkscape::MessageContext> _guides_message_context;
170
171 sigc::scoped_connection _message_changed_connection;
172 sigc::scoped_connection _message_idle_connection;
174 sigc::connection _saved_or_modified_conn;
175
176 std::unique_ptr<Inkscape::UI::Tools::ToolBase> _tool;
177 std::unique_ptr<Inkscape::Display::TemporaryItemList> _temporary_item_list;
178 std::unique_ptr<Inkscape::Display::TranslucencyGroup> _translucency_group;
179 std::unique_ptr<Inkscape::Display::SnapIndicator> _snapindicator;
180
183
184 std::unique_ptr<Inkscape::UI::Widget::Canvas> canvas;
185
186public:
187 Inkscape::UI::Tools::ToolBase *getTool () const { return _tool.get(); }
188 Inkscape::Selection *getSelection () const { return _selection.get(); }
189 SPDocument *getDocument () const { return document; }
191 SPNamedView *getNamedView () const { return namedview; }
194 int viewNumber() const { return _view_number; }
195
205
206private:
208 std::unique_ptr<Inkscape::Selection> _selection;
209
210 // Groups
219 // Individual items
222
223 void _setupCanvasItems();
224
225public:
226 SPCSSAttr *current = nullptr;
227 bool _focusMode = false;
228
229 unsigned dkey = 0;
231 bool waiting_cursor = false;
232 bool showing_dialogs = false;
233 bool rotation_locked = false;
235 bool guides_active = false;
236
237 // Storage for selected dragger used by GrDrag as it's created and deleted by tools
238 SPItem *gr_item = nullptr;
240 unsigned gr_point_i = 0;
242
243 // An id attribute is not allowed to be the empty string.
245
246 sigc::signal<bool (SPCSSAttr const *, bool)>::accumulated<StopOnTrue> _set_style_signal;
247 sigc::signal<int (SPStyle *, int)>::accumulated<StopOnNonZero> _query_style_signal;
248
251 sigc::signal<void (double)> signal_zoom_changed;
252
253 template <typename F> sigc::connection connectDestroy(F &&slot) {
254 return _destroy_signal.connect(std::forward<F>(slot));
255 }
256
257 template <typename F> sigc::connection connectDocumentReplaced(F &&slot) {
258 return _document_replaced_signal.connect(std::forward<F>(slot));
259 }
260
261 template <typename F> sigc::connection connectEventContextChanged(F &&slot) {
262 return _event_context_changed_signal.connect(std::forward<F>(slot));
263 }
264
265 template <typename F> sigc::connection connectSetStyle(F &&slot) {
266 return _set_style_signal.connect(std::forward<F>(slot));
267 }
268
269 template <typename F> sigc::connection connectQueryStyle(F &&slot) {
270 return _query_style_signal.connect(std::forward<F>(slot));
271 }
272
273 // there's an object selected and it has a gradient fill and/or stroke; one of the gradient stops has been selected
274 // callback receives sender pointer and selected stop pointer
275 sigc::connection connect_gradient_stop_selected(sigc::slot<void (SPStop *)> const &slot);
276 // a path is being edited and one of its control points has been (de)selected using node tool
277 // callback receives sender pointer and control spoints selection pointer
278 sigc::connection connect_control_point_selected(sigc::slot<void (Inkscape::UI::ControlPointSelection *)> const &slot);
279 // there's an active text frame and user moves or clicks text cursor within it using text tool
280 // callback receives sender pointer and text tool pointer
281 sigc::connection connect_text_cursor_moved(sigc::slot<void (Inkscape::UI::Tools::TextTool *)> const &slot);
282
286
289
293
294 Inkscape::Display::TemporaryItem *add_temporary_canvasitem(Inkscape::CanvasItem *item, int lifetime_msecs, bool move_to_bottom = true);
296
298
300
301 bool isWithinViewport(SPItem const *item) const;
302 bool itemIsHidden(SPItem const *item) const;
303
304 void activate_guides(bool activate);
306
307 void setTool(std::string const &toolName);
308
309 void set_coordinate_status(Geom::Point const &p);
310 SPItem *getItemFromListAtPointBottom(std::vector<SPItem *> const &list, Geom::Point const &p) const;
311 SPItem *getItemAtPoint(Geom::Point const &p, bool into_groups, SPItem *upto = nullptr) const;
312 std::vector<SPItem*> getItemsAtPoints(std::vector<Geom::Point> ps, bool all_layers = true, bool topmost_only = true, size_t limit = 0, bool active_only = true) const;
313 SPItem *getGroupAtPoint(Geom::Point const &p) const;
314 Geom::Point point() const;
315
316 void prev_transform();
317 void next_transform();
319
320 void set_display_area(bool log = true);
321 void set_display_area(Geom::Point const &c, Geom::Point const &w, bool log = true);
322 void set_display_area(Geom::Rect const &a, Geom::Coord border, bool log = true);
325 void set_display_center(Geom::Rect const &a);
326
327 void zoom_absolute(Geom::Point const &c, double zoom, bool keep_point = true);
328 void zoom_relative(Geom::Point const &c, double zoom, bool keep_point = true);
329 void zoom_realworld(Geom::Point const &c, double ratio);
330
331 void zoom_drawing();
332 void zoom_selection();
334
335 double current_zoom() const { return _current_affine.getZoom(); }
337
338 void zoom_quick(bool enable = true);
340 bool quick_zoomed() const { return _quick_zoom_enabled; }
341
342 void quick_preview(bool activate);
343
344 void set_rotation_lock(bool lock) { rotation_locked = lock; }
345 bool get_rotation_lock() const { return rotation_locked; }
346
347 void zoom_grab_focus();
348 void rotate_grab_focus();
349
350 void rotate_absolute_keep_point (Geom::Point const &c, double rotate);
351 void rotate_relative_keep_point (Geom::Point const &c, double rotate);
352 void rotate_absolute_center_point(Geom::Point const &c, double rotate);
353 void rotate_relative_center_point(Geom::Point const &c, double rotate);
354
364 bool is_flipped(CanvasFlip flip);
365
367
368 void scroll_absolute(Geom::Point const &point);
369 void scroll_relative(Geom::Point const &delta);
370 void scroll_relative_in_svg_coords(double dx, double dy);
371 bool scroll_to_point(Geom::Point const &s_dt, double autoscrollspeed = 0);
372
374 void setWindowSize(Geom::IntPoint const &size);
375 void setWindowTransient(Gtk::Window &window, int transient_policy = 1);
376 InkscapeWindow const *getInkscapeWindow() const;
378 void presentWindow();
379
380 void showInfoDialog(Glib::ustring const &message);
381 bool warnDialog (Glib::ustring const &text);
382
385
387 void toggleRulers();
388 void toggleScrollbars();
389
390 void setTempHideOverlays(bool hide);
391 void layoutWidget();
392 void setToolboxFocusTo(char const *label);
393 Gtk::Widget *get_toolbar_by_name(Glib::ustring const &name);
394
395 void setToolboxAdjustmentValue(char const *id, double val);
396 bool isToolboxButtonActive(char const *id) const;
397 void updateDialogs();
398 void showNotice(Glib::ustring const &msg, int timeout = 0);
399
400 void setWaitingCursor();
401 void clearWaitingCursor();
402 bool isWaitingCursor() const { return waiting_cursor; };
403
404 void toggleLockGuides();
405 void toggleToolbar(char const *toolbar_name);
406
407 bool isMinimised() const;
408 bool is_darktheme () const;
409 bool is_maximized () const;
410 bool is_fullscreen() const;
411 bool is_focusMode () const;
412
413 void focusMode(bool mode = true);
414
416 Geom::Affine const &w2d() const { return _current_affine.w2d(); }
417 Geom::Point w2d(Geom::Point const &p) const { return p * _current_affine.w2d(); }
419 Geom::Affine const &d2w() const { return _current_affine.d2w(); }
420 Geom::Point d2w(Geom::Point const &p) const { return p * _current_affine.d2w(); }
421 Geom::Affine const &doc2dt() const;
422 Geom::Affine const &dt2doc() const;
423 Geom::Point doc2dt(Geom::Point const &p) const { return p * doc2dt(); }
424 Geom::Point dt2doc(Geom::Point const &p) const { return p * dt2doc(); }
425
426 double yaxisdir() const { return doc2dt()[3]; }
427 bool is_yaxisdown() const { return yaxisdir() > 0; }
428
430
431 void onWindowStateChanged(Gdk::Toplevel::State changed, Gdk::Toplevel::State new_toplevel_state);
432
433 void applyCurrentOrToolStyle(SPObject *obj, Glib::ustring const &tool_path, bool with_text);
434
435private:
437
438 void _attachDocument();
439 void _detachDocument();
440
441 // This simple class ensures that _w2d is always in sync with _rotation and _scale
442 // We keep rotation and scale separate to avoid having to extract them from the affine.
443 // With offset, this describes fully how to map the drawing to the window.
444 // Future: merge offset as a translation in w2d.
446 {
447 public:
448 Geom::Affine const &w2d() const { return _w2d; };
449 Geom::Affine const &d2w() const { return _d2w; };
450
451 void setScale(Geom::Scale scale) {
452 _scale = scale;
453 _update();
454 }
455 void addScale(Geom::Scale scale) {
456 _scale *= scale;
457 _update();
458 }
459
460 void setRotate(Geom::Rotate rotate) {
461 _rotate = rotate;
462 _update();
463 }
464 void setRotate(double rotate) {
465 setRotate(Geom::Rotate{rotate});
466 }
467 void addRotate(Geom::Rotate rotate) {
468 _rotate *= rotate;
469 _update();
470 }
471 void addRotate(double rotate) {
472 addRotate(Geom::Rotate{rotate});
473 }
474
475 void setFlip(CanvasFlip flip) {
476 _flip = Geom::Scale();
477 addFlip( flip );
478 }
479
481 if ((flip & FLIP_HORIZONTAL) && Geom::are_near(_flip[0], -1)) {
482 return true;
483 }
484 if ((flip & FLIP_VERTICAL) && Geom::are_near(_flip[1], -1)) {
485 return true;
486 }
487 return false;
488 }
489
490 void addFlip(CanvasFlip flip) {
491 if (flip & FLIP_HORIZONTAL) {
492 _flip *= Geom::Scale(-1.0, 1.0);
493 }
494 if (flip & FLIP_VERTICAL) {
495 _flip *= Geom::Scale(1.0, -1.0);
496 }
497 _update();
498 }
499
500 double getZoom() const {
501 return _d2w.descrim();
502 }
503
504 Geom::Rotate const &getRotation() const {
505 return _rotate;
506 }
507
515 return _offset;
516 }
517
518 private:
519 void _update() {
520 _d2w = _scale * _rotate * _flip;
521 _w2d = _d2w.inverse();
522 }
523 Geom::Affine _w2d; // Window to desktop
524 Geom::Affine _d2w; // Desktop to window
525 Geom::Rotate _rotate; // Rotate part of _w2d
526 Geom::Scale _scale; // Scale part of _w2d, holds y-axis direction
527 Geom::Scale _flip; // Flip part of _w2d
528 Geom::Point _offset; // Point on canvas to align to (0,0) of window
529 };
530
532 std::list<DesktopAffine> transforms_past;
533 std::list<DesktopAffine> transforms_future;
534 bool _quick_zoom_enabled = false;
536
537 bool _overlays_visible = true;
539
540 std::unique_ptr<Inkscape::LayerManager> _layer_manager;
541
542 sigc::signal<void (SPDesktop *)> _destroy_signal;
545 sigc::signal<void (SPStop *)> _gradient_stop_selected;
548
549 sigc::scoped_connection _reconstruction_start_connection;
550 sigc::scoped_connection _reconstruction_finish_connection;
552 sigc::scoped_connection _y_axis_flipped;
553
557 void handle_y_axis_flip(double yshift);
558
559 // pinch zoom
560 std::optional<double> _begin_zoom;
561 void on_zoom_begin(Gdk::EventSequence *sequence);
562 void on_zoom_scale(double scale);
563 void on_zoom_end(Gdk::EventSequence *sequence);
564
565 void onStatusMessage(Inkscape::MessageType type, char const *message);
566};
567
568#endif // INKSCAPE_DESKTOP_H
569
570/*
571 Local Variables:
572 mode:c++
573 c-file-style:"stroustrup"
574 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
575 indent-tabs-mode:nil
576 fill-column:99
577 End:
578*/
579// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :
double scale
Definition aa.cpp:228
3x3 affine transformation matrix.
3x3 matrix representing an affine transformation.
Definition affine.h:70
Coord descrim() const
Calculate the descriminant.
Definition affine.cpp:434
Affine inverse() const
Compute the inverse matrix.
Definition affine.cpp:388
Two-dimensional point with integer coordinates.
Definition int-point.h:57
Paralellogram, representing a linear transformation of a rectangle.
Two-dimensional point that doubles as a vector.
Definition point.h:66
Axis aligned, non-empty rectangle.
Definition rect.h:92
Rotation around the origin.
Definition transforms.h:187
Scaling from the origin.
Definition transforms.h:150
Provides a class that can contain active TemporaryItems on a desktop.
Provides a class to put a canvasitem temporarily on-canvas.
SVG drawing item for display.
A convenience class for working with MessageStacks.
A class which holds a stack of displayed messages.
The set of selected SPObjects for a given document and layer model.
Definition selection.h:80
Group of selected control points.
A widget that manages DialogNotebook's and other widgets inside a horizontal DialogMultipaned contain...
Base class for Event processors.
Definition tool-base.h:107
A widget for Inkscape's canvas.
Definition canvas.h:62
A GtkBox on an SPDesktop.
double getZoom() const
Definition desktop.h:500
void addScale(Geom::Scale scale)
Definition desktop.h:455
Geom::Rotate const & getRotation() const
Definition desktop.h:504
void setRotate(Geom::Rotate rotate)
Definition desktop.h:460
Geom::Affine const & w2d() const
Definition desktop.h:448
bool isFlipped(CanvasFlip flip)
Definition desktop.h:480
void addFlip(CanvasFlip flip)
Definition desktop.h:490
void setOffset(Geom::Point offset)
Definition desktop.h:508
void setScale(Geom::Scale scale)
Definition desktop.h:451
void addRotate(Geom::Rotate rotate)
Definition desktop.h:467
Geom::Point const & getOffset()
Definition desktop.h:514
void setRotate(double rotate)
Definition desktop.h:464
void addOffset(Geom::Point offset)
Definition desktop.h:511
Geom::Rotate _rotate
Definition desktop.h:525
void setFlip(CanvasFlip flip)
Definition desktop.h:475
Geom::Affine const & d2w() const
Definition desktop.h:449
void addRotate(double rotate)
Definition desktop.h:471
To do: update description of desktop.
Definition desktop.h:149
Inkscape::CanvasItemGroup * _canvas_group_grids
Grids.
Definition desktop.h:213
bool rotation_locked
Definition desktop.h:233
Inkscape::UI::Widget::Canvas * getCanvas() const
Definition desktop.h:190
unsigned interaction_disabled_counter
Definition desktop.h:230
double current_zoom() const
Definition desktop.h:335
Inkscape::CanvasItemGroup * getCanvasGuides() const
Definition desktop.h:200
void toggleLockGuides()
Definition desktop.cpp:1172
sigc::signal< void(SPDesktop *)> _destroy_signal
Definition desktop.h:542
Geom::Point current_center() const
Definition desktop.cpp:660
void setTool(std::string const &toolName)
Replaces the currently active tool with a new one.
Definition desktop.cpp:308
void _attachDocument()
Definition desktop.cpp:1197
Geom::Parallelogram get_display_area() const
Return canvas viewbox in desktop coordinates.
Definition desktop.cpp:521
std::unique_ptr< Inkscape::Display::TemporaryItemList > _temporary_item_list
Definition desktop.h:177
void toggleToolbar(char const *toolbar_name)
Definition desktop.cpp:1074
Inkscape::CanvasItemGroup * getCanvasControls() const
Definition desktop.h:196
void emit_control_point_selected(Inkscape::UI::ControlPointSelection *selection)
Definition desktop.cpp:1365
sigc::connection connectDocumentReplaced(F &&slot)
Definition desktop.h:257
SPDocument * getDocument() const
Definition desktop.h:189
void focusMode(bool mode=true)
Changes whether the user is in focus mode or not.
Definition desktop.cpp:949
std::vector< SPItem * > getItemsAtPoints(std::vector< Geom::Point > ps, bool all_layers=true, bool topmost_only=true, size_t limit=0, bool active_only=true) const
Definition desktop.cpp:358
void emit_text_cursor_moved(Inkscape::UI::Tools::TextTool *tool)
Definition desktop.cpp:1369
Inkscape::Display::TemporaryItem * add_temporary_canvasitem(Inkscape::CanvasItem *item, int lifetime_msecs, bool move_to_bottom=true)
One should not keep a reference to the SPCanvasItem, the temporary item code will delete the object f...
Definition desktop.cpp:229
void setRenderMode(Inkscape::RenderMode mode)
Definition desktop.cpp:1002
bool _focusMode
Whether we're focused working or general working.
Definition desktop.h:227
bool itemIsHidden(SPItem const *item) const
Definition desktop.cpp:264
void zoom_grab_focus()
Tell widget to let zoom widget grab keyboard focus.
Definition desktop.cpp:722
Inkscape::CanvasItemGroup * _canvas_group_drawing
SVG Drawing.
Definition desktop.h:212
void rotate_relative_center_point(Geom::Point const &c, double rotate)
Rotate aligning the point 'c' to the center of desktop window.
Definition desktop.cpp:781
void setToolboxFocusTo(char const *label)
Definition desktop.cpp:1128
std::list< DesktopAffine > transforms_past
Definition desktop.h:532
SPItem * gr_item
Definition desktop.h:238
unsigned dkey
Definition desktop.h:229
std::optional< double > _begin_zoom
Definition desktop.h:560
InkscapeWindow const * getInkscapeWindow() const
Definition desktop.cpp:975
void flip_relative_center_point(Geom::Point const &c, CanvasFlip flip)
Flip direction, aligning the point 'c' to the center of desktop window.
Definition desktop.cpp:837
Inkscape::CanvasItemGroup * getCanvasSketch() const
Definition desktop.h:201
void set_display_area(bool log=true)
Does all the dirty work in setting the display area.
Definition desktop.cpp:448
bool is_darktheme() const
Definition desktop.cpp:919
Geom::Point doc2dt(Geom::Point const &p) const
Definition desktop.h:423
Inkscape::MessageStack * messageStack() const
Definition desktop.h:160
Inkscape::CanvasItemGroup * getCanvasTemp() const
Definition desktop.h:202
sigc::connection connectQueryStyle(F &&slot)
Definition desktop.h:269
DesktopAffine _quick_zoom_affine
The transform of the screen before quick zoom.
Definition desktop.h:535
Inkscape::CanvasItemCatchall * _canvas_catchall
The bottom item for unclaimed events.
Definition desktop.h:220
bool quick_zoomed() const
Returns whether the desktop is in quick zoom mode or not.
Definition desktop.h:340
SPCSSAttr * current
Current style.
Definition desktop.h:226
bool waiting_cursor
Definition desktop.h:231
void _detachDocument()
Definition desktop.cpp:1256
void handle_y_axis_flip(double yshift)
Definition desktop.cpp:1326
Geom::Affine const & dt2doc() const
Definition desktop.cpp:1343
void updateDialogs()
Definition desktop.cpp:1150
Geom::Affine const & d2w() const
Transformation from desktop to window coordinates.
Definition desktop.h:419
sigc::scoped_connection _message_changed_connection
Definition desktop.h:171
void rotate_relative_keep_point(Geom::Point const &c, double rotate)
Rotate keeping the point 'c' fixed in the desktop window.
Definition desktop.cpp:755
void on_zoom_scale(double scale)
Definition desktop.cpp:1382
Geom::Point point() const
Returns the mouse point in desktop coordinates; if mouse is outside the canvas, returns the center of...
Definition desktop.cpp:378
bool isWithinViewport(SPItem const *item) const
True if desktop viewport intersects item's bbox.
Definition desktop.cpp:253
void zoom_quick(bool enable=true)
Performs a quick zoom into what the user is working on.
Definition desktop.cpp:669
SPDesktop & operator=(SPDesktop &&)=delete
bool drawing_handler(Inkscape::CanvasEvent const &event, Inkscape::DrawingItem *item)
Calls event handler of current event context.
Definition desktop.cpp:1283
Inkscape::CanvasItemCatchall * getCanvasCatchall() const
Definition desktop.h:203
Inkscape::CanvasItemGroup * _canvas_group_guides
Guide lines.
Definition desktop.h:214
void scroll_relative_in_svg_coords(double dx, double dy)
Scroll canvas by specific coordinate amount in svg coordinates.
Definition desktop.cpp:882
Inkscape::CanvasItemGroup * getCanvasGrids() const
Definition desktop.h:199
void set_rotation_lock(bool lock)
Definition desktop.h:344
SPItem * getItemAtPoint(Geom::Point const &p, bool into_groups, SPItem *upto=nullptr) const
Definition desktop.cpp:352
Gtk::Widget * get_toolbar_by_name(Glib::ustring const &name)
Definition desktop.cpp:1139
unsigned gr_point_i
Definition desktop.h:240
void scroll_relative(Geom::Point const &delta)
Scroll canvas by specific coordinate amount (window coordinates).
Definition desktop.cpp:872
void rotate_grab_focus()
Tell widget to let rotate widget grab keyboard focus.
Definition desktop.cpp:731
SPDesktop(SPDesktop &&)=delete
int _view_number
Definition desktop.h:182
SPItem * getItemFromListAtPointBottom(std::vector< SPItem * > const &list, Geom::Point const &p) const
Definition desktop.cpp:343
std::unique_ptr< Inkscape::MessageStack > _message_stack
Definition desktop.h:167
void flip_absolute_keep_point(Geom::Point const &c, CanvasFlip flip)
Set new flip direction, keeping the point 'c' fixed in the desktop window.
Definition desktop.cpp:795
void layoutWidget()
Definition desktop.cpp:1086
Inkscape::MessageContext * tipsMessageContext() const
Definition desktop.h:161
std::unique_ptr< Inkscape::Selection > _selection
current selection; will never generally be NULL
Definition desktop.h:208
void rotate_absolute_center_point(Geom::Point const &c, double rotate)
Set new rotation, aligning the point 'c' to the center of desktop window.
Definition desktop.cpp:768
std::unique_ptr< Inkscape::UI::Tools::ToolBase > _tool
Definition desktop.h:176
sigc::scoped_connection _reconstruction_finish_connection
Definition desktop.h:550
void showInfoDialog(Glib::ustring const &message)
Definition desktop.cpp:991
void flip_relative_keep_point(Geom::Point const &c, CanvasFlip flip)
Flip direction, keeping the point 'c' fixed in the desktop window.
Definition desktop.cpp:809
sigc::signal< void(SPDesktop *, Inkscape::UI::Tools::ToolBase *)> _event_context_changed_signal
Definition desktop.h:544
Inkscape::Display::SnapIndicator * getSnapIndicator() const
Definition desktop.h:193
SPNamedView * namedview
Definition desktop.h:181
bool isToolboxButtonActive(char const *id) const
Definition desktop.cpp:1145
bool is_fullscreen() const
Definition desktop.cpp:929
void prev_transform()
Revert back to previous transform if possible.
Definition desktop.cpp:390
std::unique_ptr< Inkscape::Display::SnapIndicator > _snapindicator
Definition desktop.h:179
SPNamedView * getNamedView() const
Definition desktop.h:191
void zoom_realworld(Geom::Point const &c, double ratio)
Zoom in to an absolute realworld ratio, e.g.
Definition desktop.cpp:570
Inkscape::CanvasItemDrawing * getCanvasDrawing() const
Definition desktop.h:204
bool _overlays_visible
Whether the overlays are temporarily hidden.
Definition desktop.h:537
void quick_preview(bool activate)
Definition desktop.cpp:1067
SPDesktopWidget * getDesktopWidget() const
Definition desktop.h:192
sigc::connection connect_gradient_stop_selected(sigc::slot< void(SPStop *)> const &slot)
Definition desktop.cpp:1349
GrPointType gr_point_type
Definition desktop.h:239
void setWindowSize(Geom::IntPoint const &size)
Definition desktop.cpp:965
void set_display_center(Geom::Rect const &a)
Centre Rect, without zooming.
Definition desktop.cpp:593
std::unique_ptr< Inkscape::MessageContext > _tips_message_context
Definition desktop.h:168
Inkscape::UI::Dialog::DialogContainer * getContainer()
Definition desktop.cpp:335
SPDocument * document
Definition desktop.h:166
void change_document(SPDocument *document)
Make desktop switch documents.
Definition desktop.cpp:281
SPItem * getGroupAtPoint(Geom::Point const &p) const
Definition desktop.cpp:368
Inkscape::Selection * getSelection() const
Definition desktop.h:188
sigc::scoped_connection _reconstruction_start_connection
Definition desktop.h:549
Inkscape::CanvasItemGroup * _canvas_group_pages_bg
Page background.
Definition desktop.h:217
SPDesktopWidget * _widget
Definition desktop.h:436
void remove_temporary_canvasitem(Inkscape::Display::TemporaryItem *tempitem)
It is perfectly safe to call this function while the object has already been deleted due to a timeout...
Definition desktop.cpp:242
Inkscape::PaintTarget gr_fill_or_stroke
Definition desktop.h:241
sigc::connection connectDestroy(F &&slot)
Definition desktop.h:253
void on_zoom_end(Gdk::EventSequence *sequence)
Definition desktop.cpp:1393
DesktopAffine _current_affine
Definition desktop.h:531
sigc::connection connect_text_cursor_moved(sigc::slot< void(Inkscape::UI::Tools::TextTool *)> const &slot)
Definition desktop.cpp:1357
sigc::signal< void(SPDesktop *, SPDocument *)> _document_replaced_signal
Definition desktop.h:543
bool guides_active
Definition desktop.h:235
bool get_rotation_lock() const
Definition desktop.h:345
Geom::Rotate const & current_rotation() const
Definition desktop.h:366
sigc::signal< void(double)> signal_zoom_changed
Emitted when the zoom factor changes (not emitted when scrolling).
Definition desktop.h:251
Inkscape::UI::Tools::ToolBase * getTool() const
Definition desktop.h:187
double yaxisdir() const
Definition desktop.h:426
std::unique_ptr< Inkscape::LayerManager > _layer_manager
Definition desktop.h:540
bool showing_dialogs
Definition desktop.h:232
void rotate_absolute_keep_point(Geom::Point const &c, double rotate)
Set new rotation, keeping the point 'c' fixed in the desktop window.
Definition desktop.cpp:742
sigc::scoped_connection _schedule_zoom_from_document_connection
Definition desktop.h:551
void toggleRulers()
Definition desktop.cpp:1023
sigc::connection connect_control_point_selected(sigc::slot< void(Inkscape::UI::ControlPointSelection *)> const &slot)
Definition desktop.cpp:1353
void set_coordinate_status(Geom::Point const &p)
Sets the coordinate status to a given point.
Definition desktop.cpp:331
Inkscape::MessageContext * guidesMessageContext() const
Definition desktop.h:290
Inkscape::CanvasItemGroup * _canvas_group_pages_fg
Page border + shadow.
Definition desktop.h:218
sigc::connection connectSetStyle(F &&slot)
Definition desktop.h:265
bool isMinimised() const
Definition desktop.cpp:914
bool isWaitingCursor() const
Definition desktop.h:402
SPDocument * doc() const
Definition desktop.h:159
void clearWaitingCursor()
Definition desktop.cpp:1166
void applyCurrentOrToolStyle(SPObject *obj, Glib::ustring const &tool_path, bool with_text)
Apply the desktop's current style or the tool style to the object.
Definition desktop.cpp:1110
void zoom_selection()
Zoom to selection.
Definition desktop.cpp:625
bool scroll_to_point(Geom::Point const &s_dt, double autoscrollspeed=0)
Scroll screen so as to keep point 'p' visible in window.
Definition desktop.cpp:894
void setWindowTransient(Gtk::Window &window, int transient_policy=1)
Definition desktop.cpp:970
sigc::signal< void(Inkscape::UI::ControlPointSelection *)> _control_point_selected
Definition desktop.h:546
sigc::signal< bool(SPCSSAttr const *, bool)>::accumulated< StopOnTrue > _set_style_signal
Definition desktop.h:246
void _setupCanvasItems()
Definition desktop.cpp:137
void emit_gradient_stop_selected(SPStop *stop)
Definition desktop.cpp:1361
Geom::IntPoint getWindowSize() const
Definition desktop.cpp:960
Inkscape::CanvasItemGroup * getCanvasPagesFg() const
Definition desktop.h:198
Glib::ustring _reconstruction_old_layer_id
Definition desktop.h:244
bool _saved_guides_visible
Remembers guides' visibility when hiding overlays.
Definition desktop.h:538
bool is_maximized() const
Definition desktop.cpp:924
sigc::connection _saved_or_modified_conn
Definition desktop.h:174
bool is_flipped(CanvasFlip flip)
Definition desktop.cpp:845
void toggleScrollbars()
Definition desktop.cpp:1029
sigc::signal< void(Inkscape::UI::Tools::TextTool *)> _text_cursor_moved
Definition desktop.h:547
std::unique_ptr< Inkscape::UI::Widget::Canvas > canvas
Definition desktop.h:184
std::unique_ptr< Inkscape::Display::TranslucencyGroup > _translucency_group
Definition desktop.h:178
std::unique_ptr< Inkscape::MessageContext > _guides_message_context
Definition desktop.h:169
Inkscape::CanvasItemDrawing * _canvas_drawing
The actual SVG drawing (a.k.a. arena).
Definition desktop.h:221
SPDesktop(SPDesktop const &)=delete
Inkscape::CanvasItemGroup * _canvas_group_controls
Handles, knots, nodes, etc.
Definition desktop.h:211
@ FLIP_HORIZONTAL
Definition desktop.h:357
@ FLIP_NONE
Definition desktop.h:356
@ FLIP_VERTICAL
Definition desktop.h:358
Geom::Point w2d(Geom::Point const &p) const
Definition desktop.h:417
void setDesktopWidget(SPDesktopWidget *dtw)
Definition desktop.cpp:208
Inkscape::CanvasItemGroup * getCanvasPagesBg() const
Definition desktop.h:197
sigc::scoped_connection _message_idle_connection
Definition desktop.h:172
bool is_yaxisdown() const
Definition desktop.h:427
void schedule_zoom_from_document()
Schedule the zoom/view settings from the document to be applied to the desktop just after the canvas ...
Definition desktop.cpp:648
bool _quick_zoom_enabled
Signifies that currently we're in quick zoom mode.
Definition desktop.h:534
void clear_transform_history()
Clear transform lists.
Definition desktop.cpp:437
sigc::signal< int(SPStyle *, int)>::accumulated< StopOnNonZero > _query_style_signal
Definition desktop.h:247
void presentWindow()
Definition desktop.cpp:986
void showNotice(Glib::ustring const &msg, int timeout=0)
Definition desktop.cpp:1268
sigc::scoped_connection _y_axis_flipped
Definition desktop.h:552
void reconstruction_finish()
Called when document rebuild is finished.
Definition desktop.cpp:1313
int viewNumber() const
Definition desktop.h:194
void reconstruction_start()
Called when document is starting to be rebuilt.
Definition desktop.cpp:1303
void setToolboxAdjustmentValue(char const *id, double val)
Definition desktop.cpp:1134
void flip_absolute_center_point(Geom::Point const &c, CanvasFlip flip)
Set new flip direction, aligning the point 'c' to the center of desktop window.
Definition desktop.cpp:823
sigc::signal< void(SPStop *)> _gradient_stop_selected
Definition desktop.h:545
bool is_focusMode() const
Checks to see if the user is working in focused mode.
Definition desktop.cpp:939
SPDesktop & operator=(SPDesktop const &)=delete
void zoom_relative(Geom::Point const &c, double zoom, bool keep_point=true)
Zoom in or out relatively to the current zoom.
Definition desktop.cpp:557
Inkscape::LayerManager const & layerManager() const
Definition desktop.h:288
Inkscape::LayerManager & layerManager()
Definition desktop.h:287
Geom::Point d2w(Geom::Point const &p) const
Definition desktop.h:420
void scroll_absolute(Geom::Point const &point)
Scroll canvas by to a particular point (window coordinates).
Definition desktop.cpp:854
void set_display_width(Geom::Rect const &a, Geom::Coord border)
Set display area in only the width dimension.
Definition desktop.cpp:580
void setDocument(SPDocument *doc)
Associate document with desktop.
Definition desktop.cpp:1183
Inkscape::Display::TranslucencyGroup & getTranslucencyGroup() const
Definition desktop.h:297
void zoom_absolute(Geom::Point const &c, double zoom, bool keep_point=true)
Zoom to the given absolute zoom level.
Definition desktop.cpp:538
void setColorMode(Inkscape::ColorMode mode)
Definition desktop.cpp:1010
Inkscape::CanvasItemGroup * _canvas_group_sketch
Temporary items before becoming permanent.
Definition desktop.h:215
Geom::Affine const & doc2dt() const
Definition desktop.cpp:1337
std::list< DesktopAffine > transforms_future
Definition desktop.h:533
void next_transform()
Set transform to next in list.
Definition desktop.cpp:416
void setWaitingCursor()
Definition desktop.cpp:1155
sigc::connection connectEventContextChanged(F &&slot)
Definition desktop.h:261
void setTempHideOverlays(bool hide)
Shows or hides the on-canvas overlays and controls, such as grids, guides, manipulation handles,...
Definition desktop.cpp:1039
bool warnDialog(Glib::ustring const &text)
Definition desktop.cpp:997
void toggleCommandPalette()
Definition desktop.cpp:1019
void onStatusMessage(Inkscape::MessageType type, char const *message)
Definition desktop.cpp:1273
Inkscape::CanvasItemGroup * _canvas_group_temp
Temporary items that self-destruct.
Definition desktop.h:216
void zoom_drawing()
Zoom to whole drawing.
Definition desktop.cpp:602
sigc::connection _document_uri_set_connection
Definition desktop.h:173
Geom::Point dt2doc(Geom::Point const &p) const
Definition desktop.h:424
void onWindowStateChanged(Gdk::Toplevel::State changed, Gdk::Toplevel::State new_toplevel_state)
onWindowStateChanged
Definition desktop.cpp:1097
void on_zoom_begin(Gdk::EventSequence *sequence)
Definition desktop.cpp:1377
Geom::Affine const & w2d() const
Transformation from window to desktop coordinates (zoom/rotate).
Definition desktop.h:416
void activate_guides(bool activate)
Set activate status of current desktop's named view.
Definition desktop.cpp:272
Typed SVG document implementation.
Definition document.h:103
Base class for visual SVG elements.
Definition sp-item.h:109
SPObject is an abstract base class of all of the document nodes at the SVG document level.
Definition sp-object.h:160
Gradient stop.
Definition sp-stop.h:31
An SVG style object.
Definition style.h:45
const double w
Definition conic-4.cpp:19
sigc::scoped_connection timeout
Glib::ustring msg
double c[8][4]
constexpr double SP_DESKTOP_ZOOM_MIN
Definition desktop.h:143
constexpr double SP_DESKTOP_ZOOM_MAX
Definition desktop.h:142
double Coord
Floating point type used to store coordinates.
Definition coord.h:76
SPItem * item
double offset
Glib::ustring label
Raw stack of active status messages.
bool are_near(Affine const &a1, Affine const &a2, Coord eps=EPSILON)
Definition desktop.h:50
Helper class to stream background task notifications as a series of messages.
MessageType
A hint about the meaning of a message; is it an ordinary message, a message advising the user of some...
Definition message.h:25
int mode
int size
Piecewise< SBasis > log(Interval in)
Definition pw-funcs.cpp:37
TODO: insert short description here.
GrPointType
Definition sp-gradient.h:46
@ POINT_LG_BEGIN
Definition sp-gradient.h:47
Abstract base class for events.
Iterates until nonzero or returns 0.
Definition desktop.h:76
int result_type
Definition desktop.h:77
result_type operator()(T_iterator first, T_iterator last) const
Definition desktop.h:80
Iterates until true or returns false.
Definition desktop.h:61
result_type operator()(T_iterator first, T_iterator last) const
Definition desktop.h:65
bool result_type
Definition desktop.h:62
int delta
double border
Glib::ustring name
Definition toolbars.cpp:55
static void activate(GApplication *app, gpointer)
Affine transformation classes.