diff --git a/src/newgdi/Makefile.am b/src/newgdi/Makefile.am
index 6a36efe4..69eb71bc 100644
--- a/src/newgdi/Makefile.am
+++ b/src/newgdi/Makefile.am
@@ -16,7 +16,9 @@ SRC_FILES = gdi.c attr.c clip.c map.c coor.c rect.c \
mifillarc.c mifpolycon.c miarc.c rotatebmp.c \
text.c achar-uchar.c glyph.c legacy-bidi.c \
textout.c tabbedtextout.c drawtext.c \
- glyph-unicode.c shaped-glyph.c
+ glyph-unicode.c \
+ shape-glyphs-basic.c shape-glyphs-complex.c \
+ layout-shaped-glyphs.c
endif
HDR_FILES = drawtext.h mi.h midc.h mistruct.h miwideline.h \
diff --git a/src/newgdi/layout-shaped-glyphs.c b/src/newgdi/layout-shaped-glyphs.c
new file mode 100644
index 00000000..a97a002e
--- /dev/null
+++ b/src/newgdi/layout-shaped-glyphs.c
@@ -0,0 +1,127 @@
+/*
+ * This file is part of MiniGUI, a mature cross-platform windowing
+ * and Graphics User Interface (GUI) support system for embedded systems
+ * and smart IoT devices.
+ *
+ * Copyright (C) 2002~2018, Beijing FMSoft Technologies Co., Ltd.
+ * Copyright (C) 1998~2002, WEI Yongming
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ * Or,
+ *
+ * As this program is a library, any link to this program must follow
+ * GNU General Public License version 3 (GPLv3). If you cannot accept
+ * GPLv3, you need to be licensed from FMSoft.
+ *
+ * If you have got a commercial license of this program, please use it
+ * under the terms and conditions of the commercial license.
+ *
+ * For more information about the commercial license, please refer to
+ * .
+ */
+
+/*
+** layout-shaped-glyphs.c: The implementation of APIs related shaped-glyphs
+**
+** Create by WEI Yongming at 2019/03/14
+*/
+
+#include
+#include
+#include
+
+#include "common.h"
+
+#ifdef _MGCHARSET_UNICODE
+
+#include "minigui.h"
+#include "gdi.h"
+#include "window.h"
+#include "devfont.h"
+#include "unicode-ops.h"
+
+int GUIAPI GetGlyphsExtentInfo(LOGFONT* logfont,
+ LanguageCode lang_code, UCharScriptType writing_system,
+ Uint32 render_flags, const Uchar32* ucs, int nr_ucs,
+ const BidiLevel embedding_levels, BidiType base_dir,
+ const SHAPEDGLYPHS* shaped_glyphs,
+ GLYPHEXTINFO* glyph_ext_info, LOGFONT** logfont_sideways)
+{
+ return 0;
+}
+
+int GUIAPI GetGlyphsPositionInfo(
+ LOGFONT* logfont_upright, LOGFONT* logfont_sideways,
+ const Uchar32* ucs, int nr_ucs,
+ const Uint16* break_oppos,
+ const BidiLevel embedding_levels, BidiType base_dir,
+ const SHAPEDGLYPHS* shaped_glyphs,
+ Uint32 render_flags, int x, int y,
+ int letter_spacing, int word_spacing, int tab_size, int max_extent,
+ GLYPHEXTINFO* glyph_ext_info, SIZE* line_size, GLYPHPOS* glyph_pos)
+{
+ return 0;
+}
+
+int GUIAPI DrawShapedGlyphString(HDC hdc,
+ LOGFONT* logfont_upright, LOGFONT* logfont_sideways,
+ const SHAPEDGLYPHS* shaped_glyphs,
+ const GLYPHPOS* glyph_pos, int nr_glyphs)
+{
+ int i;
+ int n = 0;
+ Uint32 old_ta;
+ PLOGFONT old_lf;
+
+ if (shaped_glyphs == NULL || glyph_pos == NULL || nr_glyphs <= 0)
+ return 0;
+
+ old_ta = SetTextAlign(hdc, TA_LEFT | TA_TOP | TA_UPDATECP);
+ old_lf = GetCurFont(hdc);
+
+ for (i = 0; i < nr_glyphs; i++) {
+ if (glyph_pos[i].suppressed == 0 && glyph_pos[i].whitespace == 0) {
+ Glyph32 gv = shaped_glyphs->cb_get_glyph_info(
+ shaped_glyphs->shaping_engine, shaped_glyphs->glyph_infos,
+ i, NULL);
+ if (glyph_pos[i].orientation == GLYPH_ORIENTATION_UPRIGHT) {
+ if (logfont_upright)
+ SelectFont(hdc, logfont_upright);
+ else
+ goto error;
+ }
+ else {
+ if (logfont_sideways)
+ SelectFont(hdc, logfont_sideways);
+ else
+ goto error;
+ }
+
+ DrawGlyph(hdc, glyph_pos[i].x, glyph_pos[i].y, gv,
+ NULL, NULL);
+
+ n++;
+ }
+ }
+
+error:
+ SelectFont(hdc, old_lf);
+ SetTextAlign(hdc, old_ta);
+
+ return n;
+}
+
+#endif /* _MGCHARSET_UNICODE */
+
diff --git a/src/newgdi/shaped-glyph.c b/src/newgdi/shape-glyphs-basic.c
similarity index 75%
rename from src/newgdi/shaped-glyph.c
rename to src/newgdi/shape-glyphs-basic.c
index a1a2582d..81abc816 100644
--- a/src/newgdi/shaped-glyph.c
+++ b/src/newgdi/shape-glyphs-basic.c
@@ -263,85 +263,5 @@ out:
return 0;
}
-int GUIAPI GetShapedGlyphsComplex(LOGFONT* logfont,
- LanguageCode lang_code, UCharScriptType writing_system,
- Uint32 render_flags, const Uchar32* ucs, int nr_ucs,
- const BidiLevel embedding_levels, BidiType base_dir,
- SHAPEDGLYPHS* shaped_glyphs)
-{
- return 0;
-}
-
-int GUIAPI GetGlyphsExtentInfo(LOGFONT* logfont,
- LanguageCode lang_code, UCharScriptType writing_system,
- Uint32 render_flags, const Uchar32* ucs, int nr_ucs,
- const BidiLevel embedding_levels, BidiType base_dir,
- const SHAPEDGLYPHS* shaped_glyphs,
- GLYPHEXTINFO* glyph_ext_info, LOGFONT** logfont_sideways)
-{
- return 0;
-}
-
-int GUIAPI GetGlyphsPositionInfo(
- LOGFONT* logfont_upright, LOGFONT* logfont_sideways,
- const Uchar32* ucs, int nr_ucs,
- const Uint16* break_oppos,
- const BidiLevel embedding_levels, BidiType base_dir,
- const SHAPEDGLYPHS* shaped_glyphs,
- Uint32 render_flags, int x, int y,
- int letter_spacing, int word_spacing, int tab_size, int max_extent,
- GLYPHEXTINFO* glyph_ext_info, SIZE* line_size, GLYPHPOS* glyph_pos)
-{
- return 0;
-}
-
-int GUIAPI DrawShapedGlyphString(HDC hdc,
- LOGFONT* logfont_upright, LOGFONT* logfont_sideways,
- const SHAPEDGLYPHS* shaped_glyphs,
- const GLYPHPOS* glyph_pos, int nr_glyphs)
-{
- int i;
- int n = 0;
- Uint32 old_ta;
- PLOGFONT old_lf;
-
- if (shaped_glyphs == NULL || glyph_pos == NULL || nr_glyphs <= 0)
- return 0;
-
- old_ta = SetTextAlign(hdc, TA_LEFT | TA_TOP | TA_UPDATECP);
- old_lf = GetCurFont(hdc);
-
- for (i = 0; i < nr_glyphs; i++) {
- if (glyph_pos[i].suppressed == 0 && glyph_pos[i].whitespace == 0) {
- Glyph32 gv = shaped_glyphs->cb_get_glyph_info(
- shaped_glyphs->shaping_engine, shaped_glyphs->glyph_infos,
- i, NULL);
- if (glyph_pos[i].orientation == GLYPH_ORIENTATION_UPRIGHT) {
- if (logfont_upright)
- SelectFont(hdc, logfont_upright);
- else
- goto error;
- }
- else {
- if (logfont_sideways)
- SelectFont(hdc, logfont_sideways);
- else
- goto error;
- }
-
- DrawGlyph(hdc, glyph_pos[i].x, glyph_pos[i].y, gv,
- NULL, NULL);
-
- n++;
- }
- }
-
-error:
- SelectFont(hdc, old_lf);
- SetTextAlign(hdc, old_ta);
-
- return n;
-}
-
#endif /* _MGCHARSET_UNICODE */
diff --git a/src/newgdi/shape-glyphs-complex.c b/src/newgdi/shape-glyphs-complex.c
new file mode 100644
index 00000000..2d77b5ac
--- /dev/null
+++ b/src/newgdi/shape-glyphs-complex.c
@@ -0,0 +1,68 @@
+/*
+ * This file is part of MiniGUI, a mature cross-platform windowing
+ * and Graphics User Interface (GUI) support system for embedded systems
+ * and smart IoT devices.
+ *
+ * Copyright (C) 2002~2018, Beijing FMSoft Technologies Co., Ltd.
+ * Copyright (C) 1998~2002, WEI Yongming
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ *
+ * Or,
+ *
+ * As this program is a library, any link to this program must follow
+ * GNU General Public License version 3 (GPLv3). If you cannot accept
+ * GPLv3, you need to be licensed from FMSoft.
+ *
+ * If you have got a commercial license of this program, please use it
+ * under the terms and conditions of the commercial license.
+ *
+ * For more information about the commercial license, please refer to
+ * .
+ */
+
+/*
+** shaped-glyph.c: The implementation of APIs related shaped-glyphs
+**
+** Reference:
+**
+** https://docs.microsoft.com/en-us/typography/opentype/spec/
+**
+** Create by WEI Yongming at 2019/03/06
+*/
+
+#include
+#include
+#include
+
+#include "common.h"
+#include "minigui.h"
+#include "gdi.h"
+#include "window.h"
+#include "devfont.h"
+#include "unicode-ops.h"
+
+#ifdef _MGCHARSET_UNICODE
+
+int GUIAPI GetShapedGlyphsComplex(LOGFONT* logfont,
+ LanguageCode lang_code, UCharScriptType writing_system,
+ Uint32 render_flags, const Uchar32* ucs, int nr_ucs,
+ const BidiLevel embedding_levels, BidiType base_dir,
+ SHAPEDGLYPHS* shaped_glyphs)
+{
+ return 0;
+}
+
+#endif /* _MGCHARSET_UNICODE */
+