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

summaryrefslogtreecommitdiff
path: root/source/windowing
diff options
context:
space:
mode:
Diffstat (limited to 'source/windowing')
-rw-r--r--source/windowing/StarButtonWidget.cpp2
-rw-r--r--source/windowing/StarButtonWidget.hpp1
-rw-r--r--source/windowing/StarCanvasWidget.cpp10
-rw-r--r--source/windowing/StarCanvasWidget.hpp6
-rw-r--r--source/windowing/StarFuelWidget.cpp2
-rw-r--r--source/windowing/StarFuelWidget.hpp1
-rw-r--r--source/windowing/StarGuiContext.cpp8
-rw-r--r--source/windowing/StarGuiContext.hpp2
-rw-r--r--source/windowing/StarItemSlotWidget.cpp2
-rw-r--r--source/windowing/StarItemSlotWidget.hpp1
-rw-r--r--source/windowing/StarLabelWidget.cpp6
-rw-r--r--source/windowing/StarLabelWidget.hpp1
-rw-r--r--source/windowing/StarPane.cpp3
-rw-r--r--source/windowing/StarPane.hpp1
-rw-r--r--source/windowing/StarTextBoxWidget.cpp5
-rw-r--r--source/windowing/StarTextBoxWidget.hpp1
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;