diff --git a/rtdata/images/themed/png/dark/crosshair-small.png b/rtdata/images/themed/png/dark/crosshair-small.png
new file mode 100644
index 000000000..66db0bd42
Binary files /dev/null and b/rtdata/images/themed/png/dark/crosshair-small.png differ
diff --git a/rtdata/images/themed/png/light/crosshair-small.png b/rtdata/images/themed/png/light/crosshair-small.png
new file mode 100644
index 000000000..a898a2fdb
Binary files /dev/null and b/rtdata/images/themed/png/light/crosshair-small.png differ
diff --git a/rtdata/images/themed/svg/crosshair-small.svg b/rtdata/images/themed/svg/crosshair-small.svg
new file mode 100644
index 000000000..2e5e6596a
--- /dev/null
+++ b/rtdata/images/themed/svg/crosshair-small.svg
@@ -0,0 +1,172 @@
+
+
+
+
diff --git a/rtgui/cursormanager.cc b/rtgui/cursormanager.cc
index 9864a5da2..34efbcac8 100644
--- a/rtgui/cursormanager.cc
+++ b/rtgui/cursormanager.cc
@@ -36,50 +36,45 @@ void CursorManager::init (Glib::RefPtr mainWindow)
#endif
- cResizeWidth = Gdk::Cursor::create (display, Gdk::SB_H_DOUBLE_ARROW);
- cResizeHeight = Gdk::Cursor::create (display, Gdk::SB_V_DOUBLE_ARROW);
- cResizeTopLeft = Gdk::Cursor::create (display, Gdk::TOP_LEFT_CORNER);
- cResizeTopRight = Gdk::Cursor::create (display, Gdk::TOP_RIGHT_CORNER);
- cResizeBottomLeft = Gdk::Cursor::create (display, Gdk::BOTTOM_LEFT_CORNER);
- cResizeBottomRight = Gdk::Cursor::create (display, Gdk::BOTTOM_RIGHT_CORNER);
- cCropDraw = Gdk::Cursor::create (display, Gdk::CROSSHAIR);
- cCropSelection = Gdk::Cursor::create (display, Gdk::STAR); // ?
- cLeftTanMove = Gdk::Cursor::create (display, Gdk::SB_LEFT_ARROW);
- cRightTanMove = Gdk::Cursor::create (display, Gdk::SB_RIGHT_ARROW);
- cAdd = Gdk::Cursor::create (display, Gdk::PLUS);
- cWait = Gdk::Cursor::create (display, Gdk::CLOCK);
+ Glib::RefPtr add = RTImage::createFromFile("crosshair-small.png");
+ Glib::RefPtr colPick = RTImage::createFromFile("color-picker-hicontrast.png");
+ Glib::RefPtr colPickAdd = RTImage::createFromFile("color-picker-add-hicontrast.png");
+ Glib::RefPtr cropDraw = RTImage::createFromFile("crop-point-hicontrast.png");
+ Glib::RefPtr crosshair = RTImage::createFromFile("crosshair-hicontrast.png");
+ Glib::RefPtr empty = RTImage::createFromFile("empty.png");
+ Glib::RefPtr handClosed = RTImage::createFromFile("hand-closed-hicontrast.png");
+ Glib::RefPtr handOpen = RTImage::createFromFile("hand-open-hicontrast.png");
+ Glib::RefPtr moveBL = RTImage::createFromFile("node-move-sw-ne-hicontrast.png");
+ Glib::RefPtr moveBR = RTImage::createFromFile("node-move-nw-se-hicontrast.png");
+ Glib::RefPtr moveL = RTImage::createFromFile("node-move-x-hicontrast.png");
+ Glib::RefPtr moveR = RTImage::createFromFile("node-move-x-hicontrast.png");
+ Glib::RefPtr moveTL = RTImage::createFromFile("node-move-nw-se-hicontrast.png");
+ Glib::RefPtr moveTR = RTImage::createFromFile("node-move-sw-ne-hicontrast.png");
+ Glib::RefPtr moveX = RTImage::createFromFile("node-move-x-hicontrast.png");
+ Glib::RefPtr moveXY = RTImage::createFromFile("node-move-xy-hicontrast.png");
+ Glib::RefPtr moveY = RTImage::createFromFile("node-move-y-hicontrast.png");
+ Glib::RefPtr rotate = RTImage::createFromFile("rotate-aroundnode-hicontrast.png");
+ Glib::RefPtr wait = RTImage::createFromFile("gears.png"); // Currently unused, create *-hicontrast once used.
- Glib::RefPtr crosshair = RTImage::createFromFile ("crosshair-hicontrast.png");
- Glib::RefPtr handOpen = RTImage::createFromFile ("hand-open-hicontrast.png");
- Glib::RefPtr handClosed = RTImage::createFromFile ("hand-closed-hicontrast.png");
- Glib::RefPtr cropDraw = RTImage::createFromFile ("crop-point-hicontrast.png");
- Glib::RefPtr resizeWidth = RTImage::createFromFile ("node-move-x-hicontrast.png");
- Glib::RefPtr resizeHeight = RTImage::createFromFile ("node-move-y-hicontrast.png");
- Glib::RefPtr resizeTopLeft = RTImage::createFromFile ("node-move-nw-se-hicontrast.png");
- Glib::RefPtr resizeTopRight = RTImage::createFromFile ("node-move-sw-ne-hicontrast.png");
- Glib::RefPtr resizeBottomLeft = RTImage::createFromFile ("node-move-sw-ne-hicontrast.png");
- Glib::RefPtr resizeBottomRight = RTImage::createFromFile ("node-move-nw-se-hicontrast.png");
- Glib::RefPtr colPick = RTImage::createFromFile ("color-picker-hicontrast.png");
- Glib::RefPtr colPickAdd = RTImage::createFromFile ("color-picker-add-hicontrast.png");
- Glib::RefPtr empty = RTImage::createFromFile ("empty.png");
- Glib::RefPtr move2D = RTImage::createFromFile ("node-move-xy-hicontrast.png");
- Glib::RefPtr rotate = RTImage::createFromFile ("rotate-aroundnode-hicontrast.png");
-
- cCrosshair = crosshair ? Gdk::Cursor::create (cAdd->get_display(), crosshair, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cHandOpen = handOpen ? Gdk::Cursor::create (cAdd->get_display(), handOpen, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cHandClosed = handClosed ? Gdk::Cursor::create (cAdd->get_display(), handClosed, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cCropDraw = cropDraw ? Gdk::Cursor::create (cAdd->get_display(), cropDraw, 3, 3) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cResizeWidth = resizeWidth ? Gdk::Cursor::create (cAdd->get_display(), resizeWidth, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cResizeHeight = resizeHeight ? Gdk::Cursor::create (cAdd->get_display(), resizeHeight, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cResizeTopLeft = resizeTopLeft ? Gdk::Cursor::create (cAdd->get_display(), resizeTopLeft, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cResizeTopRight = resizeTopRight ? Gdk::Cursor::create (cAdd->get_display(), resizeTopRight, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cResizeBottomLeft = resizeBottomLeft ? Gdk::Cursor::create (cAdd->get_display(), resizeBottomLeft, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cResizeBottomRight = resizeBottomRight ? Gdk::Cursor::create (cAdd->get_display(), resizeBottomRight, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
- cWB = colPick ? Gdk::Cursor::create (cAdd->get_display(), colPick, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW);
- cAddPicker = colPickAdd ? Gdk::Cursor::create (cAdd->get_display(), colPickAdd, 4, 21) : Gdk::Cursor::create (cAdd->get_display(), Gdk::ARROW);
- cHidden = empty ? Gdk::Cursor::create (cAdd->get_display(), empty, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR);
- cMove2D = move2D ? Gdk::Cursor::create (cAdd->get_display(), move2D, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::FLEUR);
- cRotate = rotate ? Gdk::Cursor::create (cAdd->get_display(), rotate, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::CIRCLE);
+ cAdd = add ? Gdk::Cursor::create(display, add, 8, 8) : Gdk::Cursor::create(display, Gdk::PLUS);
+ cAddPicker = colPickAdd ? Gdk::Cursor::create(display, colPickAdd, 4, 21) : Gdk::Cursor::create(display, Gdk::PLUS);
+ cCropDraw = cropDraw ? Gdk::Cursor::create(display, cropDraw, 3, 3) : Gdk::Cursor::create(display, Gdk::DIAMOND_CROSS);
+ cCrosshair = crosshair ? Gdk::Cursor::create(display, crosshair, 12, 12) : Gdk::Cursor::create(display, Gdk::CROSSHAIR);
+ cEmpty = empty ? Gdk::Cursor::create(display, empty, 12, 12) : Gdk::Cursor::create(display, Gdk::BLANK_CURSOR);
+ cHandClosed = handClosed ? Gdk::Cursor::create(display, handClosed, 12, 12) : Gdk::Cursor::create(display, Gdk::HAND1);
+ cHandOpen = handOpen ? Gdk::Cursor::create(display, handOpen, 12, 12) : Gdk::Cursor::create(display, Gdk::HAND2);
+ cMoveBL = moveBL ? Gdk::Cursor::create(display, moveBL, 12, 12) : Gdk::Cursor::create(display, Gdk::BOTTOM_LEFT_CORNER);
+ cMoveBR = moveBR ? Gdk::Cursor::create(display, moveBR, 12, 12) : Gdk::Cursor::create(display, Gdk::BOTTOM_RIGHT_CORNER);
+ cMoveL = moveL ? Gdk::Cursor::create(display, moveL, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_LEFT_ARROW);
+ cMoveR = moveR ? Gdk::Cursor::create(display, moveR, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_RIGHT_ARROW);
+ cMoveTL = moveTL ? Gdk::Cursor::create(display, moveTL, 12, 12) : Gdk::Cursor::create(display, Gdk::TOP_LEFT_CORNER);
+ cMoveTR = moveTR ? Gdk::Cursor::create(display, moveTR, 12, 12) : Gdk::Cursor::create(display, Gdk::TOP_RIGHT_CORNER);
+ cMoveX = moveX ? Gdk::Cursor::create(display, moveX, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_H_DOUBLE_ARROW);
+ cMoveXY = moveXY ? Gdk::Cursor::create(display, moveXY, 12, 12) : Gdk::Cursor::create(display, Gdk::FLEUR);
+ cMoveY = moveY ? Gdk::Cursor::create(display, moveY, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_V_DOUBLE_ARROW);
+ cRotate = rotate ? Gdk::Cursor::create(display, rotate, 12, 12) : Gdk::Cursor::create(display, Gdk::EXCHANGE);
+ cWB = colPick ? Gdk::Cursor::create(display, colPick, 4, 21) : Gdk::Cursor::create(display, Gdk::TARGET);
+ cWait = wait ? Gdk::Cursor::create(display, wait, 12, 12) : Gdk::Cursor::create(display, Gdk::CLOCK);
window = mainWindow;
}
@@ -87,59 +82,87 @@ void CursorManager::init (Glib::RefPtr mainWindow)
/* Set the cursor of the given window */
void CursorManager::setCursor (Glib::RefPtr window, CursorShape shape)
{
-
- if (shape == CSArrow)
- // set_cursor without any arguments to select system default
+ switch (shape)
{
- window->set_cursor ();
- } else if (shape == CSCrosshair) {
- window->set_cursor (cCrosshair);
- } else if (shape == CSHandOpen) {
- window->set_cursor (cHandOpen);
- } else if (shape == CSHandClosed) {
- window->set_cursor (cHandClosed);
- } else if (shape == CSMove) {
- window->set_cursor (cHandClosed);
- } else if (shape == CSResizeWidth) {
- window->set_cursor (cResizeWidth);
- } else if (shape == CSResizeHeight) {
- window->set_cursor (cResizeHeight);
- } else if (shape == CSResizeDiagonal) {
- window->set_cursor (cMove2D);
- } else if (shape == CSResizeTopLeft) {
- window->set_cursor (cResizeTopLeft);
- } else if (shape == CSResizeTopRight) {
- window->set_cursor (cResizeTopRight);
- } else if (shape == CSResizeBottomLeft) {
- window->set_cursor (cResizeBottomLeft);
- } else if (shape == CSResizeBottomRight) {
- window->set_cursor (cResizeBottomRight);
- } else if (shape == CSMove2D) {
- window->set_cursor (cMove2D);
- } else if (shape == CSMove1DH) {
- window->set_cursor (cResizeWidth);
- } else if (shape == CSMove1DV) {
- window->set_cursor (cResizeHeight);
- } else if (shape == CSMoveRotate) {
- window->set_cursor (cRotate);
- } else if (shape == CSSpotWB) {
- window->set_cursor (cWB);
- } else if (shape == CSAddColPicker) {
- window->set_cursor (cAddPicker);
- } else if (shape == CSCropSelect) {
- window->set_cursor (cCropDraw);
- } else if (shape == CSMoveLeft) {
- window->set_cursor (cLeftTanMove);
- } else if (shape == CSMoveRight) {
- window->set_cursor (cRightTanMove);
- } else if (shape == CSStraighten) {
- window->set_cursor (cRotate);
- } else if (shape == CSWait) {
- window->set_cursor (cWait);
- } else if (shape == CSPlus) {
- window->set_cursor (cAdd);
- } else if (shape == CSEmpty) {
- window->set_cursor (cHidden);
+ case CursorShape::CSAddColPicker:
+ window->set_cursor(cAddPicker);
+ break;
+ case CursorShape::CSArrow:
+ window->set_cursor(); // set_cursor without any arguments to select system default
+ break;
+ case CursorShape::CSCropSelect:
+ window->set_cursor(cCropDraw);
+ break;
+ case CursorShape::CSCrosshair:
+ window->set_cursor(cCrosshair);
+ break;
+ case CursorShape::CSEmpty:
+ window->set_cursor(cEmpty);
+ break;
+ case CursorShape::CSHandClosed:
+ window->set_cursor(cHandClosed);
+ break;
+ case CursorShape::CSHandOpen:
+ window->set_cursor(cHandOpen);
+ break;
+ case CursorShape::CSMove:
+ window->set_cursor(cHandClosed);
+ break;
+ case CursorShape::CSMove1DH:
+ window->set_cursor(cMoveX);
+ break;
+ case CursorShape::CSMove1DV:
+ window->set_cursor(cMoveY);
+ break;
+ case CursorShape::CSMove2D:
+ window->set_cursor(cMoveXY);
+ break;
+ case CursorShape::CSMoveLeft:
+ window->set_cursor(cMoveL);
+ break;
+ case CursorShape::CSMoveRight:
+ window->set_cursor(cMoveR);
+ break;
+ case CursorShape::CSMoveRotate:
+ window->set_cursor(cRotate);
+ break;
+ case CursorShape::CSPlus:
+ window->set_cursor(cAdd);
+ break;
+ case CursorShape::CSResizeBottomLeft:
+ window->set_cursor(cMoveBL);
+ break;
+ case CursorShape::CSResizeBottomRight:
+ window->set_cursor(cMoveBR);
+ break;
+ case CursorShape::CSResizeDiagonal:
+ window->set_cursor(cMoveXY);
+ break;
+ case CursorShape::CSResizeHeight:
+ window->set_cursor(cMoveY);
+ break;
+ case CursorShape::CSResizeTopLeft:
+ window->set_cursor(cMoveTL);
+ break;
+ case CursorShape::CSResizeTopRight:
+ window->set_cursor(cMoveTR);
+ break;
+ case CursorShape::CSResizeWidth:
+ window->set_cursor(cMoveX);
+ break;
+ case CursorShape::CSSpotWB:
+ window->set_cursor(cWB);
+ break;
+ case CursorShape::CSStraighten:
+ window->set_cursor(cRotate);
+ break;
+ case CursorShape::CSUndefined:
+ break;
+ case CursorShape::CSWait:
+ window->set_cursor(cWait);
+ break;
+ default:
+ window->set_cursor(cCrosshair);
}
}
diff --git a/rtgui/cursormanager.h b/rtgui/cursormanager.h
index e98202ae7..7d3f068b2 100644
--- a/rtgui/cursormanager.h
+++ b/rtgui/cursormanager.h
@@ -22,60 +22,57 @@
#include
enum CursorShape {
- CSUndefined,
+ CSAddColPicker,
CSArrow,
+ CSCropSelect,
CSCrosshair,
- CSHandOpen,
+ CSEmpty,
CSHandClosed,
+ CSHandOpen,
CSMove,
- CSMoveLeft,
- CSMoveRight,
- CSResizeWidth,
- CSResizeHeight,
- CSResizeDiagonal,
- CSResizeTopLeft,
- CSResizeTopRight,
- CSResizeBottomLeft,
- CSResizeBottomRight,
- CSMove2D,
CSMove1DH,
CSMove1DV,
+ CSMove2D,
+ CSMoveLeft,
+ CSMoveRight,
CSMoveRotate,
- CSSpotWB,
- CSAddColPicker,
- CSCropSelect,
- CSStraighten,
CSPlus,
- CSWait,
- CSEmpty
+ CSResizeBottomLeft,
+ CSResizeBottomRight,
+ CSResizeDiagonal,
+ CSResizeHeight,
+ CSResizeTopLeft,
+ CSResizeTopRight,
+ CSResizeWidth,
+ CSSpotWB,
+ CSStraighten,
+ CSUndefined,
+ CSWait
};
class CursorManager
{
private:
- Glib::RefPtr cResizeWidth;
- Glib::RefPtr cResizeHeight;
- Glib::RefPtr cResizeTopLeft;
- Glib::RefPtr cResizeTopRight;
- Glib::RefPtr cResizeBottomLeft;
- Glib::RefPtr cResizeBottomRight;
- Glib::RefPtr cCropDraw;
- Glib::RefPtr cCropMove;
- Glib::RefPtr cLeftTanMove;
- Glib::RefPtr cRightTanMove;
- Glib::RefPtr cNormal;
- Glib::RefPtr cCropSelection;
Glib::RefPtr cAdd;
- Glib::RefPtr cWait;
- Glib::RefPtr cCrosshair;
- Glib::RefPtr cHandOpen;
- Glib::RefPtr cHandClosed;
- Glib::RefPtr cWB;
Glib::RefPtr cAddPicker;
- Glib::RefPtr cHidden;
- Glib::RefPtr cMove2D;
+ Glib::RefPtr cCropDraw;
+ Glib::RefPtr cCrosshair;
+ Glib::RefPtr cHandClosed;
+ Glib::RefPtr cHandOpen;
+ Glib::RefPtr cEmpty;
+ Glib::RefPtr cMoveBL;
+ Glib::RefPtr cMoveBR;
+ Glib::RefPtr cMoveL;
+ Glib::RefPtr cMoveR;
+ Glib::RefPtr cMoveTL;
+ Glib::RefPtr cMoveTR;
+ Glib::RefPtr cMoveX;
+ Glib::RefPtr cMoveY;
+ Glib::RefPtr cMoveXY;
Glib::RefPtr cRotate;
+ Glib::RefPtr cWB;
+ Glib::RefPtr cWait;
Glib::RefPtr display;
Glib::RefPtr window;
diff --git a/rtgui/mydiagonalcurve.cc b/rtgui/mydiagonalcurve.cc
index e7874dad2..0bc58f28e 100644
--- a/rtgui/mydiagonalcurve.cc
+++ b/rtgui/mydiagonalcurve.cc
@@ -559,7 +559,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event)
getCursorPosition(Gdk::EventType(event->type), event->motion.is_hint != 0, int(event->button.x), int(event->button.y), Gdk::ModifierType(event->button.state));
findClosestPoint();
- new_type = CSMove;
+ new_type = CSMove2D; // Shown when dragging a node.
if (distanceX > minDistanceX) {
if (mod_type & GDK_CONTROL_MASK) {
@@ -735,7 +735,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event)
}
if (distanceX <= minDistanceX) {
- new_type = CSMove;
+ new_type = CSMove2D; // Shown on node release.
lit_point = closest_point;
} else {
new_type = CSPlus;
@@ -799,7 +799,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event)
lit_point = -1;
} else if (distanceX <= minDistanceX) {
// the cursor is close to an existing point
- new_type = CSMove;
+ new_type = CSPlus; // Shown when hovering over node snapping distance (not necessarily over node).
lit_point = closest_point;
} else {
// the cursor is inside the graph but away from existing points
diff --git a/rtgui/myflatcurve.cc b/rtgui/myflatcurve.cc
index 4da683b0c..70fc0c7d7 100644
--- a/rtgui/myflatcurve.cc
+++ b/rtgui/myflatcurve.cc
@@ -630,7 +630,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
switch (area) {
case (FCT_Area_Insertion):
- new_type = CSMove;
+ new_type = CSMove2D; // Shown when adding a new node in a blank area, both click and drag.
/* insert a new control point */
if (num > 0) {
@@ -681,7 +681,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
break;
case (FCT_Area_Point):
- new_type = CSMove;
+ new_type = CSMove2D; // Shown when node clicked and dragged.
editedHandle = FCT_EditedHandle_CPoint;
ugpX = curve.x.at(lit_point);
ugpY = curve.y.at(lit_point);
@@ -689,7 +689,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
case (FCT_Area_H):
case (FCT_Area_V):
- new_type = CSMove;
+ new_type = CSMove2D; // Shown when vertical line clicked, not dragged.
editedHandle = FCT_EditedHandle_CPointUD;
ugpX = curve.x.at(lit_point);
ugpY = curve.y.at(lit_point);
@@ -876,7 +876,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
break;
case (FCT_Area_Point):
- new_type = CSMove;
+ new_type = CSMove2D; // Shown when node released.
break;
case (FCT_Area_H):
@@ -884,7 +884,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
break;
case (FCT_Area_V):
- new_type = CSMove;
+ new_type = CSMove2D; // Shown when line released.
break;
case (FCT_Area_LeftTan):
@@ -1008,7 +1008,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
//new_type = CSMove;
//break;
case (FCT_Area_V):
- new_type = CSMove;
+ new_type = CSPlus; // Shown when hovering over vertical line.
break;
case (FCT_Area_H):