mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-16 19:15:14 -04:00
C client: make MenuInputValidator smaller by using a VTABLE
This commit is contained in:
parent
1ddd9419e2
commit
5b36da921c
@ -14,7 +14,7 @@ typedef signed __int8 Int8;
|
|||||||
typedef signed __int16 Int16;
|
typedef signed __int16 Int16;
|
||||||
typedef signed __int32 Int32;
|
typedef signed __int32 Int32;
|
||||||
typedef signed __int64 Int64;
|
typedef signed __int64 Int64;
|
||||||
#define FUNC_ATTRIB(args) __declspec(args)
|
#define FUNC_NOINLINE __declspec(noinline)
|
||||||
#elif __GNUC__
|
#elif __GNUC__
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
typedef uint8_t UInt8;
|
typedef uint8_t UInt8;
|
||||||
@ -26,7 +26,7 @@ typedef int8_t Int8;
|
|||||||
typedef int16_t Int16;
|
typedef int16_t Int16;
|
||||||
typedef int32_t Int32;
|
typedef int32_t Int32;
|
||||||
typedef int64_t Int64;
|
typedef int64_t Int64;
|
||||||
#define FUNC_ATTRIB(args) __attribute__((args))
|
#define FUNC_NOINLINE __attribute__((noinline))
|
||||||
#else
|
#else
|
||||||
#error "I don't recognise this compiler. You'll need to add required definitions in Core.h!"
|
#error "I don't recognise this compiler. You'll need to add required definitions in Core.h!"
|
||||||
#endif
|
#endif
|
||||||
|
10
src/Menus.c
10
src/Menus.c
@ -993,7 +993,8 @@ Int32 GenLevelScreen_GetInt(struct GenLevelScreen* s, Int32 index) {
|
|||||||
struct MenuInputWidget* input = &s->Inputs[index];
|
struct MenuInputWidget* input = &s->Inputs[index];
|
||||||
String text = input->Base.Text;
|
String text = input->Base.Text;
|
||||||
|
|
||||||
if (!input->Validator.IsValidValue(&input->Validator, &text)) return 0;
|
struct MenuInputValidator* v = &input->Validator;
|
||||||
|
if (!v->VTABLE->IsValidValue(v, &text)) return 0;
|
||||||
Int32 value; Convert_TryParseInt32(&text, &value); return value;
|
Int32 value; Convert_TryParseInt32(&text, &value); return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1006,7 +1007,8 @@ Int32 GenLevelScreen_GetSeedInt(struct GenLevelScreen* s, Int32 index) {
|
|||||||
return Random_Next(&rnd, Int32_MaxValue);
|
return Random_Next(&rnd, Int32_MaxValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!input->Validator.IsValidValue(&input->Validator, &text)) return 0;
|
struct MenuInputValidator* v = &input->Validator;
|
||||||
|
if (!v->VTABLE->IsValidValue(v, &text)) return 0;
|
||||||
Int32 value; Convert_TryParseInt32(&text, &value); return value;
|
Int32 value; Convert_TryParseInt32(&text, &value); return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1961,9 +1963,9 @@ static void MenuOptionsScreen_FreeInput(struct MenuOptionsScreen* s) {
|
|||||||
|
|
||||||
static void MenuOptionsScreen_EnterInput(struct MenuOptionsScreen* s) {
|
static void MenuOptionsScreen_EnterInput(struct MenuOptionsScreen* s) {
|
||||||
String text = s->Input.Base.Text;
|
String text = s->Input.Base.Text;
|
||||||
struct MenuInputValidator* validator = &s->Input.Validator;
|
struct MenuInputValidator* v = &s->Input.Validator;
|
||||||
|
|
||||||
if (validator->IsValidValue(validator, &text)) {
|
if (v->VTABLE->IsValidValue(v, &text)) {
|
||||||
MenuOptionsScreen_Set(s, s->ActiveI, &text);
|
MenuOptionsScreen_Set(s, s->ActiveI, &text);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,10 +35,10 @@ void Platform_Exit(ReturnCode code);
|
|||||||
STRING_PURE String Platform_GetCommandLineArgs(void);
|
STRING_PURE String Platform_GetCommandLineArgs(void);
|
||||||
ReturnCode Platform_StartShell(STRING_PURE String* args);
|
ReturnCode Platform_StartShell(STRING_PURE String* args);
|
||||||
|
|
||||||
FUNC_ATTRIB(noinline) void* Mem_Alloc(UInt32 numElems, UInt32 elemsSize, const char* place);
|
FUNC_NOINLINE void* Mem_Alloc(UInt32 numElems, UInt32 elemsSize, const char* place);
|
||||||
FUNC_ATTRIB(noinline) void* Mem_AllocCleared(UInt32 numElems, UInt32 elemsSize, const char* place);
|
FUNC_NOINLINE void* Mem_AllocCleared(UInt32 numElems, UInt32 elemsSize, const char* place);
|
||||||
FUNC_ATTRIB(noinline) void* Mem_Realloc(void* mem, UInt32 numElems, UInt32 elemsSize, const char* place);
|
FUNC_NOINLINE void* Mem_Realloc(void* mem, UInt32 numElems, UInt32 elemsSize, const char* place);
|
||||||
FUNC_ATTRIB(noinline) void Mem_Free(void* mem);
|
FUNC_NOINLINE void Mem_Free(void* mem);
|
||||||
void Mem_Set(void* dst, UInt8 value, UInt32 numBytes);
|
void Mem_Set(void* dst, UInt8 value, UInt32 numBytes);
|
||||||
void Mem_Copy(void* dst, void* src, UInt32 numBytes);
|
void Mem_Copy(void* dst, void* src, UInt32 numBytes);
|
||||||
|
|
||||||
@ -123,7 +123,6 @@ void Audio_Init(AudioHandle* handle, Int32 buffers);
|
|||||||
void Audio_Free(AudioHandle handle);
|
void Audio_Free(AudioHandle handle);
|
||||||
struct AudioFormat* Audio_GetFormat(AudioHandle handle);
|
struct AudioFormat* Audio_GetFormat(AudioHandle handle);
|
||||||
void Audio_SetFormat(AudioHandle handle, struct AudioFormat* format);
|
void Audio_SetFormat(AudioHandle handle, struct AudioFormat* format);
|
||||||
void Audio_SetVolume(AudioHandle handle, Real32 volume);
|
|
||||||
void Audio_BufferData(AudioHandle handle, Int32 idx, void* data, UInt32 dataSize);
|
void Audio_BufferData(AudioHandle handle, Int32 idx, void* data, UInt32 dataSize);
|
||||||
void Audio_Play(AudioHandle handle);
|
void Audio_Play(AudioHandle handle);
|
||||||
bool Audio_IsCompleted(AudioHandle handle, Int32 idx);
|
bool Audio_IsCompleted(AudioHandle handle, Int32 idx);
|
||||||
|
@ -1297,49 +1297,47 @@ void InputWidget_Create(struct InputWidget* w, struct FontDesc* font, STRING_REF
|
|||||||
/*########################################################################################################################*
|
/*########################################################################################################################*
|
||||||
*---------------------------------------------------MenuInputValidator----------------------------------------------------*
|
*---------------------------------------------------MenuInputValidator----------------------------------------------------*
|
||||||
*#########################################################################################################################*/
|
*#########################################################################################################################*/
|
||||||
static bool MenuInputValidator_AlwaysValidString(struct MenuInputValidator* v, STRING_PURE String* s) { return true; }
|
static void Hex_Range(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
||||||
|
|
||||||
static void HexColValidator_GetRange(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
|
||||||
String_AppendConst(range, "&7(#000000 - #FFFFFF)");
|
String_AppendConst(range, "&7(#000000 - #FFFFFF)");
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool HexColValidator_IsValidChar(struct MenuInputValidator* v, char c) {
|
static bool Hex_ValidChar(struct MenuInputValidator* v, char c) {
|
||||||
return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f');
|
return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f');
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool HexColValidator_IsValidString(struct MenuInputValidator* v, STRING_PURE String* s) {
|
static bool Hex_ValidString(struct MenuInputValidator* v, STRING_PURE String* s) {
|
||||||
return s->length <= 6;
|
return s->length <= 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool HexColValidator_IsValidValue(struct MenuInputValidator* v, STRING_PURE String* s) {
|
static bool Hex_ValidValue(struct MenuInputValidator* v, STRING_PURE String* s) {
|
||||||
PackedCol col;
|
PackedCol col;
|
||||||
return PackedCol_TryParseHex(s, &col);
|
return PackedCol_TryParseHex(s, &col);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct MenuInputValidatorVTABLE HexInputValidator_VTABLE = {
|
||||||
|
Hex_Range, Hex_ValidChar, Hex_ValidString, Hex_ValidValue,
|
||||||
|
};
|
||||||
struct MenuInputValidator MenuInputValidator_Hex(void) {
|
struct MenuInputValidator MenuInputValidator_Hex(void) {
|
||||||
struct MenuInputValidator v;
|
struct MenuInputValidator v;
|
||||||
v.GetRange = HexColValidator_GetRange;
|
v.VTABLE = &HexInputValidator_VTABLE;
|
||||||
v.IsValidChar = HexColValidator_IsValidChar;
|
|
||||||
v.IsValidString = HexColValidator_IsValidString;
|
|
||||||
v.IsValidValue = HexColValidator_IsValidValue;
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void IntegerValidator_GetRange(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
static void Integer_Range(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
||||||
String_Format2(range, "&7(%i - %i)", &v->Meta_Int[0], &v->Meta_Int[1]);
|
String_Format2(range, "&7(%i - %i)", &v->Meta_Int[0], &v->Meta_Int[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IntegerValidator_IsValidChar(struct MenuInputValidator* v, char c) {
|
static bool Integer_ValidChar(struct MenuInputValidator* v, char c) {
|
||||||
return (c >= '0' && c <= '9') || c == '-';
|
return (c >= '0' && c <= '9') || c == '-';
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IntegerValidator_IsValidString(struct MenuInputValidator* v, STRING_PURE String* s) {
|
static bool Integer_ValidString(struct MenuInputValidator* v, STRING_PURE String* s) {
|
||||||
Int32 value;
|
Int32 value;
|
||||||
if (s->length == 1 && s->buffer[0] == '-') return true; /* input is just a minus sign */
|
if (s->length == 1 && s->buffer[0] == '-') return true; /* input is just a minus sign */
|
||||||
return Convert_TryParseInt32(s, &value);
|
return Convert_TryParseInt32(s, &value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IntegerValidator_IsValidValue(struct MenuInputValidator* v, STRING_PURE String* s) {
|
static bool Integer_ValidValue(struct MenuInputValidator* v, STRING_PURE String* s) {
|
||||||
Int32 value;
|
Int32 value;
|
||||||
if (!Convert_TryParseInt32(s, &value)) return false;
|
if (!Convert_TryParseInt32(s, &value)) return false;
|
||||||
|
|
||||||
@ -1347,75 +1345,78 @@ static bool IntegerValidator_IsValidValue(struct MenuInputValidator* v, STRING_P
|
|||||||
return min <= value && value <= max;
|
return min <= value && value <= max;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct MenuInputValidatorVTABLE IntegerInputValidator_VTABLE = {
|
||||||
|
Integer_Range, Integer_ValidChar, Integer_ValidString, Integer_ValidValue,
|
||||||
|
};
|
||||||
struct MenuInputValidator MenuInputValidator_Integer(Int32 min, Int32 max) {
|
struct MenuInputValidator MenuInputValidator_Integer(Int32 min, Int32 max) {
|
||||||
struct MenuInputValidator v;
|
struct MenuInputValidator v;
|
||||||
v.GetRange = IntegerValidator_GetRange;
|
v.VTABLE = &IntegerInputValidator_VTABLE;
|
||||||
v.IsValidChar = IntegerValidator_IsValidChar;
|
|
||||||
v.IsValidString = IntegerValidator_IsValidString;
|
|
||||||
v.IsValidValue = IntegerValidator_IsValidValue;
|
|
||||||
|
|
||||||
v.Meta_Int[0] = min;
|
v.Meta_Int[0] = min;
|
||||||
v.Meta_Int[1] = max;
|
v.Meta_Int[1] = max;
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SeedValidator_GetRange(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
static void Seed_Range(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
||||||
String_AppendConst(range, "&7(an integer)");
|
String_AppendConst(range, "&7(an integer)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct MenuInputValidatorVTABLE SeedInputValidator_VTABLE = {
|
||||||
|
Seed_Range, Integer_ValidChar, Integer_ValidString, Integer_ValidValue,
|
||||||
|
};
|
||||||
struct MenuInputValidator MenuInputValidator_Seed(void) {
|
struct MenuInputValidator MenuInputValidator_Seed(void) {
|
||||||
struct MenuInputValidator v = MenuInputValidator_Integer(Int32_MinValue, Int32_MaxValue);
|
struct MenuInputValidator v = MenuInputValidator_Integer(Int32_MinValue, Int32_MaxValue);
|
||||||
v.GetRange = SeedValidator_GetRange;
|
v.VTABLE = &SeedInputValidator_VTABLE;
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RealValidator_GetRange(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
static void Real_Range(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
||||||
String_Format2(range, "&7(%f2 - %f2)", &v->Meta_Real[0], &v->Meta_Real[1]);
|
String_Format2(range, "&7(%f2 - %f2)", &v->Meta_Real[0], &v->Meta_Real[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool RealValidator_IsValidChar(struct MenuInputValidator* v, char c) {
|
static bool Real_ValidChar(struct MenuInputValidator* v, char c) {
|
||||||
return (c >= '0' && c <= '9') || c == '-' || c == '.' || c == ',';
|
return (c >= '0' && c <= '9') || c == '-' || c == '.' || c == ',';
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool RealValidator_IsValidString(struct MenuInputValidator* v, STRING_PURE String* s) {
|
static bool Real_ValidString(struct MenuInputValidator* v, STRING_PURE String* s) {
|
||||||
Real32 value;
|
Real32 value;
|
||||||
if (s->length == 1 && RealValidator_IsValidChar(v, s->buffer[0])) return true;
|
if (s->length == 1 && Real_ValidChar(v, s->buffer[0])) return true;
|
||||||
return Convert_TryParseReal32(s, &value);
|
return Convert_TryParseReal32(s, &value);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool RealValidator_IsValidValue(struct MenuInputValidator* v, STRING_PURE String* s) {
|
static bool Real_ValidValue(struct MenuInputValidator* v, STRING_PURE String* s) {
|
||||||
Real32 value;
|
Real32 value;
|
||||||
if (!Convert_TryParseReal32(s, &value)) return false;
|
if (!Convert_TryParseReal32(s, &value)) return false;
|
||||||
Real32 min = v->Meta_Real[0], max = v->Meta_Real[1];
|
Real32 min = v->Meta_Real[0], max = v->Meta_Real[1];
|
||||||
return min <= value && value <= max;
|
return min <= value && value <= max;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct MenuInputValidatorVTABLE RealInputValidator_VTABLE = {
|
||||||
|
Real_Range, Real_ValidChar, Real_ValidString, Real_ValidValue,
|
||||||
|
};
|
||||||
struct MenuInputValidator MenuInputValidator_Real(Real32 min, Real32 max) {
|
struct MenuInputValidator MenuInputValidator_Real(Real32 min, Real32 max) {
|
||||||
struct MenuInputValidator v;
|
struct MenuInputValidator v;
|
||||||
v.GetRange = RealValidator_GetRange;
|
v.VTABLE = &RealInputValidator_VTABLE;
|
||||||
v.IsValidChar = RealValidator_IsValidChar;
|
|
||||||
v.IsValidString = RealValidator_IsValidString;
|
|
||||||
v.IsValidValue = RealValidator_IsValidValue;
|
|
||||||
v.Meta_Real[0] = min;
|
v.Meta_Real[0] = min;
|
||||||
v.Meta_Real[1] = max;
|
v.Meta_Real[1] = max;
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void PathValidator_GetRange(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
static void Path_Range(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
||||||
String_AppendConst(range, "&7(Enter name)");
|
String_AppendConst(range, "&7(Enter name)");
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool PathValidator_IsValidChar(struct MenuInputValidator* v, char c) {
|
static bool Path_ValidChar(struct MenuInputValidator* v, char c) {
|
||||||
return !(c == '/' || c == '\\' || c == '?' || c == '*' || c == ':'
|
return !(c == '/' || c == '\\' || c == '?' || c == '*' || c == ':'
|
||||||
|| c == '<' || c == '>' || c == '|' || c == '"' || c == '.');
|
|| c == '<' || c == '>' || c == '|' || c == '"' || c == '.');
|
||||||
}
|
}
|
||||||
|
static bool Path_ValidString(struct MenuInputValidator* v, STRING_PURE String* s) { return true; }
|
||||||
|
|
||||||
|
struct MenuInputValidatorVTABLE PathInputValidator_VTABLE = {
|
||||||
|
Path_Range, Path_ValidChar, Path_ValidString, Path_ValidString,
|
||||||
|
};
|
||||||
struct MenuInputValidator MenuInputValidator_Path(void) {
|
struct MenuInputValidator MenuInputValidator_Path(void) {
|
||||||
struct MenuInputValidator v;
|
struct MenuInputValidator v;
|
||||||
v.GetRange = PathValidator_GetRange;
|
v.VTABLE = &PathInputValidator_VTABLE;
|
||||||
v.IsValidChar = PathValidator_IsValidChar;
|
|
||||||
v.IsValidString = MenuInputValidator_AlwaysValidString;
|
|
||||||
v.IsValidValue = MenuInputValidator_AlwaysValidString;
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1426,24 +1427,24 @@ struct MenuInputValidator MenuInputValidator_Enum(const char** names, UInt32 nam
|
|||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void StringValidator_GetRange(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
static void String_Range(struct MenuInputValidator* v, STRING_TRANSIENT String* range) {
|
||||||
String_AppendConst(range, "&7(Enter text)");
|
String_AppendConst(range, "&7(Enter text)");
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool StringValidator_IsValidChar(struct MenuInputValidator* v, char c) {
|
static bool String_ValidChar(struct MenuInputValidator* v, char c) {
|
||||||
return c != '&' && Utils_IsValidInputChar(c, true);
|
return c != '&' && Utils_IsValidInputChar(c, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool StringValidator_IsValidString(struct MenuInputValidator* v, STRING_PURE String* s) {
|
static bool String_ValidString(struct MenuInputValidator* v, STRING_PURE String* s) {
|
||||||
return s->length <= STRING_SIZE;
|
return s->length <= STRING_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct MenuInputValidatorVTABLE StringInputValidator_VTABLE = {
|
||||||
|
String_Range, String_ValidChar, String_ValidString, String_ValidString,
|
||||||
|
};
|
||||||
struct MenuInputValidator MenuInputValidator_String(void) {
|
struct MenuInputValidator MenuInputValidator_String(void) {
|
||||||
struct MenuInputValidator v;
|
struct MenuInputValidator v;
|
||||||
v.GetRange = StringValidator_GetRange;
|
v.VTABLE = &StringInputValidator_VTABLE;
|
||||||
v.IsValidChar = StringValidator_IsValidChar;
|
|
||||||
v.IsValidString = StringValidator_IsValidString;
|
|
||||||
v.IsValidValue = StringValidator_IsValidString;
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1472,8 +1473,8 @@ static void MenuInputWidget_RemakeTexture(void* widget) {
|
|||||||
|
|
||||||
char rangeBuffer[STRING_SIZE];
|
char rangeBuffer[STRING_SIZE];
|
||||||
String range = String_FromArray(rangeBuffer);
|
String range = String_FromArray(rangeBuffer);
|
||||||
struct MenuInputValidator* validator = &w->Validator;
|
struct MenuInputValidator* v = &w->Validator;
|
||||||
validator->GetRange(validator, &range);
|
v->VTABLE->GetRange(v, &range);
|
||||||
|
|
||||||
/* Ensure we don't have 0 text height */
|
/* Ensure we don't have 0 text height */
|
||||||
if (size.Height == 0) {
|
if (size.Height == 0) {
|
||||||
@ -1516,13 +1517,13 @@ static bool MenuInputWidget_AllowedChar(void* widget, char c) {
|
|||||||
if (c == '&' || !Utils_IsValidInputChar(c, true)) return false;
|
if (c == '&' || !Utils_IsValidInputChar(c, true)) return false;
|
||||||
struct MenuInputValidator* v = &((struct MenuInputWidget*)w)->Validator;
|
struct MenuInputValidator* v = &((struct MenuInputWidget*)w)->Validator;
|
||||||
|
|
||||||
if (!v->IsValidChar(v, c)) return false;
|
if (!v->VTABLE->IsValidChar(v, c)) return false;
|
||||||
Int32 maxChars = w->GetMaxLines() * INPUTWIDGET_LEN;
|
Int32 maxChars = w->GetMaxLines() * INPUTWIDGET_LEN;
|
||||||
if (w->Text.length == maxChars) return false;
|
if (w->Text.length == maxChars) return false;
|
||||||
|
|
||||||
/* See if the new string is in valid format */
|
/* See if the new string is in valid format */
|
||||||
InputWidget_AppendChar(w, c);
|
InputWidget_AppendChar(w, c);
|
||||||
bool valid = v->IsValidString(v, &w->Text);
|
bool valid = v->VTABLE->IsValidString(v, &w->Text);
|
||||||
InputWidget_DeleteChar(w);
|
InputWidget_DeleteChar(w);
|
||||||
return valid;
|
return valid;
|
||||||
}
|
}
|
||||||
|
@ -16,9 +16,9 @@ struct TextWidget {
|
|||||||
bool ReducePadding;
|
bool ReducePadding;
|
||||||
PackedCol Col;
|
PackedCol Col;
|
||||||
};
|
};
|
||||||
void TextWidget_Make(struct TextWidget* widget);
|
void TextWidget_Make(struct TextWidget* w);
|
||||||
void TextWidget_Create(struct TextWidget* widget, STRING_PURE String* text, struct FontDesc* font);
|
void TextWidget_Create(struct TextWidget* w, STRING_PURE String* text, struct FontDesc* font);
|
||||||
void TextWidget_Set(struct TextWidget* widget, STRING_PURE String* text, struct FontDesc* font);
|
void TextWidget_Set(struct TextWidget* w, STRING_PURE String* text, struct FontDesc* font);
|
||||||
|
|
||||||
|
|
||||||
typedef void (*Button_Get)(STRING_TRANSIENT String* raw);
|
typedef void (*Button_Get)(STRING_TRANSIENT String* raw);
|
||||||
@ -32,8 +32,8 @@ struct ButtonWidget {
|
|||||||
Button_Get GetValue;
|
Button_Get GetValue;
|
||||||
Button_Set SetValue;
|
Button_Set SetValue;
|
||||||
};
|
};
|
||||||
void ButtonWidget_Create(struct ButtonWidget* widget, Int32 minWidth, STRING_PURE String* text, struct FontDesc* font, Widget_LeftClick onClick);
|
void ButtonWidget_Create(struct ButtonWidget* w, Int32 minWidth, STRING_PURE String* text, struct FontDesc* font, Widget_LeftClick onClick);
|
||||||
void ButtonWidget_Set(struct ButtonWidget* widget, STRING_PURE String* text, struct FontDesc* font);
|
void ButtonWidget_Set(struct ButtonWidget* w, STRING_PURE String* text, struct FontDesc* font);
|
||||||
|
|
||||||
|
|
||||||
struct ScrollbarWidget {
|
struct ScrollbarWidget {
|
||||||
@ -43,7 +43,7 @@ struct ScrollbarWidget {
|
|||||||
Int32 MouseOffset;
|
Int32 MouseOffset;
|
||||||
bool DraggingMouse;
|
bool DraggingMouse;
|
||||||
};
|
};
|
||||||
void ScrollbarWidget_Create(struct ScrollbarWidget* widget);
|
void ScrollbarWidget_Create(struct ScrollbarWidget* w);
|
||||||
|
|
||||||
|
|
||||||
struct HotbarWidget {
|
struct HotbarWidget {
|
||||||
@ -54,7 +54,7 @@ struct HotbarWidget {
|
|||||||
Real32 ScrollAcc;
|
Real32 ScrollAcc;
|
||||||
bool AltHandled;
|
bool AltHandled;
|
||||||
};
|
};
|
||||||
void HotbarWidget_Create(struct HotbarWidget* widget);
|
void HotbarWidget_Create(struct HotbarWidget* w);
|
||||||
|
|
||||||
|
|
||||||
struct TableWidget {
|
struct TableWidget {
|
||||||
@ -73,10 +73,10 @@ struct TableWidget {
|
|||||||
Int32 LastX, LastY;
|
Int32 LastX, LastY;
|
||||||
};
|
};
|
||||||
|
|
||||||
void TableWidget_Create(struct TableWidget* widget);
|
void TableWidget_Create(struct TableWidget* w);
|
||||||
void TableWidget_SetBlockTo(struct TableWidget* widget, BlockID block);
|
void TableWidget_SetBlockTo(struct TableWidget* w, BlockID block);
|
||||||
void TableWidget_OnInventoryChanged(struct TableWidget* widget);
|
void TableWidget_OnInventoryChanged(struct TableWidget* w);
|
||||||
void TableWidget_MakeDescTex(struct TableWidget* widget, BlockID block);
|
void TableWidget_MakeDescTex(struct TableWidget* w, BlockID block);
|
||||||
|
|
||||||
|
|
||||||
#define INPUTWIDGET_MAX_LINES 3
|
#define INPUTWIDGET_MAX_LINES 3
|
||||||
@ -107,22 +107,25 @@ struct InputWidget {
|
|||||||
Real64 CaretAccumulator;
|
Real64 CaretAccumulator;
|
||||||
};
|
};
|
||||||
|
|
||||||
void InputWidget_Create(struct InputWidget* widget, struct FontDesc* font, STRING_REF String* prefix);
|
void InputWidget_Create(struct InputWidget* w, struct FontDesc* font, STRING_REF String* prefix);
|
||||||
/* Clears all the characters from the text buffer. Deletes the native texture. */
|
/* Clears all the characters from the text buffer. Deletes the native texture. */
|
||||||
void InputWidget_Clear(struct InputWidget* widget);
|
void InputWidget_Clear(struct InputWidget* w);
|
||||||
/* Appends a sequence of characters to current text buffer. May recreate the native texture. */
|
/* Appends a sequence of characters to current text buffer. May recreate the native texture. */
|
||||||
void InputWidget_AppendString(struct InputWidget* widget, STRING_PURE String* text);
|
void InputWidget_AppendString(struct InputWidget* w, STRING_PURE String* text);
|
||||||
/* Appends a single character to current text buffer. May recreate the native texture. */
|
/* Appends a single character to current text buffer. May recreate the native texture. */
|
||||||
void InputWidget_Append(struct InputWidget* widget, char c);
|
void InputWidget_Append(struct InputWidget* w, char c);
|
||||||
|
|
||||||
|
|
||||||
struct MenuInputValidator;
|
struct MenuInputValidator;
|
||||||
struct MenuInputValidator {
|
struct MenuInputValidatorVTABLE {
|
||||||
void (*GetRange)(struct MenuInputValidator* validator, STRING_TRANSIENT String* range);
|
void (*GetRange)(struct MenuInputValidator* v, STRING_TRANSIENT String* range);
|
||||||
bool (*IsValidChar)(struct MenuInputValidator* validator, char c);
|
bool (*IsValidChar)(struct MenuInputValidator* v, char c);
|
||||||
bool (*IsValidString)(struct MenuInputValidator* validator, STRING_PURE String* s);
|
bool (*IsValidString)(struct MenuInputValidator* v, STRING_PURE String* s);
|
||||||
bool (*IsValidValue)(struct MenuInputValidator* validator, STRING_PURE String* s);
|
bool (*IsValidValue)(struct MenuInputValidator* v, STRING_PURE String* s);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MenuInputValidator {
|
||||||
|
struct MenuInputValidatorVTABLE* VTABLE;
|
||||||
union {
|
union {
|
||||||
void* Meta_Ptr[2];
|
void* Meta_Ptr[2];
|
||||||
Int32 Meta_Int[2];
|
Int32 Meta_Int[2];
|
||||||
@ -144,7 +147,7 @@ struct MenuInputWidget {
|
|||||||
struct MenuInputValidator Validator;
|
struct MenuInputValidator Validator;
|
||||||
char __TextBuffer[INPUTWIDGET_LEN];
|
char __TextBuffer[INPUTWIDGET_LEN];
|
||||||
};
|
};
|
||||||
void MenuInputWidget_Create(struct MenuInputWidget* widget, Int32 width, Int32 height, STRING_PURE String* text, struct FontDesc* font, struct MenuInputValidator* validator);
|
void MenuInputWidget_Create(struct MenuInputWidget* w, Int32 width, Int32 height, STRING_PURE String* text, struct FontDesc* font, struct MenuInputValidator* validator);
|
||||||
|
|
||||||
|
|
||||||
struct ChatInputWidget {
|
struct ChatInputWidget {
|
||||||
@ -155,7 +158,7 @@ struct ChatInputWidget {
|
|||||||
String OrigStr;
|
String OrigStr;
|
||||||
};
|
};
|
||||||
|
|
||||||
void ChatInputWidget_Create(struct ChatInputWidget* widget, struct FontDesc* font);
|
void ChatInputWidget_Create(struct ChatInputWidget* w, struct FontDesc* font);
|
||||||
|
|
||||||
|
|
||||||
#define TEXTGROUPWIDGET_MAX_LINES 30
|
#define TEXTGROUPWIDGET_MAX_LINES 30
|
||||||
@ -170,13 +173,13 @@ struct TextGroupWidget {
|
|||||||
char* Buffer;
|
char* Buffer;
|
||||||
};
|
};
|
||||||
|
|
||||||
void TextGroupWidget_Create(struct TextGroupWidget* widget, Int32 linesCount, struct FontDesc* font, struct FontDesc* underlineFont, STRING_REF struct Texture* textures, STRING_REF char* buffer);
|
void TextGroupWidget_Create(struct TextGroupWidget* w, Int32 linesCount, struct FontDesc* font, struct FontDesc* underlineFont, STRING_REF struct Texture* textures, STRING_REF char* buffer);
|
||||||
void TextGroupWidget_SetUsePlaceHolder(struct TextGroupWidget* widget, Int32 index, bool placeHolder);
|
void TextGroupWidget_SetUsePlaceHolder(struct TextGroupWidget* w, Int32 index, bool placeHolder);
|
||||||
void TextGroupWidget_PushUpAndReplaceLast(struct TextGroupWidget* widget, STRING_PURE String* text);
|
void TextGroupWidget_PushUpAndReplaceLast(struct TextGroupWidget* w, STRING_PURE String* text);
|
||||||
Int32 TextGroupWidget_UsedHeight(struct TextGroupWidget* widget);
|
Int32 TextGroupWidget_UsedHeight(struct TextGroupWidget* w);
|
||||||
void TextGroupWidget_GetSelected(struct TextGroupWidget* widget, STRING_TRANSIENT String* text, Int32 mouseX, Int32 mouseY);
|
void TextGroupWidget_GetSelected(struct TextGroupWidget* w, STRING_TRANSIENT String* text, Int32 mouseX, Int32 mouseY);
|
||||||
void TextGroupWidget_GetText(struct TextGroupWidget* widget, Int32 index, STRING_TRANSIENT String* text);
|
void TextGroupWidget_GetText(struct TextGroupWidget* w, Int32 index, STRING_TRANSIENT String* text);
|
||||||
void TextGroupWidget_SetText(struct TextGroupWidget* widget, Int32 index, STRING_PURE String* text);
|
void TextGroupWidget_SetText(struct TextGroupWidget* w, Int32 index, STRING_PURE String* text);
|
||||||
|
|
||||||
|
|
||||||
struct PlayerListWidget {
|
struct PlayerListWidget {
|
||||||
@ -189,8 +192,8 @@ struct PlayerListWidget {
|
|||||||
UInt16 IDs[TABLIST_MAX_NAMES * 2];
|
UInt16 IDs[TABLIST_MAX_NAMES * 2];
|
||||||
struct Texture Textures[TABLIST_MAX_NAMES * 2];
|
struct Texture Textures[TABLIST_MAX_NAMES * 2];
|
||||||
};
|
};
|
||||||
void PlayerListWidget_Create(struct PlayerListWidget* widget, struct FontDesc* font, bool classic);
|
void PlayerListWidget_Create(struct PlayerListWidget* w, struct FontDesc* font, bool classic);
|
||||||
void PlayerListWidget_GetNameUnder(struct PlayerListWidget* widget, Int32 mouseX, Int32 mouseY, STRING_TRANSIENT String* name);
|
void PlayerListWidget_GetNameUnder(struct PlayerListWidget* w, Int32 mouseX, Int32 mouseY, STRING_TRANSIENT String* name);
|
||||||
|
|
||||||
|
|
||||||
typedef void (*SpecialInputAppendFunc)(void* userData, char c);
|
typedef void (*SpecialInputAppendFunc)(void* userData, char c);
|
||||||
@ -212,7 +215,7 @@ struct SpecialInputWidget {
|
|||||||
char __ColBuffer[DRAWER2D_MAX_COLS * 4];
|
char __ColBuffer[DRAWER2D_MAX_COLS * 4];
|
||||||
};
|
};
|
||||||
|
|
||||||
void SpecialInputWidget_Create(struct SpecialInputWidget* widget, struct FontDesc* font, struct InputWidget* appendObj);
|
void SpecialInputWidget_Create(struct SpecialInputWidget* w, struct FontDesc* font, struct InputWidget* appendObj);
|
||||||
void SpecialInputWidget_UpdateCols(struct SpecialInputWidget* widget);
|
void SpecialInputWidget_UpdateCols(struct SpecialInputWidget* w);
|
||||||
void SpecialInputWidget_SetActive(struct SpecialInputWidget* widget, bool active);
|
void SpecialInputWidget_SetActive(struct SpecialInputWidget* w, bool active);
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user