mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-09-28 16:17:09 +08:00
Compare commits
156
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4b18828b2 | ||
|
|
36167be7e6 | ||
|
|
4b633c801d | ||
|
|
33fd8a8668 | ||
|
|
94f44890a5 | ||
|
|
cc7441c4dd | ||
|
|
6fdc0281ba | ||
|
|
136a51d9b8 | ||
|
|
5e871c486b | ||
|
|
fdd69bf470 | ||
|
|
10e55b0d4f | ||
|
|
682c81d636 | ||
|
|
9eb4e54b75 | ||
|
|
e43bc07a63 | ||
|
|
508130afdc | ||
|
|
d60c057dc4 | ||
|
|
8f5a741af6 | ||
|
|
bee1bc87c4 | ||
|
|
3a9274e9a0 | ||
|
|
44ee735cd6 | ||
|
|
2c010cdbeb | ||
|
|
a04ae43bdb | ||
|
|
5c333445c5 | ||
|
|
dd93e67a3d | ||
|
|
d886268eee | ||
|
|
090824cb91 | ||
|
|
00eb4e363f | ||
|
|
f73f0786ee | ||
|
|
dacc81cf2a | ||
|
|
97c6249af5 | ||
|
|
7ce1fe47ff | ||
|
|
8e66bb366e | ||
|
|
ce7fd6e776 | ||
|
|
957f9cbb47 | ||
|
|
2a7e3003bd | ||
|
|
19cd208a6e | ||
|
|
6a44111a35 | ||
|
|
fd5d55942b | ||
|
|
d4e7f048f0 | ||
|
|
d90c4d5842 | ||
|
|
0f562cd39f | ||
|
|
fb01003c45 | ||
|
|
9bcea02975 | ||
|
|
c51ae8d1c1 | ||
|
|
b8a5ad2d73 | ||
|
|
39b8c88d1b | ||
|
|
1e73f6713a | ||
|
|
97babaa4e2 | ||
|
|
c6c486f306 | ||
|
|
338f10b896 | ||
|
|
2353a873a8 | ||
|
|
52c539e870 | ||
|
|
64d63a84c5 | ||
|
|
3d80d73450 | ||
|
|
2e04898fbe | ||
|
|
f390e1a091 | ||
|
|
848c1d7ce1 | ||
|
|
0c0becc780 | ||
|
|
0e918da2a4 | ||
|
|
7f36c339b7 | ||
|
|
871486daab | ||
|
|
0cffc8798f | ||
|
|
4d4a3901eb | ||
|
|
50e95cb461 | ||
|
|
d223edf0ba | ||
|
|
8e88082f07 | ||
|
|
5b1762b637 | ||
|
|
6c83ea4ceb | ||
|
|
5aa5e75813 | ||
|
|
1ba35dcbf6 | ||
|
|
8828824b23 | ||
|
|
e3f2cc22ec | ||
|
|
93aae6782e | ||
|
|
b746d2927e | ||
|
|
79e3be705c | ||
|
|
a052b7bf55 | ||
|
|
74a84362ca | ||
|
|
d673008f5a | ||
|
|
09c9438de8 | ||
|
|
0734180d70 | ||
|
|
8ca8deb02d | ||
|
|
9aa719aeb3 | ||
|
|
447eebbafc | ||
|
|
19f8689a20 | ||
|
|
60902f83d5 | ||
|
|
a725acfd5e | ||
|
|
0191772111 | ||
|
|
a11cef5f2e | ||
|
|
cf4c75bcbc | ||
|
|
f85801dcbe | ||
|
|
4e67f8c56b | ||
|
|
1cfd2fe324 | ||
|
|
5ef2e0fa42 | ||
|
|
57b71e985c | ||
|
|
d9d76ec59b | ||
|
|
7935883267 | ||
|
|
0385def7b2 | ||
|
|
565f4b34e5 | ||
|
|
70ba8a0420 | ||
|
|
4bdbe4a002 | ||
|
|
2c98ef96da | ||
|
|
6663c98787 | ||
|
|
bbf2376f7a | ||
|
|
21ac9f2def | ||
|
|
a10d28dd11 | ||
|
|
856126c72e | ||
|
|
547fc0059c | ||
|
|
195363dc82 | ||
|
|
54288e5687 | ||
|
|
9d46406a95 | ||
|
|
d365feca5d | ||
|
|
f34ac9d0fe | ||
|
|
3a02b056ca | ||
|
|
1a1e8cf652 | ||
|
|
94feb0ae44 | ||
|
|
1e1a5edd13 | ||
|
|
ae9b14201b | ||
|
|
742150d4f1 | ||
|
|
03eac03c8c | ||
|
|
8cd6b037ec | ||
|
|
b35e38bdff | ||
|
|
58275c88e9 | ||
|
|
31b43521d0 | ||
|
|
e68ee00b85 | ||
|
|
6e54d4a7d7 | ||
|
|
69b1d63569 | ||
|
|
817f4063a1 | ||
|
|
c9ec23dc70 | ||
|
|
972085fa56 | ||
|
|
c2e24b61e3 | ||
|
|
bd1fb67930 | ||
|
|
0fcedfca08 | ||
|
|
c39ce7c0b8 | ||
|
|
97014ccdc8 | ||
|
|
48e7f6e928 | ||
|
|
473f9f98ff | ||
|
|
95d09a7673 | ||
|
|
53253ed101 | ||
|
|
4bd7c0eef4 | ||
|
|
9af71438dd | ||
|
|
747894247b | ||
|
|
82033a44dd | ||
|
|
1c9537fc63 | ||
|
|
612c395c06 | ||
|
|
8dc0ee2ade | ||
|
|
caefd7355a | ||
|
|
9ea0e15dba | ||
|
|
83c8984c74 | ||
|
|
4761333a1a | ||
|
|
8538f29f70 | ||
|
|
b658413961 | ||
|
|
bb187f1ee3 | ||
|
|
ea8ab93bad | ||
|
|
9226fcff26 | ||
|
|
05cf370155 | ||
|
|
0d2352884a |
+16
@@ -0,0 +1,16 @@
|
|||||||
|
The current main maintainers and/or developers:
|
||||||
|
|
||||||
|
* WEI Yongming
|
||||||
|
|
||||||
|
As employed engineers of [Beijing FMSoft Technologies Co., Ltd.],
|
||||||
|
the following people have participated in the development of MiniGUI Core:
|
||||||
|
|
||||||
|
* HOU Huihua
|
||||||
|
* WAN Zheng
|
||||||
|
* DONG Kai
|
||||||
|
* DONG Junjie
|
||||||
|
* YAN Xiaowei
|
||||||
|
|
||||||
|
For community contributors, please see RELASENOTES.md documentation.
|
||||||
|
|
||||||
|
[Beijing FMSoft Technologies Co., Ltd.]: http://www.fmsoft.cn
|
||||||
@@ -3216,7 +3216,7 @@ alExtra.(xwyan)
|
|||||||
* src/gui/lf_flat.c
|
* src/gui/lf_flat.c
|
||||||
* src/gui/lf_skin.c
|
* src/gui/lf_skin.c
|
||||||
|
|
||||||
08/24: ENHANCEMENT #1: Add a new method for FONTOPS: get_glyph_type to return
|
08/24: ENHANCEMENT #1: Add a new method for FONTOPS: get_char_type to return
|
||||||
the glyph type the devfont can give us.
|
the glyph type the devfont can give us.
|
||||||
* src/include/devfont.h
|
* src/include/devfont.h
|
||||||
* src/font/*.c
|
* src/font/*.c
|
||||||
@@ -4761,7 +4761,7 @@ create_skin_main_window_ex:
|
|||||||
* ext/skin/skin.c
|
* ext/skin/skin.c
|
||||||
|
|
||||||
05/16. ENHANCEMENT #8: Support for UTF-16LE and UTF-16BE charsets/encodings.
|
05/16. ENHANCEMENT #8: Support for UTF-16LE and UTF-16BE charsets/encodings.
|
||||||
* Change the definition of UChar32 to 'int'.
|
* Change the definition of Uchar32 to 'int'.
|
||||||
* include/gdi.h
|
* include/gdi.h
|
||||||
|
|
||||||
05/16. ENHANCEMENT #11: Support for FreeType2.
|
05/16. ENHANCEMENT #11: Support for FreeType2.
|
||||||
|
|||||||
+1
-1
@@ -38,7 +38,7 @@ PROJECT_NAME = "MiniGUI API Reference (MiniGUI-Standalone)"
|
|||||||
# could be handy for archiving the generated documentation or if some version
|
# could be handy for archiving the generated documentation or if some version
|
||||||
# control system is used.
|
# control system is used.
|
||||||
|
|
||||||
PROJECT_NUMBER = v3.2.0
|
PROJECT_NUMBER = v3.4.0
|
||||||
|
|
||||||
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
# Using the PROJECT_BRIEF tag one can provide an optional one line description
|
||||||
# for a project that appears at the top of each page and should give viewer a
|
# for a project that appears at the top of each page and should give viewer a
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ A mature and proven cross-platform GUI system for embedded and smart IoT devices
|
|||||||
|
|
||||||
1. Introduction
|
1. Introduction
|
||||||
1. A brief building instruction
|
1. A brief building instruction
|
||||||
|
1. New features in version 3.4.x
|
||||||
1. New features in version 3.2.x
|
1. New features in version 3.2.x
|
||||||
1. The runtime modes of MiniGUI
|
1. The runtime modes of MiniGUI
|
||||||
1. History
|
1. History
|
||||||
@@ -146,6 +147,15 @@ For more information, please run
|
|||||||
$ ./configure --help
|
$ ./configure --help
|
||||||
|
|
||||||
|
|
||||||
|
## NEW FEATURES IN VERSION 3.4.x
|
||||||
|
|
||||||
|
We introduce some new features in MiniGUI Version 3.4.x:
|
||||||
|
|
||||||
|
* The font and UNICODE related APIs are tuned or enhanced,
|
||||||
|
in order to support HybridOS Foundation C++ Library.
|
||||||
|
|
||||||
|
For more information, please refer to RELEASENOTES.md file.
|
||||||
|
|
||||||
## NEW FEATURES IN VERSION 3.2.x
|
## NEW FEATURES IN VERSION 3.2.x
|
||||||
|
|
||||||
We introduce some new features in MiniGUI Version 3.2.x:
|
We introduce some new features in MiniGUI Version 3.2.x:
|
||||||
@@ -202,7 +212,7 @@ clients and the server.
|
|||||||
|
|
||||||
## HISTORY
|
## HISTORY
|
||||||
|
|
||||||
About ten years have pasted since MiniGUI was initially created at
|
21 years have pasted since MiniGUI was initially created at
|
||||||
the end of 1998, and now it becomes much reliable and stable.
|
the end of 1998, and now it becomes much reliable and stable.
|
||||||
During the past years, many remarkable changes have taken place in
|
During the past years, many remarkable changes have taken place in
|
||||||
the MiniGUI project.
|
the MiniGUI project.
|
||||||
@@ -295,6 +305,7 @@ A brief history description of the development progress lay below:
|
|||||||
45) Aug., 2017: FMSoft released the latest source code of mDolphin under Apache 2.0.
|
45) Aug., 2017: FMSoft released the latest source code of mDolphin under Apache 2.0.
|
||||||
46) Dec., 2017: FMSoft updated MiniGUI and miniStudio for latest Linux distributions.
|
46) Dec., 2017: FMSoft updated MiniGUI and miniStudio for latest Linux distributions.
|
||||||
47) Feb., 2018: FMSoft released MiniGUI version 3.2.
|
47) Feb., 2018: FMSoft released MiniGUI version 3.2.
|
||||||
|
47) Jun., 2019: FMSoft released MiniGUI version 3.4.
|
||||||
|
|
||||||
|
|
||||||
## ABOUT THE AUTHORS
|
## ABOUT THE AUTHORS
|
||||||
|
|||||||
+140
-6
@@ -1,12 +1,146 @@
|
|||||||
# Release Notes
|
# Release Notes
|
||||||
|
|
||||||
## Version 3.2.2
|
## Version 3.4.0
|
||||||
|
|
||||||
The MiniGUI development team announces the availability of MiniGUI 3.2.2.
|
The MiniGUI development team announces the availability of MiniGUI 3.4.0.
|
||||||
All users of MiniGUI are recommended strongly to use this version.
|
All users of MiniGUI are recommended strongly to use this version.
|
||||||
Please report any bugs and incompatibilities in
|
Please report any bugs and incompatibilities in
|
||||||
|
|
||||||
https://github.com/VincentWei/minigui.
|
https://github.com/VincentWei/minigui
|
||||||
|
|
||||||
|
### What's new in this version
|
||||||
|
|
||||||
|
In this version, we mainly enhanced and tuned the APIs of font rendering.
|
||||||
|
|
||||||
|
#### Tunning the logical font APIs
|
||||||
|
|
||||||
|
The styles of LOGFONT changed.
|
||||||
|
|
||||||
|
* Add new rendering style:
|
||||||
|
1. `FS_RENDER_ANY`: Not specified
|
||||||
|
1. `FS_RENDER_MONO`:
|
||||||
|
1. `FS_RENDER_GREY`:
|
||||||
|
1. `FS_RENDER_SUBPIXEL`:
|
||||||
|
* Some old styles are deprecated:
|
||||||
|
1. `FS_WEIGHT_BOOK`; use `FS_RENDER_GREY` instead.
|
||||||
|
1. `FS_WEIGHT_SUBPIXEL`; use `FS_RENDER_SUBPIXEL` instead.
|
||||||
|
* Introduced or redefined the weight styles to follow OpenType specification:
|
||||||
|
1. `FONT_WEIGHT_ANY`: Not specified
|
||||||
|
1. `FONT_WEIGHT_THIN`: Thin.
|
||||||
|
1. `FONT_WEIGHT_EXTRA_LIGHT`: Extra light (Ultra Light).
|
||||||
|
1. `FONT_WEIGHT_LIGHT`: Light.
|
||||||
|
1. `FONT_WEIGHT_REGULAR`: Regular (Normal).
|
||||||
|
1. `FONT_WEIGHT_MEDIUM`: Medium.
|
||||||
|
1. `FONT_WEIGHT_DEMIBOLD`: Demi Bold (Semi Bold)
|
||||||
|
1. `FONT_WEIGHT_BOLD`: Bold.
|
||||||
|
1. `FONT_WEIGHT_EXTRA_BOLD`: Extra Bold (Ultra Bold).
|
||||||
|
1. `FONT_WEIGHT_BLACK`: Black (Heavy).
|
||||||
|
* Introduce the new decoration styles and replace
|
||||||
|
`FONT_UNDERLINE_LINE` and `FONT_STRUCKOUT_LINE` with them:
|
||||||
|
1. `FONT_DECORATE_ANY`: Not specified.
|
||||||
|
1. `FONT_DECORATE_NONE`: None.
|
||||||
|
1. `FONT_DECORATE_UNDERLINE`: glyphs are underscored.
|
||||||
|
1. `FONT_DECORATE_STRUCKOUT`: glyphs are overstruck.
|
||||||
|
1. `FONT_DECORATE_US`: Both `FONT_DECORATE_UNDERLINE` and `FONT_DECORATE_STRUCKOUT`.
|
||||||
|
1. `FONT_DECORATE_OUTLINE`: Outline (hollow) glyphs.
|
||||||
|
1. `FONT_DECORATE_REVERSE`: Reverved for future. Glyphs have their foreground and background reversed.
|
||||||
|
* The following style are deprecated:
|
||||||
|
1. `FONT_OTHER_LCDPORTRAIT`
|
||||||
|
1. `FONT_OTHER_LCDPORTRAITKERN`
|
||||||
|
|
||||||
|
For a new app, you should use the new function `CreateLogFontEx` to
|
||||||
|
create a LOGFONT, and specify the weight and rendering method of the glyph.
|
||||||
|
|
||||||
|
For the back-compatibility, you can still use `CreateLogFont` to create a new
|
||||||
|
LOGFONT. However, `FS_WEIGHT_BOOK` will be treated `FS_WEIGHT_REGULAR` and
|
||||||
|
`FS_RENDER_GREY`, while `FS_WEIGHT_SUBPIXEL` will be treated
|
||||||
|
`FS_WEIGHT_REGULAR` and `FS_RENDER_SUBPIXEL`.
|
||||||
|
|
||||||
|
You can still use `CreateLogFontByName` to create a new LOGFONT.
|
||||||
|
But the style string in the font name changed from
|
||||||
|
|
||||||
|
<weight><slant><flipping><other><underline><struckout>
|
||||||
|
|
||||||
|
to
|
||||||
|
|
||||||
|
<weight><slant><flipping><other><decoration><rendering>
|
||||||
|
|
||||||
|
Note that `<underline>` and `<struckout>` are merged to `<decoration>`
|
||||||
|
in order to keep the style string is still 6-character long.
|
||||||
|
|
||||||
|
Consequently, if you want to use the rendering method SUPIXEL for a TTF font,
|
||||||
|
please define the logical font name in the following way:
|
||||||
|
|
||||||
|
ttf-Courier-rrncns-*-16-UTF-8
|
||||||
|
|
||||||
|
Moreover, the family name of a DEVFONT supports aliases since 3.4.0:
|
||||||
|
|
||||||
|
<fonttype>-<family[,aliase]*>-<styles>-<width>-<height>-<charset[,charset]*>
|
||||||
|
|
||||||
|
for example:
|
||||||
|
|
||||||
|
ttf-Arial,Sans Serif-rrncnn-8-16-ISO8859-1,UTF-8
|
||||||
|
ttf-courier,monospace,serif-rrncnn-8-16-ISO8859-1,UTF-8
|
||||||
|
|
||||||
|
Note that the length of one DEVFONT name can not exceed 255 bytes.
|
||||||
|
|
||||||
|
#### Changed APIs
|
||||||
|
|
||||||
|
* The fields `height` and `descent` have been removed from GLYPHINFO struct.
|
||||||
|
One should get the font metrics information by calling `GetFontMetrics` function
|
||||||
|
if you want to get the height and descent data of one font.
|
||||||
|
|
||||||
|
* More fields added for GLYPHBITMAP struct in order to return the completed
|
||||||
|
rasterized glyph bitmap information.
|
||||||
|
|
||||||
|
* `GetGlyphInfo` now can return the basic glyph type and break type of a
|
||||||
|
UNICODE character. If the glyph is an ASCII character, the old `MCHAR_TYPE`
|
||||||
|
can also be returned.
|
||||||
|
|
||||||
|
* Rename `mg_FT_LcdFilter` to `FT2LCDFilter` in order to follow MiniGUI naming
|
||||||
|
rules.
|
||||||
|
|
||||||
|
* Rename `UChar32` to `Uchar32` and `UChar16` to `Uchar16` in order to
|
||||||
|
avoid the conflict with typedef of UChar32 in 'unicode/umachine.h'.
|
||||||
|
|
||||||
|
* Redefine `Uchar32` and `Glyph32` as `Uint32` instead of `int`.
|
||||||
|
|
||||||
|
#### New APIs
|
||||||
|
|
||||||
|
* `GetGlyphsByRules` function calculates and allocates the glyph string from
|
||||||
|
a multi-byte string under the specified white space rule and transformation
|
||||||
|
rule.
|
||||||
|
|
||||||
|
* `GetGlyphsExtentPointEx` function gets the visual extent information
|
||||||
|
of a glyph string which can fit in a line with the specified maximal extent.
|
||||||
|
|
||||||
|
* `DrawGlyphStringEx` function draws a glyph string to the specific
|
||||||
|
positions of a DC.
|
||||||
|
|
||||||
|
* `CreateLogFontIndirectEx` creates a new LOGFONT by using the value of
|
||||||
|
an existed LOGFONT but with a new rotation value.
|
||||||
|
|
||||||
|
#### Others
|
||||||
|
|
||||||
|
* Support for FreeType1 removed.
|
||||||
|
|
||||||
|
You should always use FreeType2 to support vector fonts, such as TrueType
|
||||||
|
fonts (TTF), TrueType collections (TTC), OpenType fonts (OTF, both TrueType
|
||||||
|
and CFF variants), OpenType collections (OTC), and Type 1 fonts (PFA and PFB).
|
||||||
|
|
||||||
|
### Other Changes
|
||||||
|
|
||||||
|
* A new BITMAP type: `BMP_TYPE_REPLACEKEY`. When `bmType` of a BITMAP object
|
||||||
|
has this bit set, any pixel which is equal to `bmColorKey` will be replaced by
|
||||||
|
`bmColorRep`.
|
||||||
|
|
||||||
|
## Version 3.2.1
|
||||||
|
|
||||||
|
The MiniGUI development team announces the availability of MiniGUI 3.2.1.
|
||||||
|
All users of MiniGUI are recommended strongly to use this version.
|
||||||
|
Please report any bugs and incompatibilities in
|
||||||
|
|
||||||
|
https://github.com/VincentWei/minigui
|
||||||
|
|
||||||
### What's new in this version
|
### What's new in this version
|
||||||
|
|
||||||
@@ -24,8 +158,8 @@ Please report any bugs and incompatibilities in
|
|||||||
1. New API: `UpdateInvalidClient`. You can use this function to update
|
1. New API: `UpdateInvalidClient`. You can use this function to update
|
||||||
the invalid client region of a window instantly.
|
the invalid client region of a window instantly.
|
||||||
1. Use different colors for the output of `_DBG_PRINTF` and `_ERR_PRINTF`.
|
1. Use different colors for the output of `_DBG_PRINTF` and `_ERR_PRINTF`.
|
||||||
1. Add `__mg_save_jpg` function for storing MYBITMAP as JPEG file (10km).
|
1. Add `__mg_save_jpg` function for storing MYBITMAP as JPEG file (@10km).
|
||||||
1. Modified logic for checking JPEG format (10km).
|
1. Modified logic for checking JPEG format (@10km).
|
||||||
1. Support BIDI for UNICODE charsets and cleanup the implementation.
|
1. Support BIDI for UNICODE charsets and cleanup the implementation.
|
||||||
* New API: `GetGlyphBIDIType` to get the glyph type in BIDI.
|
* New API: `GetGlyphBIDIType` to get the glyph type in BIDI.
|
||||||
* New DC attribute: BIDI flag.
|
* New DC attribute: BIDI flag.
|
||||||
@@ -58,7 +192,7 @@ The MiniGUI development team announces the availability of MiniGUI 3.2.0.
|
|||||||
All users of MiniGUI are recommended strongly to use this version for new
|
All users of MiniGUI are recommended strongly to use this version for new
|
||||||
MiniGUI apps. Please report any bugs and incompatibilities in
|
MiniGUI apps. Please report any bugs and incompatibilities in
|
||||||
|
|
||||||
https://github.com/VincentWei/minigui.
|
https://github.com/VincentWei/minigui
|
||||||
|
|
||||||
### What's new in this version
|
### What's new in this version
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
Version 3.2.0 (2018/02/10)
|
Version 3.4.0 (2019/06/30)
|
||||||
|
|
||||||
This release needs the following resource packages:
|
This release needs the following resource packages:
|
||||||
|
|
||||||
* minigui-res-3.0.13.tar.gz
|
* minigui-res-3.4.0.tar.gz
|
||||||
|
|
||||||
The latest samples package is:
|
The latest samples package is:
|
||||||
|
|
||||||
* mg-samples-3.2.0.tar.gz
|
* mg-samples-3.4.0.tar.gz
|
||||||
|
|||||||
+36
-25
@@ -1,6 +1,6 @@
|
|||||||
dnl Process this file with autoconf to produce a configure script.
|
dnl Process this file with autoconf to produce a configure script.
|
||||||
AC_PREREQ(2.60)
|
AC_PREREQ(2.60)
|
||||||
AC_INIT(libminigui, 3.2.2)
|
AC_INIT(libminigui, 3.4.0)
|
||||||
AC_CONFIG_SRCDIR(src/main/main.c)
|
AC_CONFIG_SRCDIR(src/main/main.c)
|
||||||
|
|
||||||
dnl Set various version strings - taken gratefully from the SDL sources
|
dnl Set various version strings - taken gratefully from the SDL sources
|
||||||
@@ -15,10 +15,10 @@ dnl Set various version strings - taken gratefully from the SDL sources
|
|||||||
# set MINIGUI_BINARY_AGE and MINIGUI_INTERFACE_AGE to 0.
|
# set MINIGUI_BINARY_AGE and MINIGUI_INTERFACE_AGE to 0.
|
||||||
#
|
#
|
||||||
MINIGUI_MAJOR_VERSION=3
|
MINIGUI_MAJOR_VERSION=3
|
||||||
MINIGUI_MINOR_VERSION=2
|
MINIGUI_MINOR_VERSION=4
|
||||||
MINIGUI_MICRO_VERSION=2
|
MINIGUI_MICRO_VERSION=0
|
||||||
MINIGUI_INTERFACE_AGE=0
|
MINIGUI_INTERFACE_AGE=0
|
||||||
MINIGUI_BINARY_AGE=1
|
MINIGUI_BINARY_AGE=0
|
||||||
MINIGUI_VERSION=$MINIGUI_MAJOR_VERSION.$MINIGUI_MINOR_VERSION.$MINIGUI_MICRO_VERSION
|
MINIGUI_VERSION=$MINIGUI_MAJOR_VERSION.$MINIGUI_MINOR_VERSION.$MINIGUI_MICRO_VERSION
|
||||||
|
|
||||||
AC_SUBST(MINIGUI_MAJOR_VERSION)
|
AC_SUBST(MINIGUI_MAJOR_VERSION)
|
||||||
@@ -537,7 +537,7 @@ AC_ARG_ENABLE(sefsupport,
|
|||||||
build_sef_support=$enableval)
|
build_sef_support=$enableval)
|
||||||
|
|
||||||
AC_ARG_WITH(ttfsupport,
|
AC_ARG_WITH(ttfsupport,
|
||||||
[ --with-ttfsupport=ft1/ft2/none How to support TrueType font (FreeType 1/FreeType 2/None) <default=none>],
|
[ --with-ttfsupport=ft2/none How to support TrueType font (FreeType 2 or None) <default=ft2>],
|
||||||
use_ttf_lib=$withval)
|
use_ttf_lib=$withval)
|
||||||
|
|
||||||
AC_ARG_ENABLE(ttfcache,
|
AC_ARG_ENABLE(ttfcache,
|
||||||
@@ -1978,17 +1978,20 @@ fi
|
|||||||
|
|
||||||
dnl Check FreeType lib
|
dnl Check FreeType lib
|
||||||
case "$use_ttf_lib" in
|
case "$use_ttf_lib" in
|
||||||
|
ft2)
|
||||||
|
dnl Check for FreeType2 library
|
||||||
|
AC_CHECK_LIB(freetype, FT_Library_Version,
|
||||||
|
DEP_LIBS="$DEP_LIBS -lfreetype",
|
||||||
|
use_ttf_lib="none")
|
||||||
|
;;
|
||||||
ft1)
|
ft1)
|
||||||
dnl Check for FreeType1 library
|
dnl Check for FreeType1 library
|
||||||
AC_CHECK_LIB(ttf, TT_FreeType_Version,
|
AC_CHECK_LIB(ttf, TT_FreeType_Version,
|
||||||
DEP_LIBS="$DEP_LIBS -lttf",
|
DEP_LIBS="$DEP_LIBS -lttf",
|
||||||
use_ttf_lib="none")
|
use_ttf_lib="none")
|
||||||
;;
|
;;
|
||||||
ft2)
|
*)
|
||||||
dnl Check for FreeType2 library
|
use_ttf_lib="none"
|
||||||
AC_CHECK_LIB(freetype, FT_Library_Version,
|
|
||||||
DEP_LIBS="$DEP_LIBS -lfreetype",
|
|
||||||
use_ttf_lib="none")
|
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@@ -2000,7 +2003,7 @@ case "$use_ttf_lib" in
|
|||||||
[Define if include ttf cache])
|
[Define if include ttf cache])
|
||||||
|
|
||||||
AC_ARG_WITH(ttfcachesize,
|
AC_ARG_WITH(ttfcachesize,
|
||||||
[ --with-ttfcachesize=[64/128/256/512/1024]])
|
[ --with-ttfcachesize=[64/128/256/512/1024/2048]])
|
||||||
|
|
||||||
case "$with_ttfcachesize" in
|
case "$with_ttfcachesize" in
|
||||||
64)
|
64)
|
||||||
@@ -2023,30 +2026,38 @@ case "$use_ttf_lib" in
|
|||||||
AC_DEFINE(_MGTTF_CACHE_SIZE, 1024,
|
AC_DEFINE(_MGTTF_CACHE_SIZE, 1024,
|
||||||
[Define if compile max ttf cahce size for 1024k])
|
[Define if compile max ttf cahce size for 1024k])
|
||||||
;;
|
;;
|
||||||
|
2048)
|
||||||
|
AC_DEFINE(_MGTTF_CACHE_SIZE, 2048,
|
||||||
|
[Define if compile max ttf cahce size for 2048k])
|
||||||
|
;;
|
||||||
*)
|
*)
|
||||||
AC_DEFINE(_MGTTF_CACHE_SIZE, 256,
|
AC_DEFINE(_MGTTF_CACHE_SIZE, 1024,
|
||||||
[Define if compile max ttf cahce size for 256k])
|
[Define if compile max ttf cahce size for 1024k (default value)])
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
AC_ARG_WITH(ttfcachenum,
|
AC_ARG_WITH(ttfcachenum,
|
||||||
[ --with-mttfcachenum=[10/20/40]])
|
[ --with-mttfcachenum=[16/32/64/128]])
|
||||||
case "$with_mttfcachenum" in
|
case "$with_mttfcachenum" in
|
||||||
10)
|
16)
|
||||||
AC_DEFINE(_MGMAX_TTF_CACHE, 10,
|
AC_DEFINE(_MGMAX_TTF_CACHE, 16,
|
||||||
[Define if compile max ttf cahce number for 10])
|
[Define if compile max ttf cahce number for 16])
|
||||||
;;
|
;;
|
||||||
20)
|
32)
|
||||||
AC_DEFINE(_MGMAX_TTF_CACHE, 20,
|
AC_DEFINE(_MGMAX_TTF_CACHE, 32,
|
||||||
[Define if compile max ttf cahce number for 20])
|
[Define if compile max ttf cahce number for 32])
|
||||||
;;
|
;;
|
||||||
40)
|
64)
|
||||||
AC_DEFINE(_MGMAX_TTF_CACHE, 40,
|
AC_DEFINE(_MGMAX_TTF_CACHE, 64,
|
||||||
[Define if compile max ttf cahce number for 40])
|
[Define if compile max ttf cahce number for 64])
|
||||||
|
;;
|
||||||
|
128)
|
||||||
|
AC_DEFINE(_MGMAX_TTF_CACHE, 128,
|
||||||
|
[Define if compile max ttf cahce number for 128])
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
AC_DEFINE(_MGMAX_TTF_CACHE, 10,
|
AC_DEFINE(_MGMAX_TTF_CACHE, 32,
|
||||||
[Define if compile max ttf cahce number for 10 (default value)])
|
[Define if compile max ttf cahce number for 32 (default value)])
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -239,9 +239,9 @@ int GUIAPI GetFirstWord (PLOGFONT log_font, const char* mstr, int len,
|
|||||||
496 static int euckr_is_this_charset (const unsigned char* charset)
|
496 static int euckr_is_this_charset (const unsigned char* charset)
|
||||||
497 {
|
497 {
|
||||||
498 int i;
|
498 int i;
|
||||||
499 char name [LEN_FONT_NAME + 1];
|
499 char name [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
500
|
500
|
||||||
501 for (i = 0; i < LEN_FONT_NAME + 1; i++) {
|
501 for (i = 0; i < LEN_LOGFONT_NAME_FIELD + 1; i++) {
|
||||||
502 if (charset [i] == '\0')
|
502 if (charset [i] == '\0')
|
||||||
503 break;
|
503 break;
|
||||||
504 name [i] = toupper (charset [i]);
|
504 name [i] = toupper (charset [i]);
|
||||||
@@ -388,9 +388,9 @@ int GUIAPI GetFirstWord (PLOGFONT log_font, const char* mstr, int len,
|
|||||||
|
|
||||||
<table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td> <pre>
|
<table border="0" cellpadding="0" class="code-sample" width="100%"><tr><td> <pre>
|
||||||
228 typedef struct _LOGFONT {
|
228 typedef struct _LOGFONT {
|
||||||
229 char type [LEN_FONT_NAME + 1];
|
229 char type [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
230 char family [LEN_FONT_NAME + 1];
|
230 char family [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
231 char charset [LEN_FONT_NAME + 1];
|
231 char charset [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
232 DWORD style;
|
232 DWORD style;
|
||||||
233 int size;
|
233 int size;
|
||||||
234 int rotation;
|
234 int rotation;
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
static LOGFONT *logfont, *logfontgb12, *logfontbig24;
|
static LOGFONT *logfont, *logfontgb12, *logfontbig24;
|
||||||
|
|
||||||
logfont = CreateLogFont (NULL, "SansSerif", "ISO8859-1",
|
logfont = CreateLogFont (NULL, "SansSerif", "ISO8859-1",
|
||||||
FONT_WEIGHT_REGULAR, FONT_SLANT_ITALIC, FONT_SETWIDTH_NORMAL,
|
FONT_WEIGHT_REGULAR, FONT_SLANT_ITALIC, FONT_FLIP_NONE,
|
||||||
FONT_SPACING_CHARCELL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_LINE,
|
FONT_OTHER_NIL, FONT_UNDERLINE_NONE, FONT_STRUCKOUT_LINE,
|
||||||
16, 0);
|
16, 0);
|
||||||
logfontgb12 = CreateLogFont (NULL, "song", "GB2312",
|
logfontgb12 = CreateLogFont (NULL, "song", "GB2312",
|
||||||
FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL,
|
FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_FLIP_NONE,
|
||||||
FONT_SPACING_CHARCELL, FONT_UNDERLINE_LINE, FONT_STRUCKOUT_LINE,
|
FONT_OTHER_NIL, FONT_UNDERLINE_LINE, FONT_STRUCKOUT_LINE,
|
||||||
12, 0);
|
12, 0);
|
||||||
logfontbig24 = CreateLogFont (NULL, "ming", "BIG5",
|
logfontbig24 = CreateLogFont (NULL, "ming", "BIG5",
|
||||||
FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_SETWIDTH_NORMAL,
|
FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_FLIP_NONE,
|
||||||
FONT_SPACING_CHARCELL, FONT_UNDERLINE_LINE, FONT_STRUCKOUT_NONE,
|
FONT_OTHER_NIL, FONT_UNDERLINE_LINE, FONT_STRUCKOUT_NONE,
|
||||||
24, 0);
|
24, 0);
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
static LOGFONT *logfont, *logfontgb12, *logfontttf;
|
||||||
|
|
||||||
|
logfont = CreateLogFontEx (NULL, "SansSerif", "ISO8859-1",
|
||||||
|
FONT_WEIGHT_REGULAR, FONT_SLANT_ITALIC, FONT_FLIP_NONE,
|
||||||
|
FONT_OTHER_NIL, FONT_DECORATE_NONE, FONT_RENDER_MONO,
|
||||||
|
16, 0);
|
||||||
|
logfontgb12 = CreateLogFontEx (NULL, "song", "GB2312",
|
||||||
|
FONT_WEIGHT_REGULAR, FONT_SLANT_ROMAN, FONT_FLIP_NONE,
|
||||||
|
FONT_OTHER_NIL, FONT_DECORATE_NONE, FONT_RENDER_MONO,
|
||||||
|
12, 0);
|
||||||
|
logfontttf = CreateLogFontEx ("ttf", "Courier", "UTF-8",
|
||||||
|
FONT_WEIGHT_BLACK, FONT_SLANT_ROMAN, FONT_FLIP_NONE,
|
||||||
|
FS_OTHER_LCDPORTRAIT, FONT_DECORATE_NONE, FONT_RENDER_SUBPIXEL,
|
||||||
|
24, 0);
|
||||||
@@ -694,6 +694,20 @@ typedef UINT_PTR LPARAM;
|
|||||||
*/
|
*/
|
||||||
#define MAKEWORD16(low, high) ((WORD16)(((BYTE)(low)) | (((WORD16)((BYTE)(high))) << 8)))
|
#define MAKEWORD16(low, high) ((WORD16)(((BYTE)(low)) | (((WORD16)((BYTE)(high))) << 8)))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \def MAKEWORD32(first, second, third, fourth)
|
||||||
|
* \brief Makes a WORD32 value with four bytes.
|
||||||
|
*
|
||||||
|
* \sa MAKEWORD16, FIRSTBYTE, SECONDBYTE, THIRDBYTE, FOURTHBYTE
|
||||||
|
*/
|
||||||
|
#define MAKEDWORD32(first, second, third, fourth) \
|
||||||
|
((DWORD32)( \
|
||||||
|
((BYTE)(first)) | \
|
||||||
|
(((DWORD32)((BYTE)(second))) << 8) | \
|
||||||
|
(((DWORD32)((BYTE)(third))) << 16) | \
|
||||||
|
(((DWORD32)((BYTE)(fourth))) << 24) \
|
||||||
|
))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \def MAKEWPARAM(first, second, third, fourth)
|
* \def MAKEWPARAM(first, second, third, fourth)
|
||||||
* \brief Makes a WPARAM value with four bytes.
|
* \brief Makes a WPARAM value with four bytes.
|
||||||
|
|||||||
+2868
-612
File diff suppressed because it is too large
Load Diff
+238
-240
File diff suppressed because it is too large
Load Diff
+36
-37
@@ -44,21 +44,20 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct _GLYPHBUF
|
typedef struct _ACHARBUF
|
||||||
{
|
{
|
||||||
GLYPHMAPINFO* glyph_map; /* glyph info array */
|
ACHARMAPINFO* achar_map; /* achar info array */
|
||||||
int* glyphs; /* glyph array */
|
Achar32* achars; /* achar array */
|
||||||
int glyphs_len; /* glyph array len or buffer used size */
|
int achars_len; /* achar array len or buffer used size */
|
||||||
|
|
||||||
int blocksize; /* block size, a block is an allocate unit */
|
int blocksize; /* block size, a block is an allocate unit */
|
||||||
int glyphs_buffsize; /* glyph string buffer size */
|
int achars_buffsize; /* achar string buffer size */
|
||||||
int glyphmap_buffsize; /* glyph map buffer size */
|
int acharmap_buffsize; /* achar map buffer size */
|
||||||
} GLYPHBUF;
|
} ACHARBUF;
|
||||||
|
|
||||||
typedef struct tagBIDISLEDITDATA
|
typedef struct tagBIDISLEDITDATA
|
||||||
{
|
{
|
||||||
StrBuffer str_content; // string text buffer
|
StrBuffer str_content; // string text buffer
|
||||||
GLYPHBUF glyph_content; // glyph string buffer
|
ACHARBUF achar_content; // achar string buffer
|
||||||
|
|
||||||
int editPos; // current edit position
|
int editPos; // current edit position
|
||||||
int selStart; // selection start position
|
int selStart; // selection start position
|
||||||
@@ -92,48 +91,48 @@ typedef struct tagBIDISLEDITDATA
|
|||||||
typedef BIDISLEDITDATA* PBIDISLEDITDATA;
|
typedef BIDISLEDITDATA* PBIDISLEDITDATA;
|
||||||
|
|
||||||
static inline void*
|
static inline void*
|
||||||
glyphbuf_alloc (GLYPHBUF* glyph_buff, int len, int block_size)
|
acharbuf_alloc (ACHARBUF* achar_buff, int len, int block_size)
|
||||||
{
|
{
|
||||||
glyph_buff->glyphs_buffsize = (len + (block_size - len % block_size))
|
achar_buff->achars_buffsize = (len + (block_size - len % block_size))
|
||||||
* sizeof (int);
|
* sizeof (Achar32);
|
||||||
glyph_buff->glyphs = malloc (glyph_buff->glyphs_buffsize);
|
achar_buff->achars = malloc (achar_buff->achars_buffsize);
|
||||||
|
|
||||||
glyph_buff->glyphmap_buffsize = (len + (block_size - len % block_size))
|
achar_buff->acharmap_buffsize = (len + (block_size - len % block_size))
|
||||||
* sizeof (GLYPHMAPINFO);
|
* sizeof (ACHARMAPINFO);
|
||||||
glyph_buff->glyph_map = malloc (glyph_buff->glyphmap_buffsize);
|
achar_buff->achar_map = malloc (achar_buff->acharmap_buffsize);
|
||||||
|
|
||||||
glyph_buff->glyphs_len = len;
|
achar_buff->achars_len = len;
|
||||||
glyph_buff->blocksize = block_size;
|
achar_buff->blocksize = block_size;
|
||||||
|
|
||||||
return glyph_buff->glyphs;
|
return achar_buff->achars;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void glyphbuf_free (GLYPHBUF *glyph_buff)
|
static inline void acharbuf_free (ACHARBUF *achar_buff)
|
||||||
{
|
{
|
||||||
if (glyph_buff) {
|
if (achar_buff) {
|
||||||
free (glyph_buff->glyphs);
|
free (achar_buff->achars);
|
||||||
free (glyph_buff->glyph_map);
|
free (achar_buff->achar_map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void* glyphbuf_realloc (GLYPHBUF *glyph_buff, int len)
|
static inline void* acharbuf_realloc (ACHARBUF *achar_buff, int len)
|
||||||
{
|
{
|
||||||
if (len * sizeof(int) > glyph_buff->glyphs_buffsize ||
|
if (len * sizeof(int) > achar_buff->achars_buffsize ||
|
||||||
len * sizeof(int) < glyph_buff->glyphs_buffsize - glyph_buff->blocksize) {
|
len * sizeof(int) < achar_buff->achars_buffsize - achar_buff->blocksize) {
|
||||||
/* realloc glyph string mem */
|
/* realloc achar string mem */
|
||||||
glyph_buff->glyphs_buffsize = (len + (glyph_buff->blocksize -
|
achar_buff->achars_buffsize = (len + (achar_buff->blocksize -
|
||||||
len % glyph_buff->blocksize))* sizeof(int);
|
len % achar_buff->blocksize))* sizeof(Achar32);
|
||||||
glyph_buff->glyphs = realloc (glyph_buff->glyphs,
|
achar_buff->achars = realloc (achar_buff->achars,
|
||||||
glyph_buff->glyphs_buffsize);
|
achar_buff->achars_buffsize);
|
||||||
|
|
||||||
/* realloc glyph map mem */
|
/* realloc achar map mem */
|
||||||
glyph_buff->glyphmap_buffsize = (len + (glyph_buff->blocksize -
|
achar_buff->acharmap_buffsize = (len + (achar_buff->blocksize -
|
||||||
len % glyph_buff->blocksize))* sizeof(GLYPHMAPINFO);
|
len % achar_buff->blocksize))* sizeof(ACHARMAPINFO);
|
||||||
glyph_buff->glyph_map = realloc (glyph_buff->glyph_map,
|
achar_buff->achar_map = realloc (achar_buff->achar_map,
|
||||||
glyph_buff->glyphmap_buffsize);
|
achar_buff->acharmap_buffsize);
|
||||||
}
|
}
|
||||||
|
|
||||||
return glyph_buff->glyphs;
|
return achar_buff->achars;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL RegisterBIDISLEditControl (void);
|
BOOL RegisterBIDISLEditControl (void);
|
||||||
|
|||||||
@@ -271,30 +271,30 @@ static void set_keyboard_layout(HWND hDlg)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
if (cur_type == GLYPH_TYPE_RTL) {
|
if (cur_type == CHAR_TYPE_RTL) {
|
||||||
if (l_glyph_type == GLYPH_TYPE_RTL)
|
if (l_char_type == CHAR_TYPE_RTL)
|
||||||
return INSERTPOS_BEFORE (sled, l_glyph_index);
|
return INSERTPOS_BEFORE (sled, l_glyph_index);
|
||||||
else if (r_glyph_type == GLYPH_TYPE_RTL)
|
else if (r_char_type == CHAR_TYPE_RTL)
|
||||||
return INSERTPOS_AFTER (sled, r_glyph_index);
|
return INSERTPOS_AFTER (sled, r_glyph_index);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (l_glyph_type == GLYPH_TYPE_LTR)
|
if (l_char_type == CHAR_TYPE_LTR)
|
||||||
return INSERTPOS_AFTER (sled, l_glyph_index);
|
return INSERTPOS_AFTER (sled, l_glyph_index);
|
||||||
else if (l_glyph_type == GLYPH_TYPE_LTR)
|
else if (l_char_type == CHAR_TYPE_LTR)
|
||||||
return INSERTPOS_BEFORE (sled, r_glyph_index);
|
return INSERTPOS_BEFORE (sled, r_glyph_index);
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (l_glyph_type == GLYPH_TYPE_LTR)
|
if (l_char_type == CHAR_TYPE_LTR)
|
||||||
return INSERTPOS_AFTER (sled, l_glyph_index);
|
return INSERTPOS_AFTER (sled, l_glyph_index);
|
||||||
else if (r_glyph_type == GLYPH_TYPE_LTR)
|
else if (r_char_type == CHAR_TYPE_LTR)
|
||||||
return INSERTPOS_BEFORE (sled, r_glyph_index);
|
return INSERTPOS_BEFORE (sled, r_glyph_index);
|
||||||
else {
|
else {
|
||||||
if (l_glyph_type == GLYPH_TYPE_RTL)
|
if (l_char_type == CHAR_TYPE_RTL)
|
||||||
return INSERTPOS_BEFORE (sled, l_glyph_index);
|
return INSERTPOS_BEFORE (sled, l_glyph_index);
|
||||||
else if (l_glyph_type == GLYPH_TYPE_RTL)
|
else if (l_char_type == CHAR_TYPE_RTL)
|
||||||
return INSERTPOS_AFTER (sled, r_glyph_index);
|
return INSERTPOS_AFTER (sled, r_glyph_index);
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
+11
-5
@@ -1458,7 +1458,6 @@ static LRESULT TreeViewCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
|||||||
rctop = rc.top;
|
rctop = rc.top;
|
||||||
|
|
||||||
if (mouseX <= right && mouseX >= left && (p != pData->pItemSelected) ) {
|
if (mouseX <= right && mouseX >= left && (p != pData->pItemSelected) ) {
|
||||||
PLOGFONT logfont;
|
|
||||||
c = getCountFromItem (pData, pData->pItemSelected);
|
c = getCountFromItem (pData, pData->pItemSelected);
|
||||||
c = c - pData->nItemTop - 1;
|
c = c - pData->nItemTop - 1;
|
||||||
if (c < 0)
|
if (c < 0)
|
||||||
@@ -1471,12 +1470,15 @@ static LRESULT TreeViewCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
|||||||
rc.top += TV_BORDER;
|
rc.top += TV_BORDER;
|
||||||
rc.bottom = rc.top + pData->nItemHeight;
|
rc.bottom = rc.top + pData->nItemHeight;
|
||||||
|
|
||||||
/*bugfix: 4864, zhaochengzhang*/
|
/* VincentWei: do not depend on logfont style
|
||||||
|
PLOGFONT logfont;
|
||||||
|
//bugfix: 4864, zhaochengzhang
|
||||||
logfont = GetWindowFont(hwnd);
|
logfont = GetWindowFont(hwnd);
|
||||||
if (logfont->style & (FS_WEIGHT_BOOK | FS_WEIGHT_LIGHT)) {
|
if (logfont->style & (FS_WEIGHT_BOOK | FS_WEIGHT_LIGHT)) {
|
||||||
rc.left--; rc.top--;
|
rc.left--; rc.top--;
|
||||||
rc.right++; rc.bottom++;
|
rc.right++; rc.bottom++;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
InvalidateRect (hwnd, &rc, TRUE);
|
InvalidateRect (hwnd, &rc, TRUE);
|
||||||
|
|
||||||
rc.top = rctop + (count - pData->nItemTop - 1) * pData->nItemHeight;
|
rc.top = rctop + (count - pData->nItemTop - 1) * pData->nItemHeight;
|
||||||
@@ -1484,17 +1486,18 @@ static LRESULT TreeViewCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
|||||||
rc.top += TV_BORDER;
|
rc.top += TV_BORDER;
|
||||||
rc.bottom = rc.top + pData->nItemHeight;
|
rc.bottom = rc.top + pData->nItemHeight;
|
||||||
|
|
||||||
/*bugfix: 4864 zhaochengzhang*/
|
/* VincentWei: do not depend on logfont style
|
||||||
|
//bugfix: 4864 zhaochengzhang
|
||||||
if (logfont->style & (FS_WEIGHT_BOOK | FS_WEIGHT_LIGHT)) {
|
if (logfont->style & (FS_WEIGHT_BOOK | FS_WEIGHT_LIGHT)) {
|
||||||
rc.left--; rc.top--;
|
rc.left--; rc.top--;
|
||||||
rc.right++; rc.bottom++;
|
rc.right++; rc.bottom++;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
InvalidateRect (hwnd, &rc, TRUE);
|
InvalidateRect (hwnd, &rc, TRUE);
|
||||||
NotifyParent (hwnd, pData->id, TVN_CLICKED);
|
NotifyParent (hwnd, pData->id, TVN_CLICKED);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mouseX <= left + h && mouseX >= left) {
|
if (mouseX <= left + h && mouseX >= left) {
|
||||||
PLOGFONT logfont;
|
|
||||||
if (p->child == NULL)
|
if (p->child == NULL)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1519,12 +1522,15 @@ static LRESULT TreeViewCtrlProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM
|
|||||||
tvSetHScrollInfo (hwnd, pData, TRUE);
|
tvSetHScrollInfo (hwnd, pData, TRUE);
|
||||||
rc.bottom = rcClient.bottom;
|
rc.bottom = rcClient.bottom;
|
||||||
|
|
||||||
/*bugfix: 4864 zhaochengzhang*/
|
/* VincentWei: do not depend on the logfont style
|
||||||
|
PLOGFONT logfont;
|
||||||
|
//bugfix: 4864 zhaochengzhang
|
||||||
logfont = GetWindowFont(hwnd);
|
logfont = GetWindowFont(hwnd);
|
||||||
if (logfont->style & (FS_WEIGHT_BOOK | FS_WEIGHT_LIGHT)) {
|
if (logfont->style & (FS_WEIGHT_BOOK | FS_WEIGHT_LIGHT)) {
|
||||||
rc.left--; rc.top--;
|
rc.left--; rc.top--;
|
||||||
rc.right++; rc.bottom++;
|
rc.right++; rc.bottom++;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
InvalidateRect (hwnd, &rc, TRUE);
|
InvalidateRect (hwnd, &rc, TRUE);
|
||||||
NotifyParent (hwnd, pData->id, TVN_CLICKED);
|
NotifyParent (hwnd, pData->id, TVN_CLICKED);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,21 +3,25 @@ SUBDIRS = in-core
|
|||||||
noinst_LTLIBRARIES = libfont.la
|
noinst_LTLIBRARIES = libfont.la
|
||||||
|
|
||||||
SRC_FILES = charset.c charset-arabic.c charset-bidi.c \
|
SRC_FILES = charset.c charset-arabic.c charset-bidi.c \
|
||||||
|
unicode-comp.c unicode-script.c language-code.c \
|
||||||
sysfont.c logfont.c devfont.c fontname.c \
|
sysfont.c logfont.c devfont.c fontname.c \
|
||||||
rawbitmap.c varbitmap.c qpf.c upf.c \
|
rawbitmap.c varbitmap.c qpf.c upf.c \
|
||||||
fontcache.c freetype1.c freetype2.c font-engines.c\
|
fontcache.c freetype2.c font-engines.c\
|
||||||
gbunimap.c gbkunimap.c gb18030unimap.c big5unimap.c \
|
gbunimap.c gbkunimap.c gb18030unimap.c big5unimap.c \
|
||||||
ujisunimap.c sjisunimap.c euckrunimap.c \
|
ujisunimap.c sjisunimap.c euckrunimap.c \
|
||||||
textops.c mapunitogb.c mapunitogbk.c mapunitobig5.c mapunitogb18030.c \
|
textops.c mapunitogb.c mapunitogbk.c mapunitobig5.c mapunitogb18030.c \
|
||||||
bitmapfont.c scripteasy.c
|
bitmapfont.c scripteasy.c \
|
||||||
|
unicode-emoji.c
|
||||||
|
|
||||||
HDR_FILES = charset.h rawbitmap.h varbitmap.h freetype1.h freetype2.h qpf.h \
|
HDR_FILES = charset.h rawbitmap.h varbitmap.h freetype2.h qpf.h se_minigui.h \
|
||||||
upf.h bitmapfont.h gunichartables.h se_minigui.h unicode-bidi-tables.h
|
upf.h bitmapfont.h unicode-bidi-tables.h \
|
||||||
|
unicode-tables.h unicode-break.h unicode-decomp.h unicode-comp.h unicode-emoji-table.h
|
||||||
|
|
||||||
EXTRA_DIST = convgbmap.c jisunimap.c $(SRC_FILES) $(HDR_FILES) \
|
EXTRA_DIST = convgbmap.c jisunimap.c $(SRC_FILES) $(HDR_FILES) \
|
||||||
makefile.ng makefile.msvc
|
makefile.ng makefile.msvc
|
||||||
|
|
||||||
AM_CPPFLAGS = $(FT1_INC_DIR) $(FT2_INC_DIR)
|
# AM_CPPFLAGS = $(FT1_INC_DIR) $(FT2_INC_DIR)
|
||||||
|
AM_CPPFLAGS = $(FT2_INC_DIR)
|
||||||
AM_CPPFLAGS += -I$(abs_top_srcdir)/src/include -I$(abs_top_srcdir)/include
|
AM_CPPFLAGS += -I$(abs_top_srcdir)/src/include -I$(abs_top_srcdir)/include
|
||||||
|
|
||||||
libfont_la_SOURCES = $(SRC_FILES) $(HDR_FILES)
|
libfont_la_SOURCES = $(SRC_FILES) $(HDR_FILES)
|
||||||
|
|||||||
+15
-10
@@ -190,7 +190,7 @@ static void destroy (GLYPHTREENODE *root)
|
|||||||
|
|
||||||
/*** device font ops ***/
|
/*** device font ops ***/
|
||||||
|
|
||||||
static DWORD get_glyph_type (LOGFONT* logfont, DEVFONT* devfont)
|
static DWORD get_glyph_bmptype (LOGFONT* logfont, DEVFONT* devfont)
|
||||||
{
|
{
|
||||||
return DEVFONTGLYPHTYPE_PRERDRBMP;
|
return DEVFONTGLYPHTYPE_PRERDRBMP;
|
||||||
}
|
}
|
||||||
@@ -210,8 +210,11 @@ static int get_font_height (LOGFONT* logfont, DEVFONT* devfont)
|
|||||||
return ((BMPFONTINFO *)devfont->data)->height;
|
return ((BMPFONTINFO *)devfont->data)->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect)
|
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect, int df_slot)
|
||||||
{
|
{
|
||||||
|
if (df_slot >= 0 && df_slot < MAXNR_DEVFONTS)
|
||||||
|
SET_DEVFONT_SCALE (logfont, df_slot, 1);
|
||||||
|
|
||||||
return ((BMPFONTINFO *)devfont->data)->height;
|
return ((BMPFONTINFO *)devfont->data)->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -365,7 +368,7 @@ static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
|
|
||||||
/**************************** Global data ************************************/
|
/**************************** Global data ************************************/
|
||||||
FONTOPS __mg_bitmap_font_ops = {
|
FONTOPS __mg_bitmap_font_ops = {
|
||||||
get_glyph_type,
|
get_glyph_bmptype,
|
||||||
get_ave_width,
|
get_ave_width,
|
||||||
get_max_width,
|
get_max_width,
|
||||||
get_font_height,
|
get_font_height,
|
||||||
@@ -408,7 +411,6 @@ build_bmpfont_info (const char *bmpfont_name, const BITMAP* glyph_bmp,
|
|||||||
goto error_load;
|
goto error_load;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bmpfont_info->ave_width = glyph_width;
|
bmpfont_info->ave_width = glyph_width;
|
||||||
bmpfont_info->max_width = glyph_width;
|
bmpfont_info->max_width = glyph_width;
|
||||||
bmpfont_info->node_cnt = 1;
|
bmpfont_info->node_cnt = 1;
|
||||||
@@ -441,6 +443,7 @@ error_load:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0 // VincentWei: bad implementation
|
||||||
static int set_devfont_style (char* name, char style)
|
static int set_devfont_style (char* name, char style)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -461,7 +464,7 @@ static int set_devfont_style (char* name, char style)
|
|||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/************************/
|
/************************/
|
||||||
DEVFONT *CreateBMPDevFont (const char *bmpfont_name, const BITMAP* glyph_bmp,
|
DEVFONT *CreateBMPDevFont (const char *bmpfont_name, const BITMAP* glyph_bmp,
|
||||||
@@ -469,7 +472,7 @@ DEVFONT *CreateBMPDevFont (const char *bmpfont_name, const BITMAP* glyph_bmp,
|
|||||||
{
|
{
|
||||||
DEVFONT* bitmapfont_dev_font = NULL;
|
DEVFONT* bitmapfont_dev_font = NULL;
|
||||||
CHARSETOPS* charset_ops;
|
CHARSETOPS* charset_ops;
|
||||||
char charset[LEN_FONT_NAME + 1];
|
char charset[LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
BMPFONTINFO *bmpfont_info;
|
BMPFONTINFO *bmpfont_info;
|
||||||
int offset;
|
int offset;
|
||||||
|
|
||||||
@@ -484,7 +487,7 @@ DEVFONT *CreateBMPDevFont (const char *bmpfont_name, const BITMAP* glyph_bmp,
|
|||||||
goto error_create;
|
goto error_create;
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = (charset_ops->char_glyph_value) (NULL, 0,
|
offset = (charset_ops->get_char_value) (NULL, 0,
|
||||||
(const unsigned char*) start_mchar, 0);
|
(const unsigned char*) start_mchar, 0);
|
||||||
|
|
||||||
bmpfont_info = build_bmpfont_info (bmpfont_name, glyph_bmp,
|
bmpfont_info = build_bmpfont_info (bmpfont_name, glyph_bmp,
|
||||||
@@ -501,14 +504,16 @@ DEVFONT *CreateBMPDevFont (const char *bmpfont_name, const BITMAP* glyph_bmp,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set device name and add BOLD & ITALIC style
|
* Set device name
|
||||||
*/
|
*/
|
||||||
strncpy (bitmapfont_dev_font->name, bmpfont_name, LEN_UNIDEVFONT_NAME);
|
strncpy (bitmapfont_dev_font->name, bmpfont_name, LEN_UNIDEVFONT_NAME);
|
||||||
|
|
||||||
|
#if 0 // VincentWei: bad implementation
|
||||||
if (!set_devfont_style (bitmapfont_dev_font->name, FONT_WEIGHT_BOLD))
|
if (!set_devfont_style (bitmapfont_dev_font->name, FONT_WEIGHT_BOLD))
|
||||||
return NULL;
|
return NULL;
|
||||||
if (!set_devfont_style (bitmapfont_dev_font->name, FONT_SLANT_ITALIC))
|
if (!set_devfont_style (bitmapfont_dev_font->name, FONT_SLANT_ITALIC))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
bitmapfont_dev_font->name [LEN_UNIDEVFONT_NAME] = '\0';
|
bitmapfont_dev_font->name [LEN_UNIDEVFONT_NAME] = '\0';
|
||||||
bitmapfont_dev_font->style = fontConvertStyle (bitmapfont_dev_font->name);
|
bitmapfont_dev_font->style = fontConvertStyle (bitmapfont_dev_font->name);
|
||||||
@@ -545,7 +550,7 @@ BOOL AddGlyphsToBMPFont (DEVFONT* dev_font, BITMAP* glyph_bmp,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
/* Insert a node in the avl tree */
|
/* Insert a node in the avl tree */
|
||||||
offset = (*dev_font->charset_ops->char_glyph_value) (NULL, 0,
|
offset = (*dev_font->charset_ops->get_char_value) (NULL, 0,
|
||||||
(const unsigned char*)start_mchar, 0);
|
(const unsigned char*)start_mchar, 0);
|
||||||
|
|
||||||
if (look_up (root, offset) == NULL) {
|
if (look_up (root, offset) == NULL) {
|
||||||
@@ -639,7 +644,7 @@ static int avl_look_up (DEVFONT *dev_font, char *start_mchar, int n)
|
|||||||
GLYPHTREENODE *p;
|
GLYPHTREENODE *p;
|
||||||
int offset;
|
int offset;
|
||||||
|
|
||||||
offset = (*dev_font->charset_ops->char_glyph_value) (NULL, 0,
|
offset = (*dev_font->charset_ops->get_char_value) (NULL, 0,
|
||||||
(const unsigned char*)start_mchar, n);
|
(const unsigned char*)start_mchar, n);
|
||||||
offset += n;
|
offset += n;
|
||||||
|
|
||||||
|
|||||||
+73
-69
File diff suppressed because it is too large
Load Diff
+115
-92
File diff suppressed because it is too large
Load Diff
+912
-346
File diff suppressed because it is too large
Load Diff
+208
-61
File diff suppressed because it is too large
Load Diff
+37
-54
File diff suppressed because it is too large
Load Diff
+182
-26
File diff suppressed because it is too large
Load Diff
+21
-12
@@ -65,7 +65,7 @@ static TT_Engine ttf_engine; /* The ONLY freetype engine */
|
|||||||
static BYTE virtual_palette [] = {0, 32, 64, 128, 255};
|
static BYTE virtual_palette [] = {0, 32, 64, 128, 255};
|
||||||
|
|
||||||
/************************ Create/Destroy FreeType font ***********************/
|
/************************ Create/Destroy FreeType font ***********************/
|
||||||
static void* load_font_data (const char* font_name, const char *file_name)
|
static void* load_font_data (DEVFONT* devfont, const char* font_name, const char *file_name)
|
||||||
{
|
{
|
||||||
unsigned short i, n;
|
unsigned short i, n;
|
||||||
unsigned short platform, encoding;
|
unsigned short platform, encoding;
|
||||||
@@ -144,7 +144,7 @@ error_after_create_info:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unload_font_data (void* data)
|
static void unload_font_data (DEVFONT* devfont, void* data)
|
||||||
{
|
{
|
||||||
TTFINSTANCEINFO* ttf_inst_info = (TTFINSTANCEINFO*)data;
|
TTFINSTANCEINFO* ttf_inst_info = (TTFINSTANCEINFO*)data;
|
||||||
TTFGLYPHINFO* ttf_glyph_info = ttf_inst_info->ttf_glyph_info;
|
TTFGLYPHINFO* ttf_glyph_info = ttf_inst_info->ttf_glyph_info;
|
||||||
@@ -243,7 +243,7 @@ compute_kernval (TTFINSTANCEINFO* ttf_inst_info)
|
|||||||
return kernval;
|
return kernval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DWORD get_glyph_type (LOGFONT* logfont, DEVFONT* devfont)
|
static DWORD get_glyph_bmptype (LOGFONT* logfont, DEVFONT* devfont)
|
||||||
{
|
{
|
||||||
if (logfont->style & FS_WEIGHT_BOOK)
|
if (logfont->style & FS_WEIGHT_BOOK)
|
||||||
return DEVFONTGLYPHTYPE_GREYBMP;
|
return DEVFONTGLYPHTYPE_GREYBMP;
|
||||||
@@ -263,10 +263,13 @@ static int get_font_height (LOGFONT* logfont, DEVFONT* devfont)
|
|||||||
return ttf_inst_info->height;
|
return ttf_inst_info->height;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect)
|
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect, int df_slot)
|
||||||
{
|
{
|
||||||
unsigned short scale = 1;
|
unsigned short scale = 1;
|
||||||
SET_DEVFONT_SCALE (logfont, devfont, scale);
|
|
||||||
|
if (df_slot >= 0 && df_slot < MAXNR_DEVFONTS)
|
||||||
|
SET_DEVFONT_SCALE (logfont, df_slot, scale);
|
||||||
|
|
||||||
return expect;
|
return expect;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,7 +297,7 @@ static void start_str_output (LOGFONT* logfont, DEVFONT* devfont)
|
|||||||
/* call this function before getting the bitmap/pixmap of the char
|
/* call this function before getting the bitmap/pixmap of the char
|
||||||
* to get the bbox of the char */
|
* to get the bbox of the char */
|
||||||
static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
const Glyph32 glyph_value,
|
Glyph32 glyph_value,
|
||||||
int* px, int* py, int* pwidth, int* pheight)
|
int* px, int* py, int* pwidth, int* pheight)
|
||||||
{
|
{
|
||||||
TT_UShort uni_char;
|
TT_UShort uni_char;
|
||||||
@@ -304,6 +307,7 @@ static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
TT_Glyph_Metrics metrics;
|
TT_Glyph_Metrics metrics;
|
||||||
TT_BBox bbox;
|
TT_BBox bbox;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
TTFINSTANCEINFO* ttf_inst_info = TTF_INST_INFO_P (devfont);
|
TTFINSTANCEINFO* ttf_inst_info = TTF_INST_INFO_P (devfont);
|
||||||
TTFGLYPHINFO* ttf_glyph_info = ttf_inst_info->ttf_glyph_info;
|
TTFGLYPHINFO* ttf_glyph_info = ttf_inst_info->ttf_glyph_info;
|
||||||
|
|
||||||
@@ -440,12 +444,13 @@ static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
/* call this function to get the bitmap/pixmap of the char */
|
/* call this function to get the bitmap/pixmap of the char */
|
||||||
static const void*
|
static const void*
|
||||||
char_bitmap_pixmap (LOGFONT* logfont, DEVFONT* devfont,
|
char_bitmap_pixmap (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
const Glyph32 glyph_value, int* pitch, BOOL is_grey)
|
Glyph32 glyph_value, int* pitch, BOOL is_grey)
|
||||||
{
|
{
|
||||||
TT_Raster_Map Raster;
|
TT_Raster_Map Raster;
|
||||||
TT_Error error;
|
TT_Error error;
|
||||||
TTFINSTANCEINFO* ttf_inst_info = TTF_INST_INFO_P (devfont);
|
TTFINSTANCEINFO* ttf_inst_info = TTF_INST_INFO_P (devfont);
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
/* now allocate the raster bitmap */
|
/* now allocate the raster bitmap */
|
||||||
Raster.rows = ttf_inst_info->cur_height;
|
Raster.rows = ttf_inst_info->cur_height;
|
||||||
Raster.width = ttf_inst_info->cur_width;
|
Raster.width = ttf_inst_info->cur_width;
|
||||||
@@ -538,15 +543,17 @@ char_bitmap_pixmap (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
const Glyph32 glyph_value, int* pitch, unsigned short* scale)
|
Glyph32 glyph_value, int* pitch, unsigned short* scale)
|
||||||
{
|
{
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (scale) *scale = 1;
|
if (scale) *scale = 1;
|
||||||
return char_bitmap_pixmap (logfont, devfont, glyph_value, pitch, FALSE);
|
return char_bitmap_pixmap (logfont, devfont, glyph_value, pitch, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const void* get_glyph_greybitmap (LOGFONT* logfont, DEVFONT* devfont,
|
static const void* get_glyph_greybitmap (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
const Glyph32 glyph_value, int* pitch, unsigned short* scale)
|
Glyph32 glyph_value, int* pitch, unsigned short* scale)
|
||||||
{
|
{
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (scale) *scale = 1;
|
if (scale) *scale = 1;
|
||||||
return char_bitmap_pixmap (logfont, devfont, glyph_value, pitch, TRUE);
|
return char_bitmap_pixmap (logfont, devfont, glyph_value, pitch, TRUE);
|
||||||
}
|
}
|
||||||
@@ -554,12 +561,13 @@ static const void* get_glyph_greybitmap (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
/* call this function after getting the bitmap/pixmap of the char
|
/* call this function after getting the bitmap/pixmap of the char
|
||||||
* to get the advance of the char */
|
* to get the advance of the char */
|
||||||
static int get_glyph_advance (LOGFONT* logfont, DEVFONT* devfont,
|
static int get_glyph_advance (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
const Glyph32 glyph_value, int* px, int* py)
|
Glyph32 glyph_value, int* px, int* py)
|
||||||
{
|
{
|
||||||
TT_Pos vec_x, vec_y;
|
TT_Pos vec_x, vec_y;
|
||||||
TTFINSTANCEINFO* ttf_inst_info = TTF_INST_INFO_P (devfont);
|
TTFINSTANCEINFO* ttf_inst_info = TTF_INST_INFO_P (devfont);
|
||||||
TTFGLYPHINFO* ttf_glyph_info = TTF_GLYPH_INFO_P (devfont);
|
TTFGLYPHINFO* ttf_glyph_info = TTF_GLYPH_INFO_P (devfont);
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (ttf_inst_info->rotation) {
|
if (ttf_inst_info->rotation) {
|
||||||
vec_x = ttf_inst_info->cur_advance;
|
vec_x = ttf_inst_info->cur_advance;
|
||||||
vec_y = 0;
|
vec_y = 0;
|
||||||
@@ -621,7 +629,7 @@ static DEVFONT* new_instance (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
memcpy (new_devfont, devfont, sizeof (DEVFONT));
|
memcpy (new_devfont, devfont, sizeof (DEVFONT));
|
||||||
|
|
||||||
if (need_sbc_font && devfont->charset_ops->bytes_maxlen_char > 1) {
|
if (need_sbc_font && devfont->charset_ops->bytes_maxlen_char > 1) {
|
||||||
char charset [LEN_FONT_NAME + 1];
|
char charset [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
|
|
||||||
fontGetCompatibleCharsetFromName (devfont->name, charset);
|
fontGetCompatibleCharsetFromName (devfont->name, charset);
|
||||||
new_devfont->charset_ops = GetCharsetOpsEx (charset);
|
new_devfont->charset_ops = GetCharsetOpsEx (charset);
|
||||||
@@ -754,6 +762,7 @@ static BOOL is_glyph_existed (LOGFONT* logfont, DEVFONT* devfont, Glyph32 glyph_
|
|||||||
TTFINSTANCEINFO* ttf_inst_info = TTF_INST_INFO_P (devfont);
|
TTFINSTANCEINFO* ttf_inst_info = TTF_INST_INFO_P (devfont);
|
||||||
TTFGLYPHINFO* ttf_glyph_info = ttf_inst_info->ttf_glyph_info;
|
TTFGLYPHINFO* ttf_glyph_info = ttf_inst_info->ttf_glyph_info;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if(devfont->charset_ops->conv_to_uc32)
|
if(devfont->charset_ops->conv_to_uc32)
|
||||||
uni_char = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
uni_char = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
||||||
else
|
else
|
||||||
@@ -771,7 +780,7 @@ static int is_rotatable (LOGFONT* logfont, DEVFONT* devfont, int rot_desired)
|
|||||||
}
|
}
|
||||||
/**************************** Global data ************************************/
|
/**************************** Global data ************************************/
|
||||||
FONTOPS __mg_ttf_ops = {
|
FONTOPS __mg_ttf_ops = {
|
||||||
get_glyph_type,
|
get_glyph_bmptype,
|
||||||
get_ave_width,
|
get_ave_width,
|
||||||
get_max_width,
|
get_max_width,
|
||||||
get_font_height,
|
get_font_height,
|
||||||
|
|||||||
+316
-183
File diff suppressed because it is too large
Load Diff
+22
-18
@@ -40,6 +40,14 @@
|
|||||||
#ifndef GUI_FREETYP2_H
|
#ifndef GUI_FREETYP2_H
|
||||||
#define GUI_FREETYP2_H
|
#define GUI_FREETYP2_H
|
||||||
|
|
||||||
|
#undef TTF_DBG
|
||||||
|
|
||||||
|
#ifndef TTF_DBG
|
||||||
|
#define DP(x)
|
||||||
|
#else
|
||||||
|
#define DP(x) do { printf x; } while (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
@@ -54,6 +62,7 @@ extern "C" {
|
|||||||
#include FT_CACHE_MANAGER_H
|
#include FT_CACHE_MANAGER_H
|
||||||
#include FT_TRIGONOMETRY_H
|
#include FT_TRIGONOMETRY_H
|
||||||
#include FT_IMAGE_H
|
#include FT_IMAGE_H
|
||||||
|
#include FT_TRUETYPE_TABLES_H
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
#define _MGFONT_TTF_CACHE 1
|
#define _MGFONT_TTF_CACHE 1
|
||||||
@@ -62,14 +71,13 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef _MGFONT_TTF_CACHE
|
#ifdef _MGFONT_TTF_CACHE
|
||||||
typedef unsigned long HCACHE;
|
typedef void* HCACHE;
|
||||||
typedef int (* MakeHashKeyFunc)(unsigned short unicode);
|
typedef int (* MakeHashKeyFunc)(Uchar32 unicode);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef struct tagFTFACEINFO {
|
typedef struct tagFTFACEINFO {
|
||||||
#ifdef _MGFONT_TTF_CACHE
|
#ifdef _MGFONT_TTF_CACHE
|
||||||
/*should be MAX_PATH*/
|
char* filepathname;
|
||||||
char filepathname[256];
|
|
||||||
int face_index;
|
int face_index;
|
||||||
int cmap_index;
|
int cmap_index;
|
||||||
#else
|
#else
|
||||||
@@ -114,38 +122,34 @@ typedef struct tagFTINSTANCEINFO {
|
|||||||
#define _TTF_HASH_NDIR 37
|
#define _TTF_HASH_NDIR 37
|
||||||
|
|
||||||
typedef struct tagTTFCACHEINFO {
|
typedef struct tagTTFCACHEINFO {
|
||||||
unsigned short unicode;
|
Uchar32 unicode;
|
||||||
short glyph_code;
|
FT_UInt glyph_code;
|
||||||
FT_Vector advance;
|
FT_Vector advance;
|
||||||
FT_BBox bbox;
|
FT_BBox bbox;
|
||||||
FT_Vector delta;
|
FT_Vector delta;
|
||||||
int flag;
|
int flag;
|
||||||
int pitch;
|
int pitch;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
void *bitmap;
|
void *bitmap;
|
||||||
} TTFCACHEINFO, *PTTFCACHEINFO;
|
} TTFCACHEINFO, *PTTFCACHEINFO;
|
||||||
|
|
||||||
extern HCACHE __mg_ttc_create(char *family, char *charset, DWORD style, int size,
|
extern HCACHE __mg_ttc_create(const char *df_name,
|
||||||
|
int style, int size, int rotation,
|
||||||
int nblk, int blksize, int ndir, MakeHashKeyFunc makeHashKey);
|
int nblk, int blksize, int ndir, MakeHashKeyFunc makeHashKey);
|
||||||
|
extern HCACHE __mg_ttc_is_exist(const char *df_name,
|
||||||
|
int style, int size, int rotation);
|
||||||
|
|
||||||
extern int __mg_ttc_write(HCACHE hCache, TTFCACHEINFO *data, int size);
|
extern int __mg_ttc_write(HCACHE hCache, TTFCACHEINFO *data, int size);
|
||||||
extern void __mg_ttc_release(HCACHE hCache);
|
extern void __mg_ttc_release(HCACHE hCache);
|
||||||
extern int __mg_ttc_sys_init(int maxCache, int cacheSize);
|
extern int __mg_ttc_sys_init(int maxCache, int cacheSize);
|
||||||
extern void __mg_ttc_sys_deinit(void);
|
extern void __mg_ttc_sys_deinit(void);
|
||||||
extern TTFCACHEINFO *__mg_ttc_search(HCACHE hCache,
|
extern TTFCACHEINFO *__mg_ttc_search(HCACHE hCache,
|
||||||
unsigned short unicode, int *size);
|
Uchar32 unicode, int *size);
|
||||||
extern HCACHE __mg_ttc_is_exist(char *family, char *charset,
|
|
||||||
DWORD style, int size);
|
|
||||||
extern void __mg_ttc_refer(HCACHE hCache);
|
extern void __mg_ttc_refer(HCACHE hCache);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#undef TTF_DBG
|
|
||||||
|
|
||||||
#ifndef TTF_DBG
|
|
||||||
#define DP(x)
|
|
||||||
#else
|
|
||||||
#define DP(x) do { printf x; } while (0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+378
-317
File diff suppressed because it is too large
Load Diff
+40
-31
@@ -154,7 +154,7 @@ static void clear_glyph_tree (QPF_GLYPHTREE* tree)
|
|||||||
free (tree->more);
|
free (tree->more);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void* load_font_data (const char* font_name, const char* file_name)
|
static void* load_font_data (DEVFONT* devfont, const char* font_name, const char* file_name)
|
||||||
{
|
{
|
||||||
FILE* fp = NULL;
|
FILE* fp = NULL;
|
||||||
uchar* data;
|
uchar* data;
|
||||||
@@ -222,7 +222,7 @@ error:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unload_font_data (void* data)
|
static void unload_font_data (DEVFONT* devfont, void* data)
|
||||||
{
|
{
|
||||||
QPFINFO* qpf_info = (QPFINFO*)data;
|
QPFINFO* qpf_info = (QPFINFO*)data;
|
||||||
|
|
||||||
@@ -275,7 +275,7 @@ static unsigned char def_smooth_bitmap [] =
|
|||||||
static QPF_GLYPH def_glyph = {&def_metrics, def_bitmap};
|
static QPF_GLYPH def_glyph = {&def_metrics, def_bitmap};
|
||||||
static QPF_GLYPH def_smooth_glyph = {&def_smooth_metrics, def_smooth_bitmap};
|
static QPF_GLYPH def_smooth_glyph = {&def_smooth_metrics, def_smooth_bitmap};
|
||||||
|
|
||||||
static DWORD get_glyph_type (LOGFONT* logfont, DEVFONT* devfont)
|
static DWORD get_glyph_bmptype (LOGFONT* logfont, DEVFONT* devfont)
|
||||||
{
|
{
|
||||||
if (QPFONT_INFO_P (devfont)->fm->flags & FLAG_MODE_SMOOTH)
|
if (QPFONT_INFO_P (devfont)->fm->flags & FLAG_MODE_SMOOTH)
|
||||||
return DEVFONTGLYPHTYPE_GREYBMP;
|
return DEVFONTGLYPHTYPE_GREYBMP;
|
||||||
@@ -302,7 +302,7 @@ static int get_font_height (LOGFONT* logfont, DEVFONT* devfont)
|
|||||||
* GET_DEVFONT_SCALE (logfont, devfont);
|
* GET_DEVFONT_SCALE (logfont, devfont);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect)
|
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect, int df_slot)
|
||||||
{
|
{
|
||||||
int height = QPFONT_INFO_P (devfont)->fm->ascent +
|
int height = QPFONT_INFO_P (devfont)->fm->ascent +
|
||||||
QPFONT_INFO_P (devfont)->fm->descent;
|
QPFONT_INFO_P (devfont)->fm->descent;
|
||||||
@@ -311,7 +311,8 @@ static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect)
|
|||||||
if (logfont->style & FS_OTHER_AUTOSCALE)
|
if (logfont->style & FS_OTHER_AUTOSCALE)
|
||||||
scale = font_GetBestScaleFactor (height, expect);
|
scale = font_GetBestScaleFactor (height, expect);
|
||||||
|
|
||||||
SET_DEVFONT_SCALE (logfont, devfont, scale);
|
if (df_slot >= 0 && df_slot < MAXNR_DEVFONTS)
|
||||||
|
SET_DEVFONT_SCALE (logfont, df_slot, scale);
|
||||||
|
|
||||||
return height * scale;
|
return height * scale;
|
||||||
}
|
}
|
||||||
@@ -329,11 +330,12 @@ static int get_font_descent (LOGFONT* logfont, DEVFONT* devfont)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
const Glyph32 glyph_value, int* pitch, unsigned short* scale)
|
Glyph32 glyph_value, SIZE* sz, int* pitch, unsigned short* scale)
|
||||||
{
|
{
|
||||||
unsigned int uc16;
|
unsigned int uc16;
|
||||||
QPF_GLYPH* glyph;
|
QPF_GLYPH* glyph;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (devfont->charset_ops->conv_to_uc32)
|
if (devfont->charset_ops->conv_to_uc32)
|
||||||
uc16 = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
uc16 = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
||||||
else
|
else
|
||||||
@@ -342,10 +344,10 @@ static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
glyph = get_glyph (QPFONT_INFO_P (devfont)->tree, uc16);
|
glyph = get_glyph (QPFONT_INFO_P (devfont)->tree, uc16);
|
||||||
|
|
||||||
if (glyph == NULL) {
|
if (glyph == NULL) {
|
||||||
if (uc16 < 0x80 && logfont->sbc_devfont != devfont) { /* ASCII */
|
if (uc16 < 0x80 && logfont->devfonts[0] != devfont) { /* ASCII */
|
||||||
unsigned char ascii_ch = uc16;
|
unsigned char ascii_ch = uc16;
|
||||||
return logfont->sbc_devfont->font_ops->get_glyph_monobitmap (logfont,
|
return logfont->devfonts[0]->font_ops->get_glyph_monobitmap (logfont,
|
||||||
logfont->sbc_devfont, ascii_ch, pitch, scale);
|
logfont->devfonts[0], ascii_ch, sz, pitch, scale);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
glyph = &def_glyph;
|
glyph = &def_glyph;
|
||||||
@@ -365,11 +367,12 @@ static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const void* get_glyph_greybitmap (LOGFONT* logfont, DEVFONT* devfont,
|
static const void* get_glyph_greybitmap (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
Glyph32 glyph_value, int* pitch, unsigned short* scale)
|
Glyph32 glyph_value, SIZE* sz, int* pitch, unsigned short* scale)
|
||||||
{
|
{
|
||||||
unsigned int uc16;
|
unsigned int uc16;
|
||||||
QPF_GLYPH* glyph;
|
QPF_GLYPH* glyph;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (scale)
|
if (scale)
|
||||||
*scale = GET_DEVFONT_SCALE (logfont, devfont);
|
*scale = GET_DEVFONT_SCALE (logfont, devfont);
|
||||||
|
|
||||||
@@ -400,6 +403,7 @@ static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
QPF_GLYPH* glyph;
|
QPF_GLYPH* glyph;
|
||||||
unsigned short scale = GET_DEVFONT_SCALE (logfont, devfont);
|
unsigned short scale = GET_DEVFONT_SCALE (logfont, devfont);
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if(devfont->charset_ops->conv_to_uc32)
|
if(devfont->charset_ops->conv_to_uc32)
|
||||||
uc16 = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
uc16 = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
||||||
else
|
else
|
||||||
@@ -408,21 +412,21 @@ static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
glyph = get_glyph (QPFONT_INFO_P (devfont)->tree, uc16);
|
glyph = get_glyph (QPFONT_INFO_P (devfont)->tree, uc16);
|
||||||
|
|
||||||
if (glyph == NULL) {
|
if (glyph == NULL) {
|
||||||
if (uc16 < 0x80 && logfont->sbc_devfont != devfont) { /* ASCII */
|
if (uc16 < 0x80 && logfont->devfonts[0] != devfont) { /* ASCII */
|
||||||
unsigned char ascii_ch = uc16;
|
unsigned char ascii_ch = uc16;
|
||||||
if (logfont->sbc_devfont->font_ops->get_glyph_bbox) {
|
if (logfont->devfonts[0]->font_ops->get_glyph_bbox) {
|
||||||
return logfont->sbc_devfont->font_ops->get_glyph_bbox (logfont,
|
return logfont->devfonts[0]->font_ops->get_glyph_bbox (logfont,
|
||||||
logfont->sbc_devfont, ascii_ch,
|
logfont->devfonts[0], ascii_ch,
|
||||||
px, py, pwidth, pheight);
|
px, py, pwidth, pheight);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int width, height, ascent;
|
int width, height, ascent;
|
||||||
logfont->sbc_devfont->font_ops->get_glyph_advance
|
logfont->devfonts[0]->font_ops->get_glyph_advance
|
||||||
(logfont, logfont->sbc_devfont, glyph_value, &width, 0);
|
(logfont, logfont->devfonts[0], glyph_value, &width, 0);
|
||||||
height = logfont->sbc_devfont->font_ops->get_font_height
|
height = logfont->devfonts[0]->font_ops->get_font_height
|
||||||
(logfont, logfont->sbc_devfont);
|
(logfont, logfont->devfonts[0]);
|
||||||
ascent = logfont->sbc_devfont->font_ops->get_font_ascent
|
ascent = logfont->devfonts[0]->font_ops->get_font_ascent
|
||||||
(logfont, logfont->sbc_devfont);
|
(logfont, logfont->devfonts[0]);
|
||||||
|
|
||||||
if (pwidth) *pwidth = width;
|
if (pwidth) *pwidth = width;
|
||||||
if (pheight) *pheight = height;
|
if (pheight) *pheight = height;
|
||||||
@@ -452,6 +456,7 @@ static int get_glyph_advance (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
QPF_GLYPH* glyph;
|
QPF_GLYPH* glyph;
|
||||||
int advance;
|
int advance;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if(devfont->charset_ops->conv_to_uc32)
|
if(devfont->charset_ops->conv_to_uc32)
|
||||||
uc16 = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
uc16 = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
||||||
else
|
else
|
||||||
@@ -460,11 +465,11 @@ static int get_glyph_advance (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
glyph = get_glyph (QPFONT_INFO_P (devfont)->tree, uc16);
|
glyph = get_glyph (QPFONT_INFO_P (devfont)->tree, uc16);
|
||||||
|
|
||||||
if (glyph == NULL) {
|
if (glyph == NULL) {
|
||||||
if (uc16 < 0x80 && logfont->sbc_devfont != devfont) { /* ASCII */
|
if (uc16 < 0x80 && logfont->devfonts[0] != devfont) { /* ASCII */
|
||||||
unsigned char ascii_ch = uc16;
|
unsigned char ascii_ch = uc16;
|
||||||
if (logfont->sbc_devfont->font_ops->get_glyph_advance) {
|
if (logfont->devfonts[0]->font_ops->get_glyph_advance) {
|
||||||
return logfont->sbc_devfont->font_ops->
|
return logfont->devfonts[0]->font_ops->
|
||||||
get_glyph_advance (logfont, logfont->sbc_devfont,
|
get_glyph_advance (logfont, logfont->devfonts[0],
|
||||||
ascii_ch, px, py);
|
ascii_ch, px, py);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -482,9 +487,12 @@ static DEVFONT* new_instance (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
BOOL need_sbc_font)
|
BOOL need_sbc_font)
|
||||||
{
|
{
|
||||||
if (QPFONT_INFO_P (devfont)->fm->flags & FLAG_MODE_SMOOTH) {
|
if (QPFONT_INFO_P (devfont)->fm->flags & FLAG_MODE_SMOOTH) {
|
||||||
logfont->style &= ~FS_WEIGHT_SUBPIXEL;
|
logfont->style &= ~FS_RENDER_MASK;
|
||||||
logfont->style |= FS_WEIGHT_BOOK;
|
logfont->style |= FS_RENDER_GREY;
|
||||||
logfont->style &= ~FS_WEIGHT_LIGHT;
|
}
|
||||||
|
else {
|
||||||
|
logfont->style &= ~FS_RENDER_MASK;
|
||||||
|
logfont->style |= FS_RENDER_MONO;
|
||||||
}
|
}
|
||||||
|
|
||||||
return devfont;
|
return devfont;
|
||||||
@@ -495,6 +503,7 @@ static BOOL is_glyph_existed (LOGFONT* logfont, DEVFONT* devfont, Glyph32 glyph_
|
|||||||
unsigned int uc16;
|
unsigned int uc16;
|
||||||
QPF_GLYPH* glyph;
|
QPF_GLYPH* glyph;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if(devfont->charset_ops->conv_to_uc32)
|
if(devfont->charset_ops->conv_to_uc32)
|
||||||
uc16 = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
uc16 = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
||||||
else
|
else
|
||||||
@@ -503,9 +512,9 @@ static BOOL is_glyph_existed (LOGFONT* logfont, DEVFONT* devfont, Glyph32 glyph_
|
|||||||
glyph = get_glyph (QPFONT_INFO_P (devfont)->tree, uc16);
|
glyph = get_glyph (QPFONT_INFO_P (devfont)->tree, uc16);
|
||||||
|
|
||||||
if (glyph == NULL) {
|
if (glyph == NULL) {
|
||||||
if (uc16 < 0x80 && logfont->sbc_devfont != devfont) /* ASCII */
|
if (uc16 < 0x80 && logfont->devfonts[0] != devfont) /* ASCII */
|
||||||
return logfont->sbc_devfont->font_ops->is_glyph_existed (logfont,
|
return logfont->devfonts[0]->font_ops->is_glyph_existed (logfont,
|
||||||
logfont->sbc_devfont, glyph_value);
|
logfont->devfonts[0], glyph_value);
|
||||||
else
|
else
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -519,7 +528,7 @@ static int is_rotatable (LOGFONT* logfont, DEVFONT* devfont, int rot_desired)
|
|||||||
|
|
||||||
/**************************** Global data ************************************/
|
/**************************** Global data ************************************/
|
||||||
FONTOPS __mg_qpf_ops = {
|
FONTOPS __mg_qpf_ops = {
|
||||||
get_glyph_type,
|
get_glyph_bmptype,
|
||||||
get_ave_width,
|
get_ave_width,
|
||||||
get_max_width,
|
get_max_width,
|
||||||
get_font_height,
|
get_font_height,
|
||||||
|
|||||||
+13
-15
@@ -65,11 +65,7 @@
|
|||||||
#define RBFONT_INFO(devfont) ((RBFINFO*)(devfont.data))
|
#define RBFONT_INFO(devfont) ((RBFINFO*)(devfont.data))
|
||||||
|
|
||||||
/********************** Load/Unload of raw bitmap font ***********************/
|
/********************** Load/Unload of raw bitmap font ***********************/
|
||||||
#if 0
|
static void* load_font_data (DEVFONT* devfont, const char* font_name, const char* file_name)
|
||||||
static void* load_font_data (char* font_name, char* file_name,
|
|
||||||
char* real_font_name)
|
|
||||||
#endif
|
|
||||||
static void* load_font_data (const char* font_name, const char* file_name)
|
|
||||||
{
|
{
|
||||||
FILE* fp = NULL;
|
FILE* fp = NULL;
|
||||||
RBFINFO* rbf_info = calloc (1, sizeof(RBFINFO));
|
RBFINFO* rbf_info = calloc (1, sizeof(RBFINFO));
|
||||||
@@ -129,7 +125,7 @@ error_load:
|
|||||||
|
|
||||||
/********************** Init/Term of raw bitmap font ***********************/
|
/********************** Init/Term of raw bitmap font ***********************/
|
||||||
|
|
||||||
static void unload_font_data (void* data)
|
static void unload_font_data (DEVFONT* devfont, void* data)
|
||||||
{
|
{
|
||||||
RBFINFO* rbfinfo = (RBFINFO*)data;
|
RBFINFO* rbfinfo = (RBFINFO*)data;
|
||||||
#ifdef HAVE_MMAP
|
#ifdef HAVE_MMAP
|
||||||
@@ -143,7 +139,7 @@ static void unload_font_data (void* data)
|
|||||||
|
|
||||||
/*************** Raw bitmap font operations *********************************/
|
/*************** Raw bitmap font operations *********************************/
|
||||||
|
|
||||||
static DWORD get_glyph_type (LOGFONT* logfont, DEVFONT* devfont)
|
static DWORD get_glyph_bmptype (LOGFONT* logfont, DEVFONT* devfont)
|
||||||
{
|
{
|
||||||
return DEVFONTGLYPHTYPE_MONOBMP;
|
return DEVFONTGLYPHTYPE_MONOBMP;
|
||||||
}
|
}
|
||||||
@@ -158,7 +154,7 @@ static int get_font_height (LOGFONT* logfont, DEVFONT* devfont)
|
|||||||
return RBFONT_INFO_P (devfont)->height * GET_DEVFONT_SCALE (logfont, devfont);
|
return RBFONT_INFO_P (devfont)->height * GET_DEVFONT_SCALE (logfont, devfont);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect)
|
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect, int df_slot)
|
||||||
{
|
{
|
||||||
int height = RBFONT_INFO_P (devfont)->height;
|
int height = RBFONT_INFO_P (devfont)->height;
|
||||||
unsigned short scale = 1;
|
unsigned short scale = 1;
|
||||||
@@ -166,7 +162,8 @@ static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect)
|
|||||||
if (logfont->style & FS_OTHER_AUTOSCALE)
|
if (logfont->style & FS_OTHER_AUTOSCALE)
|
||||||
scale = font_GetBestScaleFactor (height, expect);
|
scale = font_GetBestScaleFactor (height, expect);
|
||||||
|
|
||||||
SET_DEVFONT_SCALE (logfont, devfont, scale);
|
if (df_slot >= 0 && df_slot < MAXNR_DEVFONTS)
|
||||||
|
SET_DEVFONT_SCALE (logfont, df_slot, scale);
|
||||||
|
|
||||||
return height * scale;
|
return height * scale;
|
||||||
}
|
}
|
||||||
@@ -208,13 +205,13 @@ static int get_font_descent (LOGFONT* logfont, DEVFONT* devfont)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
const Glyph32 glyph_value, int* pitch, unsigned short* scale)
|
Glyph32 glyph_value, SIZE* sz, int* pitch, unsigned short* scale)
|
||||||
{
|
{
|
||||||
int bitmap_size;
|
int bitmap_size;
|
||||||
Glyph32 glyph_tmp = glyph_value;
|
|
||||||
|
|
||||||
if (glyph_tmp >= RBFONT_INFO_P (devfont)->nr_glyphs)
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
glyph_tmp = devfont->charset_ops->def_glyph_value;
|
if (glyph_value >= RBFONT_INFO_P (devfont)->nr_glyphs)
|
||||||
|
glyph_value = devfont->charset_ops->def_char_value;
|
||||||
|
|
||||||
bitmap_size = ((RBFONT_INFO_P (devfont)->width + 7) >> 3)
|
bitmap_size = ((RBFONT_INFO_P (devfont)->width + 7) >> 3)
|
||||||
* RBFONT_INFO_P (devfont)->height;
|
* RBFONT_INFO_P (devfont)->height;
|
||||||
@@ -224,12 +221,13 @@ static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
if (scale)
|
if (scale)
|
||||||
*scale = GET_DEVFONT_SCALE (logfont, devfont);
|
*scale = GET_DEVFONT_SCALE (logfont, devfont);
|
||||||
|
|
||||||
return RBFONT_INFO_P (devfont)->data + bitmap_size * glyph_tmp;
|
return RBFONT_INFO_P (devfont)->data + bitmap_size * glyph_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL is_glyph_existed (LOGFONT* logfont, DEVFONT* devfont,
|
static BOOL is_glyph_existed (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
Glyph32 glyph_value)
|
Glyph32 glyph_value)
|
||||||
{
|
{
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (glyph_value > RBFONT_INFO_P(devfont)->nr_glyphs)
|
if (glyph_value > RBFONT_INFO_P(devfont)->nr_glyphs)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
else
|
else
|
||||||
@@ -268,7 +266,7 @@ static int is_rotatable (LOGFONT* logfont, DEVFONT* devfont, int rot_desired)
|
|||||||
|
|
||||||
/**************************** Global data ************************************/
|
/**************************** Global data ************************************/
|
||||||
FONTOPS __mg_rbf_ops = {
|
FONTOPS __mg_rbf_ops = {
|
||||||
get_glyph_type,
|
get_glyph_bmptype,
|
||||||
get_ave_width,
|
get_ave_width,
|
||||||
get_ave_width, // max_width same as ave_width
|
get_ave_width, // max_width same as ave_width
|
||||||
get_font_height,
|
get_font_height,
|
||||||
|
|||||||
+11
-5
@@ -113,7 +113,7 @@ static BOOL load_fonts(void)
|
|||||||
se_dev_fonts = calloc (font_table_size, sizeof (DEVFONT));
|
se_dev_fonts = calloc (font_table_size, sizeof (DEVFONT));
|
||||||
|
|
||||||
for (i = 0; i < font_table_size; i++) {
|
for (i = 0; i < font_table_size; i++) {
|
||||||
char charset[LEN_FONT_NAME + 1];
|
char charset[LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
CHARSETOPS *charset_ops;
|
CHARSETOPS *charset_ops;
|
||||||
const char *font_name;
|
const char *font_name;
|
||||||
int font_id;
|
int font_id;
|
||||||
@@ -158,7 +158,7 @@ static BOOL load_fonts(void)
|
|||||||
if ((nr_charsets = charsetGetCharsetsNumber (charsets)) > 1) {
|
if ((nr_charsets = charsetGetCharsetsNumber (charsets)) > 1) {
|
||||||
int j;
|
int j;
|
||||||
for (j = 1; j < nr_charsets; j++) {
|
for (j = 1; j < nr_charsets; j++) {
|
||||||
char charset [LEN_FONT_NAME + 1];
|
char charset [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
CHARSETOPS* charset_ops;
|
CHARSETOPS* charset_ops;
|
||||||
DEVFONT* new_devfont;
|
DEVFONT* new_devfont;
|
||||||
|
|
||||||
@@ -334,6 +334,7 @@ static int get_glyph_width (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
SeLogFont selogfont;
|
SeLogFont selogfont;
|
||||||
int width;
|
int width;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (devfont->charset_ops->conv_to_uc32)
|
if (devfont->charset_ops->conv_to_uc32)
|
||||||
wc = (*devfont->charset_ops->conv_to_uc32)(glyph_value);
|
wc = (*devfont->charset_ops->conv_to_uc32)(glyph_value);
|
||||||
else
|
else
|
||||||
@@ -364,7 +365,7 @@ static int get_max_width (LOGFONT* logfont, DEVFONT* devfont)
|
|||||||
return logfont->size;
|
return logfont->size;
|
||||||
}
|
}
|
||||||
|
|
||||||
static DWORD get_glyph_type (LOGFONT* logfont, DEVFONT* devfont)
|
static DWORD get_glyph_bmptype (LOGFONT* logfont, DEVFONT* devfont)
|
||||||
{
|
{
|
||||||
if (logfont->style & FS_WEIGHT_BOOK)
|
if (logfont->style & FS_WEIGHT_BOOK)
|
||||||
return DEVFONTGLYPHTYPE_GREYBMP;
|
return DEVFONTGLYPHTYPE_GREYBMP;
|
||||||
@@ -440,6 +441,7 @@ static const void* get_glyph_greybitmap (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
printf("in get_glyph_greybitmap....\n");
|
printf("in get_glyph_greybitmap....\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (devfont->charset_ops->conv_to_uc32)
|
if (devfont->charset_ops->conv_to_uc32)
|
||||||
wc = (*devfont->charset_ops->conv_to_uc32)(glyph_value);
|
wc = (*devfont->charset_ops->conv_to_uc32)(glyph_value);
|
||||||
else
|
else
|
||||||
@@ -466,7 +468,7 @@ static const void* get_glyph_greybitmap (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
const Glyph32 glyph_value, int* pitch, unsigned short* scale)
|
Glyph32 glyph_value, int* pitch, unsigned short* scale)
|
||||||
{
|
{
|
||||||
seunichar16 wc;
|
seunichar16 wc;
|
||||||
SeLogFont selogfont;
|
SeLogFont selogfont;
|
||||||
@@ -476,6 +478,7 @@ static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
printf("in get_char_bitmap....\n");
|
printf("in get_char_bitmap....\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (devfont->charset_ops->conv_to_uc32)
|
if (devfont->charset_ops->conv_to_uc32)
|
||||||
wc = (*devfont->charset_ops->conv_to_uc32)(glyph_value);
|
wc = (*devfont->charset_ops->conv_to_uc32)(glyph_value);
|
||||||
else
|
else
|
||||||
@@ -505,6 +508,7 @@ static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
if(px == 0 && py == 0 && pwidth == 0 && pheight == 0)
|
if(px == 0 && py == 0 && pwidth == 0 && pheight == 0)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (devfont->charset_ops->conv_to_uc32)
|
if (devfont->charset_ops->conv_to_uc32)
|
||||||
wc = (*devfont->charset_ops->conv_to_uc32)(glyph_value);
|
wc = (*devfont->charset_ops->conv_to_uc32)(glyph_value);
|
||||||
else
|
else
|
||||||
@@ -534,6 +538,7 @@ static int get_glyph_advance (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
SeLogFont selogfont;
|
SeLogFont selogfont;
|
||||||
int x = *px;
|
int x = *px;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (devfont->charset_ops->conv_to_uc32)
|
if (devfont->charset_ops->conv_to_uc32)
|
||||||
wc = (*devfont->charset_ops->conv_to_uc32)(glyph_value);
|
wc = (*devfont->charset_ops->conv_to_uc32)(glyph_value);
|
||||||
else
|
else
|
||||||
@@ -558,6 +563,7 @@ static BOOL is_glyph_existed (LOGFONT* logfont, DEVFONT* devfont, Glyph32 glyph_
|
|||||||
int uni_char;
|
int uni_char;
|
||||||
int x, y, width, height;
|
int x, y, width, height;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if(devfont->charset_ops->conv_to_uc32)
|
if(devfont->charset_ops->conv_to_uc32)
|
||||||
uni_char = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
uni_char = (*devfont->charset_ops->conv_to_uc32) (glyph_value);
|
||||||
else
|
else
|
||||||
@@ -577,7 +583,7 @@ static int is_rotatable (LOGFONT* logfont, DEVFONT* devfont, int rot_desired)
|
|||||||
|
|
||||||
/**************************** Global data ************************************/
|
/**************************** Global data ************************************/
|
||||||
static FONTOPS scripteasy_font_ops = {
|
static FONTOPS scripteasy_font_ops = {
|
||||||
get_glyph_type,
|
get_glyph_bmptype,
|
||||||
get_ave_width,
|
get_ave_width,
|
||||||
get_max_width,
|
get_max_width,
|
||||||
get_font_height,
|
get_font_height,
|
||||||
|
|||||||
+11
-11
@@ -102,10 +102,10 @@ BOOL mg_InitSysFont (void)
|
|||||||
|
|
||||||
for (i = 0; i < nr_fonts; i++) {
|
for (i = 0; i < nr_fonts; i++) {
|
||||||
char key [11];
|
char key [11];
|
||||||
char type [LEN_FONT_NAME + 1];
|
char type [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
char family [LEN_FONT_NAME + 1];
|
char family [LEN_LOGFONT_FAMILY_FILED + 1];
|
||||||
char style [LEN_FONT_NAME + 1];
|
char style [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
char charset [LEN_FONT_NAME + 1];
|
char charset [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
char font_name [LEN_DEVFONT_NAME + 1];
|
char font_name [LEN_DEVFONT_NAME + 1];
|
||||||
int height;
|
int height;
|
||||||
int j = 0, need = 0;
|
int j = 0, need = 0;
|
||||||
@@ -205,25 +205,25 @@ void mg_TermSysFont (void)
|
|||||||
const char* GUIAPI GetSysCharset (BOOL wchar)
|
const char* GUIAPI GetSysCharset (BOOL wchar)
|
||||||
{
|
{
|
||||||
if (wchar) {
|
if (wchar) {
|
||||||
if (g_SysLogFont[1]->mbc_devfont)
|
if (g_SysLogFont[1]->devfonts[1])
|
||||||
return MBC_DEVFONT_INFO_P (g_SysLogFont[1])->charset_ops->name;
|
return g_SysLogFont[1]->devfonts[1]->charset_ops->name;
|
||||||
else
|
else
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return SBC_DEVFONT_INFO_P (g_SysLogFont[0])->charset_ops->name;
|
return g_SysLogFont[0]->devfonts[0]->charset_ops->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GUIAPI GetSysCharWidth (void)
|
int GUIAPI GetSysCharWidth (void)
|
||||||
{
|
{
|
||||||
DEVFONT* sbc_devfont = g_SysLogFont[0]->sbc_devfont;
|
DEVFONT* sbc_devfont = g_SysLogFont[0]->devfonts[0];
|
||||||
|
|
||||||
return sbc_devfont->font_ops->get_ave_width (g_SysLogFont[0], sbc_devfont);
|
return sbc_devfont->font_ops->get_ave_width (g_SysLogFont[0], sbc_devfont);
|
||||||
}
|
}
|
||||||
|
|
||||||
int GUIAPI GetSysCCharWidth (void)
|
int GUIAPI GetSysCCharWidth (void)
|
||||||
{
|
{
|
||||||
DEVFONT* mbc_devfont = g_SysLogFont[1]->mbc_devfont;
|
DEVFONT* mbc_devfont = g_SysLogFont[1]->devfonts[1];
|
||||||
|
|
||||||
if (mbc_devfont)
|
if (mbc_devfont)
|
||||||
return mbc_devfont->font_ops->get_ave_width (g_SysLogFont[1], mbc_devfont);
|
return mbc_devfont->font_ops->get_ave_width (g_SysLogFont[1], mbc_devfont);
|
||||||
@@ -238,14 +238,14 @@ int GUIAPI GetSysCharHeight (void)
|
|||||||
|
|
||||||
int GUIAPI GetSysFontMaxWidth (int font_id)
|
int GUIAPI GetSysFontMaxWidth (int font_id)
|
||||||
{
|
{
|
||||||
DEVFONT* sbc_devfont = g_SysLogFont[font_id]->sbc_devfont;
|
DEVFONT* sbc_devfont = g_SysLogFont[font_id]->devfonts[0];
|
||||||
|
|
||||||
return sbc_devfont->font_ops->get_max_width (g_SysLogFont[font_id], sbc_devfont);
|
return sbc_devfont->font_ops->get_max_width (g_SysLogFont[font_id], sbc_devfont);
|
||||||
}
|
}
|
||||||
|
|
||||||
int GUIAPI GetSysFontAveWidth (int font_id)
|
int GUIAPI GetSysFontAveWidth (int font_id)
|
||||||
{
|
{
|
||||||
DEVFONT* sbc_devfont = g_SysLogFont[font_id]->sbc_devfont;
|
DEVFONT* sbc_devfont = g_SysLogFont[font_id]->devfonts[0];
|
||||||
|
|
||||||
return sbc_devfont->font_ops->get_ave_width (g_SysLogFont[font_id], sbc_devfont);
|
return sbc_devfont->font_ops->get_ave_width (g_SysLogFont[font_id], sbc_devfont);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ BOOL mg_InitSysFont (void)
|
|||||||
|
|
||||||
for (i = 0; i < nr_fonts; i++) {
|
for (i = 0; i < nr_fonts; i++) {
|
||||||
char key [11];
|
char key [11];
|
||||||
char charset [LEN_FONT_NAME + 1];
|
char charset [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
char file [MAX_PATH + 1];
|
char file [MAX_PATH + 1];
|
||||||
|
|
||||||
sprintf (key, "name%d", i);
|
sprintf (key, "name%d", i);
|
||||||
|
|||||||
@@ -6,8 +6,7 @@ u:arabic_test_unicode
|
|||||||
hex:arabic_test_hex
|
hex:arabic_test_hex
|
||||||
|
|
||||||
MINIGUI_COMMON = /usr/local/include/minigui
|
MINIGUI_COMMON = /usr/local/include/minigui
|
||||||
LIBS = -lminigui_ths -lm -ljpeg -lz -lpng -lpthread -lttf
|
LIBS = -lminigui_ths -lm -ljpeg -lz -lpng -lpthread -lfreetype
|
||||||
#LIBS = -lminigui_ths -lm -ljpeg -lz -lpng -lpthread -lfreetype
|
|
||||||
|
|
||||||
arabic_test:arabic_test.c $(MINIGUI_COMMON)
|
arabic_test:arabic_test.c $(MINIGUI_COMMON)
|
||||||
gcc arabic_test.c -Wall -g -o arabic_test $(LIBS)
|
gcc arabic_test.c -Wall -g -o arabic_test $(LIBS)
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ void read_total_file( void )
|
|||||||
fclose (fp);
|
fclose (fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
|
static LRESULT HelloWinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
switch (message) {
|
switch (message) {
|
||||||
|
|||||||
@@ -101,10 +101,10 @@ static int test_correctness ()
|
|||||||
if (index < 0) /* not a letter.*/
|
if (index < 0) /* not a letter.*/
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
glyph_value = iso8859_6_char_glyph_value (NULL, 0, c, 1);
|
glyph_value = iso8859_6_get_char_value (NULL, 0, c, 1);
|
||||||
fprintf (stderr, "%x 's glyph value = %x\n", *c, glyph_value);
|
fprintf (stderr, "%x 's glyph value = %x\n", *c, glyph_value);
|
||||||
|
|
||||||
if (!test_glyph_value (index, glyph_value)) {
|
if (!iso8859_6_test_glyph_value (index, glyph_value)) {
|
||||||
fprintf (stderr, "Shape error: %x\n", *c);
|
fprintf (stderr, "Shape error: %x\n", *c);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,13 +6,13 @@ helloworld:helloworld.c
|
|||||||
gcc helloworld.c -Wall -g -o helloworld -lminigui_ths -lm -ljpeg -lz -lfreetype -lpng -lpthread
|
gcc helloworld.c -Wall -g -o helloworld -lminigui_ths -lm -ljpeg -lz -lfreetype -lpng -lpthread
|
||||||
|
|
||||||
hebrew_test:hebrew_test.c
|
hebrew_test:hebrew_test.c
|
||||||
gcc hebrew_test.c -g -o hebrew_test -lminigui_ths -lm -ljpeg -lz -lttf -lpng -lpthread
|
gcc hebrew_test.c -g -o hebrew_test -lminigui_ths -lm -ljpeg -lz -lfreetype -lpng -lpthread
|
||||||
|
|
||||||
hebrew_test_release:hebrew_test.c
|
hebrew_test_release:hebrew_test.c
|
||||||
gcc hebrew_test.c -g -o hebrew_test -lminigui_ths -lm -ljpeg -lz -lttf -lpng -lpthread
|
gcc hebrew_test.c -g -o hebrew_test -lminigui_ths -lm -ljpeg -lz -lfreetype -lpng -lpthread
|
||||||
|
|
||||||
hebrew_test_debug:hebrew_test.c
|
hebrew_test_debug:hebrew_test.c
|
||||||
gcc hebrew_test.c -DARABIC_DEBUG -g -o hebrew_test -lminigui_ths -lm -ljpeg -lz -lttf -lpng -lpthread
|
gcc hebrew_test.c -DARABIC_DEBUG -g -o hebrew_test -lminigui_ths -lm -ljpeg -lz -lfreetype -lpng -lpthread
|
||||||
|
|
||||||
hebrew_test_unicode:hebrew_test.c
|
hebrew_test_unicode:hebrew_test.c
|
||||||
gcc hebrew_test.c -DARABIC_UNICODE -DARABIC_DEBUG -g -o hebrew_test_u -lminigui_ths -lm -lfreetype -ljpeg -lz -lpng -lpthread
|
gcc hebrew_test.c -DARABIC_UNICODE -DARABIC_DEBUG -g -o hebrew_test_u -lminigui_ths -lm -lfreetype -ljpeg -lz -lpng -lpthread
|
||||||
|
|||||||
@@ -59,23 +59,23 @@ char filename[256];
|
|||||||
char fontname[50];
|
char fontname[50];
|
||||||
|
|
||||||
BOOL textout = TRUE;
|
BOOL textout = TRUE;
|
||||||
RECT arabic_rc = {0, 0, 640, 480};
|
RECT hebrew_rc = {0, 0, 640, 480};
|
||||||
int line_num = 0;
|
int line_num = 0;
|
||||||
|
|
||||||
static char msg_text [256] = "Show text with TextOut.";
|
static char msg_text [256] = "Show text with TextOut.";
|
||||||
|
|
||||||
static FILE *fp = NULL;
|
static FILE *fp = NULL;
|
||||||
static PLOGFONT logfont_iso8859_8;
|
static PLOGFONT logfont_iso8859_8;
|
||||||
//static char arabic_text[] = {0xc7,0xe4,0xe1,0xd1,0xea,0xe2,0xa0,0xc7,0xe4,0xca,0xe2,0xe6,0xea,0x00};
|
//static char hebrew_text[] = {0xc7,0xe4,0xe1,0xd1,0xea,0xe2,0xa0,0xc7,0xe4,0xca,0xe2,0xe6,0xea,0x00};
|
||||||
|
|
||||||
static int reset_fp_pos()
|
static int reset_fp_pos()
|
||||||
{
|
{
|
||||||
arabic_rc.left = 0;
|
hebrew_rc.left = 0;
|
||||||
arabic_rc.top = 0;
|
hebrew_rc.top = 0;
|
||||||
arabic_rc.right = g_rcScr.right - 24;
|
hebrew_rc.right = g_rcScr.right - 24;
|
||||||
arabic_rc.bottom = g_rcScr.bottom;
|
hebrew_rc.bottom = g_rcScr.bottom;
|
||||||
if(!fp){
|
if(!fp){
|
||||||
DBGLOG2("============================= arabic_test %s===============================\n", filename);
|
DBGLOG2("============================= hebrew_test %s===============================\n", filename);
|
||||||
fp = fopen(filename, "rb");
|
fp = fopen(filename, "rb");
|
||||||
if (!fp) {
|
if (!fp) {
|
||||||
DBGLOG2("cannot open %s\n", filename);
|
DBGLOG2("cannot open %s\n", filename);
|
||||||
@@ -140,7 +140,7 @@ void read_total_file( void )
|
|||||||
fclose (fp);
|
fclose (fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
|
static LRESULT HelloWinProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
switch (message) {
|
switch (message) {
|
||||||
@@ -196,13 +196,13 @@ static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
|
|||||||
|
|
||||||
if(textout == TRUE) {
|
if(textout == TRUE) {
|
||||||
if(GetTextAlign(hdc) == TA_RIGHT)
|
if(GetTextAlign(hdc) == TA_RIGHT)
|
||||||
TextOut(hdc, arabic_rc.right, i*line_height, pline);
|
TextOut(hdc, hebrew_rc.right, i*line_height, pline);
|
||||||
else
|
else
|
||||||
TextOut(hdc, arabic_rc.left, i*line_height, pline);
|
TextOut(hdc, hebrew_rc.left, i*line_height, pline);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
int height = DrawText(hdc, pline, -1, &arabic_rc, DT_RIGHT);
|
int height = DrawText(hdc, pline, -1, &hebrew_rc, DT_RIGHT);
|
||||||
arabic_rc.top += height;
|
hebrew_rc.top += height;
|
||||||
}
|
}
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
@@ -210,7 +210,7 @@ static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
|
|||||||
/*
|
/*
|
||||||
else{
|
else{
|
||||||
read_total_file();
|
read_total_file();
|
||||||
DrawText(hdc, filebuf, -1, &arabic_rc, DT_RIGHT);
|
DrawText(hdc, filebuf, -1, &hebrew_rc, DT_RIGHT);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
Executable → Regular
+39
-39
File diff suppressed because it is too large
Load Diff
+6
-3
@@ -79,7 +79,7 @@ static encstruct default_enc;
|
|||||||
|
|
||||||
#define CHARSPACEUNIT2PIXEL(x) (x/1000)
|
#define CHARSPACEUNIT2PIXEL(x) (x/1000)
|
||||||
|
|
||||||
static void* load_font_data (const char* font_name, const char* file_name)
|
static void* load_font_data (DEVFONT* devfont, const char* font_name, const char* file_name)
|
||||||
{
|
{
|
||||||
int j;
|
int j;
|
||||||
int font_id;
|
int font_id;
|
||||||
@@ -109,7 +109,7 @@ error:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unload_font_data (void* data)
|
static void unload_font_data (DEVFONT* devfont, void* data)
|
||||||
{
|
{
|
||||||
free (data);
|
free (data);
|
||||||
}
|
}
|
||||||
@@ -200,8 +200,11 @@ static int get_font_height (LOGFONT* logfont, DEVFONT* devfont)
|
|||||||
return type1_inst_info->font_height;
|
return type1_inst_info->font_height;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect)
|
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect, int df_slot)
|
||||||
{
|
{
|
||||||
|
if (df_slot >= 0 && df_slot < MAXNR_DEVFONTS)
|
||||||
|
SET_DEVFONT_SCALE (logfont, df_slot, scale);
|
||||||
|
|
||||||
return expect;
|
return expect;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@
|
|||||||
typedef struct _bidichar_type_map
|
typedef struct _bidichar_type_map
|
||||||
{
|
{
|
||||||
Uint32 type; // Type of Unicode characters
|
Uint32 type; // Type of Unicode characters
|
||||||
Glyph32 glyph; // Starting index of Unicode character
|
Uchar32 chv; // Starting index of Unicode character
|
||||||
Uint8 count; // Total number of Unicode characters of same type starting from glyphn
|
Uint8 count; // Total number of Unicode characters of same type starting from glyphn
|
||||||
} BIDICHAR_TYPE_MAP;
|
} BIDICHAR_TYPE_MAP;
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,107 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* <http://www.minigui.com/en/about/licensing-policy/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Some operators to check Emoji.
|
||||||
|
** Implementation of the functions is based on some code from LGPL'd Pango.
|
||||||
|
**
|
||||||
|
** Created by WEI Yongming at 2019/02/26
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "minigui.h"
|
||||||
|
#include "gdi.h"
|
||||||
|
|
||||||
|
#ifdef _MGCHARSET_UNICODE
|
||||||
|
|
||||||
|
#include "unicode-ops.h"
|
||||||
|
#include "unicode-emoji-table.h"
|
||||||
|
|
||||||
|
static int interval_compare(const void *key, const void *elt)
|
||||||
|
{
|
||||||
|
Uchar32 c = (Uchar32)(intptr_t)key;
|
||||||
|
struct Interval *interval = (struct Interval *)elt;
|
||||||
|
|
||||||
|
if (c < interval->start)
|
||||||
|
return -1;
|
||||||
|
if (c > interval->end)
|
||||||
|
return +1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define DEFINE_unicode_is_(name) \
|
||||||
|
BOOL _unicode_is_##name (Uchar32 ch) \
|
||||||
|
{ \
|
||||||
|
if (bsearch ((void*)((intptr_t)ch), \
|
||||||
|
_unicode_##name##_table, \
|
||||||
|
TABLESIZE (_unicode_##name##_table), \
|
||||||
|
sizeof _unicode_##name##_table[0], \
|
||||||
|
interval_compare)) \
|
||||||
|
return TRUE; \
|
||||||
|
\
|
||||||
|
return FALSE; \
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_unicode_is_(emoji)
|
||||||
|
DEFINE_unicode_is_(emoji_presentation)
|
||||||
|
DEFINE_unicode_is_(emoji_modifier)
|
||||||
|
DEFINE_unicode_is_(emoji_modifier_base)
|
||||||
|
DEFINE_unicode_is_(emoji_extended_pictographic)
|
||||||
|
|
||||||
|
BOOL _unicode_is_emoji_text_default(Uchar32 ch)
|
||||||
|
{
|
||||||
|
return _unicode_is_emoji(ch) && !_unicode_is_emoji_presentation(ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL _unicode_is_emoji_emoji_default(Uchar32 ch)
|
||||||
|
{
|
||||||
|
return _unicode_is_emoji_presentation(ch);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL _unicode_is_emoji_keycap_base(Uchar32 ch)
|
||||||
|
{
|
||||||
|
return (ch >= '0' && ch <= '9') || ch == '#' || ch == '*';
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL _unicode_is_regional_indicator(Uchar32 ch)
|
||||||
|
{
|
||||||
|
return (ch >= 0x1F1E6 && ch <= 0x1F1FF);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _MGCHARSET_UNICODE */
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+40
-42
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -42,7 +42,7 @@
|
|||||||
|
|
||||||
#define LEN_VERSION_MAX 10
|
#define LEN_VERSION_MAX 10
|
||||||
#define LEN_VENDER_NAME_MAX 12
|
#define LEN_VENDER_NAME_MAX 12
|
||||||
#define LEN_DEVFONT_NAME_MAX 127
|
#define LEN_UPF_NAME_MAX 127
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -100,7 +100,7 @@ typedef struct
|
|||||||
char vender_name [LEN_VENDER_NAME_MAX];
|
char vender_name [LEN_VENDER_NAME_MAX];
|
||||||
Uint16 endian;
|
Uint16 endian;
|
||||||
|
|
||||||
char font_name [LEN_DEVFONT_NAME_MAX + 1];
|
char font_name [LEN_UPF_NAME_MAX + 1];
|
||||||
|
|
||||||
Uint8 width;
|
Uint8 width;
|
||||||
Uint8 height;
|
Uint8 height;
|
||||||
|
|||||||
@@ -197,13 +197,13 @@ static BOOL get_font_propt(FILE* fp, char* family, char* font_rrncnn, char* cha
|
|||||||
/*FAMILY_NAME*/
|
/*FAMILY_NAME*/
|
||||||
if (strcmp (line_buf, "FAMILY_NAME") == 0)
|
if (strcmp (line_buf, "FAMILY_NAME") == 0)
|
||||||
{
|
{
|
||||||
if (strlen(body) > LEN_FONT_NAME)
|
if (strlen(body) > LEN_LOGFONT_NAME_FIELD)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "the FAMILY_NAME is too long, "
|
fprintf(stderr, "the FAMILY_NAME is too long, "
|
||||||
"please truncation it to less than %d\n", LEN_FONT_NAME-2);
|
"please truncation it to less than %d\n", LEN_LOGFONT_NAME_FIELD-2);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
strncpy (family, body, LEN_FONT_NAME);
|
strncpy (family, body, LEN_LOGFONT_NAME_FIELD);
|
||||||
}
|
}
|
||||||
else if (strcmp (line_buf, "WEIGHT_NAME") == 0)
|
else if (strcmp (line_buf, "WEIGHT_NAME") == 0)
|
||||||
set_rrncnn (font_rrncnn, SET_WEIGHT_POS, body);
|
set_rrncnn (font_rrncnn, SET_WEIGHT_POS, body);
|
||||||
@@ -216,7 +216,7 @@ static BOOL get_font_propt(FILE* fp, char* family, char* font_rrncnn, char* cha
|
|||||||
|
|
||||||
/*FIXME must inorder*/
|
/*FIXME must inorder*/
|
||||||
else if (strcmp (line_buf, "CHARSET_REGISTRY") == 0)
|
else if (strcmp (line_buf, "CHARSET_REGISTRY") == 0)
|
||||||
strncpy (charset, body, LEN_FONT_NAME);
|
strncpy (charset, body, LEN_LOGFONT_NAME_FIELD);
|
||||||
else if (strcmp (line_buf, "CHARSET_ENCODING") == 0)
|
else if (strcmp (line_buf, "CHARSET_ENCODING") == 0)
|
||||||
{
|
{
|
||||||
if (body[0] != '-')
|
if (body[0] != '-')
|
||||||
@@ -494,8 +494,8 @@ typedef struct _FONT_PROPT {
|
|||||||
} FONT_PROPT;
|
} FONT_PROPT;
|
||||||
|
|
||||||
char font_name [LEN_UNIDEVFONT_NAME];
|
char font_name [LEN_UNIDEVFONT_NAME];
|
||||||
char family [LEN_FONT_NAME];
|
char family [LEN_LOGFONT_NAME_FIELD];
|
||||||
char charset [LEN_FONT_NAME];
|
char charset [LEN_LOGFONT_NAME_FIELD];
|
||||||
char new_file_name [LEN_UNIDEVFONT_NAME+5];
|
char new_file_name [LEN_UNIDEVFONT_NAME+5];
|
||||||
|
|
||||||
#define MAKE_HEADER(header, glyph_num)\
|
#define MAKE_HEADER(header, glyph_num)\
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ typedef int BOOL;
|
|||||||
#define TRUE 1
|
#define TRUE 1
|
||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
|
|
||||||
#define LEN_FONT_NAME 23
|
#define LEN_LOGFONT_NAME_FIELD 23
|
||||||
#define LEN_DEVFONT_NAME 79
|
#define LEN_DEVFONT_NAME 79
|
||||||
|
|
||||||
extern VBFINFO extern_vbfinfo;
|
extern VBFINFO extern_vbfinfo;
|
||||||
@@ -64,8 +64,8 @@ extern VBFINFO extern_vbfinfo;
|
|||||||
BOOL dumpVBF (VBFINFO* vbf, char* file)
|
BOOL dumpVBF (VBFINFO* vbf, char* file)
|
||||||
{
|
{
|
||||||
FILE* fp;
|
FILE* fp;
|
||||||
char family [LEN_FONT_NAME + 1];
|
char family [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
char style [LEN_FONT_NAME + 1];
|
char style [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
int len_offsets;
|
int len_offsets;
|
||||||
int len_widths;
|
int len_widths;
|
||||||
int len_header;
|
int len_header;
|
||||||
|
|||||||
Executable
+70
@@ -0,0 +1,70 @@
|
|||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
from __future__ import print_function, division, absolute_import
|
||||||
|
import sys
|
||||||
|
import os.path
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
|
if len (sys.argv) != 2:
|
||||||
|
print("usage: ./gen-emoji-table.py emoji-data.txt", file=sys.stderr)
|
||||||
|
sys.exit (1)
|
||||||
|
|
||||||
|
f = open(sys.argv[1])
|
||||||
|
header = [f.readline () for _ in range(10)]
|
||||||
|
|
||||||
|
ranges = OrderedDict()
|
||||||
|
for line in f.readlines():
|
||||||
|
line = line.strip()
|
||||||
|
if not line or line[0] == '#':
|
||||||
|
continue
|
||||||
|
rang, typ = [s.strip() for s in line.split('#')[0].split(';')[:2]]
|
||||||
|
|
||||||
|
rang = [int(s, 16) for s in rang.split('..')]
|
||||||
|
if len(rang) > 1:
|
||||||
|
start, end = rang
|
||||||
|
else:
|
||||||
|
start = end = rang[0]
|
||||||
|
|
||||||
|
if typ not in ranges:
|
||||||
|
ranges[typ] = []
|
||||||
|
if ranges[typ] and ranges[typ][-1][1] == start - 1:
|
||||||
|
ranges[typ][-1] = (ranges[typ][-1][0], end)
|
||||||
|
else:
|
||||||
|
ranges[typ].append((start, end))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
print("/* == Start of generated table == */")
|
||||||
|
print("/*")
|
||||||
|
print(" * The following tables are generated by running:")
|
||||||
|
print(" *")
|
||||||
|
print(" * ./gen-emoji-table.py emoji-data.txt")
|
||||||
|
print(" *")
|
||||||
|
print(" * on file with this header:")
|
||||||
|
print(" *")
|
||||||
|
for l in header:
|
||||||
|
print(" * %s" % (l.strip()))
|
||||||
|
print(" */")
|
||||||
|
print()
|
||||||
|
print("#ifndef UNICODE_EMOJI_TABLE_H")
|
||||||
|
print("#define UNICODE_EMOJI_TABLE_H")
|
||||||
|
print()
|
||||||
|
print("struct Interval {\n Uchar32 start, end;\n};")
|
||||||
|
|
||||||
|
for typ,s in ranges.items():
|
||||||
|
if typ not in ['emoji',
|
||||||
|
'emoji_presentation',
|
||||||
|
'emoji_modifier',
|
||||||
|
'emoji_modifier_base',
|
||||||
|
'extended_pictographic']: continue
|
||||||
|
print()
|
||||||
|
print("static const struct Interval _unicode_%s_table[] =" % typ)
|
||||||
|
print("{")
|
||||||
|
for pair in sorted(s):
|
||||||
|
print(" {0x%04X, 0x%04X}," % pair)
|
||||||
|
print("};")
|
||||||
|
|
||||||
|
print()
|
||||||
|
print("#endif /* UNICODE_EMOJI_TABLE_H */")
|
||||||
|
print()
|
||||||
|
print("/* == End of generated table == */")
|
||||||
Executable
+1552
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,142 @@
|
|||||||
|
aa Afar
|
||||||
|
ab Abkhazian
|
||||||
|
af Afrikaans
|
||||||
|
am Amharic
|
||||||
|
ar Arabic
|
||||||
|
as Assamese
|
||||||
|
ay Aymara
|
||||||
|
az Azerbaijani
|
||||||
|
ba Bashkir
|
||||||
|
be Byelorussian
|
||||||
|
bg Bulgarian
|
||||||
|
bh Bihari
|
||||||
|
bi Bislama
|
||||||
|
bn Bengali
|
||||||
|
bo Tibetan
|
||||||
|
br Breton
|
||||||
|
ca Catalan
|
||||||
|
co Corsican
|
||||||
|
cs Czech
|
||||||
|
cy Welch
|
||||||
|
da Danish
|
||||||
|
de German
|
||||||
|
dz Bhutani
|
||||||
|
el Greek
|
||||||
|
en English
|
||||||
|
eo Esperanto
|
||||||
|
es Spanish
|
||||||
|
et Estonian
|
||||||
|
eu Basque
|
||||||
|
fa Persian
|
||||||
|
fi Finnish
|
||||||
|
fj Fiji
|
||||||
|
fo Faeroese
|
||||||
|
fr French
|
||||||
|
fy Frisian
|
||||||
|
ga Irish
|
||||||
|
gd Scots Gaelic
|
||||||
|
gl Galician
|
||||||
|
gn Guarani
|
||||||
|
gu Gujarati
|
||||||
|
ha Hausa
|
||||||
|
hi Hindi
|
||||||
|
he Hebrew
|
||||||
|
hr Croatian
|
||||||
|
hu Hungarian
|
||||||
|
hy Armenian
|
||||||
|
ia Interlingua
|
||||||
|
id Indonesian
|
||||||
|
ie Interlingue
|
||||||
|
ik Inupiak
|
||||||
|
in former Indonesian
|
||||||
|
is Icelandic
|
||||||
|
it Italian
|
||||||
|
iu Inuktitut (Eskimo)
|
||||||
|
iw former Hebrew
|
||||||
|
ja Japanese
|
||||||
|
ji former Yiddish
|
||||||
|
jw Javanese
|
||||||
|
ka Georgian
|
||||||
|
kk Kazakh
|
||||||
|
kl Greenlandic
|
||||||
|
km Cambodian
|
||||||
|
kn Kannada
|
||||||
|
ko Korean
|
||||||
|
ks Kashmiri
|
||||||
|
ku Kurdish
|
||||||
|
ky Kirghiz
|
||||||
|
la Latin
|
||||||
|
ln Lingala
|
||||||
|
lo Laothian
|
||||||
|
lt Lithuanian
|
||||||
|
lv Latvian, Lettish
|
||||||
|
mg Malagasy
|
||||||
|
mi Maori
|
||||||
|
mk Macedonian
|
||||||
|
ml Malayalam
|
||||||
|
mn Mongolian
|
||||||
|
mo Moldavian
|
||||||
|
mr Marathi
|
||||||
|
ms Malay
|
||||||
|
mt Maltese
|
||||||
|
my Burmese
|
||||||
|
na Nauru
|
||||||
|
ne Nepali
|
||||||
|
nl Dutch
|
||||||
|
no Norwegian
|
||||||
|
oc Occitan
|
||||||
|
om (Afan) Oromo
|
||||||
|
or Oriya
|
||||||
|
pa Punjabi
|
||||||
|
pl Polish
|
||||||
|
ps Pashto, Pushto
|
||||||
|
pt Portuguese
|
||||||
|
qu Quechua
|
||||||
|
rm Rhaeto-Romance
|
||||||
|
rn Kirundi
|
||||||
|
ro Romanian
|
||||||
|
ru Russian
|
||||||
|
rw Kinyarwanda
|
||||||
|
sa Sanskrit
|
||||||
|
sd Sindhi
|
||||||
|
sg Sangro
|
||||||
|
sh Serbo-Croatian
|
||||||
|
si Singhalese
|
||||||
|
sk Slovak
|
||||||
|
sl Slovenian
|
||||||
|
sm Samoan
|
||||||
|
sn Shona
|
||||||
|
so Somali
|
||||||
|
sq Albanian
|
||||||
|
sr Serbian
|
||||||
|
ss Siswati
|
||||||
|
st Sesotho
|
||||||
|
su Sudanese
|
||||||
|
sv Swedish
|
||||||
|
sw Swahili
|
||||||
|
ta Tamil
|
||||||
|
te Tegulu
|
||||||
|
tg Tajik
|
||||||
|
th Thai
|
||||||
|
ti Tigrinya
|
||||||
|
tk Turkmen
|
||||||
|
tl Tagalog
|
||||||
|
tn Setswana
|
||||||
|
to Tonga
|
||||||
|
tr Turkish
|
||||||
|
ts Tsonga
|
||||||
|
tt Tatar
|
||||||
|
tw Twi
|
||||||
|
ug Uigur
|
||||||
|
uk Ukrainian
|
||||||
|
ur Urdu
|
||||||
|
uz Uzbek
|
||||||
|
vi Vietnamese
|
||||||
|
vo Volapuk
|
||||||
|
wo Wolof
|
||||||
|
xh Xhosa
|
||||||
|
yi Yiddish
|
||||||
|
yo Yoruba
|
||||||
|
za Zhuang
|
||||||
|
zh Chinese
|
||||||
|
zu Zulu
|
||||||
File diff suppressed because it is too large
Load Diff
+27
-17
@@ -61,6 +61,7 @@
|
|||||||
#include "fontname.h"
|
#include "fontname.h"
|
||||||
|
|
||||||
#define HEADER_LEN 68
|
#define HEADER_LEN 68
|
||||||
|
#define LEN_VBF_NAME 79
|
||||||
|
|
||||||
#define VARFONT_INFO_P(devfont) ((VBFINFO*)(devfont->data))
|
#define VARFONT_INFO_P(devfont) ((VBFINFO*)(devfont->data))
|
||||||
#define VARFONT_INFO(devfont) ((VBFINFO*)(devfont.data))
|
#define VARFONT_INFO(devfont) ((VBFINFO*)(devfont.data))
|
||||||
@@ -85,7 +86,7 @@ typedef struct _FILE_LAYOUT {
|
|||||||
} FILE_LAYOUT;
|
} FILE_LAYOUT;
|
||||||
|
|
||||||
typedef struct _FONT_PROPT {
|
typedef struct _FONT_PROPT {
|
||||||
char font_name [LEN_DEVFONT_NAME + 1];
|
char font_name [LEN_VBF_NAME + 1];
|
||||||
char max_width;
|
char max_width;
|
||||||
char ave_width;
|
char ave_width;
|
||||||
char height;
|
char height;
|
||||||
@@ -96,7 +97,7 @@ typedef struct _FONT_PROPT {
|
|||||||
int def_glyph;
|
int def_glyph;
|
||||||
} FONT_PROPT;
|
} FONT_PROPT;
|
||||||
|
|
||||||
static DWORD get_glyph_type (LOGFONT* logfont, DEVFONT* devfont)
|
static DWORD get_glyph_bmptype (LOGFONT* logfont, DEVFONT* devfont)
|
||||||
{
|
{
|
||||||
return DEVFONTGLYPHTYPE_MONOBMP;
|
return DEVFONTGLYPHTYPE_MONOBMP;
|
||||||
}
|
}
|
||||||
@@ -111,6 +112,9 @@ static int get_ch_width (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
if (vbf_info->bits_offset == NULL)
|
if (vbf_info->bits_offset == NULL)
|
||||||
return vbf_info->max_width * scale;
|
return vbf_info->max_width * scale;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
|
if (glyph_value < vbf_info->first_glyph || glyph_value > vbf_info->last_glyph)
|
||||||
|
glyph_value = vbf_info->def_glyph;
|
||||||
return vbf_info->advance_x [glyph_value - vbf_info->first_glyph] * scale;
|
return vbf_info->advance_x [glyph_value - vbf_info->first_glyph] * scale;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -129,7 +133,7 @@ static int get_font_height (LOGFONT* logfont, DEVFONT* devfont)
|
|||||||
return VARFONT_INFO_P (devfont)->height * GET_DEVFONT_SCALE (logfont, devfont);
|
return VARFONT_INFO_P (devfont)->height * GET_DEVFONT_SCALE (logfont, devfont);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect)
|
static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect, int df_slot)
|
||||||
{
|
{
|
||||||
int height = VARFONT_INFO_P (devfont)->height;
|
int height = VARFONT_INFO_P (devfont)->height;
|
||||||
unsigned short scale = 1;
|
unsigned short scale = 1;
|
||||||
@@ -137,7 +141,8 @@ static int get_font_size (LOGFONT* logfont, DEVFONT* devfont, int expect)
|
|||||||
if (logfont->style & FS_OTHER_AUTOSCALE)
|
if (logfont->style & FS_OTHER_AUTOSCALE)
|
||||||
scale = font_GetBestScaleFactor (height, expect);
|
scale = font_GetBestScaleFactor (height, expect);
|
||||||
|
|
||||||
SET_DEVFONT_SCALE (logfont, devfont, scale);
|
if (df_slot >= 0 && df_slot < MAXNR_DEVFONTS)
|
||||||
|
SET_DEVFONT_SCALE (logfont, df_slot, scale);
|
||||||
|
|
||||||
return height * scale;
|
return height * scale;
|
||||||
}
|
}
|
||||||
@@ -156,7 +161,6 @@ static int get_font_descent (LOGFONT* logfont, DEVFONT* devfont)
|
|||||||
* GET_DEVFONT_SCALE (logfont, devfont);
|
* GET_DEVFONT_SCALE (logfont, devfont);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
Glyph32 glyph_value,
|
Glyph32 glyph_value,
|
||||||
int* px, int* py, int* pwidth, int* pheight)
|
int* px, int* py, int* pwidth, int* pheight)
|
||||||
@@ -165,7 +169,9 @@ static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
VBFINFO* vbf_info = VARFONT_INFO_P (devfont);
|
VBFINFO* vbf_info = VARFONT_INFO_P (devfont);
|
||||||
unsigned short scale = GET_DEVFONT_SCALE (logfont, devfont);
|
unsigned short scale = GET_DEVFONT_SCALE (logfont, devfont);
|
||||||
|
|
||||||
if (glyph_value < vbf_info->first_glyph || glyph_value > vbf_info->last_glyph)
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
|
if (glyph_value < vbf_info->first_glyph
|
||||||
|
|| glyph_value > vbf_info->last_glyph)
|
||||||
glyph_value = vbf_info->def_glyph;
|
glyph_value = vbf_info->def_glyph;
|
||||||
|
|
||||||
/*have bbox*/
|
/*have bbox*/
|
||||||
@@ -173,7 +179,6 @@ static int get_glyph_bbox (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
int offset;
|
int offset;
|
||||||
|
|
||||||
offset = glyph_value - vbf_info->first_glyph;
|
offset = glyph_value - vbf_info->first_glyph;
|
||||||
|
|
||||||
if (px) {
|
if (px) {
|
||||||
tempint = vbf_info->bbox[offset].x;
|
tempint = vbf_info->bbox[offset].x;
|
||||||
#if MGUI_BYTEORDER == MGUI_BIG_ENDIAN
|
#if MGUI_BYTEORDER == MGUI_BIG_ENDIAN
|
||||||
@@ -225,6 +230,7 @@ static int get_glyph_advance (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
int advance;
|
int advance;
|
||||||
VBFINFO* vbf_info = VARFONT_INFO_P (devfont);
|
VBFINFO* vbf_info = VARFONT_INFO_P (devfont);
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (glyph_value < vbf_info->first_glyph || glyph_value > vbf_info->last_glyph)
|
if (glyph_value < vbf_info->first_glyph || glyph_value > vbf_info->last_glyph)
|
||||||
glyph_value = vbf_info->def_glyph;
|
glyph_value = vbf_info->def_glyph;
|
||||||
|
|
||||||
@@ -234,10 +240,10 @@ static int get_glyph_advance (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
const Glyph32 glyph_value, int* pitch, unsigned short* scale)
|
Glyph32 glyph_value, SIZE* sz, int* pitch, unsigned short* scale)
|
||||||
{
|
{
|
||||||
int offset;
|
int offset;
|
||||||
Glyph32 eff_value = glyph_value;
|
Glyph32 eff_value;
|
||||||
Glyph32 first_value;
|
Glyph32 first_value;
|
||||||
Glyph32 last_value;
|
Glyph32 last_value;
|
||||||
VBFINFO* vbf_info = VARFONT_INFO_P (devfont);
|
VBFINFO* vbf_info = VARFONT_INFO_P (devfont);
|
||||||
@@ -245,6 +251,8 @@ static const void* get_glyph_monobitmap (LOGFONT* logfont, DEVFONT* devfont,
|
|||||||
first_value = vbf_info->first_glyph;
|
first_value = vbf_info->first_glyph;
|
||||||
last_value = vbf_info->last_glyph;
|
last_value = vbf_info->last_glyph;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
|
eff_value = glyph_value;
|
||||||
if (glyph_value < first_value || glyph_value > last_value)
|
if (glyph_value < first_value || glyph_value > last_value)
|
||||||
eff_value = vbf_info->def_glyph;
|
eff_value = vbf_info->def_glyph;
|
||||||
|
|
||||||
@@ -302,6 +310,7 @@ static BOOL is_glyph_existed (LOGFONT* logfont, DEVFONT* devfont, Glyph32 glyph_
|
|||||||
first_value = vbf_info->first_glyph;
|
first_value = vbf_info->first_glyph;
|
||||||
last_value = vbf_info->last_glyph;
|
last_value = vbf_info->last_glyph;
|
||||||
|
|
||||||
|
glyph_value = REAL_GLYPH(glyph_value);
|
||||||
if (glyph_value < first_value || glyph_value > last_value)
|
if (glyph_value < first_value || glyph_value > last_value)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
else
|
else
|
||||||
@@ -327,7 +336,8 @@ static void swap_intdata (Uint32* data, int num)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void* load_font_data (const char* fontname, const char* filename)
|
static void* load_font_data (DEVFONT* devfont, const char* fontname,
|
||||||
|
const char* filename)
|
||||||
{
|
{
|
||||||
FILE* fp = NULL;
|
FILE* fp = NULL;
|
||||||
|
|
||||||
@@ -358,15 +368,15 @@ static void* load_font_data (const char* fontname, const char* filename)
|
|||||||
if (fread(vender, 1, VBF_LEN_VENDER_INFO, fp) < VBF_LEN_VENDER_INFO)
|
if (fread(vender, 1, VBF_LEN_VENDER_INFO, fp) < VBF_LEN_VENDER_INFO)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (fread(&len_header, sizeof(short), 1, fp) < 1)
|
if (fread(&len_header, sizeof(Uint16), 1, fp) < 1)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (fread (&layout, sizeof (FILE_LAYOUT), 1, fp) < 1)
|
if (fread(&layout, sizeof(Uint32), 11, fp) < 1)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
#if MGUI_BYTEORDER == MGUI_BIG_ENDIAN
|
#if MGUI_BYTEORDER == MGUI_BIG_ENDIAN
|
||||||
len_header = ArchSwap16 (len_header);
|
len_header = ArchSwap16 (len_header);
|
||||||
swap_intdata ((Uint32*)&layout, sizeof(layout)/sizeof(int));
|
swap_intdata ((Uint32*)&layout, 11);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_MMAP
|
#ifdef HAVE_MMAP
|
||||||
@@ -420,8 +430,8 @@ static void* load_font_data (const char* fontname, const char* filename)
|
|||||||
layout.off_bits-HEADER_LEN);
|
layout.off_bits-HEADER_LEN);
|
||||||
#if 0
|
#if 0
|
||||||
if (real_fontname) {
|
if (real_fontname) {
|
||||||
strncpy (real_fontname, info->name, LEN_DEVFONT_NAME);
|
strncpy (real_fontname, info->name, LEN_VBF_NAME);
|
||||||
real_fontname [LEN_DEVFONT_NAME] = '\0';
|
real_fontname [LEN_VBF_NAME] = '\0';
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -441,7 +451,7 @@ error:
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unload_font_data (void* data)
|
static void unload_font_data (DEVFONT* devfont, void* data)
|
||||||
{
|
{
|
||||||
VBFINFO* info = (VBFINFO*) data;
|
VBFINFO* info = (VBFINFO*) data;
|
||||||
#ifdef HAVE_MMAP
|
#ifdef HAVE_MMAP
|
||||||
@@ -456,7 +466,7 @@ static void unload_font_data (void* data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
FONTOPS __mg_vbf_ops = {
|
FONTOPS __mg_vbf_ops = {
|
||||||
get_glyph_type,
|
get_glyph_bmptype,
|
||||||
get_ave_width,
|
get_ave_width,
|
||||||
get_max_width,
|
get_max_width,
|
||||||
get_font_height,
|
get_font_height,
|
||||||
|
|||||||
+32
-20
@@ -43,43 +43,55 @@
|
|||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
typedef struct _VBF_BBOX {
|
||||||
typedef struct _VBF_BBOX
|
|
||||||
{
|
|
||||||
char x, y, w, h;
|
char x, y, w, h;
|
||||||
} VBF_BBOX;
|
} VBF_BBOX;
|
||||||
|
|
||||||
typedef struct
|
typedef struct {
|
||||||
{
|
/* font version*/
|
||||||
char ver_info [4]; /* font version*/
|
char ver_info [4];
|
||||||
const char* name; /* font name*/
|
/* font name*/
|
||||||
|
const char* name;
|
||||||
|
|
||||||
char max_width; /* The max width in pixels. */
|
/* The max width in pixels. */
|
||||||
char ave_width; /* The average width in pixels. */
|
char max_width;
|
||||||
char height; /* The height in pixels. */
|
/* The average width in pixels. */
|
||||||
char descent; /* The pixels below the base line. */
|
char ave_width;
|
||||||
|
/* The height in pixels. */
|
||||||
|
char height;
|
||||||
|
/* The pixels below the base line. */
|
||||||
|
char descent;
|
||||||
|
|
||||||
int first_glyph; /* The glyph number of the first character in this font.*/
|
/* The glyph number of the first character in this font.*/
|
||||||
int last_glyph; /* The glyph number of the last character in this font.*/
|
int first_glyph;
|
||||||
int def_glyph; /* The glyph number of the default character in this font.*/
|
/* The glyph number of the last character in this font.*/
|
||||||
|
int last_glyph;
|
||||||
|
/* The glyph number of the default character in this font.*/
|
||||||
|
int def_glyph;
|
||||||
|
|
||||||
unsigned int font_size; /* used by mmap. It should be zero for in-core vbfs. */
|
/* used by mmap. It should be zero for in-core vbfs. */
|
||||||
|
unsigned int font_size;
|
||||||
|
|
||||||
const VBF_BBOX* bbox; /* The pointer to the glyph bounding box array or NULL. */
|
/* The pointer to the glyph bounding box array or NULL. */
|
||||||
|
const VBF_BBOX* bbox;
|
||||||
|
|
||||||
const char* advance_x; /* The pointer to the glyph advance x array.
|
/* The pointer to the glyph advance x array.
|
||||||
If bbox is NULL, the array contains the width of each glyph.
|
If bbox is NULL, the array contains the width of each glyph.
|
||||||
If advance_x is NULL, the glyph has the universal width,
|
If advance_x is NULL, the glyph has the universal width,
|
||||||
that's max_width. */
|
that's max_width. */
|
||||||
const char* advance_y; /* The pointer to the glyph advance y array.
|
const char* advance_x;
|
||||||
|
/* The pointer to the glyph advance y array.
|
||||||
If bbox is NULL, advance_y should be NULL.
|
If bbox is NULL, advance_y should be NULL.
|
||||||
If bbox is not NULL and advance_y is NULL,
|
If bbox is not NULL and advance_y is NULL,
|
||||||
all glyph has the universal advance_y, that is, zero. */
|
all glyph has the universal advance_y, that is, zero. */
|
||||||
|
const char* advance_y;
|
||||||
|
|
||||||
const unsigned int* bits_offset; /* The pointer to the glyph bitmap offset array
|
/* The pointer to the glyph bitmap offset array
|
||||||
whose number will be used to fetch glyph bitmap
|
whose number will be used to fetch glyph bitmap
|
||||||
from bits array or NULL. */
|
from bits array or NULL. */
|
||||||
const unsigned char* all_glyph_bits; /* The 8-bit right-padded bitmap data for all glyphs. */
|
const unsigned int* bits_offset;
|
||||||
|
/* The 8-bit right-padded bitmap data for all glyphs. */
|
||||||
|
const unsigned char* all_glyph_bits;
|
||||||
} VBFINFO;
|
} VBFINFO;
|
||||||
|
|
||||||
#define VBF_LEN_VERSION_INFO 10
|
#define VBF_LEN_VERSION_INFO 10
|
||||||
|
|||||||
+2
-2
@@ -681,9 +681,9 @@ BOOL GUIAPI TranslateKeyMsgToChar (int message, WPARAM wParam, LPARAM lParam, WO
|
|||||||
|
|
||||||
#ifdef _MGCHARSET_UNICODE
|
#ifdef _MGCHARSET_UNICODE
|
||||||
|
|
||||||
static UChar32 utf8_to_wc (const unsigned char* mstr, int* utf8_len)
|
static Uchar32 utf8_to_wc (const unsigned char* mstr, int* utf8_len)
|
||||||
{
|
{
|
||||||
UChar32 wc = *((unsigned char *)(mstr++));
|
Uchar32 wc = *((unsigned char *)(mstr++));
|
||||||
int n, t;
|
int n, t;
|
||||||
|
|
||||||
*utf8_len = 1;
|
*utf8_len = 1;
|
||||||
|
|||||||
@@ -70,13 +70,13 @@
|
|||||||
|
|
||||||
typedef struct _CHARSET
|
typedef struct _CHARSET
|
||||||
{
|
{
|
||||||
char name [LEN_FONT_NAME + 1];
|
char name [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
struct _CHARSET* next;
|
struct _CHARSET* next;
|
||||||
}CHARSET;
|
}CHARSET;
|
||||||
|
|
||||||
typedef struct _FAMILY
|
typedef struct _FAMILY
|
||||||
{
|
{
|
||||||
char name [LEN_FONT_NAME + 1];
|
char name [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
CHARSET chset_head;
|
CHARSET chset_head;
|
||||||
struct _FAMILY* next;
|
struct _FAMILY* next;
|
||||||
}FAMILY;
|
}FAMILY;
|
||||||
@@ -98,8 +98,8 @@ static FAMILY* find_insert_family (FAMILY* head, const char* fami_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cur = (FAMILY*)malloc(sizeof(*cur));
|
cur = (FAMILY*)malloc(sizeof(*cur));
|
||||||
strncpy (cur->name, fami_name, LEN_FONT_NAME);
|
strncpy (cur->name, fami_name, LEN_LOGFONT_NAME_FIELD);
|
||||||
cur->name [LEN_FONT_NAME] = '\0';
|
cur->name [LEN_LOGFONT_NAME_FIELD] = '\0';
|
||||||
cur->chset_head.next = NULL;
|
cur->chset_head.next = NULL;
|
||||||
cur->next = NULL;
|
cur->next = NULL;
|
||||||
|
|
||||||
@@ -133,8 +133,8 @@ static void insert_chset (FAMILY* fami, const char* chset_name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
cur = (CHARSET*)malloc(sizeof(*cur));
|
cur = (CHARSET*)malloc(sizeof(*cur));
|
||||||
strncpy (cur->name, chset_name, LEN_FONT_NAME);
|
strncpy (cur->name, chset_name, LEN_LOGFONT_NAME_FIELD);
|
||||||
cur->name [LEN_FONT_NAME] = '\0';
|
cur->name [LEN_LOGFONT_NAME_FIELD] = '\0';
|
||||||
cur->next = NULL;
|
cur->next = NULL;
|
||||||
|
|
||||||
pre->next = cur;
|
pre->next = cur;
|
||||||
@@ -416,7 +416,7 @@ static void insert_strings (HWND hWnd, char** strs, int str_num)
|
|||||||
|
|
||||||
static int fresh_chset_list (HWND hWnd)
|
static int fresh_chset_list (HWND hWnd)
|
||||||
{
|
{
|
||||||
char str_buffer [LEN_FONT_NAME + 1];
|
char str_buffer [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
HWND fami_lb;
|
HWND fami_lb;
|
||||||
HWND chset_lb;
|
HWND chset_lb;
|
||||||
int cur_sel;
|
int cur_sel;
|
||||||
@@ -455,7 +455,7 @@ static int fresh_chset_list (HWND hWnd)
|
|||||||
static int insert_listboxs (HWND hWnd)
|
static int insert_listboxs (HWND hWnd)
|
||||||
{
|
{
|
||||||
FAMILY* fami_cur = ((FAMILY*)GetWindowAdditionalData(hWnd))->next;
|
FAMILY* fami_cur = ((FAMILY*)GetWindowAdditionalData(hWnd))->next;
|
||||||
char str_buffer [LEN_FONT_NAME + 1];
|
char str_buffer [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
int i;
|
int i;
|
||||||
HWND hctrl;
|
HWND hctrl;
|
||||||
|
|
||||||
@@ -496,8 +496,8 @@ static int insert_listboxs (HWND hWnd)
|
|||||||
|
|
||||||
static LOGFONT* create_sel_font(HWND hWnd)
|
static LOGFONT* create_sel_font(HWND hWnd)
|
||||||
{
|
{
|
||||||
char family [LEN_FONT_NAME +1];
|
char family [LEN_LOGFONT_NAME_FIELD +1];
|
||||||
char chset [LEN_FONT_NAME +1];
|
char chset [LEN_LOGFONT_NAME_FIELD +1];
|
||||||
char weight;
|
char weight;
|
||||||
char slant;
|
char slant;
|
||||||
char flip;
|
char flip;
|
||||||
|
|||||||
@@ -6,4 +6,4 @@ noinst_HEADERS = \
|
|||||||
readbmp.h icon.h blockheap.h \
|
readbmp.h icon.h blockheap.h \
|
||||||
ourhdr.h client.h server.h sharedres.h sockio.h drawsemop.h \
|
ourhdr.h client.h server.h sharedres.h sockio.h drawsemop.h \
|
||||||
gal.h newgal.h memops.h incoreres.h sysres.h clipboard.h \
|
gal.h newgal.h memops.h incoreres.h sysres.h clipboard.h \
|
||||||
md5.h glyph.h license.h mgsock.h
|
md5.h glyph.h license.h mgsock.h unicode-ops.h
|
||||||
|
|||||||
+15
-12
@@ -62,24 +62,27 @@ extern "C" {
|
|||||||
typedef struct _TYPERUN TYPERUN;
|
typedef struct _TYPERUN TYPERUN;
|
||||||
|
|
||||||
typedef struct _BIDICHAR_MIRROR_MAP {
|
typedef struct _BIDICHAR_MIRROR_MAP {
|
||||||
Glyph32 glyph;
|
Achar32 chv;
|
||||||
Glyph32 mirrored;
|
Achar32 mirrored;
|
||||||
} BIDICHAR_MIRROR_MAP;
|
} BIDICHAR_MIRROR_MAP;
|
||||||
|
|
||||||
typedef void (*CB_DO_REORDER) (void* context, int len, int pos);
|
Achar32* __mg_charset_bidi_achars_reorder (const CHARSETOPS* charset_ops,
|
||||||
|
Achar32* achars, int len, int pel,
|
||||||
|
void* extra, CB_REVERSE_EXTRA cb_reverse_extra);
|
||||||
|
|
||||||
Glyph32* __mg_charset_bidi_glyphs_reorder (const CHARSETOPS* charset_ops, Glyph32* glyphs, int len);
|
/*
|
||||||
|
Achar32* __mg_charset_bidi_map_reorder (const CHARSETOPS* charset_ops,
|
||||||
|
Achar32* achars, int len, GLYPHMAPINFO* map, int pel);
|
||||||
|
|
||||||
Glyph32* __mg_charset_bidi_map_reorder (const CHARSETOPS* charset_ops, Glyph32* glyphs,
|
Achar32* __mg_charset_bidi_index_reorder (const CHARSETOPS* charset_ops,
|
||||||
int len, GLYPHMAPINFO* map);
|
Achar32* achars, int len, int* index_map, int pel);
|
||||||
|
*/
|
||||||
|
|
||||||
void __mg_charset_bidi_get_embeddlevels (const CHARSETOPS* charset_ops, Glyph32* glyphs,
|
void __mg_charset_bidi_get_embeddlevels (const CHARSETOPS* charset_ops,
|
||||||
int len, Uint8* embedding_level_list, Uint8 type);
|
Achar32* achars, int len, int pel, Uint8* embedding_levels, Uint8 type);
|
||||||
|
|
||||||
Glyph32* __mg_charset_bidi_index_reorder (const CHARSETOPS* charset_ops, Glyph32* glyphs,
|
Uint32 __mg_charset_bidi_str_base_dir (const CHARSETOPS* charset_ops,
|
||||||
int len, int* index_map);
|
Achar32* achars, int len);
|
||||||
|
|
||||||
Uint32 __mg_charset_bidi_str_base_dir (const CHARSETOPS* charset_ops, Glyph32* glyphs, int len);
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -159,6 +159,7 @@ struct tagDC
|
|||||||
|
|
||||||
int tabstop;
|
int tabstop;
|
||||||
int cExtra; /* Character extra */
|
int cExtra; /* Character extra */
|
||||||
|
int wExtra; /* Word extra */
|
||||||
int alExtra; /* Above line extra */
|
int alExtra; /* Above line extra */
|
||||||
int blExtra; /* Bellow line extra */
|
int blExtra; /* Bellow line extra */
|
||||||
|
|
||||||
|
|||||||
+105
-38
File diff suppressed because it is too large
Load Diff
@@ -53,6 +53,7 @@ BOOL fontGetTypeNameFromName (const char* name, char* type);
|
|||||||
int fontConvertFontType (const char* type);
|
int fontConvertFontType (const char* type);
|
||||||
|
|
||||||
BOOL fontGetFamilyFromName (const char* name, char* family);
|
BOOL fontGetFamilyFromName (const char* name, char* family);
|
||||||
|
BOOL fontDoesMatchFamily (const char* name, const char* family);
|
||||||
|
|
||||||
BOOL fontCopyStyleFromName (const char* name, char* style);
|
BOOL fontCopyStyleFromName (const char* name, char* style);
|
||||||
DWORD fontGetStyleFromName (const char* name);
|
DWORD fontGetStyleFromName (const char* name);
|
||||||
|
|||||||
@@ -41,8 +41,6 @@
|
|||||||
#ifndef GUI_GDI_GLYPH_H
|
#ifndef GUI_GDI_GLYPH_H
|
||||||
#define GUI_GDI_GLYPH_H
|
#define GUI_GDI_GLYPH_H
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif /* __cplusplus */
|
#endif /* __cplusplus */
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* <http://www.minigui.com/en/about/licensing-policy/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
** unicode-ops.h: Declaration of Unicode operators.
|
||||||
|
**
|
||||||
|
** Current maintainer: Wei Yongming.
|
||||||
|
**
|
||||||
|
** Create date: 2019/02/26
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GUI_UNICODE_OPS_H
|
||||||
|
#define GUI_UNICODE_OPS_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
BOOL _unicode_is_emoji(Uchar32 ch);
|
||||||
|
BOOL _unicode_is_emoji_presentation(Uchar32 ch);
|
||||||
|
BOOL _unicode_is_emoji_modifier(Uchar32 ch);
|
||||||
|
BOOL _unicode_is_emoji_modifier_base(Uchar32 ch);
|
||||||
|
BOOL _unicode_is_emoji_extended_pictographic(Uchar32 ch);
|
||||||
|
|
||||||
|
BOOL _unicode_is_emoji_text_default(Uchar32 ch);
|
||||||
|
BOOL _unicode_is_emoji_emoji_default(Uchar32 ch);
|
||||||
|
BOOL _unicode_is_emoji_keycap_base(Uchar32 ch);
|
||||||
|
BOOL _unicode_is_regional_indicator(Uchar32 ch);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif // GUI_UNICODE_OPS_H
|
||||||
|
|
||||||
@@ -1038,7 +1038,7 @@ static int srvChangeCaption (int cli, int idx_znode, const char *caption)
|
|||||||
if (caplen < 32) {
|
if (caplen < 32) {
|
||||||
strcpy (nodes[idx_znode].caption, caption);
|
strcpy (nodes[idx_znode].caption, caption);
|
||||||
} else {
|
} else {
|
||||||
GetTextCharPos (menufont, caption, caplen, (32 - 3), /* '...' = 3*/
|
get_text_char_pos (menufont, caption, caplen, (32 - 3), /* '...' = 3*/
|
||||||
&fit_chars, pos_chars);
|
&fit_chars, pos_chars);
|
||||||
memcpy(nodes[idx_znode].caption,
|
memcpy(nodes[idx_znode].caption,
|
||||||
caption, pos_chars[fit_chars-1]);
|
caption, pos_chars[fit_chars-1]);
|
||||||
|
|||||||
@@ -1340,11 +1340,11 @@ static HWND dskSetActiveZOrderNode (int cli, int idx_znode)
|
|||||||
return old_hwnd;
|
return old_hwnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void GetTextCharPos (PLOGFONT log_font, const char *text,
|
static void get_text_char_pos (PLOGFONT log_font, const char *text,
|
||||||
int len, int fit_bytes, int *fit_chars, int *pos_chars)
|
int len, int fit_bytes, int *fit_chars, int *pos_chars)
|
||||||
{
|
{
|
||||||
DEVFONT* sbc_devfont = log_font->sbc_devfont;
|
DEVFONT* sbc_devfont = log_font->devfonts[0];
|
||||||
DEVFONT* mbc_devfont = log_font->mbc_devfont;
|
DEVFONT* mbc_devfont = log_font->devfonts[1];
|
||||||
int len_cur_char;
|
int len_cur_char;
|
||||||
int left_bytes = len;
|
int left_bytes = len;
|
||||||
int char_count = 0, bytes = 0;
|
int char_count = 0, bytes = 0;
|
||||||
@@ -1624,7 +1624,7 @@ static int AllocZOrderNode (int cli, HWND hwnd, HWND main_win,
|
|||||||
strcpy (nodes[free_slot].caption, caption);
|
strcpy (nodes[free_slot].caption, caption);
|
||||||
} else {
|
} else {
|
||||||
int tail_pos;
|
int tail_pos;
|
||||||
GetTextCharPos (menufont, caption, caplen, (32 - 3), /* '...' = 3*/
|
get_text_char_pos (menufont, caption, caplen, (32 - 3), /* '...' = 3*/
|
||||||
&fit_chars, pos_chars);
|
&fit_chars, pos_chars);
|
||||||
|
|
||||||
tail_pos = pos_chars[fit_chars-1];
|
tail_pos = pos_chars[fit_chars-1];
|
||||||
|
|||||||
+1
-1
@@ -78,7 +78,7 @@ static pthread_mutex_t timerLock;
|
|||||||
#define TIMER_UNLOCK()
|
#define TIMER_UNLOCK()
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __LINUX__
|
#if defined(__LINUX__) && defined(_MGRM_THREADS)
|
||||||
# define _MG_USE_BETTER_TIMER
|
# define _MG_USE_BETTER_TIMER
|
||||||
#endif /* __LINUX__ */
|
#endif /* __LINUX__ */
|
||||||
|
|
||||||
|
|||||||
+2
-76
@@ -1415,7 +1415,6 @@ static int _PutBoxKey (GAL_Surface* dst, BYTE* dstrow, BYTE* srcrow, Uint32 w, U
|
|||||||
dstrow += dst->pitch;
|
dstrow += dst->pitch;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifndef _FOR_MONOBITMAP
|
|
||||||
else while ( h-- ) {
|
else while ( h-- ) {
|
||||||
dstpixels = dstrow;
|
dstpixels = dstrow;
|
||||||
srcpixels = srcrow;
|
srcpixels = srcrow;
|
||||||
@@ -1426,29 +1425,7 @@ static int _PutBoxKey (GAL_Surface* dst, BYTE* dstrow, BYTE* srcrow, Uint32 w, U
|
|||||||
unsigned sG;
|
unsigned sG;
|
||||||
unsigned sB;
|
unsigned sB;
|
||||||
RETRIEVE_RGB_PIXEL (srcpixels, bpp, pixel);
|
RETRIEVE_RGB_PIXEL (srcpixels, bpp, pixel);
|
||||||
if ( pixel != ckey ) {
|
if (pixel != ckey || (pixel == ckey && box->bmType & BMP_TYPE_REPLACEKEY)) {
|
||||||
RGB_FROM_PIXEL (pixel, dstfmt, sR, sG, sB);
|
|
||||||
ASSEMBLE_RGBA (dstpixels, bpp, dstfmt, sR, sG, sB, alpha);
|
|
||||||
}
|
|
||||||
dstpixels += bpp;
|
|
||||||
srcpixels += bpp;
|
|
||||||
},
|
|
||||||
w);
|
|
||||||
srcrow += box->bmPitch;
|
|
||||||
dstrow += dst->pitch;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
else while ( h-- ) {
|
|
||||||
dstpixels = dstrow;
|
|
||||||
srcpixels = srcrow;
|
|
||||||
DUFFS_LOOP(
|
|
||||||
{
|
|
||||||
Uint32 pixel;
|
|
||||||
unsigned sR;
|
|
||||||
unsigned sG;
|
|
||||||
unsigned sB;
|
|
||||||
RETRIEVE_RGB_PIXEL (srcpixels, bpp, pixel);
|
|
||||||
if (pixel != ckey || ( pixel == ckey && box->bmType & BMP_TYPE_MONOKEY) ) {
|
|
||||||
if (pixel == ckey)
|
if (pixel == ckey)
|
||||||
pixel = box->bmColorRep;
|
pixel = box->bmColorRep;
|
||||||
RGB_FROM_PIXEL (pixel, dstfmt, sR, sG, sB);
|
RGB_FROM_PIXEL (pixel, dstfmt, sR, sG, sB);
|
||||||
@@ -1461,7 +1438,6 @@ static int _PutBoxKey (GAL_Surface* dst, BYTE* dstrow, BYTE* srcrow, Uint32 w, U
|
|||||||
srcrow += box->bmPitch;
|
srcrow += box->bmPitch;
|
||||||
dstrow += dst->pitch;
|
dstrow += dst->pitch;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -1929,76 +1905,26 @@ BYTE* gal_PutPixelKeyAlphaChannel (GAL_Surface* dst, BYTE* dstrow,
|
|||||||
BYTE* gal_PutPixelKey (GAL_Surface* dst, BYTE* dstrow,
|
BYTE* gal_PutPixelKey (GAL_Surface* dst, BYTE* dstrow,
|
||||||
Uint32 pixel, MYBITMAP_CONTXT* mybmp)
|
Uint32 pixel, MYBITMAP_CONTXT* mybmp)
|
||||||
{
|
{
|
||||||
//BYTE* dstpixels = dstrow;
|
|
||||||
//BYTE* srcpixels = srcrow;
|
|
||||||
Uint32 ckey = mybmp->colorKey;
|
Uint32 ckey = mybmp->colorKey;
|
||||||
GAL_PixelFormat *dstfmt = dst->format;
|
GAL_PixelFormat *dstfmt = dst->format;
|
||||||
int bpp = dstfmt->BytesPerPixel;
|
int bpp = dstfmt->BytesPerPixel;
|
||||||
unsigned alpha = dstfmt->Amask ? GAL_ALPHA_OPAQUE : 0;
|
unsigned alpha = dstfmt->Amask ? GAL_ALPHA_OPAQUE : 0;
|
||||||
|
|
||||||
if (bpp == 1) {
|
if (bpp == 1) {
|
||||||
//while (h--) {
|
|
||||||
//unsigned int i;
|
|
||||||
//dstpixels = dstrow;
|
|
||||||
//srcpixels = srcrow;
|
|
||||||
//for (i = 0; i < w; i++) {
|
|
||||||
if (pixel != ckey)
|
if (pixel != ckey)
|
||||||
*dstrow = pixel;
|
*dstrow = pixel;
|
||||||
dstrow += bpp;
|
dstrow += bpp;
|
||||||
//srcpixels += bpp;
|
|
||||||
//}
|
|
||||||
//srcrow += box->bmPitch;
|
|
||||||
//dstrow += dst->pitch;
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
#ifndef _FOR_MONOBITMAP
|
else {
|
||||||
else /*while ( h-- )*/ {
|
|
||||||
//dstpixels = dstrow;
|
|
||||||
//srcpixels = srcrow;
|
|
||||||
//DUFFS_LOOP(
|
|
||||||
{
|
|
||||||
//Uint32 pixel;
|
|
||||||
unsigned sR;
|
unsigned sR;
|
||||||
unsigned sG;
|
unsigned sG;
|
||||||
unsigned sB;
|
unsigned sB;
|
||||||
//RETRIEVE_RGB_PIXEL (srcpixels, bpp, pixel);
|
|
||||||
if (pixel != ckey) {
|
if (pixel != ckey) {
|
||||||
RGB_FROM_PIXEL (pixel, dstfmt, sR, sG, sB);
|
RGB_FROM_PIXEL (pixel, dstfmt, sR, sG, sB);
|
||||||
ASSEMBLE_RGBA (dstrow, bpp, dstfmt, sR, sG, sB, alpha);
|
ASSEMBLE_RGBA (dstrow, bpp, dstfmt, sR, sG, sB, alpha);
|
||||||
}
|
}
|
||||||
dstrow += bpp;
|
dstrow += bpp;
|
||||||
//srcpixels += bpp;
|
|
||||||
}//,
|
|
||||||
//w);
|
|
||||||
//srcrow += box->bmPitch;
|
|
||||||
//dstrow += dst->pitch;
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
else /*while ( h-- )*/ {
|
|
||||||
//dstpixels = dstrow;
|
|
||||||
//srcpixels = srcrow;
|
|
||||||
//DUFFS_LOOP(
|
|
||||||
{
|
|
||||||
//Uint32 pixel;
|
|
||||||
unsigned sR;
|
|
||||||
unsigned sG;
|
|
||||||
unsigned sB;
|
|
||||||
//RETRIEVE_RGB_PIXEL (srcpixels, bpp, pixel);
|
|
||||||
//here,the MYBITMAP has no BMP_TYPE_MONOKEY,need to fixed
|
|
||||||
if (pixel != ckey || ( pixel == ckey && mybmp->mybmp->flag & BMP_TYPE_MONOKEY) ) {
|
|
||||||
if (pixel == ckey)
|
|
||||||
pixel ^=1 ;
|
|
||||||
RGB_FROM_PIXEL (pixel, dstfmt, sR, sG, sB);
|
|
||||||
ASSEMBLE_RGBA (dstrow, bpp, dstfmt, sR, sG, sB, alpha);
|
|
||||||
}
|
|
||||||
dstrow += bpp;
|
|
||||||
//srcpixels += bpp;
|
|
||||||
}//,
|
|
||||||
//w);
|
|
||||||
//srcrow += box->bmPitch;
|
|
||||||
//dstrow += dst->pitch;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return dstrow;
|
return dstrow;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,7 @@ noinst_LTLIBRARIES = libnewgdi.la
|
|||||||
|
|
||||||
if MG_MINIMALGDI
|
if MG_MINIMALGDI
|
||||||
SRC_FILES = gdi.c attr.c clip.c coor.c rect.c \
|
SRC_FILES = gdi.c attr.c clip.c coor.c rect.c \
|
||||||
bitmap.c \
|
bitmap.c pixel.c pixel_ops.c \
|
||||||
pixel.c pixel_ops.c \
|
|
||||||
region.c polygon.c
|
region.c polygon.c
|
||||||
else
|
else
|
||||||
SRC_FILES = gdi.c attr.c clip.c map.c coor.c rect.c \
|
SRC_FILES = gdi.c attr.c clip.c map.c coor.c rect.c \
|
||||||
@@ -14,7 +13,7 @@ SRC_FILES = gdi.c attr.c clip.c map.c coor.c rect.c \
|
|||||||
region.c generators.c polygon.c flood.c \
|
region.c generators.c polygon.c flood.c \
|
||||||
advapi.c midash.c mispans.c miwideline.c \
|
advapi.c midash.c mispans.c miwideline.c \
|
||||||
mifillarc.c mifpolycon.c miarc.c rotatebmp.c \
|
mifillarc.c mifpolycon.c miarc.c rotatebmp.c \
|
||||||
text.c glyph.c bidi.c \
|
text.c achar.c glyph.c bidi.c glyph-unicode.c \
|
||||||
textout.c tabbedtextout.c drawtext.c
|
textout.c tabbedtextout.c drawtext.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,198 @@
|
|||||||
|
/*
|
||||||
|
* 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 <http://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* 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
|
||||||
|
* <http://www.minigui.com/en/about/licensing-policy/>.
|
||||||
|
*/
|
||||||
|
/*
|
||||||
|
** achar.c: API implementation for abstract character.
|
||||||
|
**
|
||||||
|
** Create date: 2019/03/05
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
#include "minigui.h"
|
||||||
|
#include "gdi.h"
|
||||||
|
#include "window.h"
|
||||||
|
#include "devfont.h"
|
||||||
|
|
||||||
|
Achar32 GUIAPI GetACharValue (LOGFONT* logfont, const char* mchar,
|
||||||
|
int mchar_len, const char* pre_mchar, int pre_len)
|
||||||
|
{
|
||||||
|
int len_cur_char;
|
||||||
|
Achar32 chv = INV_ACHAR_VALUE;
|
||||||
|
DEVFONT* sbc_devfont = logfont->devfonts[0];
|
||||||
|
DEVFONT* mbc_devfont = logfont->devfonts[1];
|
||||||
|
|
||||||
|
if (mbc_devfont) {
|
||||||
|
len_cur_char = mbc_devfont->charset_ops->len_first_char
|
||||||
|
((const unsigned char*)mchar, mchar_len);
|
||||||
|
|
||||||
|
if (len_cur_char > 0) {
|
||||||
|
chv = mbc_devfont->charset_ops->get_char_value
|
||||||
|
((Uint8*)pre_mchar, pre_len, (Uint8*)mchar, mchar_len);
|
||||||
|
|
||||||
|
return SET_MBCHV(chv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
len_cur_char = sbc_devfont->charset_ops->len_first_char
|
||||||
|
((const unsigned char*)mchar, mchar_len);
|
||||||
|
|
||||||
|
if (len_cur_char > 0) {
|
||||||
|
chv = sbc_devfont->charset_ops->get_char_value
|
||||||
|
(NULL, 0, (Uint8*)mchar, mchar_len);
|
||||||
|
}
|
||||||
|
|
||||||
|
return chv;
|
||||||
|
}
|
||||||
|
|
||||||
|
Achar32 GUIAPI GetShapedAChar (LOGFONT* logfont, const char* mchar,
|
||||||
|
int mchar_len, ACHARSHAPETYPE shape_type)
|
||||||
|
{
|
||||||
|
int len_cur_char;
|
||||||
|
|
||||||
|
Achar32 chv = INV_ACHAR_VALUE;
|
||||||
|
DEVFONT* sbc_devfont = logfont->devfonts[0];
|
||||||
|
DEVFONT* mbc_devfont = logfont->devfonts[1];
|
||||||
|
|
||||||
|
if (mbc_devfont) {
|
||||||
|
len_cur_char = mbc_devfont->charset_ops->len_first_char (
|
||||||
|
(const unsigned char*)mchar, mchar_len);
|
||||||
|
|
||||||
|
if (len_cur_char > 0) {
|
||||||
|
if (mbc_devfont->charset_ops->get_shaped_char_value)
|
||||||
|
chv = mbc_devfont->charset_ops->get_shaped_char_value(
|
||||||
|
(const unsigned char*)mchar, mchar_len, shape_type);
|
||||||
|
else
|
||||||
|
chv = mbc_devfont->charset_ops->get_char_value
|
||||||
|
(NULL, 0, (Uint8*)mchar, len_cur_char);
|
||||||
|
|
||||||
|
return SET_MBCHV(chv);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
len_cur_char = sbc_devfont->charset_ops->len_first_char
|
||||||
|
((const unsigned char*)mchar, mchar_len);
|
||||||
|
|
||||||
|
if (len_cur_char > 0) {
|
||||||
|
if (sbc_devfont->charset_ops->get_shaped_char_value)
|
||||||
|
chv = sbc_devfont->charset_ops->get_shaped_char_value(
|
||||||
|
(const unsigned char*)mchar, mchar_len, shape_type);
|
||||||
|
else
|
||||||
|
chv = sbc_devfont->charset_ops->get_char_value
|
||||||
|
(NULL, 0, (Uint8*)mchar, len_cur_char);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
return chv;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL GUIAPI GetMirrorAChar (LOGFONT* logfont, Achar32 chv, Achar32* mirrored)
|
||||||
|
{
|
||||||
|
DEVFONT* devfont = SELECT_DEVFONT_BY_ACHAR(logfont, chv);
|
||||||
|
|
||||||
|
*mirrored = INV_ACHAR_VALUE;
|
||||||
|
if (devfont->charset_ops->bidi_mirror_char) {
|
||||||
|
return devfont->charset_ops->bidi_mirror_char(REAL_ACHAR(chv),
|
||||||
|
mirrored);
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Uint32 GUIAPI GetACharType (LOGFONT* logfont, Achar32 chv)
|
||||||
|
{
|
||||||
|
DEVFONT* devfont = SELECT_DEVFONT_BY_ACHAR(logfont, chv);
|
||||||
|
return devfont->charset_ops->char_type (REAL_ACHAR (chv));
|
||||||
|
}
|
||||||
|
|
||||||
|
Uint32 GetGlyphBIDIType (LOGFONT* log_font, Achar32 chv)
|
||||||
|
{
|
||||||
|
DEVFONT* devfont = SELECT_DEVFONT_BY_ACHAR(log_font, chv);
|
||||||
|
|
||||||
|
if (devfont == NULL ||
|
||||||
|
devfont->charset_ops->bidi_char_type == NULL)
|
||||||
|
return BIDI_TYPE_INVALID;
|
||||||
|
|
||||||
|
return devfont->charset_ops->bidi_char_type (REAL_ACHAR (chv));
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _MGCHARSET_UNICODE
|
||||||
|
|
||||||
|
Uchar32 GUIAPI Achar2UChar(LOGFONT* logfont, Achar32 chv)
|
||||||
|
{
|
||||||
|
Uchar32 uc;
|
||||||
|
DEVFONT* devfont = SELECT_DEVFONT_BY_ACHAR(logfont, chv);
|
||||||
|
|
||||||
|
if (devfont) {
|
||||||
|
chv = REAL_ACHAR(chv);
|
||||||
|
if (devfont->charset_ops->conv_to_uc32)
|
||||||
|
uc = devfont->charset_ops->conv_to_uc32(chv);
|
||||||
|
else
|
||||||
|
uc = chv;
|
||||||
|
|
||||||
|
return uc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int GUIAPI AChars2UChars(LOGFONT* logfont, const Achar32* chs,
|
||||||
|
Uchar32* ucs, int n)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
Uchar32 uc;
|
||||||
|
DEVFONT* devfont;
|
||||||
|
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
Achar32 chv = chs[i];
|
||||||
|
devfont = SELECT_DEVFONT_BY_ACHAR(logfont, chv);
|
||||||
|
if (devfont) {
|
||||||
|
chv = REAL_ACHAR(chv);
|
||||||
|
if (devfont->charset_ops->conv_to_uc32)
|
||||||
|
uc = devfont->charset_ops->conv_to_uc32(chv);
|
||||||
|
else
|
||||||
|
uc = chv;
|
||||||
|
|
||||||
|
ucs[i] = uc;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return i + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _MGCHARSET_UNICODE */
|
||||||
+11
-3
@@ -162,7 +162,8 @@ static void make_gray_pixels (PDC pdc)
|
|||||||
|
|
||||||
static void make_filter_pixels (PDC pdc)
|
static void make_filter_pixels (PDC pdc)
|
||||||
{
|
{
|
||||||
if (pdc->pLogFont->style & FS_WEIGHT_BOOK) {
|
switch (pdc->pLogFont->style & FS_RENDER_MASK) {
|
||||||
|
case FS_RENDER_GREY: {
|
||||||
int i;
|
int i;
|
||||||
Uint8 r, g, b, a;
|
Uint8 r, g, b, a;
|
||||||
|
|
||||||
@@ -180,9 +181,11 @@ static void make_filter_pixels (PDC pdc)
|
|||||||
|
|
||||||
pdc->filter_pixels [16] = GAL_MapRGBA (pdc->alpha_pixel_format,
|
pdc->filter_pixels [16] = GAL_MapRGBA (pdc->alpha_pixel_format,
|
||||||
r, g, b, 255);
|
r, g, b, 255);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else if (pdc->pLogFont->style & FS_WEIGHT_LIGHT) {
|
|
||||||
|
case FS_RENDER_MONO:
|
||||||
|
if (pdc->pLogFont->style & FS_DECORATE_OUTLINE) {
|
||||||
gal_pixel trans = pdc->bkcolor ^ 1;
|
gal_pixel trans = pdc->bkcolor ^ 1;
|
||||||
if (trans == pdc->textcolor)
|
if (trans == pdc->textcolor)
|
||||||
trans = pdc->bkcolor ^ 3;
|
trans = pdc->bkcolor ^ 3;
|
||||||
@@ -191,6 +194,11 @@ static void make_filter_pixels (PDC pdc)
|
|||||||
pdc->filter_pixels [1] = pdc->bkcolor;
|
pdc->filter_pixels [1] = pdc->bkcolor;
|
||||||
pdc->filter_pixels [2] = pdc->textcolor;
|
pdc->filter_pixels [2] = pdc->textcolor;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Uint32 GUIAPI SetDCAttr (HDC hdc, int attr, Uint32 value)
|
Uint32 GUIAPI SetDCAttr (HDC hdc, int attr, Uint32 value)
|
||||||
|
|||||||
+388
-537
File diff suppressed because it is too large
Load Diff
+11
-224
File diff suppressed because it is too large
Load Diff
+16
-4
@@ -61,8 +61,20 @@ typedef struct _BBOX
|
|||||||
int w, h;
|
int w, h;
|
||||||
} BBOX;
|
} BBOX;
|
||||||
|
|
||||||
int _gdi_get_glyph_advance (PDC pdc, Glyph32 glyph_value,
|
int _font_get_glyph_advance (LOGFONT* logfont, DEVFONT* devfont,
|
||||||
BOOL direction, int x, int y, int* adv_x, int* adv_y, BBOX* bbox);
|
Glyph32 glyph_value, BOOL direction, int ch_extra,
|
||||||
|
int x, int y, int* adv_x, int* adv_y, BBOX* bbox);
|
||||||
|
|
||||||
|
static inline int _gdi_get_glyph_advance (PDC pdc, Glyph32 glyph_value,
|
||||||
|
BOOL direction, int x, int y, int* adv_x, int* adv_y, BBOX* bbox)
|
||||||
|
{
|
||||||
|
LOGFONT* logfont = pdc->pLogFont;
|
||||||
|
DEVFONT* devfont = SELECT_DEVFONT_BY_GLYPH(logfont, glyph_value);
|
||||||
|
glyph_value = REAL_GLYPH (glyph_value);
|
||||||
|
|
||||||
|
return _font_get_glyph_advance (logfont, devfont, glyph_value,
|
||||||
|
direction, pdc->cExtra, x, y, adv_x, adv_y, bbox);
|
||||||
|
}
|
||||||
|
|
||||||
int _gdi_draw_one_glyph (PDC pdc, Glyph32 glyph_value, BOOL direction,
|
int _gdi_draw_one_glyph (PDC pdc, Glyph32 glyph_value, BOOL direction,
|
||||||
int x, int y, int* adv_x, int* adv_y);
|
int x, int y, int* adv_x, int* adv_y);
|
||||||
@@ -77,9 +89,9 @@ void _gdi_calc_glyphs_size_from_two_points (PDC pdc, int x0, int y0,
|
|||||||
int x1, int y1, SIZE* size);
|
int x1, int y1, SIZE* size);
|
||||||
|
|
||||||
typedef BOOL (*CB_ONE_GLYPH) (void* context, Glyph32 glyph_value,
|
typedef BOOL (*CB_ONE_GLYPH) (void* context, Glyph32 glyph_value,
|
||||||
int glyph_type);
|
unsigned int char_type);
|
||||||
|
|
||||||
int _gdi_output_visual_glyphs(PDC pdc, Glyph32* visual_glyphs, int nr_glyphs,
|
int _gdi_output_visual_achars(PDC pdc, Glyph32* visual_glyphs, int nr_glyphs,
|
||||||
BOOL direction, CB_ONE_GLYPH cb_one_glyph, void* context);
|
BOOL direction, CB_ONE_GLYPH cb_one_glyph, void* context);
|
||||||
|
|
||||||
int _gdi_reorder_text (PDC pdc, const unsigned char* text, int text_len,
|
int _gdi_reorder_text (PDC pdc, const unsigned char* text, int text_len,
|
||||||
|
|||||||
+11
-6
@@ -1733,7 +1733,7 @@ static void dc_InitDC (PDC pdc, HWND hWnd, BOOL bIsClient)
|
|||||||
pdc->pLogFont = GetSystemFont (SYSLOGFONT_WCHAR_DEF);
|
pdc->pLogFont = GetSystemFont (SYSLOGFONT_WCHAR_DEF);
|
||||||
pdc->tabstop = 8;
|
pdc->tabstop = 8;
|
||||||
pdc->CurTextPos.x = pdc->CurTextPos.y = 0;
|
pdc->CurTextPos.x = pdc->CurTextPos.y = 0;
|
||||||
pdc->cExtra = pdc->alExtra = pdc->blExtra = 0;
|
pdc->cExtra = pdc->wExtra = pdc->alExtra = pdc->blExtra = 0;
|
||||||
|
|
||||||
pdc->mapmode = MM_TEXT;
|
pdc->mapmode = MM_TEXT;
|
||||||
pdc->ta_flags = TA_LEFT | TA_TOP | TA_NOUPDATECP;
|
pdc->ta_flags = TA_LEFT | TA_TOP | TA_NOUPDATECP;
|
||||||
@@ -1812,6 +1812,7 @@ static void dc_InitDC (PDC pdc, HWND hWnd, BOOL bIsClient)
|
|||||||
[pdc->surface->format->BytesPerPixel - 1];
|
[pdc->surface->format->BytesPerPixel - 1];
|
||||||
pdc->draw_src_span = draw_src_span_ops [pdc->rop]
|
pdc->draw_src_span = draw_src_span_ops [pdc->rop]
|
||||||
[pdc->surface->format->BytesPerPixel - 1];
|
[pdc->surface->format->BytesPerPixel - 1];
|
||||||
|
pdc->user_comp_ctxt = pdc->surface->format;
|
||||||
|
|
||||||
pdc->cur_dst = (BYTE*)pdc->surface->pixels
|
pdc->cur_dst = (BYTE*)pdc->surface->pixels
|
||||||
+ pdc->surface->pitch * pdc->DevRC.top
|
+ pdc->surface->pitch * pdc->DevRC.top
|
||||||
@@ -1833,10 +1834,10 @@ static void dc_InitMemDCFrom (PDC pdc, const PDC pdc_ref)
|
|||||||
|
|
||||||
/* copy attributes from reference DC
|
/* copy attributes from reference DC
|
||||||
* gal_pixel bkcolor, pencolor, brushcolor, textcolor;
|
* gal_pixel bkcolor, pencolor, brushcolor, textcolor;
|
||||||
* int bkmode, tabstop, cExtra, alExtra, blExtra, mapmode, ta_flags, bidi_flags;
|
* int bkmode, tabstop, cExtra, wExtra, alExtra, blExtra, mapmode, ta_flags, bidi_flags;
|
||||||
*/
|
*/
|
||||||
memcpy (&pdc->bkcolor, &pdc_ref->bkcolor,
|
memcpy (&pdc->bkcolor, &pdc_ref->bkcolor,
|
||||||
sizeof (gal_pixel)*4 + sizeof (int)*8);
|
sizeof (gal_pixel)*4 + sizeof (int)*9);
|
||||||
#ifdef _MGHAVE_ADV_2DAPI
|
#ifdef _MGHAVE_ADV_2DAPI
|
||||||
memcpy (&pdc->pen_type, &pdc_ref->pen_type,
|
memcpy (&pdc->pen_type, &pdc_ref->pen_type,
|
||||||
(sizeof(int)*7) + sizeof(POINT) + (sizeof (void*)*3));
|
(sizeof(int)*7) + sizeof(POINT) + (sizeof (void*)*3));
|
||||||
@@ -1864,6 +1865,7 @@ static void dc_InitMemDCFrom (PDC pdc, const PDC pdc_ref)
|
|||||||
[pdc->surface->format->BytesPerPixel - 1];
|
[pdc->surface->format->BytesPerPixel - 1];
|
||||||
pdc->draw_src_span = draw_src_span_ops [pdc->rop]
|
pdc->draw_src_span = draw_src_span_ops [pdc->rop]
|
||||||
[pdc->surface->format->BytesPerPixel - 1];
|
[pdc->surface->format->BytesPerPixel - 1];
|
||||||
|
pdc->user_comp_ctxt = pdc->surface->format;
|
||||||
|
|
||||||
pdc->cur_dst = (BYTE*)pdc->surface->pixels
|
pdc->cur_dst = (BYTE*)pdc->surface->pixels
|
||||||
+ pdc->surface->pitch * pdc->DevRC.top
|
+ pdc->surface->pitch * pdc->DevRC.top
|
||||||
@@ -1898,7 +1900,7 @@ static void dc_InitScreenDC (PDC pdc, GAL_Surface *surface)
|
|||||||
pdc->pLogFont = GetSystemFont (SYSLOGFONT_WCHAR_DEF);
|
pdc->pLogFont = GetSystemFont (SYSLOGFONT_WCHAR_DEF);
|
||||||
pdc->tabstop = 8;
|
pdc->tabstop = 8;
|
||||||
pdc->CurTextPos.x = pdc->CurTextPos.y = 0;
|
pdc->CurTextPos.x = pdc->CurTextPos.y = 0;
|
||||||
pdc->cExtra = pdc->alExtra = pdc->blExtra = 0;
|
pdc->cExtra = pdc->wExtra = pdc->alExtra = pdc->blExtra = 0;
|
||||||
|
|
||||||
pdc->mapmode = MM_TEXT;
|
pdc->mapmode = MM_TEXT;
|
||||||
pdc->ta_flags = TA_LEFT | TA_TOP | TA_NOUPDATECP;
|
pdc->ta_flags = TA_LEFT | TA_TOP | TA_NOUPDATECP;
|
||||||
@@ -1955,6 +1957,7 @@ static void dc_InitScreenDC (PDC pdc, GAL_Surface *surface)
|
|||||||
[pdc->surface->format->BytesPerPixel - 1];
|
[pdc->surface->format->BytesPerPixel - 1];
|
||||||
pdc->draw_src_span = draw_src_span_ops [pdc->rop]
|
pdc->draw_src_span = draw_src_span_ops [pdc->rop]
|
||||||
[pdc->surface->format->BytesPerPixel - 1];
|
[pdc->surface->format->BytesPerPixel - 1];
|
||||||
|
pdc->user_comp_ctxt = pdc->surface->format;
|
||||||
|
|
||||||
pdc->cur_dst = pdc->surface->pixels;
|
pdc->cur_dst = pdc->surface->pixels;
|
||||||
pdc->move_to = move_to_ops [pdc->surface->format->BytesPerPixel - 1];
|
pdc->move_to = move_to_ops [pdc->surface->format->BytesPerPixel - 1];
|
||||||
@@ -1992,6 +1995,7 @@ int GUIAPI SetRasterOperation (HDC hdc, int rop)
|
|||||||
[pdc->surface->format->BytesPerPixel - 1];
|
[pdc->surface->format->BytesPerPixel - 1];
|
||||||
pdc->draw_src_span = draw_src_span_ops [rop]
|
pdc->draw_src_span = draw_src_span_ops [rop]
|
||||||
[pdc->surface->format->BytesPerPixel - 1];
|
[pdc->surface->format->BytesPerPixel - 1];
|
||||||
|
pdc->user_comp_ctxt = pdc->surface->format;
|
||||||
}
|
}
|
||||||
|
|
||||||
return old;
|
return old;
|
||||||
@@ -3434,8 +3438,8 @@ HWND GUIAPI WindowFromDC (HDC hdc)
|
|||||||
typedef struct _DCSTATE
|
typedef struct _DCSTATE
|
||||||
{
|
{
|
||||||
GAL_Color bkcolor, pencolor, brushcolor, textcolor;
|
GAL_Color bkcolor, pencolor, brushcolor, textcolor;
|
||||||
/* bkmode, tabstop, cExtra, alExtra, blExtra, mapmode, ta_flags, bidi_flags */
|
/* bkmode, tabstop, cExtra, wExtra, alExtra, blExtra, mapmode, ta_flags, bidi_flags */
|
||||||
char attrs_g1 [sizeof(int)*8];
|
char attrs_g1 [sizeof(int)*9];
|
||||||
|
|
||||||
#ifdef _MGHAVE_ADV_2DAPI
|
#ifdef _MGHAVE_ADV_2DAPI
|
||||||
/*
|
/*
|
||||||
@@ -3643,6 +3647,7 @@ BOOL GUIAPI RestoreDC (HDC hdc, int saved_dc)
|
|||||||
[pdc->surface->format->BytesPerPixel - 1];
|
[pdc->surface->format->BytesPerPixel - 1];
|
||||||
pdc->draw_src_span = draw_src_span_ops [pdc->rop]
|
pdc->draw_src_span = draw_src_span_ops [pdc->rop]
|
||||||
[pdc->surface->format->BytesPerPixel - 1];
|
[pdc->surface->format->BytesPerPixel - 1];
|
||||||
|
pdc->user_comp_ctxt = pdc->surface->format;
|
||||||
}
|
}
|
||||||
else if (ROP_COMP_USER == pdc->rop) {
|
else if (ROP_COMP_USER == pdc->rop) {
|
||||||
pdc->draw_pixel = dc_state->user_set_pixel;
|
pdc->draw_pixel = dc_state->user_set_pixel;
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+323
-2157
File diff suppressed because it is too large
Load Diff
@@ -32,6 +32,8 @@
|
|||||||
* <http://www.minigui.com/en/about/licensing-policy/>.
|
* <http://www.minigui.com/en/about/licensing-policy/>.
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
|
** NOTE: DEPRECATED.
|
||||||
|
**
|
||||||
** logfont.c: Log fonts management.
|
** logfont.c: Log fonts management.
|
||||||
**
|
**
|
||||||
** Current maintainer: Wei Yongming.
|
** Current maintainer: Wei Yongming.
|
||||||
@@ -67,7 +69,7 @@ static PLOGFONT gdiCreateLogFont ( const char* type, const char* family,
|
|||||||
{
|
{
|
||||||
PLOGFONT log_font;
|
PLOGFONT log_font;
|
||||||
int sbc_descent, mbc_descent = 0;
|
int sbc_descent, mbc_descent = 0;
|
||||||
char dev_family [LEN_FONT_NAME + 1];
|
char dev_family [LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
DEVFONT* sbc_devfont, *mbc_devfont;
|
DEVFONT* sbc_devfont, *mbc_devfont;
|
||||||
|
|
||||||
// is valid style?
|
// is valid style?
|
||||||
@@ -89,17 +91,17 @@ static PLOGFONT gdiCreateLogFont ( const char* type, const char* family,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (type) {
|
if (type) {
|
||||||
strncpy (log_font->type, type, LEN_FONT_NAME);
|
strncpy (log_font->type, type, LEN_LOGFONT_NAME_FIELD);
|
||||||
log_font->type [LEN_FONT_NAME] = '\0';
|
log_font->type [LEN_LOGFONT_NAME_FIELD] = '\0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
strcpy (log_font->type, FONT_TYPE_NAME_ALL);
|
strcpy (log_font->type, FONT_TYPE_NAME_ALL);
|
||||||
|
|
||||||
strncpy (log_font->family, family, LEN_FONT_NAME);
|
strncpy (log_font->family, family, LEN_LOGFONT_NAME_FIELD);
|
||||||
log_font->family [LEN_FONT_NAME] = '\0';
|
log_font->family [LEN_LOGFONT_NAME_FIELD] = '\0';
|
||||||
|
|
||||||
strncpy (log_font->charset, charset, LEN_FONT_NAME);
|
strncpy (log_font->charset, charset, LEN_LOGFONT_NAME_FIELD);
|
||||||
log_font->charset [LEN_FONT_NAME] = '\0';
|
log_font->charset [LEN_LOGFONT_NAME_FIELD] = '\0';
|
||||||
|
|
||||||
if (size > FONT_MAX_SIZE)
|
if (size > FONT_MAX_SIZE)
|
||||||
log_font->size = FONT_MAX_SIZE;
|
log_font->size = FONT_MAX_SIZE;
|
||||||
@@ -138,25 +140,25 @@ static PLOGFONT gdiCreateLogFont ( const char* type, const char* family,
|
|||||||
// family name
|
// family name
|
||||||
if (log_font->mbc_devfont) {
|
if (log_font->mbc_devfont) {
|
||||||
fontGetFamilyFromName (log_font->mbc_devfont->name, dev_family);
|
fontGetFamilyFromName (log_font->mbc_devfont->name, dev_family);
|
||||||
strncpy (log_font->family, dev_family, LEN_FONT_NAME);
|
strncpy (log_font->family, dev_family, LEN_LOGFONT_NAME_FIELD);
|
||||||
log_font->family [LEN_FONT_NAME] = '\0';
|
log_font->family [LEN_LOGFONT_NAME_FIELD] = '\0';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fontGetFamilyFromName (log_font->sbc_devfont->name, dev_family);
|
fontGetFamilyFromName (log_font->sbc_devfont->name, dev_family);
|
||||||
strncpy (log_font->family, dev_family, LEN_FONT_NAME);
|
strncpy (log_font->family, dev_family, LEN_LOGFONT_NAME_FIELD);
|
||||||
log_font->family [LEN_FONT_NAME] = '\0';
|
log_font->family [LEN_LOGFONT_NAME_FIELD] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
// charset name
|
// charset name
|
||||||
if (log_font->mbc_devfont) {
|
if (log_font->mbc_devfont) {
|
||||||
strncpy (log_font->charset,
|
strncpy (log_font->charset,
|
||||||
log_font->mbc_devfont->charset_ops->name, LEN_FONT_NAME);
|
log_font->mbc_devfont->charset_ops->name, LEN_LOGFONT_NAME_FIELD);
|
||||||
log_font->charset [LEN_FONT_NAME] = '\0';
|
log_font->charset [LEN_LOGFONT_NAME_FIELD] = '\0';
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
strncpy (log_font->charset,
|
strncpy (log_font->charset,
|
||||||
log_font->sbc_devfont->charset_ops->name, LEN_FONT_NAME);
|
log_font->sbc_devfont->charset_ops->name, LEN_LOGFONT_NAME_FIELD);
|
||||||
log_font->charset [LEN_FONT_NAME] = '\0';
|
log_font->charset [LEN_LOGFONT_NAME_FIELD] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
// size
|
// size
|
||||||
@@ -215,9 +217,9 @@ PLOGFONT GUIAPI CreateLogFont (const char* type, const char* family,
|
|||||||
|
|
||||||
PLOGFONT GUIAPI CreateLogFontByName (const char* font_name)
|
PLOGFONT GUIAPI CreateLogFontByName (const char* font_name)
|
||||||
{
|
{
|
||||||
char type[LEN_FONT_NAME + 1];
|
char type[LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
char family[LEN_FONT_NAME + 1];
|
char family[LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
char charset[LEN_FONT_NAME + 1];
|
char charset[LEN_LOGFONT_NAME_FIELD + 1];
|
||||||
DWORD style;
|
DWORD style;
|
||||||
int height;
|
int height;
|
||||||
|
|
||||||
@@ -110,7 +110,6 @@ BOOL GUIAPI InitBitmapPixelFormat (HDC hdc, PBITMAP bmp)
|
|||||||
if (bmp->bmType & BMP_TYPE_ALPHA) {
|
if (bmp->bmType & BMP_TYPE_ALPHA) {
|
||||||
if (device_has_alpha(hdc) || bmp->bmBitsPerPixel <= 8) {
|
if (device_has_alpha(hdc) || bmp->bmBitsPerPixel <= 8) {
|
||||||
bmp->bmType &= ~BMP_TYPE_ALPHA_MASK;
|
bmp->bmType &= ~BMP_TYPE_ALPHA_MASK;
|
||||||
bmp->bmType &= ~BMP_TYPE_PRIV_PIXEL;
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1262,7 +1261,6 @@ int GUIAPI FillBoxWithMyBitmap (HDC hdc, int x, int y, MYBITMAP* mybmp, RGB* pal
|
|||||||
}
|
}
|
||||||
|
|
||||||
//bmp->bmType |= BMP_TYPE_ALPHA;
|
//bmp->bmType |= BMP_TYPE_ALPHA;
|
||||||
//bmp->bmType |= BMP_TYPE_PRIV_PIXEL;
|
|
||||||
}
|
}
|
||||||
else { /* for bpp <= 8, just strip alpha */
|
else { /* for bpp <= 8, just strip alpha */
|
||||||
AlphaPixelFormat = pdc->surface->format;
|
AlphaPixelFormat = pdc->surface->format;
|
||||||
|
|||||||
+39
-22
@@ -64,7 +64,7 @@ extern int __mg_substrlen (PLOGFONT log_font, const char* text, int len,
|
|||||||
static inline BOOL is_utf16_logfont (PDC pdc)
|
static inline BOOL is_utf16_logfont (PDC pdc)
|
||||||
{
|
{
|
||||||
DEVFONT* mbc_devfont;
|
DEVFONT* mbc_devfont;
|
||||||
mbc_devfont = pdc->pLogFont->mbc_devfont;
|
mbc_devfont = pdc->pLogFont->devfonts[1];
|
||||||
if (mbc_devfont && strstr (mbc_devfont->charset_ops->name, "UTF-16")) {
|
if (mbc_devfont && strstr (mbc_devfont->charset_ops->name, "UTF-16")) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -116,14 +116,14 @@ typedef struct _TABBEDTEXTOUT_CTXT
|
|||||||
} TABBEDTEXTOUT_CTXT;
|
} TABBEDTEXTOUT_CTXT;
|
||||||
|
|
||||||
static BOOL cb_tabbedtextout (void* context, Glyph32 glyph_value,
|
static BOOL cb_tabbedtextout (void* context, Glyph32 glyph_value,
|
||||||
int glyph_type)
|
unsigned int char_type)
|
||||||
{
|
{
|
||||||
TABBEDTEXTOUT_CTXT* ctxt = (TABBEDTEXTOUT_CTXT*)context;
|
TABBEDTEXTOUT_CTXT* ctxt = (TABBEDTEXTOUT_CTXT*)context;
|
||||||
int adv_x, adv_y;
|
int adv_x, adv_y;
|
||||||
BBOX bbox;
|
BBOX bbox;
|
||||||
int bkmode = ctxt->pdc->bkmode;
|
int bkmode = ctxt->pdc->bkmode;
|
||||||
|
|
||||||
switch (glyph_type) {
|
switch (char_type & CHARTYPE_MCHAR_MASK) {
|
||||||
case MCHAR_TYPE_ZEROWIDTH:
|
case MCHAR_TYPE_ZEROWIDTH:
|
||||||
adv_x = adv_y = 0;
|
adv_x = adv_y = 0;
|
||||||
break;
|
break;
|
||||||
@@ -143,6 +143,7 @@ static BOOL cb_tabbedtextout (void* context, Glyph32 glyph_value,
|
|||||||
ctxt->x, ctxt->y, &adv_x, &adv_y);
|
ctxt->x, ctxt->y, &adv_x, &adv_y);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MCHAR_TYPE_VOWEL:
|
case MCHAR_TYPE_VOWEL:
|
||||||
if (!ctxt->only_extent) {
|
if (!ctxt->only_extent) {
|
||||||
//ctxt->pdc->bkmode = BM_TRANSPARENT;
|
//ctxt->pdc->bkmode = BM_TRANSPARENT;
|
||||||
@@ -153,6 +154,7 @@ static BOOL cb_tabbedtextout (void* context, Glyph32 glyph_value,
|
|||||||
}
|
}
|
||||||
adv_x = adv_y = 0;
|
adv_x = adv_y = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (ctxt->only_extent) {
|
if (ctxt->only_extent) {
|
||||||
ctxt->advance += _gdi_get_glyph_advance (ctxt->pdc,
|
ctxt->advance += _gdi_get_glyph_advance (ctxt->pdc,
|
||||||
@@ -194,13 +196,13 @@ typedef struct _TABBEDTEXTOUTEX_CTXT
|
|||||||
} TABBEDTEXTOUTEX_CTXT;
|
} TABBEDTEXTOUTEX_CTXT;
|
||||||
|
|
||||||
static BOOL cb_tabbedtextoutex (void* context, Glyph32 glyph_value,
|
static BOOL cb_tabbedtextoutex (void* context, Glyph32 glyph_value,
|
||||||
int glyph_type)
|
unsigned int char_type)
|
||||||
{
|
{
|
||||||
TABBEDTEXTOUTEX_CTXT* ctxt = (TABBEDTEXTOUTEX_CTXT*)context;
|
TABBEDTEXTOUTEX_CTXT* ctxt = (TABBEDTEXTOUTEX_CTXT*)context;
|
||||||
int adv_x, adv_y;
|
int adv_x, adv_y;
|
||||||
int tab_pos = ctxt->nTabOrig;
|
int tab_pos = ctxt->nTabOrig;
|
||||||
|
|
||||||
switch (glyph_type) {
|
switch (char_type & CHARTYPE_MCHAR_MASK) {
|
||||||
case MCHAR_TYPE_ZEROWIDTH:
|
case MCHAR_TYPE_ZEROWIDTH:
|
||||||
adv_x = adv_y = 0;
|
adv_x = adv_y = 0;
|
||||||
break;
|
break;
|
||||||
@@ -222,6 +224,7 @@ static BOOL cb_tabbedtextoutex (void* context, Glyph32 glyph_value,
|
|||||||
ctxt->advance = tab_pos;
|
ctxt->advance = tab_pos;
|
||||||
ctxt->nTabOrig = tab_pos;
|
ctxt->nTabOrig = tab_pos;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MCHAR_TYPE_VOWEL:
|
case MCHAR_TYPE_VOWEL:
|
||||||
_gdi_draw_one_glyph (ctxt->pdc, glyph_value,
|
_gdi_draw_one_glyph (ctxt->pdc, glyph_value,
|
||||||
(ctxt->pdc->ta_flags & TA_X_MASK) != TA_RIGHT,
|
(ctxt->pdc->ta_flags & TA_X_MASK) != TA_RIGHT,
|
||||||
@@ -329,8 +332,8 @@ int GUIAPI TabbedTextOutLen (HDC hdc, int x, int y,
|
|||||||
if (len < 0) len = __mg_strlen (pdc->pLogFont, spText);
|
if (len < 0) len = __mg_strlen (pdc->pLogFont, spText);
|
||||||
if (len == 0) return 0;
|
if (len == 0) return 0;
|
||||||
|
|
||||||
tab_width = pdc->pLogFont->sbc_devfont->font_ops->get_ave_width
|
tab_width = pdc->pLogFont->devfonts[0]->font_ops->get_ave_width
|
||||||
(pdc->pLogFont, pdc->pLogFont->sbc_devfont) * pdc->tabstop;
|
(pdc->pLogFont, pdc->pLogFont->devfonts[0]) * pdc->tabstop;
|
||||||
|
|
||||||
/* override start point by current text position */
|
/* override start point by current text position */
|
||||||
if ((pdc->ta_flags & TA_CP_MASK) == TA_UPDATECP) {
|
if ((pdc->ta_flags & TA_CP_MASK) == TA_UPDATECP) {
|
||||||
@@ -376,8 +379,8 @@ int GUIAPI GetTabbedTextExtent (HDC hdc, const char* spText, int len,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
tab_width = pdc->pLogFont->sbc_devfont->font_ops->get_ave_width
|
tab_width = pdc->pLogFont->devfonts[0]->font_ops->get_ave_width
|
||||||
(pdc->pLogFont, pdc->pLogFont->sbc_devfont) * pdc->tabstop;
|
(pdc->pLogFont, pdc->pLogFont->devfonts[0]) * pdc->tabstop;
|
||||||
|
|
||||||
advance = _gdi_tabbed_text_out (pdc, 0, 0, (const unsigned char*) spText,
|
advance = _gdi_tabbed_text_out (pdc, 0, 0, (const unsigned char*) spText,
|
||||||
len, tab_width, TRUE, NULL, &size);
|
len, tab_width, TRUE, NULL, &size);
|
||||||
@@ -397,8 +400,8 @@ int _gdi_tabbedex_text_out (PDC pdc, int x, int y,
|
|||||||
#if 0
|
#if 0
|
||||||
DEVFONT* sbc_devfont;
|
DEVFONT* sbc_devfont;
|
||||||
DEVFONT* mbc_devfont;
|
DEVFONT* mbc_devfont;
|
||||||
sbc_devfont = pdc->pLogFont->sbc_devfont;
|
sbc_devfont = pdc->pLogFont->devfonts[0];
|
||||||
mbc_devfont = pdc->pLogFont->mbc_devfont;
|
mbc_devfont = pdc->pLogFont->devfonts[1];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ctxt.pdc = pdc;
|
ctxt.pdc = pdc;
|
||||||
@@ -481,8 +484,8 @@ int GUIAPI TabbedTextOutEx (HDC hdc, int x, int y, const char* spText,
|
|||||||
if (nCount == 0) return 0;
|
if (nCount == 0) return 0;
|
||||||
|
|
||||||
if (nTabs == 0 || pTabPos == NULL) {
|
if (nTabs == 0 || pTabPos == NULL) {
|
||||||
int ave_width = (*pdc->pLogFont->sbc_devfont->font_ops->get_ave_width)
|
int ave_width = (*pdc->pLogFont->devfonts[0]->font_ops->get_ave_width)
|
||||||
(pdc->pLogFont, pdc->pLogFont->sbc_devfont);
|
(pdc->pLogFont, pdc->pLogFont->devfonts[0]);
|
||||||
def_tab = ave_width * pdc->tabstop;
|
def_tab = ave_width * pdc->tabstop;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -516,8 +519,8 @@ int GUIAPI GetTabbedTextExtentPoint (HDC hdc, const char* text,
|
|||||||
{
|
{
|
||||||
PDC pdc = dc_HDC2PDC (hdc);
|
PDC pdc = dc_HDC2PDC (hdc);
|
||||||
LOGFONT* log_font = pdc->pLogFont;
|
LOGFONT* log_font = pdc->pLogFont;
|
||||||
DEVFONT* sbc_devfont = log_font->sbc_devfont;
|
DEVFONT* sbc_devfont = log_font->devfonts[0];
|
||||||
DEVFONT* mbc_devfont = log_font->mbc_devfont;
|
DEVFONT* mbc_devfont = log_font->devfonts[1];
|
||||||
DEVFONT* devfont;
|
DEVFONT* devfont;
|
||||||
int left_bytes = len;
|
int left_bytes = len;
|
||||||
int len_cur_char;
|
int len_cur_char;
|
||||||
@@ -530,7 +533,7 @@ int GUIAPI GetTabbedTextExtentPoint (HDC hdc, const char* text,
|
|||||||
size->cx = size->cy = 0;
|
size->cx = size->cy = 0;
|
||||||
|
|
||||||
/* This function does not support BIDI */
|
/* This function does not support BIDI */
|
||||||
if (mbc_devfont && pdc->bidi_flags && mbc_devfont->charset_ops->bidi_glyph_type)
|
if (mbc_devfont && pdc->bidi_flags && mbc_devfont->charset_ops->bidi_char_type)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
_gdi_start_new_line (pdc);
|
_gdi_start_new_line (pdc);
|
||||||
@@ -563,16 +566,30 @@ int GUIAPI GetTabbedTextExtentPoint (HDC hdc, const char* text,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (devfont) {
|
if (devfont) {
|
||||||
int glyph_type;
|
int char_type;
|
||||||
|
|
||||||
glyph_value = devfont->charset_ops->char_glyph_value
|
glyph_value = devfont->charset_ops->get_char_value
|
||||||
(NULL, 0, (const unsigned char*)text, len_cur_char);
|
(NULL, 0, (const unsigned char*)text, len_cur_char);
|
||||||
glyph_type = devfont->charset_ops->glyph_type (glyph_value);
|
char_type = devfont->charset_ops->char_type (glyph_value);
|
||||||
|
|
||||||
if(devfont == mbc_devfont)
|
if (devfont == mbc_devfont) {
|
||||||
glyph_value |= 0x80000000;
|
int i, dfi;
|
||||||
|
DEVFONT* df;
|
||||||
|
|
||||||
switch (glyph_type) {
|
dfi = 1;
|
||||||
|
for (i = 1; i < MAXNR_DEVFONTS; i++) {
|
||||||
|
if ((df = log_font->devfonts[i])) {
|
||||||
|
if (df->font_ops->is_glyph_existed(log_font, df,
|
||||||
|
glyph_value)) {
|
||||||
|
dfi = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
glyph_value = SET_GLYPH_DFI(glyph_value, dfi);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (char_type & CHARTYPE_MCHAR_MASK) {
|
||||||
case MCHAR_TYPE_ZEROWIDTH:
|
case MCHAR_TYPE_ZEROWIDTH:
|
||||||
case MCHAR_TYPE_VOWEL:
|
case MCHAR_TYPE_VOWEL:
|
||||||
break;
|
break;
|
||||||
|
|||||||
+13
-9
@@ -61,18 +61,22 @@ int GUIAPI GetFontHeight (HDC hdc)
|
|||||||
|
|
||||||
int GUIAPI GetMaxFontWidth (HDC hdc)
|
int GUIAPI GetMaxFontWidth (HDC hdc)
|
||||||
{
|
{
|
||||||
|
int i;
|
||||||
|
DEVFONT* df;
|
||||||
PDC pdc = dc_HDC2PDC(hdc);
|
PDC pdc = dc_HDC2PDC(hdc);
|
||||||
DEVFONT* sbc_devfont = pdc->pLogFont->sbc_devfont;
|
int max_width = 0;
|
||||||
DEVFONT* mbc_devfont = pdc->pLogFont->mbc_devfont;
|
|
||||||
int sbc_max_width = (*sbc_devfont->font_ops->get_max_width)
|
|
||||||
(pdc->pLogFont, sbc_devfont);
|
|
||||||
int mbc_max_width = 0;
|
|
||||||
|
|
||||||
if (mbc_devfont)
|
for (i = 0; i < MAXNR_DEVFONTS; i++) {
|
||||||
mbc_max_width = (*mbc_devfont->font_ops->get_max_width)
|
int value;
|
||||||
(pdc->pLogFont, mbc_devfont);
|
df = pdc->pLogFont->devfonts[i];
|
||||||
|
if (df == NULL)
|
||||||
|
break;
|
||||||
|
|
||||||
return (sbc_max_width > mbc_max_width) ? sbc_max_width : mbc_max_width;
|
value = df->font_ops->get_max_width(pdc->pLogFont, df);
|
||||||
|
max_width = MAX(max_width, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
return max_width;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GUIAPI GetLastTextOutPos (HDC hdc, POINT* pt)
|
void GUIAPI GetLastTextOutPos (HDC hdc, POINT* pt)
|
||||||
|
|||||||
+34
-20
@@ -64,7 +64,7 @@ extern int __mg_substrlen (PLOGFONT log_font, const char* text, int len,
|
|||||||
static inline BOOL is_utf16_logfont (PDC pdc)
|
static inline BOOL is_utf16_logfont (PDC pdc)
|
||||||
{
|
{
|
||||||
DEVFONT* mbc_devfont;
|
DEVFONT* mbc_devfont;
|
||||||
mbc_devfont = pdc->pLogFont->mbc_devfont;
|
mbc_devfont = pdc->pLogFont->devfonts[1];
|
||||||
if (mbc_devfont && strstr (mbc_devfont->charset_ops->name, "UTF-16")) {
|
if (mbc_devfont && strstr (mbc_devfont->charset_ops->name, "UTF-16")) {
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@@ -106,16 +106,16 @@ typedef struct _DRAW_GLYPHS_CTXT {
|
|||||||
int advance;
|
int advance;
|
||||||
} DRAW_GLYPHS_CTXT;
|
} DRAW_GLYPHS_CTXT;
|
||||||
|
|
||||||
static BOOL cb_draw_glyph (void* context, Glyph32 glyph_value, int glyph_type)
|
static BOOL cb_draw_glyph (void* context, Glyph32 glyph_value, unsigned int char_type)
|
||||||
{
|
{
|
||||||
DRAW_GLYPHS_CTXT* ctxt = (DRAW_GLYPHS_CTXT*)context;
|
DRAW_GLYPHS_CTXT* ctxt = (DRAW_GLYPHS_CTXT*)context;
|
||||||
int adv_x, adv_y;
|
int adv_x, adv_y;
|
||||||
int bkmode;
|
int bkmode;
|
||||||
|
|
||||||
if (glyph_type == MCHAR_TYPE_ZEROWIDTH) {
|
if (check_zero_width(char_type)) {
|
||||||
adv_x = adv_y = 0;
|
adv_x = adv_y = 0;
|
||||||
}
|
}
|
||||||
else if (glyph_type == MCHAR_TYPE_VOWEL){
|
else if (check_vowel(char_type)) {
|
||||||
bkmode = GetBkMode (ctxt->hdc);
|
bkmode = GetBkMode (ctxt->hdc);
|
||||||
//SetBkMode (ctxt->hdc, BM_TRANSPARENT);
|
//SetBkMode (ctxt->hdc, BM_TRANSPARENT);
|
||||||
DrawGlyph (ctxt->hdc, ctxt->x, ctxt->y, glyph_value, &adv_x, &adv_y);
|
DrawGlyph (ctxt->hdc, ctxt->x, ctxt->y, glyph_value, &adv_x, &adv_y);
|
||||||
@@ -138,10 +138,10 @@ int DrawGlyphString (HDC hdc, int startx, int starty, Glyph32* glyph_string, int
|
|||||||
DRAW_GLYPHS_CTXT ctxt = {hdc, startx, starty, 0};
|
DRAW_GLYPHS_CTXT ctxt = {hdc, startx, starty, 0};
|
||||||
|
|
||||||
if ((((PDC)hdc)->ta_flags & TA_X_MASK) == TA_LEFT)
|
if ((((PDC)hdc)->ta_flags & TA_X_MASK) == TA_LEFT)
|
||||||
_gdi_output_visual_glyphs((PDC)hdc, glyph_string,
|
_gdi_output_visual_achars((PDC)hdc, glyph_string,
|
||||||
len, TRUE, cb_draw_glyph, &ctxt);
|
len, TRUE, cb_draw_glyph, &ctxt);
|
||||||
else
|
else
|
||||||
_gdi_output_visual_glyphs((PDC)hdc, glyph_string,
|
_gdi_output_visual_achars((PDC)hdc, glyph_string,
|
||||||
len, FALSE, cb_draw_glyph, &ctxt);
|
len, FALSE, cb_draw_glyph, &ctxt);
|
||||||
|
|
||||||
if (adv_x)
|
if (adv_x)
|
||||||
@@ -162,18 +162,18 @@ typedef struct _TEXTOUT_CTXT
|
|||||||
BOOL only_extent;
|
BOOL only_extent;
|
||||||
} TEXTOUT_CTXT;
|
} TEXTOUT_CTXT;
|
||||||
|
|
||||||
static BOOL cb_textout (void* context, Glyph32 glyph_value, int glyph_type)
|
static BOOL cb_textout (void* context, Glyph32 glyph_value,
|
||||||
|
unsigned int char_type)
|
||||||
{
|
{
|
||||||
TEXTOUT_CTXT* ctxt = (TEXTOUT_CTXT*)context;
|
TEXTOUT_CTXT* ctxt = (TEXTOUT_CTXT*)context;
|
||||||
int adv_x, adv_y;
|
int adv_x, adv_y;
|
||||||
int bkmode;
|
int bkmode;
|
||||||
|
|
||||||
if (glyph_type == MCHAR_TYPE_ZEROWIDTH) {
|
if (check_zero_width (char_type)) {
|
||||||
adv_x = adv_y = 0;
|
adv_x = adv_y = 0;
|
||||||
}
|
}
|
||||||
else if (glyph_type == MCHAR_TYPE_VOWEL){
|
else if (check_vowel(char_type)) {
|
||||||
if (!ctxt->only_extent)
|
if (!ctxt->only_extent) {
|
||||||
{
|
|
||||||
bkmode = ctxt->pdc->bkmode;
|
bkmode = ctxt->pdc->bkmode;
|
||||||
//ctxt->pdc->bkmode = BM_TRANSPARENT;
|
//ctxt->pdc->bkmode = BM_TRANSPARENT;
|
||||||
_gdi_draw_one_glyph (ctxt->pdc, glyph_value,
|
_gdi_draw_one_glyph (ctxt->pdc, glyph_value,
|
||||||
@@ -326,7 +326,7 @@ typedef struct _TEXTOUTOMITTED_CTXT
|
|||||||
Uint32 max_extent;
|
Uint32 max_extent;
|
||||||
} TEXTOUTOMITTED_CTXT;
|
} TEXTOUTOMITTED_CTXT;
|
||||||
|
|
||||||
static BOOL cb_textout_omitted (void* context, Glyph32 glyph_value, int glyph_type)
|
static BOOL cb_textout_omitted (void* context, Glyph32 glyph_value, unsigned int char_type)
|
||||||
{
|
{
|
||||||
TEXTOUTOMITTED_CTXT* ctxt = (TEXTOUTOMITTED_CTXT*)context;
|
TEXTOUTOMITTED_CTXT* ctxt = (TEXTOUTOMITTED_CTXT*)context;
|
||||||
int adv_x, adv_y;
|
int adv_x, adv_y;
|
||||||
@@ -334,10 +334,10 @@ static BOOL cb_textout_omitted (void* context, Glyph32 glyph_value, int glyph_ty
|
|||||||
//BBOX bbox;
|
//BBOX bbox;
|
||||||
int bkmode = ctxt->pdc->bkmode;
|
int bkmode = ctxt->pdc->bkmode;
|
||||||
|
|
||||||
if (glyph_type == MCHAR_TYPE_ZEROWIDTH) {
|
if (check_zero_width(char_type)) {
|
||||||
adv_x = adv_y = 0;
|
adv_x = adv_y = 0;
|
||||||
}
|
}
|
||||||
else if(glyph_type == MCHAR_TYPE_VOWEL) {
|
else if (check_vowel(char_type)) {
|
||||||
//ctxt->pdc->bkmode = BM_TRANSPARENT;
|
//ctxt->pdc->bkmode = BM_TRANSPARENT;
|
||||||
_gdi_draw_one_glyph (ctxt->pdc, glyph_value,
|
_gdi_draw_one_glyph (ctxt->pdc, glyph_value,
|
||||||
(ctxt->pdc->ta_flags & TA_X_MASK) != TA_RIGHT,
|
(ctxt->pdc->ta_flags & TA_X_MASK) != TA_RIGHT,
|
||||||
@@ -452,8 +452,8 @@ int GUIAPI GetTextExtentPoint (HDC hdc, const char* text, int len,
|
|||||||
{
|
{
|
||||||
PDC pdc = dc_HDC2PDC (hdc);
|
PDC pdc = dc_HDC2PDC (hdc);
|
||||||
LOGFONT* log_font = pdc->pLogFont;
|
LOGFONT* log_font = pdc->pLogFont;
|
||||||
DEVFONT* sbc_devfont = log_font->sbc_devfont;
|
DEVFONT* sbc_devfont = log_font->devfonts[0];
|
||||||
DEVFONT* mbc_devfont = log_font->mbc_devfont;
|
DEVFONT* mbc_devfont = log_font->devfonts[1];
|
||||||
int len_cur_char, advance_cur_char;
|
int len_cur_char, advance_cur_char;
|
||||||
int left_bytes = len;
|
int left_bytes = len;
|
||||||
int char_count = 0;
|
int char_count = 0;
|
||||||
@@ -463,7 +463,7 @@ int GUIAPI GetTextExtentPoint (HDC hdc, const char* text, int len,
|
|||||||
size->cx = size->cy = 0;
|
size->cx = size->cy = 0;
|
||||||
|
|
||||||
/* This function does not support BIDI */
|
/* This function does not support BIDI */
|
||||||
if (mbc_devfont && pdc->bidi_flags && mbc_devfont->charset_ops->bidi_glyph_type)
|
if (mbc_devfont && pdc->bidi_flags && mbc_devfont->charset_ops->bidi_char_type)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
_gdi_start_new_line(pdc);
|
_gdi_start_new_line(pdc);
|
||||||
@@ -479,11 +479,25 @@ int GUIAPI GetTextExtentPoint (HDC hdc, const char* text, int len,
|
|||||||
if (mbc_devfont &&
|
if (mbc_devfont &&
|
||||||
(len_cur_char = mbc_devfont->charset_ops->len_first_char
|
(len_cur_char = mbc_devfont->charset_ops->len_first_char
|
||||||
((const unsigned char*)text, left_bytes)) > 0) {
|
((const unsigned char*)text, left_bytes)) > 0) {
|
||||||
|
int i, dfi;
|
||||||
|
DEVFONT* df;
|
||||||
|
|
||||||
glyph_value = (*mbc_devfont->charset_ops->char_glyph_value)(NULL,
|
glyph_value = (*mbc_devfont->charset_ops->get_char_value)(NULL,
|
||||||
0, (const unsigned char*)text, 0);
|
0, (const unsigned char*)text, 0);
|
||||||
|
|
||||||
advance_cur_char = _gdi_get_glyph_advance (pdc, glyph_value | 0x80000000,
|
dfi = 1;
|
||||||
|
for (i = 1; i < MAXNR_DEVFONTS; i++) {
|
||||||
|
if ((df = log_font->devfonts[i])) {
|
||||||
|
if (df->font_ops->is_glyph_existed(log_font, df,
|
||||||
|
glyph_value)) {
|
||||||
|
dfi = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
glyph_value = SET_GLYPH_DFI(glyph_value, dfi);
|
||||||
|
|
||||||
|
advance_cur_char = _gdi_get_glyph_advance (pdc, glyph_value,
|
||||||
(pdc->ta_flags & TA_X_MASK) == TA_LEFT,
|
(pdc->ta_flags & TA_X_MASK) == TA_LEFT,
|
||||||
0, 0, NULL, NULL, NULL);
|
0, 0, NULL, NULL, NULL);
|
||||||
}
|
}
|
||||||
@@ -491,7 +505,7 @@ int GUIAPI GetTextExtentPoint (HDC hdc, const char* text, int len,
|
|||||||
if ((len_cur_char = sbc_devfont->charset_ops->len_first_char
|
if ((len_cur_char = sbc_devfont->charset_ops->len_first_char
|
||||||
((const unsigned char*)text, left_bytes)) > 0) {
|
((const unsigned char*)text, left_bytes)) > 0) {
|
||||||
|
|
||||||
glyph_value = (*sbc_devfont->charset_ops->char_glyph_value)(
|
glyph_value = (*sbc_devfont->charset_ops->get_char_value)(
|
||||||
NULL, 0, (const unsigned char*)text, 0);
|
NULL, 0, (const unsigned char*)text, 0);
|
||||||
advance_cur_char = _gdi_get_glyph_advance (pdc, glyph_value,
|
advance_cur_char = _gdi_get_glyph_advance (pdc, glyph_value,
|
||||||
(pdc->ta_flags & TA_X_MASK) == TA_LEFT,
|
(pdc->ta_flags & TA_X_MASK) == TA_LEFT,
|
||||||
|
|||||||
@@ -3850,7 +3850,7 @@ static int texteditor_get_text_count(mTextEditor* self, int start_with, BOOL bTe
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(plogfont->mbc_devfont == NULL)
|
if(plogfont->devfonts[1] == NULL)
|
||||||
return len;
|
return len;
|
||||||
|
|
||||||
while(idx < len)
|
while(idx < len)
|
||||||
|
|||||||
Reference in New Issue
Block a user