diff --git a/res/layouts/console.xml b/res/layouts/console.xml index 3e1b802d..bae396bf 100644 --- a/res/layouts/console.xml +++ b/res/layouts/console.xml @@ -14,7 +14,7 @@ diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index bfaac141..f0bbf20a 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -615,8 +615,11 @@ void Hud::updateElementsPosition(const Viewport& viewport) { } if (secondUI->getPositionFunc() == nullptr) { secondUI->setPos(glm::vec2( - glm::min(width/2-invwidth/2, width-caWidth-(inventoryView ? 10 : 0)-invwidth), - height/2-totalHeight/2 + glm::min( + width / 2.f - invwidth / 2.f, + width - caWidth - (inventoryView ? 10 : 0) - invwidth + ), + height / 2.f - totalHeight / 2.f )); } } diff --git a/src/graphics/core/DrawContext.cpp b/src/graphics/core/DrawContext.cpp index 29afae2e..314bd7b5 100644 --- a/src/graphics/core/DrawContext.cpp +++ b/src/graphics/core/DrawContext.cpp @@ -148,7 +148,7 @@ void DrawContext::setBlendMode(BlendMode mode) { set_blend_mode(mode); } -void DrawContext::setScissors(glm::vec4 area) { +void DrawContext::setScissors(const glm::vec4& area) { Window::pushScissor(area); scissorsCount++; } diff --git a/src/graphics/core/DrawContext.hpp b/src/graphics/core/DrawContext.hpp index 9174be1b..736b053e 100644 --- a/src/graphics/core/DrawContext.hpp +++ b/src/graphics/core/DrawContext.hpp @@ -34,6 +34,6 @@ public: void setDepthTest(bool flag); void setCullFace(bool flag); void setBlendMode(BlendMode mode); - void setScissors(glm::vec4 area); + void setScissors(const glm::vec4& area); void setLineWidth(float width); }; diff --git a/src/graphics/ui/elements/Container.cpp b/src/graphics/ui/elements/Container.cpp index 3b8fd0ac..72a44d52 100644 --- a/src/graphics/ui/elements/Container.cpp +++ b/src/graphics/ui/elements/Container.cpp @@ -90,7 +90,7 @@ void Container::draw(const DrawContext* pctx, Assets* assets) { if (!nodes.empty()) { batch->flush(); DrawContext ctx = pctx->sub(); - ctx.setScissors(glm::vec4(pos.x, pos.y, size.x, size.y)); + ctx.setScissors(glm::vec4(pos.x, pos.y, glm::ceil(size.x), glm::ceil(size.y))); for (const auto& node : nodes) { if (node->isVisible()) node->draw(pctx, assets); @@ -108,7 +108,7 @@ void Container::drawBackground(const DrawContext* pctx, Assets*) { auto batch = pctx->getBatch2D(); batch->texture(nullptr); batch->setColor(color); - batch->rect(pos.x, pos.y, size.x, size.y); + batch->rect(pos.x, pos.y, glm::ceil(size.x), glm::ceil(size.y)); } void Container::add(const std::shared_ptr &node) { diff --git a/src/window/Window.cpp b/src/window/Window.cpp index fdfde141..99a549ca 100644 --- a/src/window/Window.cpp +++ b/src/window/Window.cpp @@ -258,14 +258,14 @@ void Window::pushScissor(glm::vec4 area) { } scissorStack.push(scissorArea); - area.z += area.x; - area.w += area.y; + area.z += glm::ceil(area.x); + area.w += glm::ceil(area.y); - area.x = fmax(area.x, scissorArea.x); - area.y = fmax(area.y, scissorArea.y); + area.x = glm::max(area.x, scissorArea.x); + area.y = glm::max(area.y, scissorArea.y); - area.z = fmin(area.z, scissorArea.z); - area.w = fmin(area.w, scissorArea.w); + area.z = glm::min(area.z, scissorArea.z); + area.w = glm::min(area.w, scissorArea.w); if (area.z < 0.0f || area.w < 0.0f) { glScissor(0, 0, 0, 0); @@ -273,8 +273,8 @@ void Window::pushScissor(glm::vec4 area) { glScissor( area.x, Window::height - area.w, - std::max(0, int(area.z - area.x)), - std::max(0, int(area.w - area.y)) + std::max(0, static_cast(glm::ceil(area.z - area.x))), + std::max(0, static_cast(glm::ceil(area.w - area.y))) ); } scissorArea = area;