Add cursor types and use resize cursor for dragbars

This commit is contained in:
Corantin H 2023-12-28 01:29:17 +01:00
parent c2ce2c9d1a
commit ffd7776147
4 changed files with 29 additions and 6 deletions

View file

@ -1391,6 +1391,7 @@ set(EXPECTED_DATA
editor/background.png
editor/checker.png
editor/cursor.png
editor/cursor_resize.png
editor/entities/DDNet.png
editor/entities/FNG.png
editor/entities/Race.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View file

@ -7828,6 +7828,11 @@ void CEditor::DoEditorDragBar(CUIRect View, CUIRect *pDragBar, EDragSide Side, f
static float s_InitialMouseX = 0.0f;
static float s_InitialMouseOffsetX = 0.0f;
bool IsVertical = Side == EDragSide::SIDE_TOP || Side == EDragSide::SIDE_BOTTOM;
if(UI()->MouseInside(pDragBar) && UI()->HotItem() == pDragBar)
m_CursorType = IsVertical ? CURSOR_RESIZE_V : CURSOR_RESIZE_H;
bool Clicked;
bool Abrupted;
if(int Result = DoButton_DraggableEx(pDragBar, "", 8, pDragBar, &Clicked, &Abrupted, 0, "Change the size of the editor by dragging."))
@ -7844,8 +7849,6 @@ void CEditor::DoEditorDragBar(CUIRect View, CUIRect *pDragBar, EDragSide Side, f
if(Clicked || Abrupted)
s_Operation = OP_NONE;
bool IsVertical = Side == EDragSide::SIDE_TOP || Side == EDragSide::SIDE_BOTTOM;
if(s_Operation == OP_CLICKED && absolute(IsVertical ? UI()->MouseY() - s_InitialMouseY : UI()->MouseX() - s_InitialMouseX) > 5.0f)
s_Operation = OP_DRAGGING;
@ -7859,6 +7862,8 @@ void CEditor::DoEditorDragBar(CUIRect View, CUIRect *pDragBar, EDragSide Side, f
*pValue = clamp(UI()->MouseY() - s_InitialMouseOffsetY - View.y + pDragBar->h, MinValue, MaxValue);
else if(Side == EDragSide::SIDE_LEFT)
*pValue = clamp(s_InitialMouseOffsetX + View.x + View.w - UI()->MouseX(), MinValue, MaxValue);
m_CursorType = IsVertical ? CURSOR_RESIZE_V : CURSOR_RESIZE_H;
}
}
}
@ -7945,6 +7950,7 @@ void CEditor::Render()
Graphics()->Clear(0.0f, 0.0f, 0.0f);
CUIRect View = *UI()->Screen();
UI()->MapScreen();
m_CursorType = CURSOR_NORMAL;
float Width = View.w;
float Height = View.h;
@ -8306,8 +8312,10 @@ void CEditor::RenderMousePointer()
return;
Graphics()->WrapClamp();
Graphics()->TextureSet(m_CursorTexture);
Graphics()->TextureSet(m_aCursorTextures[m_CursorType]);
Graphics()->QuadsBegin();
if(m_CursorType == CURSOR_RESIZE_V)
Graphics()->QuadsSetRotation(pi / 2);
if(ms_pUiGotContext == UI()->HotItem())
Graphics()->SetColor(1, 0, 0, 1);
IGraphics::CQuadItem QuadItem(UI()->MouseX(), UI()->MouseY(), 16.0f, 16.0f);
@ -8440,7 +8448,9 @@ void CEditor::Init()
m_CheckerTexture = Graphics()->LoadTexture("editor/checker.png", IStorage::TYPE_ALL);
m_BackgroundTexture = Graphics()->LoadTexture("editor/background.png", IStorage::TYPE_ALL);
m_CursorTexture = Graphics()->LoadTexture("editor/cursor.png", IStorage::TYPE_ALL);
m_aCursorTextures[CURSOR_NORMAL] = Graphics()->LoadTexture("editor/cursor.png", IStorage::TYPE_ALL);
m_aCursorTextures[CURSOR_RESIZE_H] = Graphics()->LoadTexture("editor/cursor_resize.png", IStorage::TYPE_ALL);
m_aCursorTextures[CURSOR_RESIZE_V] = m_aCursorTextures[CURSOR_RESIZE_H];
m_pTilesetPicker = std::make_shared<CLayerTiles>(this, 16, 16);
m_pTilesetPicker->MakePalette();

View file

@ -397,7 +397,10 @@ public:
m_CheckerTexture.Invalidate();
m_BackgroundTexture.Invalidate();
m_CursorTexture.Invalidate();
for(int i = 0; i < NUM_CURSORS; i++)
m_aCursorTextures[i].Invalidate();
m_CursorType = CURSOR_NORMAL;
ms_pUiGotContext = nullptr;
@ -741,7 +744,16 @@ public:
IGraphics::CTextureHandle m_CheckerTexture;
IGraphics::CTextureHandle m_BackgroundTexture;
IGraphics::CTextureHandle m_CursorTexture;
enum ECursorType
{
CURSOR_NORMAL,
CURSOR_RESIZE_V,
CURSOR_RESIZE_H,
NUM_CURSORS
};
IGraphics::CTextureHandle m_aCursorTextures[ECursorType::NUM_CURSORS];
ECursorType m_CursorType;
IGraphics::CTextureHandle GetEntitiesTexture();