C funcs to create/delete fonts.

This commit is contained in:
UnknownShadow200 2017-10-20 11:57:48 +11:00
parent 3049822462
commit a69a285222
14 changed files with 110 additions and 45 deletions

View File

@ -26,7 +26,7 @@ namespace ClassicalSharp.Gui.Screens {
void InitTableWidget() { void InitTableWidget() {
table = new TableWidget(game); table = new TableWidget(game);
table.font = font; table.font = font;
table.ElementsPerRow = game.ClassicMode && !game.ClassicHacks ? 9 : 10; table.ElementsPerRow = game.PureClassic ? 9 : 10;
table.Init(); table.Init();
} }

View File

@ -49,4 +49,9 @@
#define SkinType_64x64 1 #define SkinType_64x64 1
#define SkinType_64x64Slim 2 #define SkinType_64x64Slim 2
#define SkinType_Invalid 3 #define SkinType_Invalid 3
#define FONT_STYLE_NORMAL 0
#define FONT_STYLE_ITALIC 1
#define FONT_STYLE_BOLD 2
#define FONT_STYLE_UNDERLINE 3
#endif #endif

View File

@ -4,9 +4,9 @@
#include "Platform.h" #include "Platform.h"
#include "ExtMath.h" #include "ExtMath.h"
void DrawTextArgs_Make(DrawTextArgs* args, STRING_REF String* text, void* font, bool useShadow) { void DrawTextArgs_Make(DrawTextArgs* args, STRING_REF String* text, FontDesc* font, bool useShadow) {
args->Text = *text; args->Text = *text;
args->Font = font; args->Font = *font;
args->UseShadow = useShadow; args->UseShadow = useShadow;
} }
@ -113,7 +113,7 @@ void Drawer2D_Clear(PackedCol col, Int32 x, Int32 y, Int32 width, Int32 height)
void Drawer2D_DrawText(DrawTextArgs* args, Int32 x, Int32 y); void Drawer2D_DrawText(DrawTextArgs* args, Int32 x, Int32 y);
Size2D Drawer2D_MeasureText(DrawTextArgs* args); Size2D Drawer2D_MeasureText(DrawTextArgs* args);
Int32 Drawer2D_FontHeight(void* font, bool useShadow) { Int32 Drawer2D_FontHeight(FontDesc* font, bool useShadow) {
DrawTextArgs args; DrawTextArgs args;
String text = String_FromConstant("I"); String text = String_FromConstant("I");
DrawTextArgs_Make(&args, &text, font, useShadow); DrawTextArgs_Make(&args, &text, font, useShadow);

View File

@ -10,13 +10,7 @@ Copyright 2017 ClassicalSharp | Licensed under BSD-3
#include "2DStructs.h" #include "2DStructs.h"
#include "Texture.h" #include "Texture.h"
/* Contains arguments for measuring or drawing text. */ void DrawTextArgs_Make(DrawTextArgs* args, STRING_REF String* text, FontDesc* font, bool useShadow);
typedef struct DrawTextArgs_ {
String Text;
void* Font;
bool UseShadow;
} DrawTextArgs;
void DrawTextArgs_Make(DrawTextArgs* args, STRING_REF String* text, void* font, bool useShadow);
const float Offset = 1.3f; const float Offset = 1.3f;
@ -42,7 +36,7 @@ void Drawer2D_Clear(PackedCol col, Int32 x, Int32 y, Int32 width, Int32 height);
void Drawer2D_DrawText(DrawTextArgs* args, Int32 x, Int32 y); void Drawer2D_DrawText(DrawTextArgs* args, Int32 x, Int32 y);
Size2D Drawer2D_MeasureText(DrawTextArgs* args); Size2D Drawer2D_MeasureText(DrawTextArgs* args);
Int32 Drawer2D_FontHeight(void* font, bool useShadow); Int32 Drawer2D_FontHeight(FontDesc* font, bool useShadow);
Texture Drawer2D_MakeTextTexture(DrawTextArgs* args, Int32 windowX, Int32 windowY); Texture Drawer2D_MakeTextTexture(DrawTextArgs* args, Int32 windowX, Int32 windowY);
Texture Drawer2D_Make2DTexture(Bitmap* bmp, Size2D used, Int32 windowX, Int32 windowY); Texture Drawer2D_Make2DTexture(Bitmap* bmp, Size2D used, Int32 windowX, Int32 windowY);

View File

@ -56,4 +56,9 @@ UInt32 Platform_FileLength(void* file);
/* Blocks the calling thread for given number of milliseconds. */ /* Blocks the calling thread for given number of milliseconds. */
void Platform_ThreadSleep(UInt32 milliseconds); void Platform_ThreadSleep(UInt32 milliseconds);
/* Allocates handle for the given font. */
void Platform_MakeFont(FontDesc* desc);
/* Frees handle for the given font. */
void Platform_FreeFont(FontDesc* desc);
#endif #endif

View File

@ -1,5 +1,7 @@
#include "Screens.h" #include "Screens.h"
#include "Widgets.h" #include "Widgets.h"
#include "Game.h"
#include "Events.h"
void Screen_FreeWidgets(Widget** widgets, UInt32 widgetsCount) { void Screen_FreeWidgets(Widget** widgets, UInt32 widgetsCount) {
if (widgets == NULL) return; if (widgets == NULL) return;

View File

@ -157,7 +157,7 @@ bool String_AppendConst(STRING_TRANSIENT String* str, const UInt8* buffer) {
return true; return true;
} }
bool String_AppendString(STRING_TRANSIENT String* str, String* buffer) { bool String_AppendString(STRING_TRANSIENT String* str, STRING_TRANSIENT String* buffer) {
Int32 i; Int32 i;
for (i = 0; i < buffer->length; i++) { for (i = 0; i < buffer->length; i++) {
@ -184,10 +184,39 @@ Int32 String_LastIndexOf(STRING_TRANSIENT String* str, UInt8 c) {
} }
UInt8 String_CharAt(STRING_TRANSIENT String* str, Int32 offset) { UInt8 String_CharAt(STRING_TRANSIENT String* str, Int32 offset) {
if (offset < 0 || offset >= str->length) return 0; if (offset < 0 || offset >= str->length) return NULL;
return str->buffer[offset]; return str->buffer[offset];
} }
void String_InsertAt(STRING_TRANSIENT String* str, UInt8 c, Int32 offset) {
if (offset < 0 || offset > str->length) {
ErrorHandler_Fail("Offset for InsertAt out of range");
}
if (str->length == str->capacity) {
ErrorHandler_Fail("Cannot insert character into full string");
}
Int32 i;
for (i = str->length; i > offset; i--) {
str->buffer[i] = str->buffer[i - 1];
}
str->buffer[offset] = c;
str->length++;
}
void String_DeleteAt(STRING_TRANSIENT String* str, Int32 offset) {
if (offset < 0 || offset >= str->length) {
ErrorHandler_Fail("Offset for DeleteAt out of range");
}
Int32 i;
for (i = offset; i < str->length - 1; i++) {
str->buffer[i] = str->buffer[i + 1];
}
str->buffer[str->length - 1] = NULL;
str->length--;
}
Int32 String_IndexOfString(STRING_TRANSIENT String* str, STRING_TRANSIENT String* sub) { Int32 String_IndexOfString(STRING_TRANSIENT String* str, STRING_TRANSIENT String* sub) {
Int32 i, j; Int32 i, j;
/* Special case, sub is an empty string*/ /* Special case, sub is an empty string*/

View File

@ -63,6 +63,10 @@ Int32 String_IndexOf(STRING_TRANSIENT String* str, UInt8 c, Int32 offset);
Int32 String_LastIndexOf(STRING_TRANSIENT String* str, UInt8 c); Int32 String_LastIndexOf(STRING_TRANSIENT String* str, UInt8 c);
/* Gets the character at the given index in the string. */ /* Gets the character at the given index in the string. */
UInt8 String_CharAt(STRING_TRANSIENT String* str, Int32 offset); UInt8 String_CharAt(STRING_TRANSIENT String* str, Int32 offset);
/* Inserts a character at the given index in the string. */
void String_InsertAt(STRING_TRANSIENT String* str, UInt8 c, Int32 offset);
/* Deletes a character at the given index in the string. */
void String_DeleteAt(STRING_TRANSIENT String* str, Int32 offset);
/* Find the first index of sub in given string, -1 if not found. */ /* Find the first index of sub in given string, -1 if not found. */
Int32 String_IndexOfString(STRING_TRANSIENT String* str, STRING_TRANSIENT String* sub); Int32 String_IndexOfString(STRING_TRANSIENT String* str, STRING_TRANSIENT String* sub);

View File

@ -45,6 +45,9 @@ typedef UInt8 Face;
/* Skin layout a humanoid skin texture can have. */ /* Skin layout a humanoid skin texture can have. */
typedef UInt8 SkinType; typedef UInt8 SkinType;
typedef struct FontDesc_ { void* Handle; UInt16 Size, Style; } FontDesc;
typedef struct DrawTextArgs_ { String Text; FontDesc Font; bool UseShadow; } DrawTextArgs;
#define UInt8_MaxValue ((UInt8)0xFF) #define UInt8_MaxValue ((UInt8)0xFF)
#define Int16_MaxValue ((Int16)0x7FFF) #define Int16_MaxValue ((Int16)0x7FFF)
#define UInt16_MaxValue ((UInt16)0xFFFF) #define UInt16_MaxValue ((UInt16)0xFFFF)

View File

@ -18,7 +18,7 @@ void Widget_SetLocation(Widget* widget, Anchor horAnchor, Anchor verAnchor, Int3
void TextWidget_SetHeight(TextWidget* widget, Int32 height) { void TextWidget_SetHeight(TextWidget* widget, Int32 height) {
if (widget->ReducePadding) { if (widget->ReducePadding) {
Drawer2D_ReducePadding_Height(&height, font.Size, 4); Drawer2D_ReducePadding_Height(&height, widget->Font.Size, 4);
} }
widget->DefaultHeight = height; widget->DefaultHeight = height;
widget->Base.Height = height; widget->Base.Height = height;
@ -26,7 +26,7 @@ void TextWidget_SetHeight(TextWidget* widget, Int32 height) {
void TextWidget_Init(GuiElement* elem) { void TextWidget_Init(GuiElement* elem) {
TextWidget* widget = (TextWidget*)elem; TextWidget* widget = (TextWidget*)elem;
Int32 height = Drawer2D_FontHeight(widget->Font, true); Int32 height = Drawer2D_FontHeight(&widget->Font, true);
TextWidget_SetHeight(widget, height); TextWidget_SetHeight(widget, height);
} }
@ -50,11 +50,11 @@ void TextWidget_Reposition(Widget* elem) {
widget->Texture.Y += elem->Y - oldY; widget->Texture.Y += elem->Y - oldY;
} }
void TextWidget_Create(TextWidget* widget, STRING_TRANSIENT String* text, void* font) { void TextWidget_Create(TextWidget* widget, STRING_TRANSIENT String* text, FontDesc* font) {
Widget_Init(&widget->Base); Widget_Init(&widget->Base);
PackedCol col = PACKEDCOL_WHITE; PackedCol col = PACKEDCOL_WHITE;
widget->Col = col; widget->Col = col;
widget->Font = font; widget->Font = *font;
widget->Base.Reposition = TextWidget_Reposition; widget->Base.Reposition = TextWidget_Reposition;
widget->Base.Base.Init = TextWidget_Init; widget->Base.Base.Init = TextWidget_Init;
widget->Base.Base.Render = TextWidget_Render; widget->Base.Base.Render = TextWidget_Render;
@ -69,10 +69,10 @@ void TextWidget_SetText(TextWidget* widget, STRING_TRANSIENT String* text) {
elem->Width = 0; elem->Height = widget->DefaultHeight; elem->Width = 0; elem->Height = widget->DefaultHeight;
} else { } else {
DrawTextArgs args; DrawTextArgs args;
DrawTextArgs_Make(&args, text, widget->Font, true); DrawTextArgs_Make(&args, text, &widget->Font, true);
widget->Texture = Drawer2D_MakeTextTexture(&args, 0, 0); widget->Texture = Drawer2D_MakeTextTexture(&args, 0, 0);
if (widget->ReducePadding) { if (widget->ReducePadding) {
Drawer2D_ReducePadding_Tex(&widget->Texture, font.Size, 4); Drawer2D_ReducePadding_Tex(&widget->Texture, widget->Font.Size, 4);
} }
elem->Width = widget->Texture.Width; elem->Height = widget->Texture.Height; elem->Width = widget->Texture.Width; elem->Height = widget->Texture.Height;
@ -91,7 +91,7 @@ PackedCol Button_DisabledCol = PACKEDCOL_CONST(160, 160, 160, 255);
void ButtonWidget_Init(GuiElement* elem) { void ButtonWidget_Init(GuiElement* elem) {
ButtonWidget* widget = (ButtonWidget*)elem; ButtonWidget* widget = (ButtonWidget*)elem;
widget->DefaultHeight = Drawer2D_FontHeight(widget->Font, true); widget->DefaultHeight = Drawer2D_FontHeight(&widget->Font, true);
widget->Base.Height = widget->DefaultHeight; widget->Base.Height = widget->DefaultHeight;
} }
@ -143,14 +143,14 @@ void ButtonWidget_Render(GuiElement* elem, Real64 delta) {
Texture_RenderShaded(&widget->Texture, col); Texture_RenderShaded(&widget->Texture, col);
} }
void ButtonWidget_Create(ButtonWidget* widget, STRING_TRANSIENT String* text, Int32 minWidth, void* font, Gui_MouseHandler onClick) { void ButtonWidget_Create(ButtonWidget* widget, STRING_TRANSIENT String* text, Int32 minWidth, FontDesc* font, Gui_MouseHandler onClick) {
Widget_Init(&widget->Base); Widget_Init(&widget->Base);
widget->Base.Base.Init = ButtonWidget_Init; widget->Base.Base.Init = ButtonWidget_Init;
widget->Base.Base.Render = ButtonWidget_Render; widget->Base.Base.Render = ButtonWidget_Render;
widget->Base.Base.Free = ButtonWidget_Free; widget->Base.Base.Free = ButtonWidget_Free;
widget->Base.Reposition = ButtonWidget_Reposition; widget->Base.Reposition = ButtonWidget_Reposition;
widget->Font = font; widget->Font = *font;
GuiElement* elem = &widget->Base.Base; GuiElement* elem = &widget->Base.Base;
elem->Init(elem); elem->Init(elem);
widget->MinWidth = minWidth; widget->MinHeight = 40; widget->MinWidth = minWidth; widget->MinHeight = 40;
@ -166,7 +166,7 @@ void ButtonWidget_SetText(ButtonWidget* widget, STRING_TRANSIENT String* text) {
elem->Width = 0; elem->Height = widget->DefaultHeight; elem->Width = 0; elem->Height = widget->DefaultHeight;
} else { } else {
DrawTextArgs args; DrawTextArgs args;
DrawTextArgs_Make(&args, text, widget->Font, true); DrawTextArgs_Make(&args, text, &widget->Font, true);
widget->Texture = Drawer2D_MakeTextTexture(&args, 0, 0); widget->Texture = Drawer2D_MakeTextTexture(&args, 0, 0);
elem->Width = max(widget->Texture.Width, widget->MinWidth); elem->Width = max(widget->Texture.Width, widget->MinWidth);
elem->Height = max(widget->Texture.Height, widget->MinHeight); elem->Height = max(widget->Texture.Height, widget->MinHeight);
@ -571,7 +571,7 @@ void TableWidget_RecreateDescTex(TableWidget* widget) {
TableWidget_MakeBlockDesc(&desc, block); TableWidget_MakeBlockDesc(&desc, block);
DrawTextArgs args; DrawTextArgs args;
DrawTextArgs_Make(&args, &desc, widget->Font, true); DrawTextArgs_Make(&args, &desc, &widget->Font, true);
widget->DescTex = Drawer2D_MakeTextTexture(&args, 0, 0); widget->DescTex = Drawer2D_MakeTextTexture(&args, 0, 0);
TableWidget_UpdateDescTexPos(widget); TableWidget_UpdateDescTexPos(widget);
} }

View File

@ -16,13 +16,13 @@ typedef struct TextWidget_ {
Widget Base; Widget Base;
Texture Texture; Texture Texture;
Int32 DefaultHeight; Int32 DefaultHeight;
void* Font; FontDesc Font;
bool ReducePadding; bool ReducePadding;
PackedCol Col; PackedCol Col;
} TextWidget; } TextWidget;
void TextWidget_Create(TextWidget* widget, STRING_TRANSIENT String* text, void* font); void TextWidget_Create(TextWidget* widget, STRING_TRANSIENT String* text, FontDesc* font);
void TextWidget_SetText(TextWidget* widget, STRING_TRANSIENT String* text); void TextWidget_SetText(TextWidget* widget, STRING_TRANSIENT String* text);
@ -33,7 +33,7 @@ typedef struct ButtonWidget_ {
Widget Base; Widget Base;
Texture Texture; Texture Texture;
Int32 DefaultHeight; Int32 DefaultHeight;
void* Font; FontDesc Font;
String OptName; String OptName;
ButtonWidget_GetValue GetValue; ButtonWidget_GetValue GetValue;
@ -41,7 +41,7 @@ typedef struct ButtonWidget_ {
Int32 MinWidth, MinHeight, Metadata; Int32 MinWidth, MinHeight, Metadata;
} ButtonWidget; } ButtonWidget;
void ButtonWidget_Create(ButtonWidget* widget, STRING_TRANSIENT String* text, Int32 minWidth, void* font, Gui_MouseHandler onClick); void ButtonWidget_Create(ButtonWidget* widget, STRING_TRANSIENT String* text, Int32 minWidth, FontDesc* font, Gui_MouseHandler onClick);
void ButtonWidget_SetText(ButtonWidget* widget, STRING_TRANSIENT String* text); void ButtonWidget_SetText(ButtonWidget* widget, STRING_TRANSIENT String* text);
@ -49,8 +49,8 @@ typedef struct ScrollbarWidget_ {
Widget Base; Widget Base;
Int32 TotalRows, ScrollY; Int32 TotalRows, ScrollY;
Real32 ScrollingAcc; Real32 ScrollingAcc;
bool DraggingMouse;
Int32 MouseOffset; Int32 MouseOffset;
bool DraggingMouse;
} ScrollbarWidget; } ScrollbarWidget;
void ScrollbarWidget_Create(ScrollbarWidget* widget); void ScrollbarWidget_Create(ScrollbarWidget* widget);
@ -62,8 +62,8 @@ typedef struct HotbarWidget_ {
Texture SelTex, BackTex; Texture SelTex, BackTex;
Real32 BarHeight, SelBlockSize, ElemSize; Real32 BarHeight, SelBlockSize, ElemSize;
Real32 BarXOffset, BorderSize; Real32 BarXOffset, BorderSize;
bool AltHandled;
Real32 ScrollAcc; Real32 ScrollAcc;
bool AltHandled;
} HotbarWidget; } HotbarWidget;
void HotbarWidget_Create(HotbarWidget* widget); void HotbarWidget_Create(HotbarWidget* widget);
@ -73,11 +73,11 @@ typedef struct TableWidget_ {
Widget Base; Widget Base;
Int32 ElementsCount, ElementsPerRow, RowsCount; Int32 ElementsCount, ElementsPerRow, RowsCount;
Int32 LastCreatedIndex; Int32 LastCreatedIndex;
void* Font; FontDesc Font;
bool PendingClose;
Int32 SelectedIndex, BlockSize; Int32 SelectedIndex, BlockSize;
Real32 SelBlockExpand; Real32 SelBlockExpand;
GfxResourceID VB; GfxResourceID VB;
bool PendingClose;
BlockID Elements[BLOCK_COUNT]; BlockID Elements[BLOCK_COUNT];
ScrollbarWidget Scroll; ScrollbarWidget Scroll;
@ -103,13 +103,13 @@ void SpecialInputTab_Init(SpecialInputTab* tab, STRING_REF String* title,
typedef struct SpecialInputWidget_ { typedef struct SpecialInputWidget_ {
Widget Base; Widget Base;
Texture Tex; Texture Tex;
void* Font; FontDesc Font;
SpecialInputAppendFunc AppendFunc; SpecialInputAppendFunc AppendFunc;
Size2D ElementSize; Size2D ElementSize;
SpecialInputTab Tabs[5]; SpecialInputTab Tabs[5];
} SpecialInputWidget; } SpecialInputWidget;
void SpecialInputWidget_Create(SpecialInputWidget* widget, void* font, SpecialInputAppendFunc appendFunc); void SpecialInputWidget_Create(SpecialInputWidget* widget, FontDesc* font, SpecialInputAppendFunc appendFunc);
void SpecialInputWidget_UpdateColours(SpecialInputWidget* widget); void SpecialInputWidget_UpdateColours(SpecialInputWidget* widget);
void SpecialInputWidget_SetActive(SpecialInputWidget* widget, bool active); void SpecialInputWidget_SetActive(SpecialInputWidget* widget, bool active);
void SpecialInputWidget_Redraw(SpecialInputWidget* widget); void SpecialInputWidget_Redraw(SpecialInputWidget* widget);
@ -120,7 +120,7 @@ struct InputWidget_;
/* Remakes the raw texture containing all the chat lines. Also updates the dimensions of the widget. */ /* Remakes the raw texture containing all the chat lines. Also updates the dimensions of the widget. */
typedef struct InputWidget_ { typedef struct InputWidget_ {
Widget Base; Widget Base;
void* Font; FontDesc Font;
Int32 MaxLines; Int32 MaxLines;
Int32 MaxCharsPerLine; Int32 MaxCharsPerLine;
Int32 Padding; Int32 Padding;
@ -144,7 +144,7 @@ typedef struct InputWidget_ {
Real64 CaretAccumulator; Real64 CaretAccumulator;
} InputWidget; } InputWidget;
void InputWidget_Create(InputWidget* widget, void* font); void InputWidget_Create(InputWidget* widget, FontDesc* font);
/* Calculates the sizes of each line in the text buffer. */ /* Calculates the sizes of each line in the text buffer. */
void InputWidget_CalculateLineSizes(InputWidget* widget); void InputWidget_CalculateLineSizes(InputWidget* widget);
/* Calculates the location and size of the caret character. */ /* Calculates the location and size of the caret character. */
@ -176,15 +176,14 @@ typedef struct LinkData_ {
typedef struct TextGroupWidget_ { typedef struct TextGroupWidget_ {
Widget Base; Widget Base;
Int32 LinesCount, DefaultHeight; Int32 LinesCount, DefaultHeight;
void* Font; FontDesc Font, UnderlineFont;
void* UnderlineFont;
bool PlaceholderHeight[TEXTGROUPWIDGET_MAX_LINES]; bool PlaceholderHeight[TEXTGROUPWIDGET_MAX_LINES];
String Lines[TEXTGROUPWIDGET_MAX_LINES]; String Lines[TEXTGROUPWIDGET_MAX_LINES];
LinkData LinkDatas[TEXTGROUPWIDGET_MAX_LINES]; LinkData LinkDatas[TEXTGROUPWIDGET_MAX_LINES];
Texture Textures[TEXTGROUPWIDGET_MAX_LINES]; Texture Textures[TEXTGROUPWIDGET_MAX_LINES];
} TextGroupWidget; } TextGroupWidget;
void TextGroupWidget_Create(TextGroupWidget* widget, Int32 linesCount, void* font, void* underlineFont); void TextGroupWidget_Create(TextGroupWidget* widget, Int32 linesCount, FontDesc* font, FontDesc* underlineFont);
void TextGroupWidget_SetUsePlaceHolder(TextGroupWidget* widget, Int32 index, bool placeHolder); void TextGroupWidget_SetUsePlaceHolder(TextGroupWidget* widget, Int32 index, bool placeHolder);
void TextGroupWidget_PushUpAndReplaceLast(TextGroupWidget* widget, STRING_TRANSIENT String* text); void TextGroupWidget_PushUpAndReplaceLast(TextGroupWidget* widget, STRING_TRANSIENT String* text);
Int32 TextGroupWidget_GetUsedHeight(TextGroupWidget* widget); Int32 TextGroupWidget_GetUsedHeight(TextGroupWidget* widget);

View File

@ -1,6 +1,7 @@
#include "Platform.h" #include "Platform.h"
#include "Stream.h" #include "Stream.h"
#include "DisplayDevice.h" #include "DisplayDevice.h"
#include "ExtMath.h"
#define WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN
#include <Windows.h> #include <Windows.h>
@ -61,7 +62,7 @@ void Platform_MemCpy(void* dst, void* src, UInt32 numBytes) {
} }
void Platform_Log(String message) { void Platform_Log(STRING_TRANSIENT String* message) {
/* TODO: log to console */ /* TODO: log to console */
} }
@ -173,3 +174,25 @@ UInt32 Platform_FileLength(void* file) {
void Platform_ThreadSleep(UInt32 milliseconds) { void Platform_ThreadSleep(UInt32 milliseconds) {
Sleep(milliseconds); Sleep(milliseconds);
} }
void Platform_MakeFont(FontDesc* desc) {
LOGFONTA font = { 0 };
font.lfHeight = -Math_Ceil(desc->Size * GetDeviceCaps(hDC, LOGPIXELSY) / 72.0f);
font.lfItalic = desc->Style == FONT_STYLE_ITALIC;
font.lfUnderline = desc->Style == FONT_STYLE_UNDERLINE;
font.lfWeight = desc->Style == FONT_STYLE_BOLD ? FW_BOLD : FW_NORMAL;
font.lfQuality = ANTIALIASED_QUALITY;
desc->Handle = CreateFontIndirectA(&font);
if (desc->Handle == NULL) {
ErrorHandler_Fail("Creating font handle failed");
}
}
void Platform_FreeFont(FontDesc* desc) {
if (!DeleteObject(desc->Handle)) {
ErrorHandler_Fail("Deleting font handle failed");
}
desc->Handle = NULL;
}

View File

@ -36,7 +36,8 @@ Int32 WordWrap_WrapLine(String* text, Int32 index, Int32 lineSize) {
if (!WordWrap_IsWrapper(text->buffer[i])) continue; if (!WordWrap_IsWrapper(text->buffer[i])) continue;
for (Int32 j = lineEnd; j >= i + 1; j--) { for (Int32 j = lineEnd; j >= i + 1; j--) {
InsertAt(index + lineSize, text->buffer[j]); UInt8 c = text->buffer[j];
String_InsertAt(text, index + lineSize, c);
text->buffer[j] = ' '; text->buffer[j] = ' ';
} }
return (i + 1) - index; return (i + 1) - index;