mirror of
https://github.com/minetest/irrlicht.git
synced 2024-11-09 01:03:51 +01:00
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:
parent
f989112dcb
commit
a23af985e4
@ -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)
|
||||
|
@ -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 */
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user