28#include <osgViewer/GraphicsWindow>
29#include <osgViewer/Viewer>
31#include <simgear/debug/logstream.hxx>
32#include <simgear/simgear_config.h>
33#include <simgear/structure/commands.hxx>
59 mCursorObscured(false),
61 mCursor(osgViewer::GraphicsWindow::InheritCursor)
63 mActualCursor = mCursor;
66 virtual void setCursor(Cursor aCursor)
68 m_currentCursor = aCursor;
69 mCursor = translateCursor(aCursor);
73 virtual void setCursorVisible(
bool aVis)
75 if (mCursorObscured == aVis) {
79 mCursorVisible = aVis;
83 virtual void hideCursorUntilMouseMove()
85 if (mCursorObscured) {
89 mCursorObscured =
true;
93 virtual void mouseMoved()
95 if (mCursorObscured) {
96 mCursorObscured =
false;
101 osgViewer::GraphicsWindow::MouseCursor translateCursor(Cursor aCursor)
104 case CURSOR_ARROW:
return osgViewer::GraphicsWindow::RightArrowCursor;
105 case CURSOR_HAND:
return osgViewer::GraphicsWindow::HandCursor;
106 case CURSOR_CLOSED_HAND:
return osgViewer::GraphicsWindow::HandCursor;
107 case CURSOR_CROSSHAIR:
return osgViewer::GraphicsWindow::CrosshairCursor;
108 case CURSOR_IBEAM:
return osgViewer::GraphicsWindow::TextCursor;
109 case CURSOR_LEFT_RIGHT:
return osgViewer::GraphicsWindow::LeftRightCursor;
110 case CURSOR_UP_DOWN:
return osgViewer::GraphicsWindow::UpDownCursor;
112 case CURSOR_LEFT_SIDE:
return osgViewer::GraphicsWindow::LeftSideCursor;
113 case CURSOR_RIGHT_SIDE:
return osgViewer::GraphicsWindow::RightSideCursor;
114 case CURSOR_TOP_SIDE:
return osgViewer::GraphicsWindow::TopSideCursor;
115 case CURSOR_BOTTOM_SIDE:
return osgViewer::GraphicsWindow::BottomSideCursor;
117 case CURSOR_TOP_LEFT:
return osgViewer::GraphicsWindow::TopLeftCorner;
118 case CURSOR_TOP_RIGHT:
return osgViewer::GraphicsWindow::TopRightCorner;
119 case CURSOR_BOTTOM_LEFT:
return osgViewer::GraphicsWindow::BottomLeftCorner;
120 case CURSOR_BOTTOM_RIGHT:
return osgViewer::GraphicsWindow::BottomRightCorner;
122 case CURSOR_WAIT:
return osgViewer::GraphicsWindow::WaitCursor;
125 return osgViewer::GraphicsWindow::RightArrowCursor;
131 auto cur = osgViewer::GraphicsWindow::InheritCursor;
132 if (mCursorObscured || !mCursorVisible) {
133 cur = osgViewer::GraphicsWindow::NoCursor;
138 if (cur == mActualCursor) {
151 std::vector<osgViewer::GraphicsWindow*> windows;
152 viewer_base->getWindows(windows);
154 for (
auto gw : windows) {
161 bool mCursorObscured;
163 osgViewer::GraphicsWindow::MouseCursor mCursor, mActualCursor;
185 std::vector<osgViewer::GraphicsWindow*> gws;
186 globals->get_renderer()->getViewerBase()->getWindows(gws);
187 for (
auto gw : gws) {
188 gw->setCursor(osgViewer::GraphicsWindow::InheritCursor);
227 if (arg->hasValue(
"x") || arg->hasValue(
"y")) {
228 SGPropertyNode *mx =
fgGetNode(
"/devices/status/mice/mouse/x",
true);
229 SGPropertyNode *my =
fgGetNode(
"/devices/status/mice/mouse/y",
true);
230 int x = arg->getIntValue(
"x", mx->getIntValue());
231 int y = arg->getIntValue(
"y", my->getIntValue());
270 SG_LOG(SG_GENERAL, SG_WARN,
"unknown cursor:" << cursor_name);
static std::unique_ptr< FavouriteAircraftData > static_instance
const MouseCursorMap mouse_cursor_map[]
virtual FGRenderer * get_renderer() const
virtual Cursor getCursor() const
unsigned int mAutoHideTimeMsec
virtual void setCursor(Cursor aCursor)=0
virtual void setAutoHideTimeMsec(unsigned int aMsec)
@ CURSOR_HAND
the browser 'link' cursor
@ CURSOR_IBEAM
for editing text
bool setCursorCommand(const SGPropertyNode *arg, SGPropertyNode *)
static FGMouseCursor * instance()
static Cursor cursorFromString(const char *str)
osgViewer::ViewerBase * getViewerBase() const
void fgWarpMouse(int x, int y)
SGPropertyNode * fgGetNode(const char *path, bool create)
Get a property node.
FGMouseCursor::Cursor cursor