Add ICursorControl::getReferenceRect

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6455 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
cutealien 2023-03-14 22:05:45 +00:00
parent f989112dcb
commit a23af985e4
7 changed files with 76 additions and 0 deletions

View File

@ -1,6 +1,7 @@
--------------------------
Changes in 1.9 (not yet released)
- Add ICursorControl::getReferenceRect
- Fix: Listbox no longer sending EGET_LISTBOX_SELECTED_AGAIN instead of EGET_LISTBOX_CHANGED when pressed mouse was moved over item before releasing the mouse button
- Listbox items can now change individual background colors
- Fix some bitfield sizes in SMaterial which were chosen too small for enums (PolygonOffsetDirection, ZWriteEnable, BlendOperation)

View File

@ -160,6 +160,12 @@ namespace gui
\param rect: A pointer to an reference rectangle or 0 to disable the reference rectangle.*/
virtual void setReferenceRect(core::rect<s32>* rect=0) = 0;
//! Returns the current absolute reference rect used for the cursor position
/** \param rect Will receive the reference rectangle when the function returns true
When the result is false drivers can still write some platform specific values in there.
Generally at least the width/height of the returned rect will correspond to the current window size.
\return Return true when a reference rectangle has been set and is used by this driver */
virtual bool getReferenceRect(core::rect<s32>& rect) { return false; }
//! Sets the active cursor icon
/** Setting cursor icons is so far only supported on Win32 and Linux */

View File

@ -197,6 +197,20 @@ namespace irr
UseReferenceRect = false;
}
virtual bool getReferenceRect(core::rect<s32>& rect) IRR_OVERRIDE
{
if ( UseReferenceRect )
{
rect = ReferenceRect;
}
else
{
rect.UpperLeftCorner = core::vector2di(0,0);
rect.LowerRightCorner.X = (irr::s32)WindowSize.Width;
rect.LowerRightCorner.Y = (irr::s32)WindowSize.Height;
}
return UseReferenceRect;
}
//! Updates the internal cursor position
void setInternalCursorPosition(const core::position2di &pos)

View File

@ -160,6 +160,14 @@ namespace irr
{
}
virtual bool getReferenceRect(core::rect<s32>& rect) IRR_OVERRIDE
{
rect.UpperLeftCorner = core::vector2di(0,0);
rect.LowerRightCorner.X = (irr::s32)Device->CreationParams.WindowSize.Width;
rect.LowerRightCorner.Y = (irr::s32)Device->CreationParams.WindowSize.Height;
return false;
}
private:
void updateCursorPos()

View File

@ -327,6 +327,21 @@ namespace irr
UseReferenceRect = false;
}
virtual bool getReferenceRect(core::rect<s32>& rect) IRR_OVERRIDE
{
if ( UseReferenceRect )
{
rect = ReferenceRect;
}
else
{
rect.UpperLeftCorner = core::vector2di(0,0);
rect.LowerRightCorner.X = (irr::s32)Device->Width;
rect.LowerRightCorner.Y = (irr::s32)Device->Height;
}
return UseReferenceRect;
}
//! Sets the active cursor icon
virtual void setActiveIcon(gui::ECURSOR_ICON iconId) IRR_OVERRIDE;

View File

@ -168,6 +168,14 @@ namespace irr
{
}
virtual bool getReferenceRect(core::rect<s32>& rect) IRR_OVERRIDE
{
rect.UpperLeftCorner = core::vector2di(0,0);
rect.LowerRightCorner.X = (irr::s32)Device->Width;
rect.LowerRightCorner.Y = (irr::s32)Device->Height;
return false;
}
private:
void updateCursorPos()

View File

@ -275,6 +275,30 @@ namespace irr
UseReferenceRect = false;
}
virtual bool getReferenceRect(core::rect<s32>& rect) IRR_OVERRIDE
{
if ( UseReferenceRect )
{
rect = ReferenceRect;
}
else
{
RECT wndRect;
if (GetWindowRect(HWnd, &wndRect))
{
rect.UpperLeftCorner.X = wndRect.left+BorderX;
rect.UpperLeftCorner.Y = wndRect.top+BorderY;
}
else // error case - not sure if it matters what we set here as coordinates returned will be -1, -1
{
rect.UpperLeftCorner = core::vector2di(0,0);
}
rect.LowerRightCorner.X = rect.UpperLeftCorner.X + (irr::s32)WindowSize.Width;
rect.LowerRightCorner.Y = rect.UpperLeftCorner.Y + (irr::s32)WindowSize.Height;
}
return UseReferenceRect;
}
/** Used to notify the cursor that the window was resized. */
void OnResize(const core::dimension2d<u32>& size)
{