From c3819edde3553a559d7ca6e3b8ffacf3c13f9dc7 Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Wed, 30 Dec 2020 16:24:38 +1100 Subject: [PATCH] Cleanup StringsBuffer, add basic ios interop code --- src/String.c | 15 +++++++++------ src/Utils.c | 2 +- src/interop_ios.m | 38 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 48 insertions(+), 7 deletions(-) create mode 100644 src/interop_ios.m diff --git a/src/String.c b/src/String.c index 9b7e2c347..12ff32660 100644 --- a/src/String.c +++ b/src/String.c @@ -756,6 +756,9 @@ cc_bool Convert_ParseBool(const cc_string* str, cc_bool* value) { *------------------------------------------------------StringsBuffer------------------------------------------------------* *#########################################################################################################################*/ #define STRINGSBUFFER_BUFFER_EXPAND_SIZE 8192 +#define StringsBuffer_GetOffset(raw) ((raw) >> STRINGSBUFFER_LEN_SHIFT) +#define StringsBuffer_GetLength(raw) ((raw) & STRINGSBUFFER_LEN_MASK) +#define StringsBuffer_PackOffset(off) ((off) << STRINGSBUFFER_LEN_SHIFT) CC_NOINLINE static void StringsBuffer_Init(struct StringsBuffer* buffer) { buffer->count = 0; @@ -784,8 +787,8 @@ cc_string StringsBuffer_UNSAFE_Get(struct StringsBuffer* buffer, int i) { if (i < 0 || i >= buffer->count) Logger_Abort("Tried to get String past StringsBuffer end"); flags = buffer->flagsBuffer[i]; - offset = flags >> STRINGSBUFFER_LEN_SHIFT; - len = flags & STRINGSBUFFER_LEN_MASK; + offset = StringsBuffer_GetOffset(flags); + len = StringsBuffer_GetLength(flags); return String_Init(&buffer->textBuffer[offset], len, len); } @@ -810,7 +813,7 @@ void StringsBuffer_Add(struct StringsBuffer* buffer, const cc_string* str) { } Mem_Copy(&buffer->textBuffer[textOffset], str->buffer, str->length); - buffer->flagsBuffer[buffer->count] = str->length | (textOffset << STRINGSBUFFER_LEN_SHIFT); + buffer->flagsBuffer[buffer->count] = str->length | StringsBuffer_PackOffset(textOffset); buffer->count++; buffer->totalLength += str->length; @@ -822,8 +825,8 @@ void StringsBuffer_Remove(struct StringsBuffer* buffer, int index) { if (index < 0 || index >= buffer->count) Logger_Abort("Tried to remove String past StringsBuffer end"); flags = buffer->flagsBuffer[index]; - offset = flags >> STRINGSBUFFER_LEN_SHIFT; - len = flags & STRINGSBUFFER_LEN_MASK; + offset = StringsBuffer_GetOffset(flags); + len = StringsBuffer_GetLength(flags); /* Imagine buffer is this: AAXXYYZZ, and want to delete XX */ /* We iterate from first char of Y to last char of Z, */ @@ -834,7 +837,7 @@ void StringsBuffer_Remove(struct StringsBuffer* buffer, int index) { /* Adjust text offset of elements after this element */ /* Elements may not be in order so must account for that */ - offsetAdj = len << STRINGSBUFFER_LEN_SHIFT; + offsetAdj = StringsBuffer_PackOffset(len); for (i = index; i < buffer->count - 1; i++) { buffer->flagsBuffer[i] = buffer->flagsBuffer[i + 1]; if (buffer->flagsBuffer[i] >= flags) { diff --git a/src/Utils.c b/src/Utils.c index a394292b0..5b5d40332 100644 --- a/src/Utils.c +++ b/src/Utils.c @@ -317,7 +317,7 @@ cc_bool EntryList_Remove(struct StringsBuffer* list, const cc_string* key, char } void EntryList_Set(struct StringsBuffer* list, const cc_string* key, const cc_string* value, char separator) { - cc_string entry; char entryBuffer[1024]; + cc_string entry; char entryBuffer[3072]; String_InitArray(entry, entryBuffer); if (value->length) { diff --git a/src/interop_ios.m b/src/interop_ios.m new file mode 100644 index 000000000..8cc30fa5e --- /dev/null +++ b/src/interop_ios.m @@ -0,0 +1,38 @@ +#include "Window.h" +#include "Platform.h" +#include "String.h" +#include + +void Clipboard_GetText(cc_string* value) { + const char* raw; + NSString* str; + int len; + + str = [UIPasteboard generalPasteboard].string; + if (!str) return; + + raw = str.UTF8String; + String_AppendUtf8(value, raw, String_Length(raw)); + [str release]; +} + +void Clipboard_SetText(const cc_string* value) { + char raw[NATIVE_STR_LEN]; + NSString* str; + int len; + + Platform_EncodeString(raw, value); + str = [NSString stringWithUTF8String:raw]; + [UIPasteboard generalPasteboard].string = str; + [str release]; +} + +void Window_SetTitle(const cc_string* title) { + /* TODO: Implement this somehow */ +} + +void Window_SetSize(int width, int height) { } + +void Window_EnableRawMouse(void) { } +void Window_UpdateRawMouse(void) { } +void Window_DisableRawMouse(void) { }