Cursor tweaks and code cleanup
- CursorManager code cleanup. - Diagonal and flat curve cursors now use our bundled cursor icons. Icons are now less intrusive, allowing you to see what's going on under them as you manipulate the nodes. - New small crosshair icon for curves.
This commit is contained in:
BIN
rtdata/images/themed/png/dark/crosshair-small.png
Normal file
BIN
rtdata/images/themed/png/dark/crosshair-small.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 382 B |
BIN
rtdata/images/themed/png/light/crosshair-small.png
Normal file
BIN
rtdata/images/themed/png/light/crosshair-small.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 387 B |
172
rtdata/images/themed/svg/crosshair-small.svg
Normal file
172
rtdata/images/themed/svg/crosshair-small.svg
Normal file
@@ -0,0 +1,172 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
width="16"
|
||||||
|
height="16"
|
||||||
|
viewBox="0 0 16 16"
|
||||||
|
version="1.1"
|
||||||
|
id="SVGRoot"
|
||||||
|
inkscape:export-filename="/tmp/template.png"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96"
|
||||||
|
inkscape:version="0.92.2 2405546, 2018-03-11"
|
||||||
|
sodipodi:docname="crosshair-small.svg">
|
||||||
|
<sodipodi:namedview
|
||||||
|
id="base"
|
||||||
|
pagecolor="#E0E1E2"
|
||||||
|
bordercolor="#666768"
|
||||||
|
borderopacity="1.0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pageshadow="2"
|
||||||
|
inkscape:zoom="12.732386"
|
||||||
|
inkscape:cx="13.503561"
|
||||||
|
inkscape:cy="7.5035611"
|
||||||
|
inkscape:document-units="px"
|
||||||
|
inkscape:current-layer="layer1"
|
||||||
|
showgrid="true"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1019"
|
||||||
|
inkscape:window-x="0"
|
||||||
|
inkscape:window-y="0"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:grid-bbox="true"
|
||||||
|
inkscape:pagecheckerboard="false"
|
||||||
|
inkscape:snap-bbox="true"
|
||||||
|
inkscape:bbox-nodes="true"
|
||||||
|
inkscape:snap-others="false"
|
||||||
|
inkscape:object-nodes="false"
|
||||||
|
inkscape:snap-grids="true"
|
||||||
|
inkscape:snap-bbox-midpoints="false"
|
||||||
|
inkscape:snap-global="true">
|
||||||
|
<inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid1374"
|
||||||
|
originx="1"
|
||||||
|
originy="1"
|
||||||
|
empspacing="7"
|
||||||
|
dotted="false" />
|
||||||
|
</sodipodi:namedview>
|
||||||
|
<defs
|
||||||
|
id="defs815" />
|
||||||
|
<metadata
|
||||||
|
id="metadata818">
|
||||||
|
<rdf:RDF>
|
||||||
|
<cc:Work
|
||||||
|
rdf:about="">
|
||||||
|
<dc:format>image/svg+xml</dc:format>
|
||||||
|
<dc:type
|
||||||
|
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
|
<dc:title />
|
||||||
|
<dc:creator>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title>Maciej Dworak</dc:title>
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:creator>
|
||||||
|
<dc:rights>
|
||||||
|
<cc:Agent>
|
||||||
|
<dc:title />
|
||||||
|
</cc:Agent>
|
||||||
|
</dc:rights>
|
||||||
|
<dc:description>RawTherapee icon.</dc:description>
|
||||||
|
<cc:license
|
||||||
|
rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
|
||||||
|
</cc:Work>
|
||||||
|
<cc:License
|
||||||
|
rdf:about="http://creativecommons.org/licenses/by-sa/4.0/">
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Reproduction" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Distribution" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Notice" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#Attribution" />
|
||||||
|
<cc:permits
|
||||||
|
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
|
||||||
|
<cc:requires
|
||||||
|
rdf:resource="http://creativecommons.org/ns#ShareAlike" />
|
||||||
|
</cc:License>
|
||||||
|
</rdf:RDF>
|
||||||
|
</metadata>
|
||||||
|
<g
|
||||||
|
id="layer1"
|
||||||
|
inkscape:groupmode="layer"
|
||||||
|
inkscape:label="Layer 1"
|
||||||
|
transform="translate(0,-8)">
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="M 55,16 H 65 M 60,11 V 21"
|
||||||
|
style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#2a7fff;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4977" />
|
||||||
|
<path
|
||||||
|
id="path4979"
|
||||||
|
style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#2a7fff;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 22.521364,16.478636 h 10 m -5,-5 v 10"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cccc" />
|
||||||
|
<path
|
||||||
|
style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#2a7fff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
|
||||||
|
d="M -12.015625,9.9863281 A 1.0001,1.0001 0 0 0 -13,11 v 2.173828 A 3,3 0 0 1 -12,13 a 3,3 0 0 1 1,0.175781 V 11 A 1.0001,1.0001 0 0 0 -12.015625,9.9863281 Z M -17,15 a 1.0001,1.0001 0 1 0 0,2 h 2.173828 A 3,3 0 0 1 -15,16 a 3,3 0 0 1 0.175781,-1 z m 7.826172,0 A 3,3 0 0 1 -9,16 3,3 0 0 1 -9.175781,17 H -7 a 1.0001,1.0001 0 1 0 0,-2 z M -13,18.824219 V 21 a 1.0001,1.0001 0 1 0 2,0 V 18.826172 A 3,3 0 0 1 -12,19 3,3 0 0 1 -13,18.824219 Z"
|
||||||
|
id="path4981"
|
||||||
|
inkscape:connector-curvature="0" />
|
||||||
|
<path
|
||||||
|
sodipodi:nodetypes="cccc"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
d="M 39,16 H 49 M 44,11 V 21"
|
||||||
|
style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#2a7fff;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
id="path4983" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#2a7fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 8,19.985759 v 1.999999"
|
||||||
|
id="path836" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#2a7fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 8,9.9857565 10e-8,2.0000015"
|
||||||
|
id="path832" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#2a7fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m 12.014242,16.000001 h 1.999999"
|
||||||
|
id="path830" />
|
||||||
|
<path
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#2a7fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M 2.0142425,16 H 3.9930053"
|
||||||
|
id="path4981-3" />
|
||||||
|
<path
|
||||||
|
style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#2a7fff;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m -32.5,20 v 2.5"
|
||||||
|
id="path1509"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#2a7fff;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M -32.5,10.5 V 13"
|
||||||
|
id="path1505"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#2a7fff;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="m -29,16.5 h 2.5"
|
||||||
|
id="path1503"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
<path
|
||||||
|
style="opacity:0.7;fill:none;fill-rule:evenodd;stroke:#2a7fff;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||||
|
d="M -38.5,16.5 H -36"
|
||||||
|
id="path840"
|
||||||
|
inkscape:connector-curvature="0"
|
||||||
|
sodipodi:nodetypes="cc" />
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.3 KiB |
@@ -36,50 +36,45 @@ void CursorManager::init (Glib::RefPtr<Gdk::Window> mainWindow)
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
cResizeWidth = Gdk::Cursor::create (display, Gdk::SB_H_DOUBLE_ARROW);
|
Glib::RefPtr<Gdk::Pixbuf> add = RTImage::createFromFile("crosshair-small.png");
|
||||||
cResizeHeight = Gdk::Cursor::create (display, Gdk::SB_V_DOUBLE_ARROW);
|
Glib::RefPtr<Gdk::Pixbuf> colPick = RTImage::createFromFile("color-picker-hicontrast.png");
|
||||||
cResizeTopLeft = Gdk::Cursor::create (display, Gdk::TOP_LEFT_CORNER);
|
Glib::RefPtr<Gdk::Pixbuf> colPickAdd = RTImage::createFromFile("color-picker-add-hicontrast.png");
|
||||||
cResizeTopRight = Gdk::Cursor::create (display, Gdk::TOP_RIGHT_CORNER);
|
Glib::RefPtr<Gdk::Pixbuf> cropDraw = RTImage::createFromFile("crop-point-hicontrast.png");
|
||||||
cResizeBottomLeft = Gdk::Cursor::create (display, Gdk::BOTTOM_LEFT_CORNER);
|
Glib::RefPtr<Gdk::Pixbuf> crosshair = RTImage::createFromFile("crosshair-hicontrast.png");
|
||||||
cResizeBottomRight = Gdk::Cursor::create (display, Gdk::BOTTOM_RIGHT_CORNER);
|
Glib::RefPtr<Gdk::Pixbuf> empty = RTImage::createFromFile("empty.png");
|
||||||
cCropDraw = Gdk::Cursor::create (display, Gdk::CROSSHAIR);
|
Glib::RefPtr<Gdk::Pixbuf> handClosed = RTImage::createFromFile("hand-closed-hicontrast.png");
|
||||||
cCropSelection = Gdk::Cursor::create (display, Gdk::STAR); // ?
|
Glib::RefPtr<Gdk::Pixbuf> handOpen = RTImage::createFromFile("hand-open-hicontrast.png");
|
||||||
cLeftTanMove = Gdk::Cursor::create (display, Gdk::SB_LEFT_ARROW);
|
Glib::RefPtr<Gdk::Pixbuf> moveBL = RTImage::createFromFile("node-move-sw-ne-hicontrast.png");
|
||||||
cRightTanMove = Gdk::Cursor::create (display, Gdk::SB_RIGHT_ARROW);
|
Glib::RefPtr<Gdk::Pixbuf> moveBR = RTImage::createFromFile("node-move-nw-se-hicontrast.png");
|
||||||
cAdd = Gdk::Cursor::create (display, Gdk::PLUS);
|
Glib::RefPtr<Gdk::Pixbuf> moveL = RTImage::createFromFile("node-move-x-hicontrast.png");
|
||||||
cWait = Gdk::Cursor::create (display, Gdk::CLOCK);
|
Glib::RefPtr<Gdk::Pixbuf> moveR = RTImage::createFromFile("node-move-x-hicontrast.png");
|
||||||
|
Glib::RefPtr<Gdk::Pixbuf> moveTL = RTImage::createFromFile("node-move-nw-se-hicontrast.png");
|
||||||
|
Glib::RefPtr<Gdk::Pixbuf> moveTR = RTImage::createFromFile("node-move-sw-ne-hicontrast.png");
|
||||||
|
Glib::RefPtr<Gdk::Pixbuf> moveX = RTImage::createFromFile("node-move-x-hicontrast.png");
|
||||||
|
Glib::RefPtr<Gdk::Pixbuf> moveXY = RTImage::createFromFile("node-move-xy-hicontrast.png");
|
||||||
|
Glib::RefPtr<Gdk::Pixbuf> moveY = RTImage::createFromFile("node-move-y-hicontrast.png");
|
||||||
|
Glib::RefPtr<Gdk::Pixbuf> rotate = RTImage::createFromFile("rotate-aroundnode-hicontrast.png");
|
||||||
|
Glib::RefPtr<Gdk::Pixbuf> wait = RTImage::createFromFile("gears.png"); // Currently unused, create *-hicontrast once used.
|
||||||
|
|
||||||
Glib::RefPtr<Gdk::Pixbuf> crosshair = RTImage::createFromFile ("crosshair-hicontrast.png");
|
cAdd = add ? Gdk::Cursor::create(display, add, 8, 8) : Gdk::Cursor::create(display, Gdk::PLUS);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> handOpen = RTImage::createFromFile ("hand-open-hicontrast.png");
|
cAddPicker = colPickAdd ? Gdk::Cursor::create(display, colPickAdd, 4, 21) : Gdk::Cursor::create(display, Gdk::PLUS);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> handClosed = RTImage::createFromFile ("hand-closed-hicontrast.png");
|
cCropDraw = cropDraw ? Gdk::Cursor::create(display, cropDraw, 3, 3) : Gdk::Cursor::create(display, Gdk::DIAMOND_CROSS);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> cropDraw = RTImage::createFromFile ("crop-point-hicontrast.png");
|
cCrosshair = crosshair ? Gdk::Cursor::create(display, crosshair, 12, 12) : Gdk::Cursor::create(display, Gdk::CROSSHAIR);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> resizeWidth = RTImage::createFromFile ("node-move-x-hicontrast.png");
|
cEmpty = empty ? Gdk::Cursor::create(display, empty, 12, 12) : Gdk::Cursor::create(display, Gdk::BLANK_CURSOR);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> resizeHeight = RTImage::createFromFile ("node-move-y-hicontrast.png");
|
cHandClosed = handClosed ? Gdk::Cursor::create(display, handClosed, 12, 12) : Gdk::Cursor::create(display, Gdk::HAND1);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> resizeTopLeft = RTImage::createFromFile ("node-move-nw-se-hicontrast.png");
|
cHandOpen = handOpen ? Gdk::Cursor::create(display, handOpen, 12, 12) : Gdk::Cursor::create(display, Gdk::HAND2);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> resizeTopRight = RTImage::createFromFile ("node-move-sw-ne-hicontrast.png");
|
cMoveBL = moveBL ? Gdk::Cursor::create(display, moveBL, 12, 12) : Gdk::Cursor::create(display, Gdk::BOTTOM_LEFT_CORNER);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> resizeBottomLeft = RTImage::createFromFile ("node-move-sw-ne-hicontrast.png");
|
cMoveBR = moveBR ? Gdk::Cursor::create(display, moveBR, 12, 12) : Gdk::Cursor::create(display, Gdk::BOTTOM_RIGHT_CORNER);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> resizeBottomRight = RTImage::createFromFile ("node-move-nw-se-hicontrast.png");
|
cMoveL = moveL ? Gdk::Cursor::create(display, moveL, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_LEFT_ARROW);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> colPick = RTImage::createFromFile ("color-picker-hicontrast.png");
|
cMoveR = moveR ? Gdk::Cursor::create(display, moveR, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_RIGHT_ARROW);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> colPickAdd = RTImage::createFromFile ("color-picker-add-hicontrast.png");
|
cMoveTL = moveTL ? Gdk::Cursor::create(display, moveTL, 12, 12) : Gdk::Cursor::create(display, Gdk::TOP_LEFT_CORNER);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> empty = RTImage::createFromFile ("empty.png");
|
cMoveTR = moveTR ? Gdk::Cursor::create(display, moveTR, 12, 12) : Gdk::Cursor::create(display, Gdk::TOP_RIGHT_CORNER);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> move2D = RTImage::createFromFile ("node-move-xy-hicontrast.png");
|
cMoveX = moveX ? Gdk::Cursor::create(display, moveX, 12, 12) : Gdk::Cursor::create(display, Gdk::SB_H_DOUBLE_ARROW);
|
||||||
Glib::RefPtr<Gdk::Pixbuf> rotate = RTImage::createFromFile ("rotate-aroundnode-hicontrast.png");
|
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);
|
||||||
cCrosshair = crosshair ? Gdk::Cursor::create (cAdd->get_display(), crosshair, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
|
cRotate = rotate ? Gdk::Cursor::create(display, rotate, 12, 12) : Gdk::Cursor::create(display, Gdk::EXCHANGE);
|
||||||
cHandOpen = handOpen ? Gdk::Cursor::create (cAdd->get_display(), handOpen, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
|
cWB = colPick ? Gdk::Cursor::create(display, colPick, 4, 21) : Gdk::Cursor::create(display, Gdk::TARGET);
|
||||||
cHandClosed = handClosed ? Gdk::Cursor::create (cAdd->get_display(), handClosed, 12, 12) : Gdk::Cursor::create (cAdd->get_display(), Gdk::HAND2);
|
cWait = wait ? Gdk::Cursor::create(display, wait, 12, 12) : Gdk::Cursor::create(display, Gdk::CLOCK);
|
||||||
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);
|
|
||||||
|
|
||||||
window = mainWindow;
|
window = mainWindow;
|
||||||
}
|
}
|
||||||
@@ -87,59 +82,87 @@ void CursorManager::init (Glib::RefPtr<Gdk::Window> mainWindow)
|
|||||||
/* Set the cursor of the given window */
|
/* Set the cursor of the given window */
|
||||||
void CursorManager::setCursor (Glib::RefPtr<Gdk::Window> window, CursorShape shape)
|
void CursorManager::setCursor (Glib::RefPtr<Gdk::Window> window, CursorShape shape)
|
||||||
{
|
{
|
||||||
|
switch (shape)
|
||||||
if (shape == CSArrow)
|
|
||||||
// set_cursor without any arguments to select system default
|
|
||||||
{
|
{
|
||||||
window->set_cursor ();
|
case CursorShape::CSAddColPicker:
|
||||||
} else if (shape == CSCrosshair) {
|
window->set_cursor(cAddPicker);
|
||||||
window->set_cursor (cCrosshair);
|
break;
|
||||||
} else if (shape == CSHandOpen) {
|
case CursorShape::CSArrow:
|
||||||
window->set_cursor (cHandOpen);
|
window->set_cursor(); // set_cursor without any arguments to select system default
|
||||||
} else if (shape == CSHandClosed) {
|
break;
|
||||||
window->set_cursor (cHandClosed);
|
case CursorShape::CSCropSelect:
|
||||||
} else if (shape == CSMove) {
|
window->set_cursor(cCropDraw);
|
||||||
window->set_cursor (cHandClosed);
|
break;
|
||||||
} else if (shape == CSResizeWidth) {
|
case CursorShape::CSCrosshair:
|
||||||
window->set_cursor (cResizeWidth);
|
window->set_cursor(cCrosshair);
|
||||||
} else if (shape == CSResizeHeight) {
|
break;
|
||||||
window->set_cursor (cResizeHeight);
|
case CursorShape::CSEmpty:
|
||||||
} else if (shape == CSResizeDiagonal) {
|
window->set_cursor(cEmpty);
|
||||||
window->set_cursor (cMove2D);
|
break;
|
||||||
} else if (shape == CSResizeTopLeft) {
|
case CursorShape::CSHandClosed:
|
||||||
window->set_cursor (cResizeTopLeft);
|
window->set_cursor(cHandClosed);
|
||||||
} else if (shape == CSResizeTopRight) {
|
break;
|
||||||
window->set_cursor (cResizeTopRight);
|
case CursorShape::CSHandOpen:
|
||||||
} else if (shape == CSResizeBottomLeft) {
|
window->set_cursor(cHandOpen);
|
||||||
window->set_cursor (cResizeBottomLeft);
|
break;
|
||||||
} else if (shape == CSResizeBottomRight) {
|
case CursorShape::CSMove:
|
||||||
window->set_cursor (cResizeBottomRight);
|
window->set_cursor(cHandClosed);
|
||||||
} else if (shape == CSMove2D) {
|
break;
|
||||||
window->set_cursor (cMove2D);
|
case CursorShape::CSMove1DH:
|
||||||
} else if (shape == CSMove1DH) {
|
window->set_cursor(cMoveX);
|
||||||
window->set_cursor (cResizeWidth);
|
break;
|
||||||
} else if (shape == CSMove1DV) {
|
case CursorShape::CSMove1DV:
|
||||||
window->set_cursor (cResizeHeight);
|
window->set_cursor(cMoveY);
|
||||||
} else if (shape == CSMoveRotate) {
|
break;
|
||||||
window->set_cursor (cRotate);
|
case CursorShape::CSMove2D:
|
||||||
} else if (shape == CSSpotWB) {
|
window->set_cursor(cMoveXY);
|
||||||
window->set_cursor (cWB);
|
break;
|
||||||
} else if (shape == CSAddColPicker) {
|
case CursorShape::CSMoveLeft:
|
||||||
window->set_cursor (cAddPicker);
|
window->set_cursor(cMoveL);
|
||||||
} else if (shape == CSCropSelect) {
|
break;
|
||||||
window->set_cursor (cCropDraw);
|
case CursorShape::CSMoveRight:
|
||||||
} else if (shape == CSMoveLeft) {
|
window->set_cursor(cMoveR);
|
||||||
window->set_cursor (cLeftTanMove);
|
break;
|
||||||
} else if (shape == CSMoveRight) {
|
case CursorShape::CSMoveRotate:
|
||||||
window->set_cursor (cRightTanMove);
|
window->set_cursor(cRotate);
|
||||||
} else if (shape == CSStraighten) {
|
break;
|
||||||
window->set_cursor (cRotate);
|
case CursorShape::CSPlus:
|
||||||
} else if (shape == CSWait) {
|
window->set_cursor(cAdd);
|
||||||
window->set_cursor (cWait);
|
break;
|
||||||
} else if (shape == CSPlus) {
|
case CursorShape::CSResizeBottomLeft:
|
||||||
window->set_cursor (cAdd);
|
window->set_cursor(cMoveBL);
|
||||||
} else if (shape == CSEmpty) {
|
break;
|
||||||
window->set_cursor (cHidden);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -22,60 +22,57 @@
|
|||||||
#include <gtkmm.h>
|
#include <gtkmm.h>
|
||||||
|
|
||||||
enum CursorShape {
|
enum CursorShape {
|
||||||
CSUndefined,
|
CSAddColPicker,
|
||||||
CSArrow,
|
CSArrow,
|
||||||
|
CSCropSelect,
|
||||||
CSCrosshair,
|
CSCrosshair,
|
||||||
CSHandOpen,
|
CSEmpty,
|
||||||
CSHandClosed,
|
CSHandClosed,
|
||||||
|
CSHandOpen,
|
||||||
CSMove,
|
CSMove,
|
||||||
CSMoveLeft,
|
|
||||||
CSMoveRight,
|
|
||||||
CSResizeWidth,
|
|
||||||
CSResizeHeight,
|
|
||||||
CSResizeDiagonal,
|
|
||||||
CSResizeTopLeft,
|
|
||||||
CSResizeTopRight,
|
|
||||||
CSResizeBottomLeft,
|
|
||||||
CSResizeBottomRight,
|
|
||||||
CSMove2D,
|
|
||||||
CSMove1DH,
|
CSMove1DH,
|
||||||
CSMove1DV,
|
CSMove1DV,
|
||||||
|
CSMove2D,
|
||||||
|
CSMoveLeft,
|
||||||
|
CSMoveRight,
|
||||||
CSMoveRotate,
|
CSMoveRotate,
|
||||||
CSSpotWB,
|
|
||||||
CSAddColPicker,
|
|
||||||
CSCropSelect,
|
|
||||||
CSStraighten,
|
|
||||||
CSPlus,
|
CSPlus,
|
||||||
CSWait,
|
CSResizeBottomLeft,
|
||||||
CSEmpty
|
CSResizeBottomRight,
|
||||||
|
CSResizeDiagonal,
|
||||||
|
CSResizeHeight,
|
||||||
|
CSResizeTopLeft,
|
||||||
|
CSResizeTopRight,
|
||||||
|
CSResizeWidth,
|
||||||
|
CSSpotWB,
|
||||||
|
CSStraighten,
|
||||||
|
CSUndefined,
|
||||||
|
CSWait
|
||||||
};
|
};
|
||||||
|
|
||||||
class CursorManager
|
class CursorManager
|
||||||
{
|
{
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Glib::RefPtr<Gdk::Cursor> cResizeWidth;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cResizeHeight;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cResizeTopLeft;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cResizeTopRight;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cResizeBottomLeft;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cResizeBottomRight;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cCropDraw;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cCropMove;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cLeftTanMove;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cRightTanMove;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cNormal;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cCropSelection;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cAdd;
|
Glib::RefPtr<Gdk::Cursor> cAdd;
|
||||||
Glib::RefPtr<Gdk::Cursor> cWait;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cCrosshair;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cHandOpen;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cHandClosed;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cWB;
|
|
||||||
Glib::RefPtr<Gdk::Cursor> cAddPicker;
|
Glib::RefPtr<Gdk::Cursor> cAddPicker;
|
||||||
Glib::RefPtr<Gdk::Cursor> cHidden;
|
Glib::RefPtr<Gdk::Cursor> cCropDraw;
|
||||||
Glib::RefPtr<Gdk::Cursor> cMove2D;
|
Glib::RefPtr<Gdk::Cursor> cCrosshair;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cHandClosed;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cHandOpen;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cEmpty;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cMoveBL;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cMoveBR;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cMoveL;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cMoveR;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cMoveTL;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cMoveTR;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cMoveX;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cMoveY;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cMoveXY;
|
||||||
Glib::RefPtr<Gdk::Cursor> cRotate;
|
Glib::RefPtr<Gdk::Cursor> cRotate;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cWB;
|
||||||
|
Glib::RefPtr<Gdk::Cursor> cWait;
|
||||||
|
|
||||||
Glib::RefPtr<Gdk::Display> display;
|
Glib::RefPtr<Gdk::Display> display;
|
||||||
Glib::RefPtr<Gdk::Window> window;
|
Glib::RefPtr<Gdk::Window> window;
|
||||||
|
@@ -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));
|
getCursorPosition(Gdk::EventType(event->type), event->motion.is_hint != 0, int(event->button.x), int(event->button.y), Gdk::ModifierType(event->button.state));
|
||||||
findClosestPoint();
|
findClosestPoint();
|
||||||
|
|
||||||
new_type = CSMove;
|
new_type = CSMove2D; // Shown when dragging a node.
|
||||||
|
|
||||||
if (distanceX > minDistanceX) {
|
if (distanceX > minDistanceX) {
|
||||||
if (mod_type & GDK_CONTROL_MASK) {
|
if (mod_type & GDK_CONTROL_MASK) {
|
||||||
@@ -735,7 +735,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (distanceX <= minDistanceX) {
|
if (distanceX <= minDistanceX) {
|
||||||
new_type = CSMove;
|
new_type = CSMove2D; // Shown on node release.
|
||||||
lit_point = closest_point;
|
lit_point = closest_point;
|
||||||
} else {
|
} else {
|
||||||
new_type = CSPlus;
|
new_type = CSPlus;
|
||||||
@@ -799,7 +799,7 @@ bool MyDiagonalCurve::handleEvents (GdkEvent* event)
|
|||||||
lit_point = -1;
|
lit_point = -1;
|
||||||
} else if (distanceX <= minDistanceX) {
|
} else if (distanceX <= minDistanceX) {
|
||||||
// the cursor is close to an existing point
|
// 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;
|
lit_point = closest_point;
|
||||||
} else {
|
} else {
|
||||||
// the cursor is inside the graph but away from existing points
|
// the cursor is inside the graph but away from existing points
|
||||||
|
@@ -630,7 +630,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
|
|||||||
switch (area) {
|
switch (area) {
|
||||||
|
|
||||||
case (FCT_Area_Insertion):
|
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 */
|
/* insert a new control point */
|
||||||
if (num > 0) {
|
if (num > 0) {
|
||||||
@@ -681,7 +681,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case (FCT_Area_Point):
|
case (FCT_Area_Point):
|
||||||
new_type = CSMove;
|
new_type = CSMove2D; // Shown when node clicked and dragged.
|
||||||
editedHandle = FCT_EditedHandle_CPoint;
|
editedHandle = FCT_EditedHandle_CPoint;
|
||||||
ugpX = curve.x.at(lit_point);
|
ugpX = curve.x.at(lit_point);
|
||||||
ugpY = curve.y.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_H):
|
||||||
case (FCT_Area_V):
|
case (FCT_Area_V):
|
||||||
new_type = CSMove;
|
new_type = CSMove2D; // Shown when vertical line clicked, not dragged.
|
||||||
editedHandle = FCT_EditedHandle_CPointUD;
|
editedHandle = FCT_EditedHandle_CPointUD;
|
||||||
ugpX = curve.x.at(lit_point);
|
ugpX = curve.x.at(lit_point);
|
||||||
ugpY = curve.y.at(lit_point);
|
ugpY = curve.y.at(lit_point);
|
||||||
@@ -876,7 +876,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case (FCT_Area_Point):
|
case (FCT_Area_Point):
|
||||||
new_type = CSMove;
|
new_type = CSMove2D; // Shown when node released.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (FCT_Area_H):
|
case (FCT_Area_H):
|
||||||
@@ -884,7 +884,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case (FCT_Area_V):
|
case (FCT_Area_V):
|
||||||
new_type = CSMove;
|
new_type = CSMove2D; // Shown when line released.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (FCT_Area_LeftTan):
|
case (FCT_Area_LeftTan):
|
||||||
@@ -1008,7 +1008,7 @@ bool MyFlatCurve::handleEvents (GdkEvent* event)
|
|||||||
//new_type = CSMove;
|
//new_type = CSMove;
|
||||||
//break;
|
//break;
|
||||||
case (FCT_Area_V):
|
case (FCT_Area_V):
|
||||||
new_type = CSMove;
|
new_type = CSPlus; // Shown when hovering over vertical line.
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case (FCT_Area_H):
|
case (FCT_Area_H):
|
||||||
|
Reference in New Issue
Block a user