1 /* 2 * Xournal++ 3 * 4 * Handles the XournalppCursor 5 * 6 * @author Xournal++ Team 7 * https://github.com/xournalpp/xournalpp 8 * 9 * @license GNU GPLv2 or later 10 */ 11 12 #pragma once 13 14 #include <string> 15 #include <vector> 16 17 #include <gtk/gtk.h> 18 19 #include "control/tools/CursorSelectionType.h" 20 #include "gui/inputdevices/InputEvents.h" 21 22 #include "XournalType.h" 23 24 class Control; 25 26 class XournalppCursor { 27 public: 28 XournalppCursor(Control* control); 29 virtual ~XournalppCursor(); 30 31 void setCursorBusy(bool busy); 32 void updateCursor(); 33 34 void setMouseSelectionType(CursorSelectionType selectionType); 35 36 void setMouseDown(bool mouseDown); 37 void setInvisible(bool invisible); 38 void setInsidePage(bool insidePage); 39 void activateDrawDirCursor(bool enable, bool shift = false, bool ctrl = false); 40 void setInputDeviceClass(InputDeviceClass inputDevice); 41 void setRotationAngle(double angle); 42 void setMirror(bool mirror); 43 44 private: 45 void setCursor(int id); 46 47 GdkCursor* getPenCursor(); 48 49 GdkCursor* getEraserCursor(); 50 GdkCursor* getHighlighterCursor(); 51 GdkCursor* getResizeCursor(double deltaAngle); 52 53 GdkCursor* createHighlighterOrPenCursor(int size, double alpha); 54 GdkCursor* createCustomDrawDirCursor(int size, bool shift, bool ctrl); 55 56 private: 57 InputDeviceClass inputDevice = INPUT_DEVICE_MOUSE; 58 59 Control* control = nullptr; 60 bool busy = false; 61 bool insidePage = false; 62 CursorSelectionType selectionType = CURSOR_SELECTION_NONE; 63 64 bool mouseDown = false; 65 bool invisible = false; 66 67 // One shot drawDir custom cursor -drawn instead of pen/stylus then cleared. 68 bool drawDirActive = false; 69 bool drawDirShift = false; 70 bool drawDirCtrl = false; 71 72 // avoid re-assigning same cursor 73 guint currentCursor = 0; // enum AVAILABLECURSORS 74 gulong currentCursorFlavour{}; // for different flavours of a cursor (i.e. drawdir, pen and highlighter custom 75 // cursors) 76 77 // for resizing rotated/mirrored selections 78 double angle = 0; 79 bool mirror = false; 80 }; 81