* I decided having the cursor obscuring feature in the HWInterface class
was not such a bad idea after all. * Reenabled obscuring the cursor in ServerApp. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15925 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -877,8 +877,7 @@ ServerApp::_DispatchMessage(int32 code, BPrivate::LinkReceiver& link)
|
|||||||
case AS_OBSCURE_CURSOR:
|
case AS_OBSCURE_CURSOR:
|
||||||
{
|
{
|
||||||
STRACE(("ServerApp %s: Obscure Cursor\n", Signature()));
|
STRACE(("ServerApp %s: Obscure Cursor\n", Signature()));
|
||||||
// ToDo: Enable ObscureCursor
|
fDesktop->HWInterface()->ObscureCursor();
|
||||||
//fDesktop->HWInterface()->ObscureCursor();
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case AS_QUERY_CURSOR_HIDDEN:
|
case AS_QUERY_CURSOR_HIDDEN:
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ HWInterface::HWInterface(bool doubleBuffered)
|
|||||||
fDragBitmapOffset(0, 0),
|
fDragBitmapOffset(0, 0),
|
||||||
fCursorAndDragBitmap(NULL),
|
fCursorAndDragBitmap(NULL),
|
||||||
fCursorVisible(false),
|
fCursorVisible(false),
|
||||||
|
fCursorObscured(false),
|
||||||
fCursorLocation(0, 0),
|
fCursorLocation(0, 0),
|
||||||
fDoubleBuffered(doubleBuffered),
|
fDoubleBuffered(doubleBuffered),
|
||||||
// fUpdateExecutor(new UpdateQueue(this))
|
// fUpdateExecutor(new UpdateQueue(this))
|
||||||
@@ -105,6 +106,7 @@ HWInterface::SetCursorVisible(bool visible)
|
|||||||
// fCursorVisible == false!
|
// fCursorVisible == false!
|
||||||
if (visible) {
|
if (visible) {
|
||||||
fCursorVisible = visible;
|
fCursorVisible = visible;
|
||||||
|
fCursorObscured = false;
|
||||||
BRect r = _CursorFrame();
|
BRect r = _CursorFrame();
|
||||||
|
|
||||||
_DrawCursor(r);
|
_DrawCursor(r);
|
||||||
@@ -133,6 +135,19 @@ HWInterface::IsCursorVisible()
|
|||||||
return visible;
|
return visible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ObscureCursor
|
||||||
|
void
|
||||||
|
HWInterface::ObscureCursor()
|
||||||
|
{
|
||||||
|
if (WriteLock()) {
|
||||||
|
if (!fCursorObscured) {
|
||||||
|
SetCursorVisible(false);
|
||||||
|
fCursorObscured = true;
|
||||||
|
}
|
||||||
|
WriteUnlock();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// MoveCursorTo
|
// MoveCursorTo
|
||||||
void
|
void
|
||||||
HWInterface::MoveCursorTo(const float& x, const float& y)
|
HWInterface::MoveCursorTo(const float& x, const float& y)
|
||||||
@@ -140,6 +155,12 @@ HWInterface::MoveCursorTo(const float& x, const float& y)
|
|||||||
if (WriteLock()) {
|
if (WriteLock()) {
|
||||||
BPoint p(x, y);
|
BPoint p(x, y);
|
||||||
if (p != fCursorLocation) {
|
if (p != fCursorLocation) {
|
||||||
|
// unhide cursor if it is obscured only
|
||||||
|
if (fCursorObscured) {
|
||||||
|
// TODO: causes nested lock, which
|
||||||
|
// the MultiLocker doesn't actually support?
|
||||||
|
SetCursorVisible(true);
|
||||||
|
}
|
||||||
BRect oldFrame = _CursorFrame();
|
BRect oldFrame = _CursorFrame();
|
||||||
fCursorLocation = p;
|
fCursorLocation = p;
|
||||||
if (fCursorVisible) {
|
if (fCursorVisible) {
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ class HWInterface : public MultiLocker {
|
|||||||
virtual void SetCursor(ServerCursor* cursor);
|
virtual void SetCursor(ServerCursor* cursor);
|
||||||
virtual void SetCursorVisible(bool visible);
|
virtual void SetCursorVisible(bool visible);
|
||||||
bool IsCursorVisible();
|
bool IsCursorVisible();
|
||||||
|
virtual void ObscureCursor();
|
||||||
virtual void MoveCursorTo(const float& x,
|
virtual void MoveCursorTo(const float& x,
|
||||||
const float& y);
|
const float& y);
|
||||||
BPoint GetCursorPosition();
|
BPoint GetCursorPosition();
|
||||||
@@ -168,6 +169,7 @@ class HWInterface : public MultiLocker {
|
|||||||
BPoint fDragBitmapOffset;
|
BPoint fDragBitmapOffset;
|
||||||
ServerCursor* fCursorAndDragBitmap;
|
ServerCursor* fCursorAndDragBitmap;
|
||||||
bool fCursorVisible;
|
bool fCursorVisible;
|
||||||
|
bool fCursorObscured;
|
||||||
BPoint fCursorLocation;
|
BPoint fCursorLocation;
|
||||||
bool fDoubleBuffered;
|
bool fDoubleBuffered;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user