diff options
Diffstat (limited to 'source/windowing')
-rw-r--r-- | source/windowing/StarButtonWidget.cpp | 2 | ||||
-rw-r--r-- | source/windowing/StarButtonWidget.hpp | 1 | ||||
-rw-r--r-- | source/windowing/StarCanvasWidget.cpp | 10 | ||||
-rw-r--r-- | source/windowing/StarCanvasWidget.hpp | 6 | ||||
-rw-r--r-- | source/windowing/StarFuelWidget.cpp | 2 | ||||
-rw-r--r-- | source/windowing/StarFuelWidget.hpp | 1 | ||||
-rw-r--r-- | source/windowing/StarGuiContext.cpp | 8 | ||||
-rw-r--r-- | source/windowing/StarGuiContext.hpp | 2 | ||||
-rw-r--r-- | source/windowing/StarItemSlotWidget.cpp | 2 | ||||
-rw-r--r-- | source/windowing/StarItemSlotWidget.hpp | 1 | ||||
-rw-r--r-- | source/windowing/StarLabelWidget.cpp | 6 | ||||
-rw-r--r-- | source/windowing/StarLabelWidget.hpp | 1 | ||||
-rw-r--r-- | source/windowing/StarPane.cpp | 3 | ||||
-rw-r--r-- | source/windowing/StarPane.hpp | 1 | ||||
-rw-r--r-- | source/windowing/StarTextBoxWidget.cpp | 5 | ||||
-rw-r--r-- | source/windowing/StarTextBoxWidget.hpp | 1 |
16 files changed, 44 insertions, 8 deletions
diff --git a/source/windowing/StarButtonWidget.cpp b/source/windowing/StarButtonWidget.cpp index 88b3996..d70941e 100644 --- a/source/windowing/StarButtonWidget.cpp +++ b/source/windowing/StarButtonWidget.cpp @@ -25,6 +25,7 @@ ButtonWidget::ButtonWidget() { auto interfaceConfig = assets->json("/interface.config"); m_pressedOffset = jsonToVec2I(interfaceConfig.get("buttonPressedOffset")); m_fontSize = interfaceConfig.query("font.buttonSize").toInt(); + m_font = interfaceConfig.query("font.defaultFont").toString(); } ButtonWidget::ButtonWidget(WidgetCallbackFunc callback, @@ -89,6 +90,7 @@ void ButtonWidget::renderImpl() { if (!m_text.empty()) { auto& guiContext = GuiContext::singleton(); guiContext.setFontSize(m_fontSize); + guiContext.setFont(m_font); if (m_disabled) guiContext.setFontColor(m_fontColorDisabled.toRgba()); else if (m_fontColorChecked && m_checked) diff --git a/source/windowing/StarButtonWidget.hpp b/source/windowing/StarButtonWidget.hpp index 8c466e8..baaab00 100644 --- a/source/windowing/StarButtonWidget.hpp +++ b/source/windowing/StarButtonWidget.hpp @@ -121,6 +121,7 @@ protected: Vec2U m_buttonBoundSize; int m_fontSize; + String m_font; String m_text; Vec2I m_textOffset; diff --git a/source/windowing/StarCanvasWidget.cpp b/source/windowing/StarCanvasWidget.cpp index d0c6999..873702b 100644 --- a/source/windowing/StarCanvasWidget.cpp +++ b/source/windowing/StarCanvasWidget.cpp @@ -60,8 +60,8 @@ void CanvasWidget::drawTriangles(List<tuple<Vec2F, Vec2F, Vec2F>> const& triangl m_renderOps.append(make_tuple(triangles, color)); } -void CanvasWidget::drawText(String s, TextPositioning position, unsigned fontSize, Vec4B const& color, FontMode mode, float lineSpacing, String processingDirectives) { - m_renderOps.append(make_tuple(move(s), move(position), fontSize, color, mode, lineSpacing, move(processingDirectives))); +void CanvasWidget::drawText(String s, TextPositioning position, unsigned fontSize, Vec4B const& color, FontMode mode, float lineSpacing, String font, String processingDirectives) { + m_renderOps.append(make_tuple(move(s), move(position), fontSize, color, mode, lineSpacing, move(font), move(processingDirectives))); } Vec2I CanvasWidget::mousePosition() const { @@ -137,7 +137,7 @@ void CanvasWidget::renderImpl() { if (auto args = op.ptr<TrianglesOp>()) tupleUnpackFunction(bind(&CanvasWidget::renderTriangles, this, renderingOffset, _1, _2), *args); if (auto args = op.ptr<TextOp>()) - tupleUnpackFunction(bind(&CanvasWidget::renderText, this, renderingOffset, _1, _2, _3, _4, _5, _6, _7), *args); + tupleUnpackFunction(bind(&CanvasWidget::renderText, this, renderingOffset, _1, _2, _3, _4, _5, _6, _7, _8), *args); } } @@ -222,18 +222,20 @@ void CanvasWidget::renderTriangles(Vec2F const& renderingOffset, List<tuple<Vec2 context.drawInterfaceTriangles(translated, color); } -void CanvasWidget::renderText(Vec2F const& renderingOffset, String const& s, TextPositioning const& position, unsigned fontSize, Vec4B const& color, FontMode mode, float lineSpacing, String const& directives) { +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.setFontColor(color); context.setFontMode(mode); + context.setFont(font); context.setLineSpacing(lineSpacing); TextPositioning translatedPosition = position; translatedPosition.pos += renderingOffset; context.renderInterfaceText(s, translatedPosition); context.setDefaultLineSpacing(); + context.setDefaultFont(); context.setFontProcessingDirectives(""); } diff --git a/source/windowing/StarCanvasWidget.hpp b/source/windowing/StarCanvasWidget.hpp index 4d601e6..6f407de 100644 --- a/source/windowing/StarCanvasWidget.hpp +++ b/source/windowing/StarCanvasWidget.hpp @@ -65,7 +65,7 @@ public: void drawPoly(PolyF const& poly, Vec4B const& color = Vec4B(255, 255, 255, 255), float lineWidth = 1.0f); void drawTriangles(List<tuple<Vec2F, Vec2F, Vec2F>> const& poly, Vec4B const& color = Vec4B(255, 255, 255, 255)); - void drawText(String s, TextPositioning position, unsigned fontSize, Vec4B const& color = Vec4B(255, 255, 255, 255), FontMode mode = FontMode::Normal, float lineSpacing = Star::DefaultLineSpacing, String processingDirectives = ""); + void drawText(String s, TextPositioning position, unsigned fontSize, Vec4B const& color = Vec4B(255, 255, 255, 255), FontMode mode = FontMode::Normal, float lineSpacing = Star::DefaultLineSpacing, String font = "", String processingDirectives = ""); protected: void renderImpl() override; @@ -78,7 +78,7 @@ protected: void renderRect(Vec2F const& renderingOffset, RectF const& coords, Vec4B const& color); void renderPoly(Vec2F const& renderingOffset, PolyF poly, Vec4B const& color, float lineWidth); void renderTriangles(Vec2F const& renderingOffset, List<tuple<Vec2F, Vec2F, Vec2F>> const& triangles, Vec4B const& color); - void renderText(Vec2F const& renderingOffset, String const& s, TextPositioning const& position, unsigned fontSize, Vec4B const& color, FontMode mode, float lineSpacing, String const& directives); + void 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); private: bool m_captureKeyboard; @@ -95,7 +95,7 @@ private: typedef tuple<Vec2F, Vec2F, Vec4B, float> LineOp; typedef tuple<PolyF, Vec4B, float> PolyOp; typedef tuple<List<tuple<Vec2F, Vec2F, Vec2F>>, Vec4B> TrianglesOp; - typedef tuple<String, TextPositioning, unsigned, Vec4B, FontMode, float, String> TextOp; + typedef tuple<String, TextPositioning, unsigned, Vec4B, FontMode, float, String, String> TextOp; typedef MVariant<RectOp, ImageOp, ImageRectOp, DrawableOp, TiledImageOp, LineOp, PolyOp, TrianglesOp, TextOp> RenderOp; List<RenderOp> m_renderOps; diff --git a/source/windowing/StarFuelWidget.cpp b/source/windowing/StarFuelWidget.cpp index 4206254..43ea3d5 100644 --- a/source/windowing/StarFuelWidget.cpp +++ b/source/windowing/StarFuelWidget.cpp @@ -10,6 +10,7 @@ FuelWidget::FuelWidget() { auto assets = Root::singleton().assets(); m_fontSize = assets->json("/interface.config:font.buttonSize").toInt(); + m_font = assets->json("/interface.config:font.defaultFont").toString(); m_fuelLevel = 0; m_maxLevel = 0; @@ -73,6 +74,7 @@ void FuelWidget::renderImpl() { auto& guiContext = GuiContext::singleton(); guiContext.setFontSize(m_fontSize); + guiContext.setFont(m_font); if (m_potential != 0) { guiContext.setFontColor(Color::White.toRgba()); } else if (m_fuelLevel == 0) { diff --git a/source/windowing/StarFuelWidget.hpp b/source/windowing/StarFuelWidget.hpp index 5c9b78f..8d3482a 100644 --- a/source/windowing/StarFuelWidget.hpp +++ b/source/windowing/StarFuelWidget.hpp @@ -32,6 +32,7 @@ protected: float m_pingTimeout; unsigned m_fontSize; + String m_font; private: }; diff --git a/source/windowing/StarGuiContext.cpp b/source/windowing/StarGuiContext.cpp index 21f44f9..10cbefc 100644 --- a/source/windowing/StarGuiContext.cpp +++ b/source/windowing/StarGuiContext.cpp @@ -356,6 +356,14 @@ void GuiContext::setFontProcessingDirectives(String const& directives) { textPainter()->setProcessingDirectives(directives); } +void GuiContext::setFont(String const& font) { + textPainter()->setFont(font); +} + +void GuiContext::setDefaultFont() { + textPainter()->setFont(""); +} + void GuiContext::setLineSpacing(float lineSpacing) { textPainter()->setLineSpacing(lineSpacing); } diff --git a/source/windowing/StarGuiContext.hpp b/source/windowing/StarGuiContext.hpp index c5f6e26..3457148 100644 --- a/source/windowing/StarGuiContext.hpp +++ b/source/windowing/StarGuiContext.hpp @@ -101,6 +101,8 @@ public: void setFontColor(Vec4B const& color); void setFontMode(FontMode mode); void setFontProcessingDirectives(String const& directives); + void setFont(String const& font); + void setDefaultFont(); void setLineSpacing(float lineSpacing); void setDefaultLineSpacing(); diff --git a/source/windowing/StarItemSlotWidget.cpp b/source/windowing/StarItemSlotWidget.cpp index a0c9941..b317c8a 100644 --- a/source/windowing/StarItemSlotWidget.cpp +++ b/source/windowing/StarItemSlotWidget.cpp @@ -22,6 +22,7 @@ ItemSlotWidget::ItemSlotWidget(ItemPtr const& item, String const& backingImage) m_countPosition = TextPositioning(jsonToVec2F(interfaceConfig.get("itemCountRightAnchor")), HorizontalAnchor::RightAnchor); m_countFontMode = FontMode::Normal; m_fontSize = interfaceConfig.query("font.itemSize").toInt(); + m_font = interfaceConfig.query("font.defaultFont").toString(); m_fontColor = Color::rgb(jsonToVec3B(interfaceConfig.query("font.defaultColor"))); m_itemDraggableArea = jsonToRectI(interfaceConfig.get("itemDraggableArea")); m_durabilityOffset = jsonToVec2I(interfaceConfig.get("itemIconDurabilityOffset")); @@ -181,6 +182,7 @@ void ItemSlotWidget::renderImpl() { context()->drawInterfaceQuad(strf("/interface/cooldown.png:%d", frame), Vec2F(screenPosition())); if (m_item->count() > 1 && m_showCount) { // we don't need to tell people that there's only 1 of something + context()->setFont(m_font); context()->setFontSize(m_fontSize); context()->setFontColor(m_fontColor.toRgba()); context()->setFontMode(m_countFontMode); diff --git a/source/windowing/StarItemSlotWidget.hpp b/source/windowing/StarItemSlotWidget.hpp index c98afa0..31df876 100644 --- a/source/windowing/StarItemSlotWidget.hpp +++ b/source/windowing/StarItemSlotWidget.hpp @@ -57,6 +57,7 @@ private: RectI m_itemDraggableArea; int m_fontSize; + String m_font; Color m_fontColor; WidgetCallbackFunc m_callback; diff --git a/source/windowing/StarLabelWidget.cpp b/source/windowing/StarLabelWidget.cpp index 5159704..cfc273c 100644 --- a/source/windowing/StarLabelWidget.cpp +++ b/source/windowing/StarLabelWidget.cpp @@ -19,6 +19,7 @@ LabelWidget::LabelWidget(String text, auto fontConfig = assets->json("/interface.config:font"); m_fontSize = fontConfig.getInt("baseSize"); m_processingDirectives = fontConfig.getString("defaultDirectives"); + m_font = fontConfig.queryString("defaultFont", ""); setText(move(text)); } @@ -79,6 +80,7 @@ RectI LabelWidget::getScissorRect() const { } void LabelWidget::renderImpl() { + context()->setFont(m_font); context()->setFontSize(m_fontSize); context()->setFontColor(m_color.toRgba()); context()->setFontProcessingDirectives(m_processingDirectives); @@ -90,6 +92,7 @@ void LabelWidget::renderImpl() { context()->renderInterfaceText(m_text, {Vec2F(screenPosition()), m_hAnchor, m_vAnchor, m_wrapWidth, m_textCharLimit}); + context()->setDefaultFont(); context()->setFontProcessingDirectives(""); context()->setDefaultLineSpacing(); } @@ -98,7 +101,7 @@ void LabelWidget::updateTextRegion() { context()->setFontSize(m_fontSize); context()->setFontColor(m_color.toRgba()); context()->setFontProcessingDirectives(m_processingDirectives); - + context()->setFont(m_font); if (m_lineSpacing) context()->setLineSpacing(*m_lineSpacing); else @@ -107,6 +110,7 @@ void LabelWidget::updateTextRegion() { m_textRegion = RectI(context()->determineInterfaceTextSize(m_text, {Vec2F(), m_hAnchor, m_vAnchor, m_wrapWidth, m_textCharLimit})); setSize(m_textRegion.size()); + context()->setDefaultFont(); context()->setFontProcessingDirectives(""); context()->setDefaultLineSpacing(); } diff --git a/source/windowing/StarLabelWidget.hpp b/source/windowing/StarLabelWidget.hpp index 614119f..725354c 100644 --- a/source/windowing/StarLabelWidget.hpp +++ b/source/windowing/StarLabelWidget.hpp @@ -41,6 +41,7 @@ private: HorizontalAnchor m_hAnchor; VerticalAnchor m_vAnchor; String m_processingDirectives; + String m_font; Maybe<unsigned> m_wrapWidth; Maybe<float> m_lineSpacing; Maybe<unsigned> m_textCharLimit; diff --git a/source/windowing/StarPane.cpp b/source/windowing/StarPane.cpp index d1dfb0f..69cbabf 100644 --- a/source/windowing/StarPane.cpp +++ b/source/windowing/StarPane.cpp @@ -29,6 +29,7 @@ Pane::Pane() { auto assets = Root::singleton().assets(); m_fontSize = assets->json("/interface.config:font.baseSize").toInt(); + m_font = assets->json("/interface.config:font.defaultFont").toString(); m_iconOffset = jsonToVec2I(assets->json("/interface.config:paneIconOffset")); m_titleOffset = jsonToVec2I(assets->json("/interface.config:paneTitleOffset")); m_subTitleOffset = jsonToVec2I(assets->json("/interface.config:paneSubTitleOffset")); @@ -203,6 +204,7 @@ void Pane::renderImpl() { m_context->resetInterfaceScissorRect(); } + m_context->setFont(m_font); m_context->setFontSize(m_fontSize); m_context->setFontColor(m_titleColor.toRgba()); m_context->setFontMode(FontMode::Shadow); @@ -210,6 +212,7 @@ void Pane::renderImpl() { m_context->setFontColor(m_subTitleColor.toRgba()); m_context->renderInterfaceText(m_subTitle, {headerPos + Vec2F(m_subTitleOffset)}); m_context->setFontMode(FontMode::Normal); + m_context->setDefaultFont(); } } diff --git a/source/windowing/StarPane.hpp b/source/windowing/StarPane.hpp index 172af03..ce78337 100644 --- a/source/windowing/StarPane.hpp +++ b/source/windowing/StarPane.hpp @@ -113,6 +113,7 @@ protected: WidgetPtr m_icon; String m_title; String m_subTitle; + String m_font; unsigned m_fontSize; Vec2I m_iconOffset; Vec2I m_titleOffset; diff --git a/source/windowing/StarTextBoxWidget.cpp b/source/windowing/StarTextBoxWidget.cpp index 5bcdfbf..7c69fb1 100644 --- a/source/windowing/StarTextBoxWidget.cpp +++ b/source/windowing/StarTextBoxWidget.cpp @@ -25,6 +25,7 @@ TextBoxWidget::TextBoxWidget(String const& startingText, String const& hint, Wid auto fontConfig = assets->json("/interface.config:font"); m_fontSize = fontConfig.getInt("baseSize"); m_processingDirectives = fontConfig.getString("defaultDirectives"); + m_font = fontConfig.queryString("defaultFont", ""); m_color = Color::rgb(jsonToVec3B(fontConfig.getArray("defaultColor"))); // Meh, padding is hard-coded here @@ -46,6 +47,7 @@ void TextBoxWidget::renderImpl() { else if (m_hAnchor == HorizontalAnchor::RightAnchor) pos += Vec2F(size()[0], 0); + context()->setFont(m_font); if ((m_maxWidth != -1) && m_overfillMode) { context()->setFontSize(m_fontSize); int shift = std::max(0, getCursorOffset() - m_maxWidth); @@ -61,6 +63,7 @@ void TextBoxWidget::renderImpl() { context()->setFontColor(m_color.mix(Color::rgbf(0, 0, 1), blueRate).toRgba()); context()->renderInterfaceText(m_text, {pos, m_hAnchor, m_vAnchor}); } + context()->setDefaultFont(); context()->setFontProcessingDirectives(""); context()->setFontColor(Vec4B::filled(255)); @@ -85,6 +88,7 @@ void TextBoxWidget::renderImpl() { int TextBoxWidget::getCursorOffset() { // horizontal only float scale; + context()->setFont(m_font); context()->setFontSize(m_fontSize); if (m_hAnchor == HorizontalAnchor::LeftAnchor) { scale = 1.0; @@ -391,6 +395,7 @@ bool TextBoxWidget::newTextValid(String const& text) const { if (!text.regexMatch(m_regex)) return false; if ((m_maxWidth != -1) && !m_overfillMode) { + context()->setFont(m_font); context()->setFontSize(m_fontSize); return context()->stringInterfaceWidth(text) <= m_maxWidth; } diff --git a/source/windowing/StarTextBoxWidget.hpp b/source/windowing/StarTextBoxWidget.hpp index c24923a..d37125a 100644 --- a/source/windowing/StarTextBoxWidget.hpp +++ b/source/windowing/StarTextBoxWidget.hpp @@ -63,6 +63,7 @@ private: VerticalAnchor m_vAnchor; Color m_color; String m_processingDirectives; + String m_font; int m_fontSize; int m_maxWidth; int m_cursorOffset; |