Widgets: Fix issues with Y reversal
This commit is contained in:
parent
b6d366c89d
commit
2cdd7d0b44
|
|
@ -43,7 +43,7 @@ namespace Nz
|
||||||
|
|
||||||
auto& textNode = GetRegistry().emplace<NodeComponent>(m_textEntity);
|
auto& textNode = GetRegistry().emplace<NodeComponent>(m_textEntity);
|
||||||
textNode.SetParent(this);
|
textNode.SetParent(this);
|
||||||
textNode.SetPosition(paddingWidth, paddingHeight);
|
textNode.SetPosition(paddingWidth, GetHeight() - paddingHeight);
|
||||||
|
|
||||||
SetCursor(SystemCursor::Text);
|
SetCursor(SystemCursor::Text);
|
||||||
|
|
||||||
|
|
@ -88,6 +88,9 @@ namespace Nz
|
||||||
x -= textPosition.x;
|
x -= textPosition.x;
|
||||||
y -= textPosition.y;
|
y -= textPosition.y;
|
||||||
|
|
||||||
|
float textHeight = textDrawer.GetBounds().height;
|
||||||
|
y = textHeight - y;
|
||||||
|
|
||||||
std::size_t glyphCount = textDrawer.GetGlyphCount();
|
std::size_t glyphCount = textDrawer.GetGlyphCount();
|
||||||
if (glyphCount > 0)
|
if (glyphCount > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -458,6 +461,7 @@ namespace Nz
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resize every cursor sprite
|
// Resize every cursor sprite
|
||||||
|
float textHeight = m_textSprite->GetAABB().height;
|
||||||
for (unsigned int i = m_cursorPositionBegin.y; i <= m_cursorPositionEnd.y; ++i)
|
for (unsigned int i = m_cursorPositionBegin.y; i <= m_cursorPositionEnd.y; ++i)
|
||||||
{
|
{
|
||||||
const auto& lineInfo = textDrawer.GetLine(i);
|
const auto& lineInfo = textDrawer.GetLine(i);
|
||||||
|
|
@ -489,7 +493,7 @@ namespace Nz
|
||||||
cursor.sprite->SetColor((m_cursorPositionBegin == m_cursorPositionEnd) ? Color::Black : Color(0, 0, 0, 50));
|
cursor.sprite->SetColor((m_cursorPositionBegin == m_cursorPositionEnd) ? Color::Black : Color(0, 0, 0, 50));
|
||||||
cursor.sprite->SetSize(Vector2f(spriteSize, lineInfo.bounds.height));
|
cursor.sprite->SetSize(Vector2f(spriteSize, lineInfo.bounds.height));
|
||||||
|
|
||||||
registry.get<NodeComponent>(cursor.entity).SetPosition(beginX, lineInfo.bounds.y);
|
registry.get<NodeComponent>(cursor.entity).SetPosition(beginX, textHeight - lineInfo.bounds.y - lineInfo.bounds.height);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -497,7 +501,7 @@ namespace Nz
|
||||||
cursor.sprite->SetColor(Color(0, 0, 0, 50));
|
cursor.sprite->SetColor(Color(0, 0, 0, 50));
|
||||||
cursor.sprite->SetSize(Vector2f(lineInfo.bounds.width, lineInfo.bounds.height));
|
cursor.sprite->SetSize(Vector2f(lineInfo.bounds.width, lineInfo.bounds.height));
|
||||||
|
|
||||||
registry.get<NodeComponent>(cursor.entity).SetPosition(0.f, lineInfo.bounds.y);
|
registry.get<NodeComponent>(cursor.entity).SetPosition(0.f, textHeight - lineInfo.bounds.y - lineInfo.bounds.height);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -505,6 +509,10 @@ namespace Nz
|
||||||
void AbstractTextAreaWidget::UpdateTextSprite()
|
void AbstractTextAreaWidget::UpdateTextSprite()
|
||||||
{
|
{
|
||||||
m_textSprite->Update(GetTextDrawer());
|
m_textSprite->Update(GetTextDrawer());
|
||||||
SetPreferredSize(Vector2f(m_textSprite->GetAABB().GetLengths()));
|
Vector2f textSize = Vector2f(m_textSprite->GetAABB().GetLengths());
|
||||||
|
SetPreferredSize(textSize);
|
||||||
|
|
||||||
|
auto& textNode = GetRegistry().get<NodeComponent>(m_textEntity);
|
||||||
|
textNode.SetPosition(paddingWidth, GetHeight() - paddingHeight - textSize.y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,33 +49,33 @@ namespace Nz
|
||||||
m_widgetEntries.pop_back();
|
m_widgetEntries.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::OnEventMouseButtonPressed(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::MouseButtonEvent& event)
|
void Canvas::OnEventMouseButtonPressed(const EventHandler* /*eventHandler*/, const WindowEvent::MouseButtonEvent& event)
|
||||||
{
|
{
|
||||||
if (m_hoveredWidget != InvalidCanvasIndex)
|
if (m_hoveredWidget != InvalidCanvasIndex)
|
||||||
{
|
{
|
||||||
WidgetEntry& hoveredWidget = m_widgetEntries[m_hoveredWidget];
|
WidgetEntry& hoveredWidget = m_widgetEntries[m_hoveredWidget];
|
||||||
|
|
||||||
int x = static_cast<int>(std::round(event.x - hoveredWidget.box.x));
|
int x = static_cast<int>(std::round(event.x - hoveredWidget.box.x));
|
||||||
int y = static_cast<int>(std::round(event.y - hoveredWidget.box.y));
|
int y = static_cast<int>(std::round(m_size.y - event.y - hoveredWidget.box.y));
|
||||||
|
|
||||||
hoveredWidget.widget->OnMouseButtonPress(x, y, event.button);
|
hoveredWidget.widget->OnMouseButtonPress(x, y, event.button);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::OnEventMouseButtonRelease(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::MouseButtonEvent& event)
|
void Canvas::OnEventMouseButtonRelease(const EventHandler* /*eventHandler*/, const WindowEvent::MouseButtonEvent& event)
|
||||||
{
|
{
|
||||||
if (m_hoveredWidget != InvalidCanvasIndex)
|
if (m_hoveredWidget != InvalidCanvasIndex)
|
||||||
{
|
{
|
||||||
WidgetEntry& hoveredWidget = m_widgetEntries[m_hoveredWidget];
|
WidgetEntry& hoveredWidget = m_widgetEntries[m_hoveredWidget];
|
||||||
|
|
||||||
int x = static_cast<int>(std::round(event.x - hoveredWidget.box.x));
|
int x = static_cast<int>(std::round(event.x - hoveredWidget.box.x));
|
||||||
int y = static_cast<int>(std::round(event.y - hoveredWidget.box.y));
|
int y = static_cast<int>(std::round(m_size.y - event.y - hoveredWidget.box.y));
|
||||||
|
|
||||||
hoveredWidget.widget->OnMouseButtonRelease(x, y, event.button);
|
hoveredWidget.widget->OnMouseButtonRelease(x, y, event.button);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::OnEventMouseMoved(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::MouseMoveEvent& event)
|
void Canvas::OnEventMouseMoved(const EventHandler* /*eventHandler*/, const WindowEvent::MouseMoveEvent& event)
|
||||||
{
|
{
|
||||||
std::size_t bestEntry = InvalidCanvasIndex;
|
std::size_t bestEntry = InvalidCanvasIndex;
|
||||||
float bestEntryArea = std::numeric_limits<float>::infinity();
|
float bestEntryArea = std::numeric_limits<float>::infinity();
|
||||||
|
|
@ -110,13 +110,13 @@ namespace Nz
|
||||||
m_widgetEntries[m_hoveredWidget].widget->OnMouseEnter();
|
m_widgetEntries[m_hoveredWidget].widget->OnMouseEnter();
|
||||||
|
|
||||||
if (m_cursorController)
|
if (m_cursorController)
|
||||||
m_cursorController->UpdateCursor(Nz::Cursor::Get(m_widgetEntries[m_hoveredWidget].cursor));
|
m_cursorController->UpdateCursor(Cursor::Get(m_widgetEntries[m_hoveredWidget].cursor));
|
||||||
}
|
}
|
||||||
|
|
||||||
WidgetEntry& hoveredWidget = m_widgetEntries[m_hoveredWidget];
|
WidgetEntry& hoveredWidget = m_widgetEntries[m_hoveredWidget];
|
||||||
|
|
||||||
int x = static_cast<int>(std::round(event.x - hoveredWidget.box.x));
|
int x = static_cast<int>(std::round(mousePos.x - hoveredWidget.box.x));
|
||||||
int y = static_cast<int>(std::round(event.y - hoveredWidget.box.y));
|
int y = static_cast<int>(std::round(mousePos.y - hoveredWidget.box.y));
|
||||||
hoveredWidget.widget->OnMouseMoved(x, y, event.deltaX, event.deltaY);
|
hoveredWidget.widget->OnMouseMoved(x, y, event.deltaX, event.deltaY);
|
||||||
}
|
}
|
||||||
else if (m_hoveredWidget != InvalidCanvasIndex)
|
else if (m_hoveredWidget != InvalidCanvasIndex)
|
||||||
|
|
@ -125,24 +125,24 @@ namespace Nz
|
||||||
m_hoveredWidget = InvalidCanvasIndex;
|
m_hoveredWidget = InvalidCanvasIndex;
|
||||||
|
|
||||||
if (m_cursorController)
|
if (m_cursorController)
|
||||||
m_cursorController->UpdateCursor(Nz::Cursor::Get(Nz::SystemCursor::Default));
|
m_cursorController->UpdateCursor(Cursor::Get(SystemCursor::Default));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::OnEventMouseWheelMoved(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::MouseWheelEvent& event)
|
void Canvas::OnEventMouseWheelMoved(const EventHandler* /*eventHandler*/, const WindowEvent::MouseWheelEvent& event)
|
||||||
{
|
{
|
||||||
if (m_hoveredWidget != InvalidCanvasIndex)
|
if (m_hoveredWidget != InvalidCanvasIndex)
|
||||||
{
|
{
|
||||||
WidgetEntry& hoveredWidget = m_widgetEntries[m_hoveredWidget];
|
WidgetEntry& hoveredWidget = m_widgetEntries[m_hoveredWidget];
|
||||||
|
|
||||||
int x = static_cast<int>(std::round(event.x - hoveredWidget.box.x));
|
int x = static_cast<int>(std::round(event.x - hoveredWidget.box.x));
|
||||||
int y = static_cast<int>(std::round(event.y - hoveredWidget.box.y));
|
int y = static_cast<int>(std::round(m_size.y - event.y - hoveredWidget.box.y));
|
||||||
|
|
||||||
hoveredWidget.widget->OnMouseWheelMoved(x, y, event.delta);
|
hoveredWidget.widget->OnMouseWheelMoved(x, y, event.delta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::OnEventMouseLeft(const Nz::EventHandler* /*eventHandler*/)
|
void Canvas::OnEventMouseLeft(const EventHandler* /*eventHandler*/)
|
||||||
{
|
{
|
||||||
if (m_hoveredWidget != InvalidCanvasIndex)
|
if (m_hoveredWidget != InvalidCanvasIndex)
|
||||||
{
|
{
|
||||||
|
|
@ -151,14 +151,14 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::OnEventKeyPressed(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::KeyEvent& event)
|
void Canvas::OnEventKeyPressed(const EventHandler* eventHandler, const WindowEvent::KeyEvent& event)
|
||||||
{
|
{
|
||||||
if (m_keyboardOwner != InvalidCanvasIndex)
|
if (m_keyboardOwner != InvalidCanvasIndex)
|
||||||
{
|
{
|
||||||
if (m_widgetEntries[m_keyboardOwner].widget->OnKeyPressed(event))
|
if (m_widgetEntries[m_keyboardOwner].widget->OnKeyPressed(event))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (event.virtualKey == Nz::Keyboard::VKey::Tab)
|
if (event.virtualKey == Keyboard::VKey::Tab)
|
||||||
{
|
{
|
||||||
if (!event.shift)
|
if (!event.shift)
|
||||||
{
|
{
|
||||||
|
|
@ -209,7 +209,7 @@ namespace Nz
|
||||||
OnUnhandledKeyPressed(eventHandler, event);
|
OnUnhandledKeyPressed(eventHandler, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::OnEventKeyReleased(const Nz::EventHandler* eventHandler, const Nz::WindowEvent::KeyEvent& event)
|
void Canvas::OnEventKeyReleased(const EventHandler* eventHandler, const WindowEvent::KeyEvent& event)
|
||||||
{
|
{
|
||||||
if (m_keyboardOwner != InvalidCanvasIndex)
|
if (m_keyboardOwner != InvalidCanvasIndex)
|
||||||
m_widgetEntries[m_keyboardOwner].widget->OnKeyReleased(event);
|
m_widgetEntries[m_keyboardOwner].widget->OnKeyReleased(event);
|
||||||
|
|
@ -217,13 +217,13 @@ namespace Nz
|
||||||
OnUnhandledKeyReleased(eventHandler, event);
|
OnUnhandledKeyReleased(eventHandler, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::OnEventTextEntered(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::TextEvent& event)
|
void Canvas::OnEventTextEntered(const EventHandler* /*eventHandler*/, const WindowEvent::TextEvent& event)
|
||||||
{
|
{
|
||||||
if (m_keyboardOwner != InvalidCanvasIndex)
|
if (m_keyboardOwner != InvalidCanvasIndex)
|
||||||
m_widgetEntries[m_keyboardOwner].widget->OnTextEntered(event.character, event.repeated);
|
m_widgetEntries[m_keyboardOwner].widget->OnTextEntered(event.character, event.repeated);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Canvas::OnEventTextEdited(const Nz::EventHandler* /*eventHandler*/, const Nz::WindowEvent::EditEvent& event)
|
void Canvas::OnEventTextEdited(const EventHandler* /*eventHandler*/, const WindowEvent::EditEvent& event)
|
||||||
{
|
{
|
||||||
if (m_keyboardOwner != InvalidCanvasIndex)
|
if (m_keyboardOwner != InvalidCanvasIndex)
|
||||||
m_widgetEntries[m_keyboardOwner].widget->OnTextEdited(event.text, event.length);
|
m_widgetEntries[m_keyboardOwner].widget->OnTextEdited(event.text, event.length);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue