diff options
author | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-17 22:20:39 +1000 |
---|---|---|
committer | Kae <80987908+Novaenia@users.noreply.github.com> | 2023-07-17 22:20:39 +1000 |
commit | 34bb0b54222c1c0f3450c56e76f89f192d77374b (patch) | |
tree | 09e119625d066d16e3a81a8f6c0c424c4159f058 /source/windowing | |
parent | 848b11399f2e34d7f1e0523e214287bfdcc5816c (diff) |
Initial voice HUD indicator setup
Diffstat (limited to 'source/windowing')
-rw-r--r-- | source/windowing/StarCanvasWidget.cpp | 11 | ||||
-rw-r--r-- | source/windowing/StarGuiContext.cpp | 10 | ||||
-rw-r--r-- | source/windowing/StarGuiContext.hpp | 1 | ||||
-rw-r--r-- | source/windowing/StarWidgetLuaBindings.cpp | 9 |
4 files changed, 19 insertions, 12 deletions
diff --git a/source/windowing/StarCanvasWidget.cpp b/source/windowing/StarCanvasWidget.cpp index ed2e30f..a0eeb7d 100644 --- a/source/windowing/StarCanvasWidget.cpp +++ b/source/windowing/StarCanvasWidget.cpp @@ -88,20 +88,21 @@ bool CanvasWidget::sendEvent(InputEvent const& event) { return false; auto& context = GuiContext::singleton(); + int interfaceScale = m_ignoreInterfaceScale ? 1 : context.interfaceScale(); if (auto mouseButtonDown = event.ptr<MouseButtonDownEvent>()) { - if (inMember(*context.mousePosition(event)) && m_captureMouse) { - m_clickEvents.append({*context.mousePosition(event) - screenPosition(), mouseButtonDown->mouseButton, true}); + if (inMember(*context.mousePosition(event, interfaceScale)) && m_captureMouse) { + m_clickEvents.append({*context.mousePosition(event, interfaceScale) - screenPosition(), mouseButtonDown->mouseButton, true}); m_clickEvents.limitSizeBack(MaximumEventBuffer); return true; } } else if (auto mouseButtonUp = event.ptr<MouseButtonUpEvent>()) { if (m_captureMouse) { - m_clickEvents.append({*context.mousePosition(event) - screenPosition(), mouseButtonUp->mouseButton, false}); + m_clickEvents.append({*context.mousePosition(event, interfaceScale) - screenPosition(), mouseButtonUp->mouseButton, false}); m_clickEvents.limitSizeBack(MaximumEventBuffer); return true; } } else if (event.is<MouseMoveEvent>()) { - m_mousePosition = *context.mousePosition(event) - screenPosition(); + m_mousePosition = *context.mousePosition(event, interfaceScale) - screenPosition(); return false; } else if (auto keyDown = event.ptr<KeyDownEvent>()) { if (m_captureKeyboard) { @@ -258,7 +259,7 @@ void CanvasWidget::renderTriangles(Vec2F const& renderingOffset, List<tuple<Vec2 void CanvasWidget::renderText(Vec2F const& renderingOffset, String const& s, TextPositioning const& position, unsigned fontSize, Vec4B const& color, FontMode mode, float lineSpacing, String const& font, String const& directives) { auto& context = GuiContext::singleton(); context.setFontProcessingDirectives(directives); - context.setFontSize(fontSize); + context.setFontSize(fontSize, m_ignoreInterfaceScale ? 1 : context.interfaceScale()); context.setFontColor(color); context.setFontMode(mode); context.setFont(font); diff --git a/source/windowing/StarGuiContext.cpp b/source/windowing/StarGuiContext.cpp index 2d649c5..73713d1 100644 --- a/source/windowing/StarGuiContext.cpp +++ b/source/windowing/StarGuiContext.cpp @@ -98,9 +98,9 @@ void GuiContext::setInterfaceScale(int interfaceScale) { m_interfaceScale = interfaceScale; } -Maybe<Vec2I> GuiContext::mousePosition(InputEvent const& event) const { - auto getInterfacePosition = [this](Vec2I pos) { - return Vec2I(pos) / interfaceScale(); +Maybe<Vec2I> GuiContext::mousePosition(InputEvent const& event, int pixelRatio) const { + auto getInterfacePosition = [pixelRatio](Vec2I pos) { + return Vec2I(pos) / pixelRatio; }; if (auto mouseMoveEvent = event.ptr<MouseMoveEvent>()) @@ -115,6 +115,10 @@ Maybe<Vec2I> GuiContext::mousePosition(InputEvent const& event) const { return {}; } +Maybe<Vec2I> GuiContext::mousePosition(InputEvent const& event) const { + return mousePosition(event, interfaceScale()); +} + Set<InterfaceAction> GuiContext::actions(InputEvent const& event) const { return m_keyBindings.actions(event); } diff --git a/source/windowing/StarGuiContext.hpp b/source/windowing/StarGuiContext.hpp index 1d6ed46..8e689ee 100644 --- a/source/windowing/StarGuiContext.hpp +++ b/source/windowing/StarGuiContext.hpp @@ -50,6 +50,7 @@ public: int interfaceScale() const; void setInterfaceScale(int interfaceScale); + Maybe<Vec2I> mousePosition(InputEvent const& event, int pixelRatio) const; Maybe<Vec2I> mousePosition(InputEvent const& event) const; Set<InterfaceAction> actions(InputEvent const& event) const; diff --git a/source/windowing/StarWidgetLuaBindings.cpp b/source/windowing/StarWidgetLuaBindings.cpp index 46f1ac8..f69bd53 100644 --- a/source/windowing/StarWidgetLuaBindings.cpp +++ b/source/windowing/StarWidgetLuaBindings.cpp @@ -25,13 +25,14 @@ LuaMethods<CanvasWidgetPtr> LuaUserDataMethods<CanvasWidgetPtr>::make() { methods.registerMethodWithSignature<void, CanvasWidgetPtr>("clear", mem_fn(&CanvasWidget::clear)); - methods.registerMethod("drawDrawable", [](CanvasWidgetPtr canvasWidget, Drawable drawable) { - canvasWidget->drawDrawable(move(drawable), Vec2F()); + methods.registerMethod("drawDrawable", [](CanvasWidgetPtr canvasWidget, Drawable drawable, Maybe<Vec2F> screenPos) { + canvasWidget->drawDrawable(move(drawable), screenPos.value(Vec2F())); }); - methods.registerMethod("drawDrawables", [](CanvasWidgetPtr canvasWidget, List<Drawable> drawables) { + methods.registerMethod("drawDrawables", [](CanvasWidgetPtr canvasWidget, List<Drawable> drawables, Maybe<Vec2F> screenPos) { + Vec2F pos = screenPos.value(Vec2F()); for (auto& drawable : drawables) - canvasWidget->drawDrawable(move(drawable), Vec2F()); + canvasWidget->drawDrawable(move(drawable), pos); }); methods.registerMethod("drawImage", |