From 80aab74aa4d673b2ccc4825a1839017a50233611 Mon Sep 17 00:00:00 2001 From: turanszkij Date: Sat, 8 Oct 2016 14:47:20 +0200 Subject: [PATCH] updated font rendering + replaced default font file --- ScriptingAPI-Documentation.md | 8 +- WickedEngine/Editor.cpp | 20 +- WickedEngine/LightWindow.cpp | 2 +- WickedEngine/MainComponent.cpp | 2 +- WickedEngine/MainComponent.h | 4 +- WickedEngine/WickedEngine_SHARED.vcxitems | 9 +- .../WickedEngine_SHARED.vcxitems.filters | 12 +- WickedEngine/fonts/basic.dds | Bin 87536 -> 0 bytes WickedEngine/fonts/basic.wifont | 94 --------- WickedEngine/fonts/default_font.dds | Bin 0 -> 65664 bytes WickedEngine/fonts/default_font.wifont | 95 +++++++++ WickedEngine/wiBackLog.cpp | 6 +- WickedEngine/wiBackLog_BindLua.cpp | 8 +- WickedEngine/wiFont.cpp | 198 ++++++++++-------- WickedEngine/wiFont.h | 20 +- WickedEngine/wiFont_BindLua.cpp | 20 +- WickedEngine/wiWidget.cpp | 39 +--- WickedEngine/wiWidget.h | 3 - 18 files changed, 269 insertions(+), 271 deletions(-) delete mode 100644 WickedEngine/fonts/basic.dds delete mode 100644 WickedEngine/fonts/basic.wifont create mode 100644 WickedEngine/fonts/default_font.dds create mode 100644 WickedEngine/fonts/default_font.wifont diff --git a/ScriptingAPI-Documentation.md b/ScriptingAPI-Documentation.md index a38000083..e94db5d88 100644 --- a/ScriptingAPI-Documentation.md +++ b/ScriptingAPI-Documentation.md @@ -84,9 +84,9 @@ are also displayed here. The scripting API provides some functions which manipulate the BackLog. These functions are in he global scope: - backlog_clear() - backlog_post(string params,,,) -- backlog_fontsize(float size) +- backlog_fontsize(int size) - backlog_isactive() : boolean result -- backlog_fontrowspacing(float spacing) +- backlog_fontrowspacing(int spacing) ### Renderer This is the graphics renderer, which is also responsible for managing the scene graph which consists of keeping track of @@ -146,7 +146,7 @@ Gives you the ability to render text with a custom font. - [constructor]Font(opt string text) - SetStyle(string fontstyle) - SetText(opt string text) -- SetSize(float size) +- SetSize(int size) - SetPos(Vector pos) - SetSpacing(Vector spacing) - SetAlign(WIFALIGN Halign, opt WIFALIGN Valign) @@ -157,7 +157,7 @@ Gives you the ability to render text with a custom font. - [outer]WIFALIGN_TOP : int - [outer]WIFALIGN_BOTTOM : int - GetText() : string result -- GetSize() : float result +- GetSize() : int result - GetPos() : Vector result - GetSpacing() : Vector result - GetAlign() : WIFALIGN halign,valign diff --git a/WickedEngine/Editor.cpp b/WickedEngine/Editor.cpp index bf80ef19c..a392613ad 100644 --- a/WickedEngine/Editor.cpp +++ b/WickedEngine/Editor.cpp @@ -64,7 +64,7 @@ void Editor::Initialize() wiHairParticle::Settings(400, 1000, 2000); - wiFont::addFontStyle("basic"); + //wiFont::addFontStyle("basic"); wiInputManager::GetInstance()->addXInput(new wiXInput()); renderComponent = new EditorComponent; @@ -100,7 +100,7 @@ void EditorLoadingScreen::Compose() { __super::Compose(); - wiFont("Loading...", wiFontProps(wiRenderer::GetDevice()->GetScreenWidth() * 0.5f, wiRenderer::GetDevice()->GetScreenHeight() * 0.5f, 22, + wiFont("Loading...", wiFontProps(wiRenderer::GetDevice()->GetScreenWidth() / 2, wiRenderer::GetDevice()->GetScreenHeight() / 2, 22, WIFALIGN_MID, WIFALIGN_MID)).Draw(); } void EditorLoadingScreen::Unload() @@ -245,7 +245,6 @@ void EditorComponent::Load() wiButton* rendererWnd_Toggle = new wiButton("Renderer"); rendererWnd_Toggle->SetPos(XMFLOAT2(x += step, screenH - 40)); rendererWnd_Toggle->SetSize(XMFLOAT2(100, 40)); - rendererWnd_Toggle->SetFontScaling(0.3f); rendererWnd_Toggle->OnClick([=](wiEventArgs args) { rendererWnd->rendererWindow->SetVisible(!rendererWnd->rendererWindow->IsVisible()); }); @@ -254,7 +253,6 @@ void EditorComponent::Load() wiButton* worldWnd_Toggle = new wiButton("World"); worldWnd_Toggle->SetPos(XMFLOAT2(x += step, screenH - 40)); worldWnd_Toggle->SetSize(XMFLOAT2(100, 40)); - worldWnd_Toggle->SetFontScaling(0.4f); worldWnd_Toggle->OnClick([=](wiEventArgs args) { worldWnd->worldWindow->SetVisible(!worldWnd->worldWindow->IsVisible()); }); @@ -263,7 +261,6 @@ void EditorComponent::Load() wiButton* objectWnd_Toggle = new wiButton("Object"); objectWnd_Toggle->SetPos(XMFLOAT2(x += step, screenH - 40)); objectWnd_Toggle->SetSize(XMFLOAT2(100, 40)); - objectWnd_Toggle->SetFontScaling(0.4f); objectWnd_Toggle->OnClick([=](wiEventArgs args) { objectWnd->objectWindow->SetVisible(!objectWnd->objectWindow->IsVisible()); }); @@ -272,7 +269,6 @@ void EditorComponent::Load() wiButton* meshWnd_Toggle = new wiButton("Mesh"); meshWnd_Toggle->SetPos(XMFLOAT2(x += step, screenH - 40)); meshWnd_Toggle->SetSize(XMFLOAT2(100, 40)); - meshWnd_Toggle->SetFontScaling(0.4f); meshWnd_Toggle->OnClick([=](wiEventArgs args) { meshWnd->meshWindow->SetVisible(!meshWnd->meshWindow->IsVisible()); }); @@ -281,7 +277,6 @@ void EditorComponent::Load() wiButton* materialWnd_Toggle = new wiButton("Material"); materialWnd_Toggle->SetPos(XMFLOAT2(x += step, screenH - 40)); materialWnd_Toggle->SetSize(XMFLOAT2(100, 40)); - materialWnd_Toggle->SetFontScaling(0.3f); materialWnd_Toggle->OnClick([=](wiEventArgs args) { materialWnd->materialWindow->SetVisible(!materialWnd->materialWindow->IsVisible()); }); @@ -290,7 +285,6 @@ void EditorComponent::Load() wiButton* postprocessWnd_Toggle = new wiButton("PostProcess"); postprocessWnd_Toggle->SetPos(XMFLOAT2(x += step, screenH - 40)); postprocessWnd_Toggle->SetSize(XMFLOAT2(100, 40)); - postprocessWnd_Toggle->SetFontScaling(0.22f); postprocessWnd_Toggle->OnClick([=](wiEventArgs args) { postprocessWnd->ppWindow->SetVisible(!postprocessWnd->ppWindow->IsVisible()); }); @@ -299,7 +293,6 @@ void EditorComponent::Load() wiButton* cameraWnd_Toggle = new wiButton("Camera"); cameraWnd_Toggle->SetPos(XMFLOAT2(x += step, screenH - 40)); cameraWnd_Toggle->SetSize(XMFLOAT2(100, 40)); - cameraWnd_Toggle->SetFontScaling(0.3f); cameraWnd_Toggle->OnClick([=](wiEventArgs args) { cameraWnd->cameraWindow->SetVisible(!cameraWnd->cameraWindow->IsVisible()); }); @@ -308,7 +301,6 @@ void EditorComponent::Load() wiButton* envProbeWnd_Toggle = new wiButton("EnvProbe"); envProbeWnd_Toggle->SetPos(XMFLOAT2(x += step, screenH - 40)); envProbeWnd_Toggle->SetSize(XMFLOAT2(100, 40)); - envProbeWnd_Toggle->SetFontScaling(0.3f); envProbeWnd_Toggle->OnClick([=](wiEventArgs args) { envProbeWnd->envProbeWindow->SetVisible(!envProbeWnd->envProbeWindow->IsVisible()); }); @@ -317,7 +309,6 @@ void EditorComponent::Load() wiButton* decalWnd_Toggle = new wiButton("Decal"); decalWnd_Toggle->SetPos(XMFLOAT2(x += step, screenH - 40)); decalWnd_Toggle->SetSize(XMFLOAT2(100, 40)); - decalWnd_Toggle->SetFontScaling(0.3f); decalWnd_Toggle->OnClick([=](wiEventArgs args) { decalWnd->decalWindow->SetVisible(!decalWnd->decalWindow->IsVisible()); }); @@ -326,7 +317,6 @@ void EditorComponent::Load() wiButton* lightWnd_Toggle = new wiButton("Light"); lightWnd_Toggle->SetPos(XMFLOAT2(x += step, screenH - 40)); lightWnd_Toggle->SetSize(XMFLOAT2(100, 40)); - lightWnd_Toggle->SetFontScaling(0.3f); lightWnd_Toggle->OnClick([=](wiEventArgs args) { lightWnd->lightWindow->SetVisible(!lightWnd->lightWindow->IsVisible()); }); @@ -378,7 +368,6 @@ void EditorComponent::Load() wiButton* saveButton = new wiButton("Save"); saveButton->SetPos(XMFLOAT2(screenW - 470, 0)); saveButton->SetSize(XMFLOAT2(100, 40)); - saveButton->SetFontScaling(0.25f); saveButton->SetColor(wiColor(0, 198, 101, 200), wiWidget::WIDGETSTATE::IDLE); saveButton->SetColor(wiColor(0, 255, 140, 255), wiWidget::WIDGETSTATE::FOCUS); saveButton->OnClick([=](wiEventArgs args) { @@ -442,7 +431,6 @@ void EditorComponent::Load() wiButton* modelButton = new wiButton("LoadModel"); modelButton->SetPos(XMFLOAT2(screenW - 365, 0)); modelButton->SetSize(XMFLOAT2(100, 40)); - modelButton->SetFontScaling(0.25f); modelButton->SetColor(wiColor(0, 89, 255, 200), wiWidget::WIDGETSTATE::IDLE); modelButton->SetColor(wiColor(112, 155, 255, 255), wiWidget::WIDGETSTATE::FOCUS); modelButton->OnClick([=](wiEventArgs args) { @@ -496,7 +484,6 @@ void EditorComponent::Load() wiButton* skyButton = new wiButton("LoadSky"); skyButton->SetPos(XMFLOAT2(screenW - 260, 0)); skyButton->SetSize(XMFLOAT2(100, 18)); - skyButton->SetFontScaling(0.5f); skyButton->SetColor(wiColor(0, 89, 255, 200), wiWidget::WIDGETSTATE::IDLE); skyButton->SetColor(wiColor(112, 155, 255, 255), wiWidget::WIDGETSTATE::FOCUS); skyButton->OnClick([=](wiEventArgs args) { @@ -540,7 +527,6 @@ void EditorComponent::Load() wiButton* colorGradingButton = new wiButton("ColorGrading"); colorGradingButton->SetPos(XMFLOAT2(screenW - 260, 22)); colorGradingButton->SetSize(XMFLOAT2(100, 18)); - colorGradingButton->SetFontScaling(0.45f); colorGradingButton->SetColor(wiColor(0, 89, 255, 200), wiWidget::WIDGETSTATE::IDLE); colorGradingButton->SetColor(wiColor(112, 155, 255, 255), wiWidget::WIDGETSTATE::FOCUS); colorGradingButton->OnClick([=](wiEventArgs args) { @@ -584,7 +570,6 @@ void EditorComponent::Load() wiButton* clearButton = new wiButton("ClearWorld"); clearButton->SetPos(XMFLOAT2(screenW - 155, 0)); clearButton->SetSize(XMFLOAT2(100, 40)); - clearButton->SetFontScaling(0.25f); clearButton->SetColor(wiColor(190, 0, 0, 200), wiWidget::WIDGETSTATE::IDLE); clearButton->SetColor(wiColor(255, 0, 0, 255), wiWidget::WIDGETSTATE::FOCUS); clearButton->OnClick([](wiEventArgs args) { @@ -598,7 +583,6 @@ void EditorComponent::Load() wiButton* exitButton = new wiButton("X"); exitButton->SetPos(XMFLOAT2(screenW - 50, 0)); exitButton->SetSize(XMFLOAT2(50, 40)); - exitButton->SetFontScaling(0.25f); exitButton->SetColor(wiColor(190, 0, 0, 200), wiWidget::WIDGETSTATE::IDLE); exitButton->SetColor(wiColor(255, 0, 0, 255), wiWidget::WIDGETSTATE::FOCUS); exitButton->OnClick([](wiEventArgs args) { diff --git a/WickedEngine/LightWindow.cpp b/WickedEngine/LightWindow.cpp index f43dc8bf6..60e4b89e9 100644 --- a/WickedEngine/LightWindow.cpp +++ b/WickedEngine/LightWindow.cpp @@ -2,7 +2,7 @@ #include "LightWindow.h" -LightWindow::LightWindow(wiGUI* gui) : GUI(gui) +LightWindow::LightWindow(wiGUI* gui) : GUI(gui), light(nullptr) { assert(GUI && "Invalid GUI!"); diff --git a/WickedEngine/MainComponent.cpp b/WickedEngine/MainComponent.cpp index 034fd15fc..ea8d6d4e0 100644 --- a/WickedEngine/MainComponent.cpp +++ b/WickedEngine/MainComponent.cpp @@ -177,7 +177,7 @@ void MainComponent::Compose() { ss << "CPU: " << wiCpuInfo::GetCpuPercentage() << "%" << endl; } - wiFont(ss.str(), wiFontProps(0, 0, infoDisplay.size, WIFALIGN_LEFT, WIFALIGN_TOP, -2)).Draw(); + wiFont(ss.str(), wiFontProps(0, 0, infoDisplay.size, WIFALIGN_LEFT, WIFALIGN_TOP)).Draw(); } // Draw the color grading palette diff --git a/WickedEngine/MainComponent.h b/WickedEngine/MainComponent.h index 284e194cc..18d32b523 100644 --- a/WickedEngine/MainComponent.h +++ b/WickedEngine/MainComponent.h @@ -68,10 +68,10 @@ public: // display resolution info bool resolution; // text size - float size; + int size; InfoDisplayer() :active(false), watermark(true), fpsinfo(true), cpuinfo(true), - resolution(false), size(12.f) + resolution(false), size(-1) {} }; // display all-time engine information text diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems b/WickedEngine/WickedEngine_SHARED.vcxitems index 6b760301b..29fa75a0d 100644 --- a/WickedEngine/WickedEngine_SHARED.vcxitems +++ b/WickedEngine/WickedEngine_SHARED.vcxitems @@ -684,7 +684,7 @@ - + true @@ -695,14 +695,13 @@ - - true - Document - + + true + \ No newline at end of file diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems.filters b/WickedEngine/WickedEngine_SHARED.vcxitems.filters index 4a9905be8..eda309f00 100644 --- a/WickedEngine/WickedEngine_SHARED.vcxitems.filters +++ b/WickedEngine/WickedEngine_SHARED.vcxitems.filters @@ -1852,24 +1852,24 @@ - - fonts - logo + + fonts + - - fonts - + + fonts + \ No newline at end of file diff --git a/WickedEngine/fonts/basic.dds b/WickedEngine/fonts/basic.dds deleted file mode 100644 index c4488731c77051b0498d1b5a0a9aa3a25df37eba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 87536 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 diff --git a/WickedEngine/fonts/basic.wifont b/WickedEngine/fonts/basic.wifont deleted file mode 100644 index dac8c9db5..000000000 --- a/WickedEngine/fonts/basic.wifont +++ /dev/null @@ -1,94 +0,0 @@ -20 -25 -65 0 0 25 -66 1 0 25 -67 2 0 25 -68 3 0 25 -69 4 0 25 -70 5 0 25 -71 6 0 25 -72 7 0 25 -73 8 0 25 -74 9 0 25 -75 0 1 25 -76 1 1 25 -77 2 1 25 -78 3 1 25 -79 4 1 25 -80 5 1 25 -81 6 1 25 -82 7 1 25 -83 8 1 25 -84 9 1 25 -85 0 2 25 -86 1 2 25 -87 2 2 25 -88 3 2 25 -89 4 2 25 -90 5 2 25 -97 0 3 25 -98 1 3 25 -99 2 3 25 -100 3 3 25 -101 4 3 25 -102 5 3 25 -103 6 3 25 -104 7 3 25 -105 8 3 25 -106 9 3 25 -107 0 4 25 -108 1 4 25 -109 2 4 25 -110 3 4 25 -111 4 4 25 -112 5 4 25 -113 6 4 25 -114 7 4 25 -115 8 4 25 -116 9 4 25 -117 0 5 25 -118 1 5 25 -119 2 5 25 -120 3 5 25 -121 4 5 25 -122 5 5 25 -48 0 6 25 -49 1 6 25 -50 2 6 25 -51 3 6 25 -52 4 6 25 -53 5 6 25 -54 6 6 25 -55 7 6 25 -56 8 6 25 -57 9 6 25 -46 0 7 25 -44 1 7 25 -47 2 7 25 -37 3 7 25 -35 4 7 25 -64 5 7 25 -45 6 7 25 -43 7 7 25 -92 8 7 25 -123 7 9 25 -124 9 7 25 -125 8 9 25 -38 0 8 25 -60 1 8 25 -62 2 8 25 -91 3 8 25 -93 4 8 25 -40 5 8 25 -41 6 8 25 -39 7 8 25 -34 8 8 25 -33 9 8 25 -63 0 9 25 -58 1 9 25 -59 2 9 25 -95 3 9 25 -61 4 9 25 -94 5 9 25 -126 6 9 25 -42 9 9 25 diff --git a/WickedEngine/fonts/default_font.dds b/WickedEngine/fonts/default_font.dds new file mode 100644 index 0000000000000000000000000000000000000000..7bb66a38c96d90c60f689682e5ace7f37d8a33e2 GIT binary patch literal 65664 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 0.160156 0.166016 6 +63 ? 0.166992 0.171875 5 +64 @ 0.172852 0.18457 12 +65 A 0.185547 0.194336 9 +66 B 0.195313 0.202148 7 +67 C 0.203125 0.209961 7 +68 D 0.210938 0.217773 7 +69 E 0.21875 0.225586 7 +70 F 0.226563 0.232422 6 +71 G 0.233398 0.241211 8 +72 H 0.242188 0.249023 7 +73 I 0.25 0.250977 1 +74 J 0.251953 0.256836 5 +75 K 0.257813 0.265625 8 +76 L 0.266602 0.272461 6 +77 M 0.273438 0.282227 9 +78 N 0.283203 0.290039 7 +79 O 0.291016 0.298828 8 +80 P 0.299805 0.306641 7 +81 Q 0.307617 0.31543 8 +82 R 0.316406 0.323242 7 +83 S 0.324219 0.331055 7 +84 T 0.332031 0.338867 7 +85 U 0.339844 0.34668 7 +86 V 0.347656 0.356445 9 +87 W 0.357422 0.370117 13 +88 X 0.371094 0.37793 7 +89 Y 0.378906 0.385742 7 +90 Z 0.386719 0.393555 7 +91 [ 0.394531 0.396484 2 +92 \ 0.397461 0.401367 4 +93 ] 0.402344 0.404297 2 +94 ^ 0.405273 0.410156 5 +95 _ 0.411133 0.417969 7 +96 ` 0.418945 0.420898 2 +97 a 0.421875 0.426758 5 +98 b 0.427734 0.432617 5 +99 c 0.433594 0.438477 5 +100 d 0.439453 0.444336 5 +101 e 0.445313 0.450195 5 +102 f 0.451172 0.455078 4 +103 g 0.456055 0.460938 5 +104 h 0.461914 0.466797 5 +105 i 0.467773 0.46875 1 +106 j 0.469727 0.472656 3 +107 k 0.473633 0.478516 5 +108 l 0.479492 0.480469 1 +109 m 0.481445 0.490234 9 +110 n 0.491211 0.496094 5 +111 o 0.49707 0.501953 5 +112 p 0.50293 0.507813 5 +113 q 0.508789 0.513672 5 +114 r 0.514648 0.517578 3 +115 s 0.518555 0.523438 5 +116 t 0.524414 0.527344 3 +117 u 0.52832 0.533203 5 +118 v 0.53418 0.539063 5 +119 w 0.540039 0.548828 9 +120 x 0.549805 0.554688 5 +121 y 0.555664 0.560547 5 +122 z 0.561523 0.566406 5 +123 { 0.567383 0.570313 3 +124 | 0.571289 0.572266 1 +125 } 0.573242 0.576172 3 +126 ~ 0.577148 0.583984 7 \ No newline at end of file diff --git a/WickedEngine/wiBackLog.cpp b/WickedEngine/wiBackLog.cpp index 5c0787a6c..d429b2848 100644 --- a/WickedEngine/wiBackLog.cpp +++ b/WickedEngine/wiBackLog.cpp @@ -28,7 +28,7 @@ void wiBackLog::Initialize(){ inputArea=stringstream(""); const unsigned char colorData[] = { 0, 0, 43, 200, 43, 31, 141, 223 }; wiTextureHelper::CreateTexture(backgroundTex, colorData, 1, 2, 4); - font = wiFont("", wiFontProps(5, 0, 15, WIFALIGN_LEFT, WIFALIGN_BOTTOM, -8)); + font = wiFont("", wiFontProps(5, 0, -1, WIFALIGN_LEFT, WIFALIGN_BOTTOM)); } void wiBackLog::CleanUp(){ stream.clear(); @@ -71,9 +71,9 @@ void wiBackLog::Draw(){ fx.opacity = wiMath::Lerp(1, 0, -pos / wiRenderer::GetDevice()->GetScreenHeight()); wiImage::Draw(backgroundTex, fx); font.SetText(getText()); - font.props.posY = wiRenderer::GetDevice()->GetScreenHeight() - 75 + pos + scroll; + font.props.posY = wiRenderer::GetDevice()->GetScreenHeight() - 75 + (int)pos + (int)scroll; font.Draw(); - wiFont(inputArea.str().c_str(), wiFontProps(5, (float)wiRenderer::GetDevice()->GetScreenHeight() - 10, 20, WIFALIGN_LEFT, WIFALIGN_BOTTOM, -8)).Draw(); + wiFont(inputArea.str().c_str(), wiFontProps(5, wiRenderer::GetDevice()->GetScreenHeight() - 10, -1, WIFALIGN_LEFT, WIFALIGN_BOTTOM)).Draw(); } } diff --git a/WickedEngine/wiBackLog_BindLua.cpp b/WickedEngine/wiBackLog_BindLua.cpp index 5c31487a7..6340ca197 100644 --- a/WickedEngine/wiBackLog_BindLua.cpp +++ b/WickedEngine/wiBackLog_BindLua.cpp @@ -31,10 +31,10 @@ namespace wiBackLog_BindLua if (argc > 0) { - wiBackLog::font.props.size = wiLua::SGetFloat(L, 1); + wiBackLog::font.props.size = wiLua::SGetInt(L, 1); } else - wiLua::SError(L, "backlog_fontsize(float val) not enough arguments!"); + wiLua::SError(L, "backlog_fontsize(int val) not enough arguments!"); return 0; } @@ -48,10 +48,10 @@ namespace wiBackLog_BindLua int argc = wiLua::SGetArgCount(L); if (argc > 0) { - wiBackLog::font.props.spacingY = wiLua::SGetFloat(L, 1); + wiBackLog::font.props.spacingY = wiLua::SGetInt(L, 1); } else - wiLua::SError(L, "backlog_fontrowspacing(float val) not enough arguments!"); + wiLua::SError(L, "backlog_fontrowspacing(int val) not enough arguments!"); return 0; } diff --git a/WickedEngine/wiFont.cpp b/WickedEngine/wiFont.cpp index 7463581ba..9c6988bd7 100644 --- a/WickedEngine/wiFont.cpp +++ b/WickedEngine/wiFont.cpp @@ -7,6 +7,8 @@ using namespace wiGraphicsTypes; +#define WHITESPACE_SIZE 3 + GPUBuffer *wiFont::vertexBuffer = nullptr, *wiFont::indexBuffer = nullptr; VertexLayout *wiFont::vertexLayout = nullptr; @@ -141,6 +143,9 @@ void wiFont::SetUpStaticComponents() LoadShaders(); LoadVertexBuffer(); LoadIndices(); + + // add default font: + addFontStyle("default_font"); } void wiFont::CleanUpStatic() { @@ -174,51 +179,51 @@ void wiFont::BindPersistentState(GRAPHICSTHREAD threadID) void wiFont::ModifyGeo(const wstring& text, wiFontProps props, int style, GRAPHICSTHREAD threadID) { - const float fontSize = (props.size < 0 ? fontStyles[style].recSize : props.size); + const int lineHeight = (props.size < 0 ? fontStyles[style].lineHeight : props.size); + const float relativeSize = (props.size < 0 ? 1 : (float)props.size / (float)fontStyles[style].lineHeight); - float line = 0, pos = 0; + int line = 0; + int pos = 0; vertexList.resize(text.length() * 4); - for (unsigned int i = 0; iCreateBuffer( &bd, NULL, vertexBuffer ); + GPUBufferDesc bd; + ZeroMemory(&bd, sizeof(bd)); + bd.Usage = USAGE_DYNAMIC; + bd.ByteWidth = sizeof(Vertex) * MAX_TEXT * 4; + bd.BindFlags = BIND_VERTEX_BUFFER; + bd.CPUAccessFlags = CPU_ACCESS_WRITE; + vertexBuffer = new GPUBuffer; + wiRenderer::GetDevice()->CreateBuffer(&bd, NULL, vertexBuffer); } void wiFont::LoadIndices() { std::vectorindices; - indices.resize(MAX_TEXT*6); - for(unsigned long i=0;iCreateBuffer( &bd, &InitData, indexBuffer ); + wiRenderer::GetDevice()->CreateBuffer(&bd, &InitData, indexBuffer); } -void wiFont::Draw(GRAPHICSTHREAD threadID, bool scissorTest){ +void wiFont::Draw(GRAPHICSTHREAD threadID, bool scissorTest) +{ wiFontProps newProps = props; if(props.h_align==WIFALIGN_CENTER || props.h_align==WIFALIGN_MID) - newProps.posX-= textWidth()*0.5f; + newProps.posX-= textWidth()/2; else if(props.h_align==WIFALIGN_RIGHT) newProps.posX -= textWidth(); if (props.v_align == WIFALIGN_CENTER || props.h_align == WIFALIGN_MID) - newProps.posY -= textHeight()*0.5f; + newProps.posY -= textHeight()/2; else if(props.v_align==WIFALIGN_BOTTOM) newProps.posY -= textHeight(); @@ -303,7 +309,7 @@ void wiFont::Draw(GRAPHICSTHREAD threadID, bool scissorTest){ ConstantBuffer cb; cb.mTransform = XMMatrixTranspose( - XMMatrixTranslation(newProps.posX, newProps.posY, 0) + XMMatrixTranslation((float)newProps.posX, (float)newProps.posY, 0) * device->GetScreenProjection() ); @@ -328,39 +334,49 @@ void wiFont::Draw(GRAPHICSTHREAD threadID, bool scissorTest){ int wiFont::textWidth() { - int i=0; - int max=0,lineW=0; - int len=(int)text.length(); - while(iadd(ss1.str()); texWidth = texture->GetDesc().Width; texHeight = texture->GetDesc().Height; - file>>recSize>>charSize; - int i=0; - while(!file.eof()){ - i++; - int code=0; - file>>code; - lookup[code].code=code; - file>>lookup[code].offX>>lookup[code].offY>>lookup[code].width; + //file>>recSize>>charSize; + //int i=0; + //while(!file.eof()){ + // i++; + // int code=0; + // file>>code; + // lookup[code].code=code; + // file>>lookup[code].offX>>lookup[code].offY>>lookup[code].width; + //} + + string voidStr; + file >> voidStr >> lineHeight; + while (!file.eof()) + { + int code = 0; + file >> code; + lookup[code].ascii = code; + file >> lookup[code].character >> lookup[code].left >> lookup[code].right >> lookup[code].pixelWidth; } + + file.close(); } - else { + else + { wiHelper::messageBox(name, "Could not load Font Data: " + ss.str()); } } diff --git a/WickedEngine/wiFont.h b/WickedEngine/wiFont.h index 4c3bc6183..c74abe656 100644 --- a/WickedEngine/wiFont.h +++ b/WickedEngine/wiFont.h @@ -21,13 +21,13 @@ enum wiFontAlign class wiFontProps { public: - float size; - float spacingX, spacingY; - float posX, posY; + int size; + int spacingX, spacingY; + int posX, posY; wiFontAlign h_align, v_align; - wiFontProps(float posX = 0, float posY = 0, float size = 14, wiFontAlign h_align = WIFALIGN_LEFT, wiFontAlign v_align = WIFALIGN_TOP - , float spacingX = 0, float spacingY = 0) + wiFontProps(int posX = 0, int posY = 0, int size = -1, wiFontAlign h_align = WIFALIGN_LEFT, wiFontAlign v_align = WIFALIGN_TOP + , int spacingX = 2, int spacingY = 1) :posX(posX), posY(posY), size(size), h_align(h_align), v_align(v_align), spacingX(spacingX), spacingY(spacingY) {} }; @@ -78,11 +78,15 @@ private: wiGraphicsTypes::Texture2D* texture; struct LookUp{ - int code; - int offX,offY,width; + int ascii; + char character; + float left; + float right; + int pixelWidth; }; LookUp lookup[128]; - int texWidth,texHeight,charSize,recSize; + int texWidth, texHeight; + int lineHeight; wiFontStyle(){} wiFontStyle(const string& newName); diff --git a/WickedEngine/wiFont_BindLua.cpp b/WickedEngine/wiFont_BindLua.cpp index 4e4e8cba2..f404c984c 100644 --- a/WickedEngine/wiFont_BindLua.cpp +++ b/WickedEngine/wiFont_BindLua.cpp @@ -78,10 +78,10 @@ int wiFont_BindLua::SetSize(lua_State* L) int argc = wiLua::SGetArgCount(L); if (argc > 0) { - font->props.size = wiLua::SGetFloat(L, 1); + font->props.size = wiLua::SGetInt(L, 1); } else - wiLua::SError(L, "SetSize(float size) not enough arguments!"); + wiLua::SError(L, "SetSize(int size) not enough arguments!"); return 0; } int wiFont_BindLua::SetPos(lua_State* L) @@ -92,11 +92,11 @@ int wiFont_BindLua::SetPos(lua_State* L) Vector_BindLua* param = Luna::lightcheck(L, 1); if (param != nullptr) { - font->props.posX = XMVectorGetX(param->vector); - font->props.posY = XMVectorGetY(param->vector); + font->props.posX = (int)XMVectorGetX(param->vector); + font->props.posY = (int)XMVectorGetY(param->vector); } else - wiLua::SError(L, "SetSize(Vector pos) argument is not a vector!"); + wiLua::SError(L, "SetPos(Vector pos) argument is not a vector!"); } else wiLua::SError(L, "SetPos(Vector pos) not enough arguments!"); @@ -110,8 +110,8 @@ int wiFont_BindLua::SetSpacing(lua_State* L) Vector_BindLua* param = Luna::lightcheck(L, 1); if (param != nullptr) { - font->props.spacingX = XMVectorGetX(param->vector); - font->props.spacingY = XMVectorGetY(param->vector); + font->props.spacingX = (int)XMVectorGetX(param->vector); + font->props.spacingY = (int)XMVectorGetY(param->vector); } else wiLua::SError(L, "SetSpacing(Vector spacing) argument is not a vector!"); @@ -143,17 +143,17 @@ int wiFont_BindLua::GetText(lua_State* L) } int wiFont_BindLua::GetSize(lua_State* L) { - wiLua::SSetFloat(L, font->props.size); + wiLua::SSetInt(L, font->props.size); return 1; } int wiFont_BindLua::GetPos(lua_State* L) { - Luna::push(L, new Vector_BindLua(XMVectorSet(font->props.posX, font->props.posY, 0, 0))); + Luna::push(L, new Vector_BindLua(XMVectorSet((float)font->props.posX, (float)font->props.posY, 0, 0))); return 1; } int wiFont_BindLua::GetSpacing(lua_State* L) { - Luna::push(L, new Vector_BindLua(XMVectorSet(font->props.spacingX, font->props.spacingY, 0, 0))); + Luna::push(L, new Vector_BindLua(XMVectorSet((float)font->props.spacingX, (float)font->props.spacingY, 0, 0))); return 1; } int wiFont_BindLua::GetAlign(lua_State* L) diff --git a/WickedEngine/wiWidget.cpp b/WickedEngine/wiWidget.cpp index 8da0ba2a4..ab6460d9a 100644 --- a/WickedEngine/wiWidget.cpp +++ b/WickedEngine/wiWidget.cpp @@ -12,7 +12,6 @@ using namespace wiGraphicsTypes; wiWidget::wiWidget():Transform() { - SetFontScaling(0.5f); state = IDLE; enabled = true; visible = true; @@ -127,18 +126,6 @@ wiColor wiWidget::GetColor() } return retVal; } -float wiWidget::GetScaledFontSize() -{ - return GetFontScaling() * min(scale.x, scale.y); -} -void wiWidget::SetFontScaling(float val) -{ - fontScaling = val; -} -float wiWidget::GetFontScaling() -{ - return fontScaling; -} void wiWidget::SetScissorRect(const wiGraphicsTypes::Rect& rect) { scissorRect = rect; @@ -284,7 +271,7 @@ void wiButton::Render(wiGUI* gui) scissorRect.right = (LONG)(translation.x + scale.x); scissorRect.top = (LONG)(translation.y); wiRenderer::GetDevice()->SetScissorRects(1, &scissorRect, gui->GetGraphicsThread()); - wiFont(text, wiFontProps(translation.x + scale.x*0.5f, translation.y + scale.y*0.5f, GetScaledFontSize(), WIFALIGN_CENTER, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread(), true); + wiFont(text, wiFontProps((int)(translation.x + scale.x*0.5f), (int)(translation.y + scale.y*0.5f), -1, WIFALIGN_CENTER, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread(), true); } void wiButton::OnClick(function func) @@ -351,7 +338,7 @@ void wiLabel::Render(wiGUI* gui) scissorRect.right = (LONG)(translation.x + scale.x); scissorRect.top = (LONG)(translation.y); wiRenderer::GetDevice()->SetScissorRects(1, &scissorRect, gui->GetGraphicsThread()); - wiFont(text, wiFontProps(translation.x, translation.y, GetScaledFontSize(), WIFALIGN_LEFT, WIFALIGN_TOP)).Draw(gui->GetGraphicsThread(), true); + wiFont(text, wiFontProps((int)translation.x, (int)translation.y, -1, WIFALIGN_LEFT, WIFALIGN_TOP)).Draw(gui->GetGraphicsThread(), true); } @@ -480,11 +467,11 @@ void wiSlider::Render(wiGUI* gui) wiRenderer::GetDevice()->SetScissorRects(1, &scissorRect, gui->GetGraphicsThread()); } // text - wiFont(text, wiFontProps(translation.x - headWidth * 0.5f, translation.y + scale.y*0.5f, GetScaledFontSize(), WIFALIGN_RIGHT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread(), parent != nullptr); + wiFont(text, wiFontProps((int)(translation.x - headWidth * 0.5f), (int)(translation.y + scale.y*0.5f), -1, WIFALIGN_RIGHT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread(), parent != nullptr); // value stringstream ss(""); ss << value; - wiFont(ss.str(), wiFontProps(translation.x + scale.x + headWidth * 0.5f, translation.y + scale.y*0.5f, GetScaledFontSize(), WIFALIGN_LEFT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread(), parent != nullptr); + wiFont(ss.str(), wiFontProps((int)(translation.x + scale.x + headWidth * 0.5f), (int)(translation.y + scale.y*0.5f), -1, WIFALIGN_LEFT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread(), parent != nullptr); } void wiSlider::OnSlide(function func) { @@ -608,7 +595,7 @@ void wiCheckBox::Render(wiGUI* gui) { wiRenderer::GetDevice()->SetScissorRects(1, &scissorRect, gui->GetGraphicsThread()); } - wiFont(text, wiFontProps(translation.x, translation.y + scale.y*0.5f, GetScaledFontSize(), WIFALIGN_RIGHT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread(), parent != nullptr); + wiFont(text, wiFontProps((int)(translation.x), (int)(translation.y + scale.y*0.5f), -1, WIFALIGN_RIGHT, WIFALIGN_CENTER)).Draw(gui->GetGraphicsThread(), parent != nullptr); } void wiCheckBox::OnClick(function func) { @@ -798,7 +785,7 @@ void wiWindow::Render(wiGUI* gui) scissorRect.right = (LONG)(translation.x + scale.x); scissorRect.top = (LONG)(translation.y); wiRenderer::GetDevice()->SetScissorRects(1, &scissorRect, gui->GetGraphicsThread()); - wiFont(text, wiFontProps(translation.x, translation.y, moveDragger->scale.y, WIFALIGN_LEFT, WIFALIGN_TOP)).Draw(gui->GetGraphicsThread(),true); + wiFont(text, wiFontProps((int)(translation.x), (int)(translation.y), (int)moveDragger->scale.y, WIFALIGN_LEFT, WIFALIGN_TOP)).Draw(gui->GetGraphicsThread(),true); } void wiWindow::SetVisible(bool value) { @@ -1180,15 +1167,11 @@ void wiColorPicker::Render(wiGUI* gui) wiRenderer::GetDevice()->Draw(vb_preview.GetDesc().ByteWidth / sizeof(Vertex), threadID); // RGB values: - stringstream _r(""); - stringstream _g(""); - stringstream _b(""); - _r << "R: " << (int)(final_color.x * 255); - _g << "G: " << (int)(final_color.y * 255); - _b << "B: " << (int)(final_color.z * 255); - wiFont(_r.str(), wiFontProps(translation.x + 200, translation.y + 200)).Draw(threadID, true); - wiFont(_g.str(), wiFontProps(translation.x + 200, translation.y + 210)).Draw(threadID, true); - wiFont(_b.str(), wiFontProps(translation.x + 200, translation.y + 220)).Draw(threadID, true); + stringstream _rgb(""); + _rgb << "R: " << (int)(final_color.x * 255) << endl; + _rgb << "G: " << (int)(final_color.y * 255) << endl; + _rgb << "B: " << (int)(final_color.z * 255) << endl; + wiFont(_rgb.str(), wiFontProps((int)(translation.x + 200), (int)(translation.y + 200))).Draw(threadID, true); } XMFLOAT4 wiColorPicker::GetColor() diff --git a/WickedEngine/wiWidget.h b/WickedEngine/wiWidget.h index 60540554f..89206ef94 100644 --- a/WickedEngine/wiWidget.h +++ b/WickedEngine/wiWidget.h @@ -47,7 +47,6 @@ protected: void Activate(); void Deactivate(); wiColor colors[WIDGETSTATE_COUNT]; - float GetScaledFontSize(); wiGraphicsTypes::Rect scissorRect; public: wiWidget(); @@ -67,8 +66,6 @@ public: // last param default: set color for all states void SetColor(const wiColor& color, WIDGETSTATE state = WIDGETSTATE_COUNT); wiColor GetColor(); - void SetFontScaling(float val); - float GetFontScaling(); void SetScissorRect(const wiGraphicsTypes::Rect& rect); virtual void Update(wiGUI* gui);