From 5ff982d10654ab38a4b92815c4954177471d7e8e Mon Sep 17 00:00:00 2001 From: Nishi Date: Thu, 23 Apr 2026 14:59:35 +0900 Subject: [PATCH] add ui charset converter and stuff --- BorMakefile | 5 +- NTMakefile | 5 +- WatMakefile | 9 ++-- include/Mw/Abstract/CharSet.h | 22 ++++++++ include/Mw/MachDep.h | 4 ++ include/Mw/Milsko.h | 1 + src/abstract/charset.c | 95 +++++++++++++++++++++++++++++++++++ src/dialog/filechooser.c | 19 ++++--- src/widget/listbox.c | 41 ++++++++++----- 9 files changed, 176 insertions(+), 25 deletions(-) create mode 100644 include/Mw/Abstract/CharSet.h create mode 100644 src/abstract/charset.c diff --git a/BorMakefile b/BorMakefile index 0f61bac..2fc9d24 100644 --- a/BorMakefile +++ b/BorMakefile @@ -24,6 +24,7 @@ clean: del /f /q external\stb_ds.obj del /f /q external\stb_image.obj del /f /q external\stb_truetype.obj + del /f /q src\abstract\charset.obj del /f /q src\abstract\directory.obj del /f /q src\abstract\dynamic.obj del /f /q src\abstract\time.obj @@ -92,8 +93,8 @@ clean: del /f /q src\Mw.dll del /f /q src\Mw.lib -src\Mw.dll: external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj - $(LD) $(LDFLAGS) -e$@ external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj -lopengl32.lib -lgdi32.lib -luser32.lib -ladvapi32.lib +src\Mw.dll: external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\charset.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj + $(LD) $(LDFLAGS) -e$@ external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\charset.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj -lopengl32.lib -lgdi32.lib -luser32.lib -ladvapi32.lib implib src\Mw.lib src\Mw.dll .c.obj: diff --git a/NTMakefile b/NTMakefile index de51868..669dd15 100644 --- a/NTMakefile +++ b/NTMakefile @@ -24,6 +24,7 @@ clean: del /f /q external\stb_ds.obj del /f /q external\stb_image.obj del /f /q external\stb_truetype.obj + del /f /q src\abstract\charset.obj del /f /q src\abstract\directory.obj del /f /q src\abstract\dynamic.obj del /f /q src\abstract\time.obj @@ -92,8 +93,8 @@ clean: del /f /q src\Mw.dll del /f /q src\Mw.lib -src\Mw.dll: external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj - $(LD) $(LDFLAGS) /OUT:$@ external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj opengl32.lib gdi32.lib user32.lib advapi32.lib +src\Mw.dll: external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\charset.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj + $(LD) $(LDFLAGS) /OUT:$@ external\libz\src\adler32.obj external\libz\src\compress.obj external\libz\src\crc32.obj external\libz\src\deflate.obj external\libz\src\gzclose.obj external\libz\src\gzlib.obj external\libz\src\gzread.obj external\libz\src\gzwrite.obj external\libz\src\infback.obj external\libz\src\inffast.obj external\libz\src\inflate.obj external\libz\src\inftrees.obj external\libz\src\trees.obj external\libz\src\uncompr.obj external\libz\src\zutil.obj external\stb_ds.obj external\stb_image.obj external\stb_truetype.obj src\abstract\charset.obj src\abstract\directory.obj src\abstract\dynamic.obj src\abstract\time.obj src\backend\gdi.obj src\color.obj src\core.obj src\cursor\arrow.obj src\cursor\cross.obj src\cursor\default.obj src\cursor\hidden.obj src\cursor\text.obj src\default.obj src\dialog\colorpicker.obj src\dialog\directorychooser.obj src\dialog\filechooser.obj src\dialog\messagebox.obj src\draw.obj src\icon\back.obj src\icon\clock.obj src\icon\computer.obj src\icon\directory.obj src\icon\down.obj src\icon\error.obj src\icon\file.obj src\icon\forward.obj src\icon\info.obj src\icon\left.obj src\icon\news.obj src\icon\note.obj src\icon\right.obj src\icon\search.obj src\icon\up.obj src\icon\warning.obj src\lowlevel.obj src\string.obj src\text\font\boldfont.obj src\text\font\boldmonottf.obj src\text\font\boldttf.obj src\text\font\font.obj src\text\font\monottf.obj src\text\font\ttf.obj src\text\ft2.obj src\text\stbtt.obj src\text\text.obj src\unicode.obj src\widget\box.obj src\widget\button.obj src\widget\checkbox.obj src\widget\combobox.obj src\widget\entry.obj src\widget\frame.obj src\widget\image.obj src\widget\label.obj src\widget\listbox.obj src\widget\menu.obj src\widget\numberentry.obj src\widget\opengl.obj src\widget\progressbar.obj src\widget\radiobox.obj src\widget\scrollbar.obj src\widget\separator.obj src\widget\submenu.obj src\widget\treeview.obj src\widget\viewport.obj src\widget\window.obj opengl32.lib gdi32.lib user32.lib advapi32.lib .c.obj: diff --git a/WatMakefile b/WatMakefile index 633a259..4ce4c3f 100644 --- a/WatMakefile +++ b/WatMakefile @@ -1,4 +1,4 @@ -CC = wcc386 -bt=nt -q -bd -d3 +CC = wcc386 -bt=nt -q -bd LD = wlink option quiet CFLAGS = -i=include -i=external/libz/include -d_MILSKO -dUSE_GDI -dUSE_STB_TRUETYPE -dUSE_STB_IMAGE -dSTBI_NO_SIMD @@ -23,6 +23,7 @@ clean: .SYMBOLIC %erase external/stb_ds.obj %erase external/stb_image.obj %erase external/stb_truetype.obj + %erase src/abstract/charset.obj %erase src/abstract/directory.obj %erase src/abstract/dynamic.obj %erase src/abstract/time.obj @@ -91,8 +92,8 @@ clean: .SYMBOLIC %erase src/Mw.dll %erase src/Mw.lib -src/Mw.dll: external/libz/src/adler32.obj external/libz/src/compress.obj external/libz/src/crc32.obj external/libz/src/deflate.obj external/libz/src/gzclose.obj external/libz/src/gzlib.obj external/libz/src/gzread.obj external/libz/src/gzwrite.obj external/libz/src/infback.obj external/libz/src/inffast.obj external/libz/src/inflate.obj external/libz/src/inftrees.obj external/libz/src/trees.obj external/libz/src/uncompr.obj external/libz/src/zutil.obj external/stb_ds.obj external/stb_image.obj external/stb_truetype.obj src/abstract/directory.obj src/abstract/dynamic.obj src/abstract/time.obj src/backend/gdi.obj src/color.obj src/core.obj src/cursor/arrow.obj src/cursor/cross.obj src/cursor/default.obj src/cursor/hidden.obj src/cursor/text.obj src/default.obj src/dialog/colorpicker.obj src/dialog/directorychooser.obj src/dialog/filechooser.obj src/dialog/messagebox.obj src/draw.obj src/icon/back.obj src/icon/clock.obj src/icon/computer.obj src/icon/directory.obj src/icon/down.obj src/icon/error.obj src/icon/file.obj src/icon/forward.obj src/icon/info.obj src/icon/left.obj src/icon/news.obj src/icon/note.obj src/icon/right.obj src/icon/search.obj src/icon/up.obj src/icon/warning.obj src/lowlevel.obj src/string.obj src/text/font/boldfont.obj src/text/font/boldmonottf.obj src/text/font/boldttf.obj src/text/font/font.obj src/text/font/monottf.obj src/text/font/ttf.obj src/text/ft2.obj src/text/stbtt.obj src/text/text.obj src/unicode.obj src/widget/box.obj src/widget/button.obj src/widget/checkbox.obj src/widget/combobox.obj src/widget/entry.obj src/widget/frame.obj src/widget/image.obj src/widget/label.obj src/widget/listbox.obj src/widget/menu.obj src/widget/numberentry.obj src/widget/opengl.obj src/widget/progressbar.obj src/widget/radiobox.obj src/widget/scrollbar.obj src/widget/separator.obj src/widget/submenu.obj src/widget/treeview.obj src/widget/viewport.obj src/widget/window.obj - $(LD) $(LDFLAGS) option implib=src/Mw.lib name $@ file external/libz/src/adler32.obj file external/libz/src/compress.obj file external/libz/src/crc32.obj file external/libz/src/deflate.obj file external/libz/src/gzclose.obj file external/libz/src/gzlib.obj file external/libz/src/gzread.obj file external/libz/src/gzwrite.obj file external/libz/src/infback.obj file external/libz/src/inffast.obj file external/libz/src/inflate.obj file external/libz/src/inftrees.obj file external/libz/src/trees.obj file external/libz/src/uncompr.obj file external/libz/src/zutil.obj file external/stb_ds.obj file external/stb_image.obj file external/stb_truetype.obj file src/abstract/directory.obj file src/abstract/dynamic.obj file src/abstract/time.obj file src/backend/gdi.obj file src/color.obj file src/core.obj file src/cursor/arrow.obj file src/cursor/cross.obj file src/cursor/default.obj file src/cursor/hidden.obj file src/cursor/text.obj file src/default.obj file src/dialog/colorpicker.obj file src/dialog/directorychooser.obj file src/dialog/filechooser.obj file src/dialog/messagebox.obj file src/draw.obj file src/icon/back.obj file src/icon/clock.obj file src/icon/computer.obj file src/icon/directory.obj file src/icon/down.obj file src/icon/error.obj file src/icon/file.obj file src/icon/forward.obj file src/icon/info.obj file src/icon/left.obj file src/icon/news.obj file src/icon/note.obj file src/icon/right.obj file src/icon/search.obj file src/icon/up.obj file src/icon/warning.obj file src/lowlevel.obj file src/string.obj file src/text/font/boldfont.obj file src/text/font/boldmonottf.obj file src/text/font/boldttf.obj file src/text/font/font.obj file src/text/font/monottf.obj file src/text/font/ttf.obj file src/text/ft2.obj file src/text/stbtt.obj file src/text/text.obj file src/unicode.obj file src/widget/box.obj file src/widget/button.obj file src/widget/checkbox.obj file src/widget/combobox.obj file src/widget/entry.obj file src/widget/frame.obj file src/widget/image.obj file src/widget/label.obj file src/widget/listbox.obj file src/widget/menu.obj file src/widget/numberentry.obj file src/widget/opengl.obj file src/widget/progressbar.obj file src/widget/radiobox.obj file src/widget/scrollbar.obj file src/widget/separator.obj file src/widget/submenu.obj file src/widget/treeview.obj file src/widget/viewport.obj file src/widget/window.obj library clib3r.lib library opengl32.lib library gdi32.lib library user32.lib library advapi32.lib +src/Mw.dll: external/libz/src/adler32.obj external/libz/src/compress.obj external/libz/src/crc32.obj external/libz/src/deflate.obj external/libz/src/gzclose.obj external/libz/src/gzlib.obj external/libz/src/gzread.obj external/libz/src/gzwrite.obj external/libz/src/infback.obj external/libz/src/inffast.obj external/libz/src/inflate.obj external/libz/src/inftrees.obj external/libz/src/trees.obj external/libz/src/uncompr.obj external/libz/src/zutil.obj external/stb_ds.obj external/stb_image.obj external/stb_truetype.obj src/abstract/charset.obj src/abstract/directory.obj src/abstract/dynamic.obj src/abstract/time.obj src/backend/gdi.obj src/color.obj src/core.obj src/cursor/arrow.obj src/cursor/cross.obj src/cursor/default.obj src/cursor/hidden.obj src/cursor/text.obj src/default.obj src/dialog/colorpicker.obj src/dialog/directorychooser.obj src/dialog/filechooser.obj src/dialog/messagebox.obj src/draw.obj src/icon/back.obj src/icon/clock.obj src/icon/computer.obj src/icon/directory.obj src/icon/down.obj src/icon/error.obj src/icon/file.obj src/icon/forward.obj src/icon/info.obj src/icon/left.obj src/icon/news.obj src/icon/note.obj src/icon/right.obj src/icon/search.obj src/icon/up.obj src/icon/warning.obj src/lowlevel.obj src/string.obj src/text/font/boldfont.obj src/text/font/boldmonottf.obj src/text/font/boldttf.obj src/text/font/font.obj src/text/font/monottf.obj src/text/font/ttf.obj src/text/ft2.obj src/text/stbtt.obj src/text/text.obj src/unicode.obj src/widget/box.obj src/widget/button.obj src/widget/checkbox.obj src/widget/combobox.obj src/widget/entry.obj src/widget/frame.obj src/widget/image.obj src/widget/label.obj src/widget/listbox.obj src/widget/menu.obj src/widget/numberentry.obj src/widget/opengl.obj src/widget/progressbar.obj src/widget/radiobox.obj src/widget/scrollbar.obj src/widget/separator.obj src/widget/submenu.obj src/widget/treeview.obj src/widget/viewport.obj src/widget/window.obj + $(LD) $(LDFLAGS) option implib=src/Mw.lib name $@ file external/libz/src/adler32.obj file external/libz/src/compress.obj file external/libz/src/crc32.obj file external/libz/src/deflate.obj file external/libz/src/gzclose.obj file external/libz/src/gzlib.obj file external/libz/src/gzread.obj file external/libz/src/gzwrite.obj file external/libz/src/infback.obj file external/libz/src/inffast.obj file external/libz/src/inflate.obj file external/libz/src/inftrees.obj file external/libz/src/trees.obj file external/libz/src/uncompr.obj file external/libz/src/zutil.obj file external/stb_ds.obj file external/stb_image.obj file external/stb_truetype.obj file src/abstract/charset.obj file src/abstract/directory.obj file src/abstract/dynamic.obj file src/abstract/time.obj file src/backend/gdi.obj file src/color.obj file src/core.obj file src/cursor/arrow.obj file src/cursor/cross.obj file src/cursor/default.obj file src/cursor/hidden.obj file src/cursor/text.obj file src/default.obj file src/dialog/colorpicker.obj file src/dialog/directorychooser.obj file src/dialog/filechooser.obj file src/dialog/messagebox.obj file src/draw.obj file src/icon/back.obj file src/icon/clock.obj file src/icon/computer.obj file src/icon/directory.obj file src/icon/down.obj file src/icon/error.obj file src/icon/file.obj file src/icon/forward.obj file src/icon/info.obj file src/icon/left.obj file src/icon/news.obj file src/icon/note.obj file src/icon/right.obj file src/icon/search.obj file src/icon/up.obj file src/icon/warning.obj file src/lowlevel.obj file src/string.obj file src/text/font/boldfont.obj file src/text/font/boldmonottf.obj file src/text/font/boldttf.obj file src/text/font/font.obj file src/text/font/monottf.obj file src/text/font/ttf.obj file src/text/ft2.obj file src/text/stbtt.obj file src/text/text.obj file src/unicode.obj file src/widget/box.obj file src/widget/button.obj file src/widget/checkbox.obj file src/widget/combobox.obj file src/widget/entry.obj file src/widget/frame.obj file src/widget/image.obj file src/widget/label.obj file src/widget/listbox.obj file src/widget/menu.obj file src/widget/numberentry.obj file src/widget/opengl.obj file src/widget/progressbar.obj file src/widget/radiobox.obj file src/widget/scrollbar.obj file src/widget/separator.obj file src/widget/submenu.obj file src/widget/treeview.obj file src/widget/viewport.obj file src/widget/window.obj library clib3r.lib library opengl32.lib library gdi32.lib library user32.lib library advapi32.lib @@ -132,6 +133,8 @@ external/stb_image.obj: external/stb_image.c $(CC) $(CFLAGS) -fo=$@ $< external/stb_truetype.obj: external/stb_truetype.c $(CC) $(CFLAGS) -fo=$@ $< +src/abstract/charset.obj: src/abstract/charset.c + $(CC) $(CFLAGS) -fo=$@ $< src/abstract/directory.obj: src/abstract/directory.c $(CC) $(CFLAGS) -fo=$@ $< src/abstract/dynamic.obj: src/abstract/dynamic.c diff --git a/include/Mw/Abstract/CharSet.h b/include/Mw/Abstract/CharSet.h new file mode 100644 index 0000000..f0a42f7 --- /dev/null +++ b/include/Mw/Abstract/CharSet.h @@ -0,0 +1,22 @@ +/*! + * @file Mw/Abstract/CharSet.h + * @brief CharSet + */ +#ifndef __MW_ABSTRACT_CHARSET_H__ +#define __MW_ABSTRACT_CHARSET_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +MWDECL char* MWAPI MwACPToUTF8(const char* input); + +MWDECL char* MWAPI MwUTF8ToACP(const char* input); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/include/Mw/MachDep.h b/include/Mw/MachDep.h index 218ab5d..7b068a8 100644 --- a/include/Mw/MachDep.h +++ b/include/Mw/MachDep.h @@ -16,6 +16,10 @@ #include #include #include +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L +#include +#define MW_HAS_WCHAR +#endif #ifdef _WIN32 #include diff --git a/include/Mw/Milsko.h b/include/Mw/Milsko.h index 07a560b..153f124 100644 --- a/include/Mw/Milsko.h +++ b/include/Mw/Milsko.h @@ -21,6 +21,7 @@ #include #include #include +#include #include #include diff --git a/src/abstract/charset.c b/src/abstract/charset.c new file mode 100644 index 0000000..971496d --- /dev/null +++ b/src/abstract/charset.c @@ -0,0 +1,95 @@ +#include + +#ifndef CP_UTF8 +#define CP_UTF8 65001 +#endif + +char* MwACPToUTF8(const char* input){ +#if defined(_WIN32) && defined(MW_HAS_WCHAR) + int mbbytes = (strlen(input) + 1) * 4; + int wbytes = 0; + int len; + + wchar_t* wout; + char* mbout = malloc(mbbytes); + + wbytes = MultiByteToWideChar(CP_ACP, 0, input, strlen(input), NULL, 0) * sizeof(wchar_t); + if(wbytes == 0){ + free(mbout); + return MwStringDuplicate(input); + } + + wout = malloc(wbytes); + len = wbytes / sizeof(wchar_t); + + memset(wout, 0, wbytes); + memset(mbout, 0, mbbytes); + + len = MultiByteToWideChar(CP_ACP, 0, input, strlen(input), wout, len); + if(len == 0){ + free(mbout); + free(wout); + return MwStringDuplicate(input); + } + + len = WideCharToMultiByte(CP_UTF8, 0, wout, len, mbout, mbbytes, 0, 0); + if(len == 0){ + free(mbout); + free(wout); + return MwStringDuplicate(input); + } + + mbout[len] = 0; + + free(wout); + + return mbout; +#else + return MwStringDuplicate(input); +#endif +} + +char* MwUTF8ToACP(const char* input){ +#if defined(_WIN32) && defined(MW_HAS_WCHAR) + int mbbytes = (strlen(input) + 1) * 4; + int wbytes = 0; + int len; + + wchar_t* wout; + char* mbout = malloc(mbbytes); + + wbytes = MultiByteToWideChar(CP_UTF8, 0, input, strlen(input), NULL, 0) * sizeof(wchar_t); + if(wbytes == 0){ + free(mbout); + return MwStringDuplicate(input); + } + + wout = malloc(wbytes); + len = wbytes / sizeof(wchar_t); + + memset(wout, 0, wbytes); + memset(mbout, 0, mbbytes); + + len = MultiByteToWideChar(CP_UTF8, 0, input, strlen(input), wout, len); + if(len == 0){ + free(mbout); + free(wout); + return MwStringDuplicate(input); + } + + len = WideCharToMultiByte(CP_ACP, 0, wout, len, mbout, mbbytes, 0, 0); + if(len == 0){ + free(mbout); + free(wout); + return MwStringDuplicate(input); + } + + mbout[len] = 0; + + free(wout); + + return mbout; +#else + return MwStringDuplicate(input); +#endif +} diff --git a/src/dialog/filechooser.c b/src/dialog/filechooser.c index 8b603e9..edd2eaf 100644 --- a/src/dialog/filechooser.c +++ b/src/dialog/filechooser.c @@ -50,28 +50,27 @@ static void destroy(MwWidget handle) { MwLLDestroyPixmap(fc->up); MwLLDestroyPixmap(fc->computer); free(handle->opaque); - MwDestroyWidget(handle); } static void MWAPI filecancel(MwWidget handle, void* user, void* call) { (void)user; (void)call; - destroy(handle->parent); + MwDestroyWidget(handle->parent); } static void MWAPI cancel_window(MwWidget handle, void* user, void* call) { (void)user; (void)call; - destroy(handle); + MwDestroyWidget(handle); } static void MWAPI okay(MwWidget handle, void* user, void* call) { (void)user; (void)call; - destroy(handle->parent); + MwDestroyWidget(handle->parent); } static void MWAPI msgbox_okay(MwWidget handle, void* user, void* call) { @@ -470,13 +469,16 @@ static void scan(MwWidget handle, const char* path, int record) { if(strcmp(fc->entries[i]->name, ".") == 0 || strcmp(fc->entries[i]->name, "..") == 0) continue; if(fc->entries[i]->type == MwDIRECTORY_DIRECTORY) { char date[128]; + char* n = MwACPToUTF8(fc->entries[i]->name); MwStringTime(date, fc->entries[i]->mtime); - index = MwListBoxSet(fc->files, -1, 0, fc->entries[i]->name); + index = MwListBoxSet(fc->files, -1, 0, n); MwListBoxSet(fc->files, index, -1, date); MwListBoxSet(fc->files, index, -1, NULL); MwListBoxSetIcon(fc->files, index, fc->dir); + + free(n); arrput(fc->sorted_entries, fc->entries[i]); } @@ -485,15 +487,18 @@ static void scan(MwWidget handle, const char* path, int record) { if(fc->entries[i]->type == MwDIRECTORY_FILE && !fc->dir_only) { char date[128]; char size[128]; + char* n = MwACPToUTF8(fc->entries[i]->name); MwStringTime(date, fc->entries[i]->mtime); MwStringSize(size, fc->entries[i]->size); - index = MwListBoxSet(fc->files, -1, 0, fc->entries[i]->name); + index = MwListBoxSet(fc->files, -1, 0, n); MwListBoxSet(fc->files, index, -1, date); MwListBoxSet(fc->files, index, -1, size); MwListBoxSetIcon(fc->files, index, fc->file); + free(n); + arrput(fc->sorted_entries, fc->entries[i]); } } @@ -542,6 +547,8 @@ MwWidget MwFileChooserEx(MwWidget handle, const char* title, int dir) { window->opaque = fc; + window->destroy_inject = destroy; + layout(window); MwAddUserHandler(window, MwNresizeHandler, resize, NULL); MwAddUserHandler(window, MwNcloseHandler, cancel_window, NULL); diff --git a/src/widget/listbox.c b/src/widget/listbox.c index c500d3a..209bb8e 100644 --- a/src/widget/listbox.c +++ b/src/widget/listbox.c @@ -187,45 +187,58 @@ static void frame_draw(MwWidget handle) { r2.height = h; MwLLDrawPixmap(handle->lowlevel, &r2, lb->list[i].pixmap); } - p.y += (MwTextHeight(handle, Font, "M") + Padding) / 2; p.x = MwDefaultBorderWidth(handle) + MwGetInteger(handle->parent, MwNleftPadding); for(j = 0; j < arrlen(lb->list[i].name); j++) { char* t = lb->list[i].name[j]; char* str; int l = (j == 0 ? MwGetInteger(handle->parent, MwNleftPadding) : 0); + MwPoint p2 = p; + + p2.y += (MwTextHeight(handle, Font, "M") + Padding) / 2; if(t == NULL) t = ""; str = MwStringDuplicate(t); if(MwUTF8Length(str) > (get_col_width(lb, j) - l) / MwTextWidth(handle, Font, "M")) { - int ind = (get_col_width(lb, j) - l) / MwTextWidth(handle, Font, "M"); - str[ind] = 0; - if(ind > 3) memset(str + ind - 3, '.', 3); + int ind = (get_col_width(lb, j) - l) / MwTextWidth(handle, Font, "M"); + int seek = 0; + int l = 0; + + while(str[seek] != 0){ + int cp; + seek += MwUTF8ToUTF32(str + seek, &cp); + + l++; + if(l == ind) break; + } + + memset(str + seek, '.', 3); + str[seek + 3] = 0; } if(j == (arrlen(lb->list[i].name) - 1)) p.x -= MwDefaultBorderWidth(handle); if(arrlen(lb->alignment) <= j || lb->alignment[j] == MwALIGNMENT_BEGINNING) { p.x += 4; - MwDrawText(handle, Font, &p, str, MwALIGNMENT_BEGINNING, selected ? base2 : text2); + MwDrawText(handle, Font, &p2, str, MwALIGNMENT_BEGINNING, selected ? base2 : text2); p.x -= 4; p.x += get_col_width(lb, j); } else if(lb->alignment[j] == MwALIGNMENT_CENTER) { p.x += (get_col_width(lb, j) - l) / 2; - MwDrawText(handle, Font, &p, str, MwALIGNMENT_CENTER, selected ? base2 : text2); + MwDrawText(handle, Font, &p2, str, MwALIGNMENT_CENTER, selected ? base2 : text2); p.x += (get_col_width(lb, j) - l) / 2; p.x += l; } else if(lb->alignment[j] == MwALIGNMENT_END) { p.x += get_col_width(lb, j); p.x -= 4; - MwDrawText(handle, Font, &p, str, MwALIGNMENT_END, selected ? base2 : text2); + MwDrawText(handle, Font, &p2, str, MwALIGNMENT_END, selected ? base2 : text2); p.x += 4; } free(str); if(j == 0) p.x -= MwGetInteger(handle->parent, MwNleftPadding); } - p.y += (MwTextHeight(handle, Font, "M") + Padding) / 2; + p.y += MwTextHeight(handle, Font, "M") + Padding; handle->bgcolor = NULL; } @@ -244,7 +257,7 @@ static void resize(MwWidget handle) { int ih, y; int m = 0; - y = MwGetInteger(handle, MwNhasHeading) ? (MwTextHeight(handle, NULL, "M") + MwDefaultBorderWidth(handle) * 2) : 0; + y = MwGetInteger(handle, MwNhasHeading) ? (MwTextHeight(handle, Font, "M") + MwDefaultBorderWidth(handle) * 2) : 0; if(lb->vscroll == NULL) { lb->vscroll = MwVaCreateWidget(MwScrollBarClass, "vscroll", handle, w - 16, 0, 16, h, NULL); @@ -347,7 +360,7 @@ static void draw(MwWidget handle) { r.x = x; r.y = 0; r.width = get_col_width(lb, i); - r.height = MwDefaultBorderWidth(handle) * 2 + MwTextHeight(handle, NULL, "M"); + r.height = MwDefaultBorderWidth(handle) * 2 + MwTextHeight(handle, Font, "M"); MwDrawFrame(handle, &r, base, 0); x += MwDefaultBorderWidth(handle); @@ -398,6 +411,7 @@ static int mwListBoxSetImpl(MwWidget handle, int row, int col, const char* text) MwListBox lb = handle->internal; MwListBoxEntry entry; char* t = text == NULL ? NULL : MwStringDuplicate(text); + int new = 0; if(row == -1) row = arrlen(lb->list); entry.name = NULL; @@ -413,9 +427,10 @@ static int mwListBoxSetImpl(MwWidget handle, int row, int col, const char* text) lb->list[row] = entry; } else { arrins(lb->list, row, entry); + new = 1; } - if(row >= arrlen(lb->list)) resize(handle); + if(new) resize(handle); redrawIfNeeded(handle, row); return row; @@ -424,6 +439,7 @@ static int mwListBoxSetImpl(MwWidget handle, int row, int col, const char* text) static void mwListBoxSetIconImpl(MwWidget handle, int index, MwLLPixmap icon) { MwListBox lb = handle->internal; MwListBoxEntry entry; + int new = 0; if(index == -1) index = arrlen(lb->list); entry.name = NULL; @@ -438,9 +454,10 @@ static void mwListBoxSetIconImpl(MwWidget handle, int index, MwLLPixmap icon) { lb->list[index] = entry; } else { arrins(lb->list, index, entry); + new = 1; } - if(index >= arrlen(lb->list)) resize(handle); + if(new) resize(handle); redrawIfNeeded(handle, index); }