1 /*
2  *  This file is part of RawTherapee.
3  *
4  *  Copyright (c) 2004-2010 Gabor Horvath <hgabor@rawtherapee.com>
5  *
6  *  RawTherapee is free software: you can redistribute it and/or modify
7  *  it under the terms of the GNU General Public License as published by
8  *  the Free Software Foundation, either version 3 of the License, or
9  *  (at your option) any later version.
10  *
11  *  RawTherapee is distributed in the hope that it will be useful,
12  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  *  GNU General Public License for more details.
15  *
16  *  You should have received a copy of the GNU General Public License
17  *  along with RawTherapee.  If not, see <https://www.gnu.org/licenses/>.
18  */
19 #pragma once
20 
21 #include <gtkmm.h>
22 
23 enum CursorShape {
24     CSAddColPicker,
25     CSArrow,
26     CSCropSelect,
27     CSCrosshair,
28     CSEmpty,
29     CSHandClosed,
30     CSHandOpen,
31     CSMove,
32     CSMove1DH,
33     CSMove1DV,
34     CSMove2D,
35     CSMoveLeft,
36     CSMoveRight,
37     CSMoveRotate,
38     CSPlus,
39     CSResizeBottomLeft,
40     CSResizeBottomRight,
41     CSResizeDiagonal,
42     CSResizeHeight,
43     CSResizeTopLeft,
44     CSResizeTopRight,
45     CSResizeWidth,
46     CSSpotWB,
47     CSStraighten,
48     CSUndefined,
49     CSWait
50 };
51 
52 class CursorManager
53 {
54 
55 private:
56     Glib::RefPtr<Gdk::Cursor> cAdd;
57     Glib::RefPtr<Gdk::Cursor> cAddPicker;
58     Glib::RefPtr<Gdk::Cursor> cCropDraw;
59     Glib::RefPtr<Gdk::Cursor> cCrosshair;
60     Glib::RefPtr<Gdk::Cursor> cHandClosed;
61     Glib::RefPtr<Gdk::Cursor> cHandOpen;
62     Glib::RefPtr<Gdk::Cursor> cEmpty;
63     Glib::RefPtr<Gdk::Cursor> cMoveBL;
64     Glib::RefPtr<Gdk::Cursor> cMoveBR;
65     Glib::RefPtr<Gdk::Cursor> cMoveL;
66     Glib::RefPtr<Gdk::Cursor> cMoveR;
67     Glib::RefPtr<Gdk::Cursor> cMoveTL;
68     Glib::RefPtr<Gdk::Cursor> cMoveTR;
69     Glib::RefPtr<Gdk::Cursor> cMoveX;
70     Glib::RefPtr<Gdk::Cursor> cMoveY;
71     Glib::RefPtr<Gdk::Cursor> cMoveXY;
72     Glib::RefPtr<Gdk::Cursor> cRotate;
73     Glib::RefPtr<Gdk::Cursor> cWB;
74     Glib::RefPtr<Gdk::Cursor> cWait;
75 
76     Glib::RefPtr<Gdk::Display> display;
77     Glib::RefPtr<Gdk::Window> window;
78 
79     void setCursor (CursorShape shape);
80     void setCursor (Glib::RefPtr<Gdk::Window> window, CursorShape shape);
81 
82 public:
83     void init                         (Glib::RefPtr<Gdk::Window> mainWindow);
84     void cleanup                      ();
85     static void setWidgetCursor       (Glib::RefPtr<Gdk::Window> window, CursorShape shape);
86     static void setCursorOfMainWindow (Glib::RefPtr<Gdk::Window> window, CursorShape shape);
87 };
88 
89 extern CursorManager mainWindowCursorManager;
90 extern CursorManager editWindowCursorManager;
91