--- a/WinWorkstation.st Wed Mar 10 15:19:48 2004 +0100
+++ b/WinWorkstation.st Wed Mar 10 16:41:34 2004 +0100
@@ -4622,6 +4622,108 @@
* )
* CAVEAT: returns an array to avoid knowlege-need about ST-Objects (FontDescripttion) here.
*/
+OBJ
+__charSetSymbolFor(charSet)
+{
+ char *s;
+
+ switch (charSet) {
+ case ANSI_CHARSET:
+ s = "ms-ansi";
+ break;
+ case DEFAULT_CHARSET:
+ s = "ms-default";
+ break;
+ case SYMBOL_CHARSET:
+ s = "ms-symbol";
+ break;
+ case SHIFTJIS_CHARSET:
+ s = "ms-shiftjis";
+ break;
+ case GB2312_CHARSET:
+ s = "ms-gb2312";
+ break;
+ case HANGEUL_CHARSET:
+ s = "ms-hangeul";
+ break;
+# if defined(HANGUL_CHARSET) && (HANGUL_CHARSET != HANGEUL_CHARSET)
+ case HANGUL_CHARSET:
+ s = "ms-hangul";
+ break;
+# endif
+ case CHINESEBIG5_CHARSET:
+ s = "ms-chinesebig5";
+ break;
+ case OEM_CHARSET:
+ s = "ms-oem";
+ break;
+# ifdef JOHAB_CHARSET
+ case JOHAB_CHARSET:
+ s = "ms-johab";
+ break;
+# endif
+# ifdef HEBREW_CHARSET
+ case HEBREW_CHARSET:
+ s = "ms-hebrew";
+ break;
+# endif
+# ifdef ARABIC_CHARSET
+ case ARABIC_CHARSET:
+ s = "ms-arabic";
+ break;
+# endif
+# ifdef GREEK_CHARSET
+ case GREEK_CHARSET:
+ s = "ms-greek";
+ break;
+# endif
+# ifdef TURKISH_CHARSET
+ case TURKISH_CHARSET:
+ s = "ms-turkish";
+ break;
+# endif
+# ifdef RUSSIAN_CHARSET
+ case RUSSIAN_CHARSET:
+ s = "ms-russian";
+ break;
+# endif
+# ifdef EASTEUROPE_CHARSET
+ case EASTEUROPE_CHARSET:
+ s = "ms-easteurope";
+ break;
+# endif
+# ifdef BALTIC_CHARSET
+ case BALTIC_CHARSET:
+ s = "ms-baltic";
+ break;
+# endif
+# ifdef VIETNAMESE_CHARSET
+ case VIETNAMESE_CHARSET:
+ s = "ms-vietnamese";
+ break;
+# endif
+# ifdef THAI_CHARSET
+ case THAI_CHARSET:
+ s = "ms-thai";
+ break;
+# endif
+# ifdef MAC_CHARSET
+ case MAC_CHARSET:
+ s = "ms-mac";
+ break;
+# endif
+# ifdef UNICODE_CHARSET
+ case UNICODE_CHARSET:
+ s = "ms-unicode";
+ break;
+# endif
+ default:
+ s = "unknown";
+ break;
+ }
+ return __MKSYMBOL(s, 0);
+}
+
OBJ
__extractLogicalFontParameters(lplf)
LOGFONT *lplf; /* ptr of logical-font data */
@@ -4727,102 +4829,8 @@
__UNPROTECT__(newArray);
__ArrayInstPtr(newArray)->a_element[15] = t; __STORE(newArray, t);
- switch (lplf->lfCharSet) {
- case ANSI_CHARSET:
- s = "ms-ansi";
- break;
- case DEFAULT_CHARSET:
- s = "ms-default";
- break;
- case SYMBOL_CHARSET:
- s = "ms-symbol";
- break;
- case SHIFTJIS_CHARSET:
- s = "ms-shiftjis";
- break;
- case GB2312_CHARSET:
- s = "ms-gb2312";
- break;
- case HANGEUL_CHARSET:
- s = "ms-hangeul";
- break;
-# if defined(HANGUL_CHARSET) && (HANGUL_CHARSET != HANGEUL_CHARSET)
- case HANGUL_CHARSET:
- s = "ms-hangul";
- break;
-# endif
- case CHINESEBIG5_CHARSET:
- s = "ms-chinesebig5";
- break;
- case OEM_CHARSET:
- s = "ms-oem";
- break;
-# ifdef JOHAB_CHARSET
- case JOHAB_CHARSET:
- s = "ms-johab";
- break;
-# endif
-# ifdef HEBREW_CHARSET
- case HEBREW_CHARSET:
- s = "ms-hebrew";
- break;
-# endif
-# ifdef ARABIC_CHARSET
- case ARABIC_CHARSET:
- s = "ms-arabic";
- break;
-# endif
-# ifdef GREEK_CHARSET
- case GREEK_CHARSET:
- s = "ms-greek";
- break;
-# endif
-# ifdef TURKISH_CHARSET
- case TURKISH_CHARSET:
- s = "ms-turkish";
- break;
-# endif
-# ifdef RUSSIAN_CHARSET
- case RUSSIAN_CHARSET:
- s = "ms-russian";
- break;
-# endif
-# ifdef EASTEUROPE_CHARSET
- case EASTEUROPE_CHARSET:
- s = "ms-easteurope";
- break;
-# endif
-# ifdef BALTIC_CHARSET
- case BALTIC_CHARSET:
- s = "ms-baltic";
- break;
-# endif
-# ifdef VIETNAMESE_CHARSET
- case VIETNAMESE_CHARSET:
- s = "ms-vietnamese";
- break;
-# endif
-# ifdef THAI_CHARSET
- case THAI_CHARSET:
- s = "ms-thai";
- break;
-# endif
-# ifdef MAC_CHARSET
- case MAC_CHARSET:
- s = "ms-mac";
- break;
-# endif
-# ifdef UNICODE_CHARSET
- case UNICODE_CHARSET:
- s = "ms-unicode";
- break;
-# endif
- default:
- s = "unknown";
- break;
- }
__PROTECT__(newArray);
- t = __MKSYMBOL(s, 0);
+ t = __charSetSymbolFor(lplf->lfCharSet);
__UNPROTECT__(newArray);
__ArrayInstPtr(newArray)->a_element[16] = t; __STORE(newArray, t);
@@ -8023,10 +8031,10 @@
|val|
self getScaledRGBFrom:index into:[:r :g :b |
- val := aBlock
- value:(r * 100.0 / 16rFFFF)
- value:(g * 100.0 / 16rFFFF)
- value:(b * 100.0 / 16rFFFF)
+ val := aBlock
+ value:(r * 100.0 / 16rFFFF)
+ value:(g * 100.0 / 16rFFFF)
+ value:(b * 100.0 / 16rFFFF)
].
"/ 'get RGB' printCR.
^ val
@@ -10989,7 +10997,7 @@
|rawData info|
- rawData := Array new:10.
+ rawData := Array new:15.
(self primFontMetricsOf:fontId intoArray:rawData) isNil ifTrue:[
self primitiveFailed.
^ self
@@ -11003,8 +11011,11 @@
maxDescent:(rawData at:4)
minWidth:(rawData at:5)
maxWidth:(rawData at:6)
- avgWidth:(rawData at:7).
-
+ avgWidth:(rawData at:7)
+ minCode:(rawData at:8)
+ maxCode:16rFFFF "(rawData at:9)"
+ direction:nil
+ encoding:(rawData at:11).
^ info
!
@@ -11507,13 +11518,17 @@
minWidth -> (data at:5)
maxWidth -> (data at:6)
avgWidth -> (data at:7).
+ minChar -> (data at:8).
+ maxChar -> (data at:9).
+ defaultChar-> (data at:10).
+ charSet -> (data at:11).
"
%{
if (__isExternalAddress(fontId)
&& __isArray(rawData)
- && (__arraySize(rawData) >= 7)) {
+ && (__arraySize(rawData) >= 11)) {
SIZE size;
int avgWidth;
HGDIOBJ hFont;
@@ -11521,6 +11536,7 @@
TEXTMETRIC tmet;
static char *s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
static int len;
+ OBJ t;
hFont = _HGDIOBJVal(fontId);
@@ -11538,15 +11554,20 @@
#else
prevFont = SelectObject(__tmpDC, hFont);
#endif
- GetTextMetrics(__tmpDC, &tmet);
+ GetTextMetricsW(__tmpDC, &tmet);
if (len == 0) {
len = strlen(s);
}
+#if 0
GetTextExtentPoint32(__tmpDC, s, len, &size);
+ avgWidth = (size.cx / (len / 2) + 1) / 2;
+#else
+ avgWidth = tmet.tmAveCharWidth;
+#endif
+
#ifndef CACHE_LAST_TMP_FONT
SelectObject(__tmpDC, prevFont);
#endif
- avgWidth = (size.cx / (len / 2) + 1) / 2;
__ArrayInstPtr(rawData)->a_element[0] = __MKSMALLINT(tmet.tmAscent); /* ascent -> (data at:1) */
__ArrayInstPtr(rawData)->a_element[1] = __MKSMALLINT(tmet.tmDescent); /* descent -> (data at:2) */
@@ -11555,6 +11576,11 @@
__ArrayInstPtr(rawData)->a_element[4] = __MKSMALLINT(avgWidth); /* minWidth -> (data at:5) */
__ArrayInstPtr(rawData)->a_element[5] = __MKSMALLINT(tmet.tmMaxCharWidth); /* maxWidth -> (data at:6) */
__ArrayInstPtr(rawData)->a_element[6] = __MKSMALLINT(avgWidth); /* avgWidth -> (data at:7) */
+ __ArrayInstPtr(rawData)->a_element[7] = __MKSMALLINT(tmet.tmFirstChar); /* min -> (data at:8) */
+ __ArrayInstPtr(rawData)->a_element[8] = __MKSMALLINT(tmet.tmLastChar); /* max -> (data at:9) */
+ __ArrayInstPtr(rawData)->a_element[9] = __MKSMALLINT(tmet.tmDefaultChar); /* default -> (data at:10) */
+ t = __charSetSymbolFor(tmet.tmCharSet);
+ __ArrayInstPtr(rawData)->a_element[10]= t; __STORE(rawData, t); /* charSet -> (data at:11) */
DPRINTF(("textMetrics h=%x avgAsc=%d avgDesc=%d minW=%d maxW=%d avgW=%d\n",
hFont, tmet.tmAscent, tmet.tmDescent, avgWidth, tmet.tmMaxCharWidth,
@@ -15724,7 +15750,7 @@
!WinWorkstation class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.256 2004-03-05 18:37:20 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libview/WinWorkstation.st,v 1.257 2004-03-10 15:41:34 ca Exp $'
! !
WinWorkstation initialize!