Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/windowing
diff options
context:
space:
mode:
authorKae <80987908+Novaenia@users.noreply.github.com>2023-07-17 22:20:39 +1000
committerKae <80987908+Novaenia@users.noreply.github.com>2023-07-17 22:20:39 +1000
commit34bb0b54222c1c0f3450c56e76f89f192d77374b (patch)
tree09e119625d066d16e3a81a8f6c0c424c4159f058 /source/windowing
parent848b11399f2e34d7f1e0523e214287bfdcc5816c (diff)
Initial voice HUD indicator setup
Diffstat (limited to 'source/windowing')
-rw-r--r--source/windowing/StarCanvasWidget.cpp11
-rw-r--r--source/windowing/StarGuiContext.cpp10
-rw-r--r--source/windowing/StarGuiContext.hpp1
-rw-r--r--source/windowing/StarWidgetLuaBindings.cpp9
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",