diff --git a/NTMakefile b/NTMakefile index 544b53e..7f58463 100644 --- a/NTMakefile +++ b/NTMakefile @@ -2,8 +2,8 @@ CC = cl LD = link -OBJS = src\core.obj src\draw.obj src\default.obj src\lowlevel.obj src\error.obj src\font.obj src\boldfont.obj src\widget\button.obj src\widget\frame.obj src\widget\opengl.obj src\widget\window.obj src\widget\menu.obj src\widget\submenu.obj src\widget\image.obj src\widget\scrollbar.obj src\widget\checkbox.obj src\widget\label.obj src\widget\entry.obj src\external\ds.obj src\external\image.obj src\cursor\default.obj src\cursor\cross.obj src\cursor\text.obj src\backend\gdi.obj -OOOBJS = oosrc\base.obj oosrc\widget\button.obj oosrc\widget\frame.obj oosrc\widget\image.obj oosrc\widget\menu.obj oosrc\widget\opengl.obj oosrc\widget\scrollbar.obj oosrc\widget\submenu.obj oosrc\widget\window.obj oosrc\widget\checkbox.obj oosrc\widget\text.obj oosrc\widget\label.obj oosrc\widget\entry.obj +OBJS = src\core.obj src\draw.obj src\default.obj src\lowlevel.obj src\error.obj src\unicode.obj src\font.obj src\boldfont.obj src\widget\button.obj src\widget\frame.obj src\widget\opengl.obj src\widget\window.obj src\widget\menu.obj src\widget\entry.obj src\widget\submenu.obj src\widget\image.obj src\widget\scrollbar.obj src\widget\checkbox.obj src\widget\label.obj src\external\ds.obj src\external\image.obj src\cursor\default.obj src\cursor\cross.obj src\cursor\text.obj src\backend\gdi.obj +OOOBJS = oosrc\base.obj oosrc\widget\button.obj oosrc\widget\frame.obj oosrc\widget\image.obj oosrc\widget\menu.obj oosrc\widget\opengl.obj oosrc\widget\scrollbar.obj oosrc\widget\submenu.obj oosrc\widget\window.obj oosrc\widget\checkbox.obj oosrc\widget\label.obj oosrc\widget\entry.obj CFLAGS = /nologo /DSTBI_NO_SIMD /D_MILSKO /DUSE_GDI /DUSE_STB_IMAGE /Iinclude CXXFLAGS = /nologo /Iinclude LDFLAGS = /nologo /DLL /LIBPATH:src /LIBPATH:oosrc diff --git a/doc/index.html b/doc/index.html index a127939..35f497d 100644 --- a/doc/index.html +++ b/doc/index.html @@ -203,6 +203,18 @@
Mw/TypeDefs.h
+
+ Mw/Unicode.h +
+
+ MwUTF8ToUTF32 +
+
+ MwUTF8Length +
+
+ MwUTF8Copy +
Mw/Widget/Button.h
@@ -1655,6 +1667,63 @@
+

Mw/Unicode.h

+
+
+ Handles UTF8 stuff. +
+
+
+
MWDECL int MwUTF8ToUTF32 (
+	const char* input,
+	int* output
+);
+
+
+ output Output. +
+
+ Returns +
+
+ Bytes this multibyte takes. +
+
+
+
MWDECL int MwUTF8Length (
+	const char* input
+);
+
+
+ input Input. +
+
+ Returns +
+
+ Length. +
+
+
+
MWDECL int MwUTF8Copy (
+	const char* src,
+	int srcskip,
+	char* dst,
+	int dstskip,
+	int len
+);
+
+
+ len Length. +
+
+ Returns +
+
+ Copied length in bytes. +
+
+

Mw/Widget/Button.h

diff --git a/src/draw.c b/src/draw.c index e227aa6..c10315f 100644 --- a/src/draw.c +++ b/src/draw.c @@ -360,7 +360,7 @@ void MwDrawTriangle(MwWidget handle, MwRect* rect, MwLLColor color, int invert, } void MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int align, MwLLColor color) { - int i, x, y, sx, sy; + int i = 0, x, y, sx, sy; MwRect r; sx = point->x; @@ -374,7 +374,7 @@ void MwDrawText(MwWidget handle, MwPoint* point, const char* text, int bold, int while(text[i] != 0) { int out; - i += MwUTF8ToUTF32(text, &out); + i += MwUTF8ToUTF32(text + i, &out); if(out >= 0x80) out = 0; diff --git a/src/unicode.c b/src/unicode.c index 06fbd88..a7bc5c0 100644 --- a/src/unicode.c +++ b/src/unicode.c @@ -75,14 +75,17 @@ int MwUTF8Length(const char* input) { return len; } -int MwUTF8Copy(const char* src, int srcskip, char* dst, int dstskip, int len){ +int MwUTF8Copy(const char* src, int srcskip, char* dst, int dstskip, int len) { int i; int out; int total = 0; for(i = 0; i < srcskip; i++) src += MwUTF8ToUTF32(src, &out); for(i = 0; i < dstskip; i++) dst += MwUTF8ToUTF32(dst, &out); - for(i = 0; i < len; i++){ - int len = MwUTF8ToUTF32(src, &out); + for(i = 0; i < len; i++) { + int len; + if(src[0] == 0) break; + + len = MwUTF8ToUTF32(src, &out); memcpy(dst, src, len); @@ -90,7 +93,7 @@ int MwUTF8Copy(const char* src, int srcskip, char* dst, int dstskip, int len){ dst += len; total += len; } - dst[total] = 0; + dst[0] = 0; return total; } diff --git a/src/widget/entry.c b/src/widget/entry.c index 994b831..ea57c07 100644 --- a/src/widget/entry.c +++ b/src/widget/entry.c @@ -13,7 +13,6 @@ static int create(MwWidget handle) { MwSetDefault(handle); - MwSetText(handle, MwNtext, "こんにちは、世界 Hello, World"); MwLLSetCursor(handle->lowlevel, &MwCursorText, &MwCursorTextMask); return 0; @@ -53,14 +52,12 @@ static void draw(MwWidget handle) { len = (r.width - p.x * 2) / w; - show = malloc(len + 1); - memset(show, 0, len + 1); + show = malloc(len * 4 + 1); + memset(show, 0, len * 4 + 1); start = (t->cursor - 1) / len; start *= len; - for(i = start; i < (int)strlen(str) && i < start + len; i++) { - show[i - start] = str[i]; - } + MwUTF8Copy(str, start, show, 0, len); MwDrawText(handle, &p, show, 0, MwALIGNMENT_BEGINNING, text); @@ -88,18 +85,13 @@ static void key(MwWidget handle, int code) { if(str == NULL) str = ""; if(code == MwLLKeyBackSpace) { - int i, incr = 0; if(t->cursor == 0) return; out = malloc(strlen(str) + 1); t->cursor--; - for(i = 0; str[i] != 0; i++) { - if(i != t->cursor) { - out[incr++] = str[i]; - } - } - out[incr++] = 0; + MwUTF8Copy(str, 0, out, 0, t->cursor); + MwUTF8Copy(str, t->cursor + 1, out, t->cursor, MwUTF8Length(str) - (t->cursor + 1)); MwSetText(handle, MwNtext, out); @@ -108,11 +100,11 @@ static void key(MwWidget handle, int code) { if(t->cursor == 0) return; t->cursor--; } else if(code == MwLLKeyRight) { - if(t->cursor == (int)strlen(str)) return; + if(t->cursor == MwUTF8Length(str)) return; t->cursor++; } else { int incr = 0; - out = malloc(strlen(str) + 1 + 1); + out = malloc(strlen(str) + 1 + 1); incr += MwUTF8Copy(str, 0, out, 0, t->cursor); out[incr++] = code; MwUTF8Copy(str, t->cursor, out, t->cursor + 1, MwUTF8Length(str) - t->cursor);