diff --git a/src/abstract/directory.c b/src/abstract/directory.c index ddf10e1..977f2f5 100644 --- a/src/abstract/directory.c +++ b/src/abstract/directory.c @@ -19,19 +19,21 @@ typedef struct dir { void* MwDirectoryOpen(const char* path) { dir_t* dir = malloc(sizeof(*dir)); - char * p; - if(!dir) { + char* p; + if(!dir) { printf("Out Of Memory\n"); return NULL; } #ifdef _WIN32 - p = MwStringDuplicate(path); + p = malloc(strlen(path) + 2 + 1); + + strcpy(p, path); if(strchr(path, '/') != NULL) { - MwStringConcat(p, "/"); + strcat(p, "/"); } else { - MwStringConcat(p, "\\"); + strcat(p, "\\"); } - MwStringConcat(p, "*"); + strcat(p, "*"); if((dir->hFind = FindFirstFile(p, &dir->ffd)) == INVALID_HANDLE_VALUE) { free(p); free(dir); @@ -70,15 +72,15 @@ MwDirectoryEntry* MwDirectoryRead(void* handle) { dir_t* dir = handle; MwDirectoryEntry* entry = malloc(sizeof(*entry)); #ifdef _WIN32 - ULARGE_INTEGER* l; + ULARGE_INTEGER* l; #elif defined(CLASSIC_MAC_OS) #else - struct dirent* d; + struct dirent* d; struct stat s; char* p; #endif - - if(!entry) { + + if(!entry) { printf("Out Of Memory\n"); return NULL; } diff --git a/src/core.c b/src/core.c index c27b1a6..3180922 100644 --- a/src/core.c +++ b/src/core.c @@ -1090,14 +1090,14 @@ int MwLibraryInit(void) { int i; #ifdef _WIN32 - /* + /* There's no Windows configuration that Milsko supports that doesn't have winmm. However, uhh, Visual Studio 2022. For some fucking reason. Thanks for coming to my TED Talk. */ - MwLL_winmmLib = LoadLibrary("winmm.dll"); - MwLL_PFN_timeGetTime = (void *)GetProcAddress(MwLL_winmmLib, "timeGetTime"); - MwLL_PFN_timeBeginPeriod = (void *)GetProcAddress(MwLL_winmmLib, "timeBeginPeriod"); + MwLL_winmmLib = LoadLibrary("winmm.dll"); + MwLL_PFN_timeGetTime = (void*)GetProcAddress(MwLL_winmmLib, "timeGetTime"); + MwLL_PFN_timeBeginPeriod = (void*)GetProcAddress(MwLL_winmmLib, "timeBeginPeriod"); MwLL_PFN_timeBeginPeriod(10); #endif diff --git a/src/string.c b/src/string.c index c894b9a..579c57e 100644 --- a/src/string.c +++ b/src/string.c @@ -2,7 +2,7 @@ char* MwStringDuplicate(const char* str) { int sz = strlen(str) + 1; - char* r = malloc(sz); + char* r = malloc(sz); if(!r) { printf("Out Of Memory\n"); return NULL; @@ -19,7 +19,7 @@ char* MwStringDuplicate(const char* str) { char* MwStringConcat(const char* str1, const char* str2) { int sz = strlen(str1) + strlen(str2) + 1; - char* r = malloc(sz); + char* r = malloc(sz); if(!r) { printf("Out Of Memory\n"); return NULL; @@ -64,8 +64,6 @@ void MwStringTime(char* out, time_t t) { struct tm* tm = localtime(&t); const char* months[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; - - if(tm == NULL) { #if defined(_MSC_VER) && (_MSC_VER >= 1400) sprintf_s(out, 255, "localtime error"); diff --git a/src/widget/checkbox.c b/src/widget/checkbox.c index f196954..8e65dc0 100644 --- a/src/widget/checkbox.c +++ b/src/widget/checkbox.c @@ -10,8 +10,10 @@ static int wcreate(MwWidget handle) { static void draw(MwWidget handle) { MwRect r; - MwLLColor base = MwParseColor(handle, MwGetText(handle, MwNbackground)); - MwLLPixmap bgpx = MwGetVoid(handle, MwNbackgroundPixmap); + MwLLColor base = MwParseColor(handle, MwGetText(handle, MwNbackground)); + MwLLColor base2 = MwParseColor(handle, MwGetText(handle, MwNsubBackground)); + MwLLColor text2 = MwParseColor(handle, MwGetText(handle, MwNsubForeground)); + MwLLPixmap bgpx = MwGetVoid(handle, MwNbackgroundPixmap); r.x = 0; r.y = 0; @@ -27,12 +29,42 @@ static void draw(MwWidget handle) { r.x = (MwGetInteger(handle, MwNwidth) - r.width) / 2; r.y = (MwGetInteger(handle, MwNheight) - r.height) / 2; - MwDrawWidgetBack(handle, &r, base, (handle->pressed || MwGetInteger(handle, MwNchecked)) ? 1 : 0, MwDEFAULT); + MwDrawFrame(handle, &r, base, 1); + MwDrawRect(handle, &r, base2); if(bgpx != NULL) MwLLDrawPixmap(handle->lowlevel, &r, bgpx); if(handle->pressed || MwGetInteger(handle, MwNchecked)) { - /* TODO: write check mark */ + MwPoint p[6]; + int gap_w = r.width / 4 / 3; + int gap_h = r.height / 4 / 3; + + r.x += gap_w; + r.y += gap_h; + r.width -= gap_w * 2; + r.height -= gap_h * 2; + + p[0].x = r.x; + p[0].y = r.y + r.height * 2 / 3; + + p[1].x = r.x + r.width / 3; + p[1].y = r.y + r.height; + + p[2].x = r.x + r.width; + p[2].y = r.y + r.height / 3; + + p[3] = p[2]; + p[3].y -= r.height / 3; + + p[4] = p[1]; + p[4].y -= r.height / 3; + + p[5] = p[0]; + p[5].y -= r.height / 3; + + MwLLPolygon(handle->lowlevel, p, 6, text2); } + MwLLFreeColor(text2); + MwLLFreeColor(base2); MwLLFreeColor(base); }