4620 * 19 |
4620 * 19 |
4621 * 20 |
4621 * 20 |
4622 * ) |
4622 * ) |
4623 * CAVEAT: returns an array to avoid knowlege-need about ST-Objects (FontDescripttion) here. |
4623 * CAVEAT: returns an array to avoid knowlege-need about ST-Objects (FontDescripttion) here. |
4624 */ |
4624 */ |
|
4625 OBJ |
|
4626 __charSetSymbolFor(charSet) |
|
4627 { |
|
4628 char *s; |
|
4629 |
|
4630 switch (charSet) { |
|
4631 case ANSI_CHARSET: |
|
4632 s = "ms-ansi"; |
|
4633 break; |
|
4634 case DEFAULT_CHARSET: |
|
4635 s = "ms-default"; |
|
4636 break; |
|
4637 case SYMBOL_CHARSET: |
|
4638 s = "ms-symbol"; |
|
4639 break; |
|
4640 case SHIFTJIS_CHARSET: |
|
4641 s = "ms-shiftjis"; |
|
4642 break; |
|
4643 case GB2312_CHARSET: |
|
4644 s = "ms-gb2312"; |
|
4645 break; |
|
4646 case HANGEUL_CHARSET: |
|
4647 s = "ms-hangeul"; |
|
4648 break; |
|
4649 # if defined(HANGUL_CHARSET) && (HANGUL_CHARSET != HANGEUL_CHARSET) |
|
4650 case HANGUL_CHARSET: |
|
4651 s = "ms-hangul"; |
|
4652 break; |
|
4653 # endif |
|
4654 case CHINESEBIG5_CHARSET: |
|
4655 s = "ms-chinesebig5"; |
|
4656 break; |
|
4657 case OEM_CHARSET: |
|
4658 s = "ms-oem"; |
|
4659 break; |
|
4660 # ifdef JOHAB_CHARSET |
|
4661 case JOHAB_CHARSET: |
|
4662 s = "ms-johab"; |
|
4663 break; |
|
4664 # endif |
|
4665 # ifdef HEBREW_CHARSET |
|
4666 case HEBREW_CHARSET: |
|
4667 s = "ms-hebrew"; |
|
4668 break; |
|
4669 # endif |
|
4670 # ifdef ARABIC_CHARSET |
|
4671 case ARABIC_CHARSET: |
|
4672 s = "ms-arabic"; |
|
4673 break; |
|
4674 # endif |
|
4675 # ifdef GREEK_CHARSET |
|
4676 case GREEK_CHARSET: |
|
4677 s = "ms-greek"; |
|
4678 break; |
|
4679 # endif |
|
4680 # ifdef TURKISH_CHARSET |
|
4681 case TURKISH_CHARSET: |
|
4682 s = "ms-turkish"; |
|
4683 break; |
|
4684 # endif |
|
4685 # ifdef RUSSIAN_CHARSET |
|
4686 case RUSSIAN_CHARSET: |
|
4687 s = "ms-russian"; |
|
4688 break; |
|
4689 # endif |
|
4690 # ifdef EASTEUROPE_CHARSET |
|
4691 case EASTEUROPE_CHARSET: |
|
4692 s = "ms-easteurope"; |
|
4693 break; |
|
4694 # endif |
|
4695 # ifdef BALTIC_CHARSET |
|
4696 case BALTIC_CHARSET: |
|
4697 s = "ms-baltic"; |
|
4698 break; |
|
4699 # endif |
|
4700 # ifdef VIETNAMESE_CHARSET |
|
4701 case VIETNAMESE_CHARSET: |
|
4702 s = "ms-vietnamese"; |
|
4703 break; |
|
4704 # endif |
|
4705 # ifdef THAI_CHARSET |
|
4706 case THAI_CHARSET: |
|
4707 s = "ms-thai"; |
|
4708 break; |
|
4709 # endif |
|
4710 # ifdef MAC_CHARSET |
|
4711 case MAC_CHARSET: |
|
4712 s = "ms-mac"; |
|
4713 break; |
|
4714 # endif |
|
4715 # ifdef UNICODE_CHARSET |
|
4716 case UNICODE_CHARSET: |
|
4717 s = "ms-unicode"; |
|
4718 break; |
|
4719 # endif |
|
4720 default: |
|
4721 s = "unknown"; |
|
4722 break; |
|
4723 } |
|
4724 return __MKSYMBOL(s, 0); |
|
4725 } |
|
4726 |
4625 OBJ |
4727 OBJ |
4626 __extractLogicalFontParameters(lplf) |
4728 __extractLogicalFontParameters(lplf) |
4627 LOGFONT *lplf; /* ptr of logical-font data */ |
4729 LOGFONT *lplf; /* ptr of logical-font data */ |
4628 { |
4730 { |
4629 OBJ newArray, t; |
4731 OBJ newArray, t; |
4725 __PROTECT__(newArray); |
4827 __PROTECT__(newArray); |
4726 t = __MKSTRING(lplf->lfFaceName); |
4828 t = __MKSTRING(lplf->lfFaceName); |
4727 __UNPROTECT__(newArray); |
4829 __UNPROTECT__(newArray); |
4728 __ArrayInstPtr(newArray)->a_element[15] = t; __STORE(newArray, t); |
4830 __ArrayInstPtr(newArray)->a_element[15] = t; __STORE(newArray, t); |
4729 |
4831 |
4730 switch (lplf->lfCharSet) { |
|
4731 case ANSI_CHARSET: |
|
4732 s = "ms-ansi"; |
|
4733 break; |
|
4734 case DEFAULT_CHARSET: |
|
4735 s = "ms-default"; |
|
4736 break; |
|
4737 case SYMBOL_CHARSET: |
|
4738 s = "ms-symbol"; |
|
4739 break; |
|
4740 case SHIFTJIS_CHARSET: |
|
4741 s = "ms-shiftjis"; |
|
4742 break; |
|
4743 case GB2312_CHARSET: |
|
4744 s = "ms-gb2312"; |
|
4745 break; |
|
4746 case HANGEUL_CHARSET: |
|
4747 s = "ms-hangeul"; |
|
4748 break; |
|
4749 # if defined(HANGUL_CHARSET) && (HANGUL_CHARSET != HANGEUL_CHARSET) |
|
4750 case HANGUL_CHARSET: |
|
4751 s = "ms-hangul"; |
|
4752 break; |
|
4753 # endif |
|
4754 case CHINESEBIG5_CHARSET: |
|
4755 s = "ms-chinesebig5"; |
|
4756 break; |
|
4757 case OEM_CHARSET: |
|
4758 s = "ms-oem"; |
|
4759 break; |
|
4760 # ifdef JOHAB_CHARSET |
|
4761 case JOHAB_CHARSET: |
|
4762 s = "ms-johab"; |
|
4763 break; |
|
4764 # endif |
|
4765 # ifdef HEBREW_CHARSET |
|
4766 case HEBREW_CHARSET: |
|
4767 s = "ms-hebrew"; |
|
4768 break; |
|
4769 # endif |
|
4770 # ifdef ARABIC_CHARSET |
|
4771 case ARABIC_CHARSET: |
|
4772 s = "ms-arabic"; |
|
4773 break; |
|
4774 # endif |
|
4775 # ifdef GREEK_CHARSET |
|
4776 case GREEK_CHARSET: |
|
4777 s = "ms-greek"; |
|
4778 break; |
|
4779 # endif |
|
4780 # ifdef TURKISH_CHARSET |
|
4781 case TURKISH_CHARSET: |
|
4782 s = "ms-turkish"; |
|
4783 break; |
|
4784 # endif |
|
4785 # ifdef RUSSIAN_CHARSET |
|
4786 case RUSSIAN_CHARSET: |
|
4787 s = "ms-russian"; |
|
4788 break; |
|
4789 # endif |
|
4790 # ifdef EASTEUROPE_CHARSET |
|
4791 case EASTEUROPE_CHARSET: |
|
4792 s = "ms-easteurope"; |
|
4793 break; |
|
4794 # endif |
|
4795 # ifdef BALTIC_CHARSET |
|
4796 case BALTIC_CHARSET: |
|
4797 s = "ms-baltic"; |
|
4798 break; |
|
4799 # endif |
|
4800 # ifdef VIETNAMESE_CHARSET |
|
4801 case VIETNAMESE_CHARSET: |
|
4802 s = "ms-vietnamese"; |
|
4803 break; |
|
4804 # endif |
|
4805 # ifdef THAI_CHARSET |
|
4806 case THAI_CHARSET: |
|
4807 s = "ms-thai"; |
|
4808 break; |
|
4809 # endif |
|
4810 # ifdef MAC_CHARSET |
|
4811 case MAC_CHARSET: |
|
4812 s = "ms-mac"; |
|
4813 break; |
|
4814 # endif |
|
4815 # ifdef UNICODE_CHARSET |
|
4816 case UNICODE_CHARSET: |
|
4817 s = "ms-unicode"; |
|
4818 break; |
|
4819 # endif |
|
4820 default: |
|
4821 s = "unknown"; |
|
4822 break; |
|
4823 } |
|
4824 __PROTECT__(newArray); |
4832 __PROTECT__(newArray); |
4825 t = __MKSYMBOL(s, 0); |
4833 t = __charSetSymbolFor(lplf->lfCharSet); |
4826 __UNPROTECT__(newArray); |
4834 __UNPROTECT__(newArray); |
4827 __ArrayInstPtr(newArray)->a_element[16] = t; __STORE(newArray, t); |
4835 __ArrayInstPtr(newArray)->a_element[16] = t; __STORE(newArray, t); |
4828 |
4836 |
4829 return newArray; |
4837 return newArray; |
4830 } |
4838 } |
8021 and evaluate the 3-arg block, aBlock with them" |
8029 and evaluate the 3-arg block, aBlock with them" |
8022 |
8030 |
8023 |val| |
8031 |val| |
8024 |
8032 |
8025 self getScaledRGBFrom:index into:[:r :g :b | |
8033 self getScaledRGBFrom:index into:[:r :g :b | |
8026 val := aBlock |
8034 val := aBlock |
8027 value:(r * 100.0 / 16rFFFF) |
8035 value:(r * 100.0 / 16rFFFF) |
8028 value:(g * 100.0 / 16rFFFF) |
8036 value:(g * 100.0 / 16rFFFF) |
8029 value:(b * 100.0 / 16rFFFF) |
8037 value:(b * 100.0 / 16rFFFF) |
8030 ]. |
8038 ]. |
8031 "/ 'get RGB' printCR. |
8039 "/ 'get RGB' printCR. |
8032 ^ val |
8040 ^ val |
8033 ! |
8041 ! |
8034 |
8042 |
11001 descent:(rawData at:2) |
11009 descent:(rawData at:2) |
11002 maxAscent:(rawData at:3) |
11010 maxAscent:(rawData at:3) |
11003 maxDescent:(rawData at:4) |
11011 maxDescent:(rawData at:4) |
11004 minWidth:(rawData at:5) |
11012 minWidth:(rawData at:5) |
11005 maxWidth:(rawData at:6) |
11013 maxWidth:(rawData at:6) |
11006 avgWidth:(rawData at:7). |
11014 avgWidth:(rawData at:7) |
11007 |
11015 minCode:(rawData at:8) |
|
11016 maxCode:16rFFFF "(rawData at:9)" |
|
11017 direction:nil |
|
11018 encoding:(rawData at:11). |
11008 ^ info |
11019 ^ info |
11009 ! |
11020 ! |
11010 |
11021 |
11011 fontsInFamily:aFamilyName face:aFaceName filtering:filter |
11022 fontsInFamily:aFamilyName face:aFaceName filtering:filter |
11012 "return a set of all available fonts in aFamily/aFace on this display. |
11023 "return a set of all available fonts in aFamily/aFace on this display. |
11505 maxAscent -> (data at:3) |
11516 maxAscent -> (data at:3) |
11506 maxDescent -> (data at:4) |
11517 maxDescent -> (data at:4) |
11507 minWidth -> (data at:5) |
11518 minWidth -> (data at:5) |
11508 maxWidth -> (data at:6) |
11519 maxWidth -> (data at:6) |
11509 avgWidth -> (data at:7). |
11520 avgWidth -> (data at:7). |
|
11521 minChar -> (data at:8). |
|
11522 maxChar -> (data at:9). |
|
11523 defaultChar-> (data at:10). |
|
11524 charSet -> (data at:11). |
11510 " |
11525 " |
11511 |
11526 |
11512 %{ |
11527 %{ |
11513 |
11528 |
11514 if (__isExternalAddress(fontId) |
11529 if (__isExternalAddress(fontId) |
11515 && __isArray(rawData) |
11530 && __isArray(rawData) |
11516 && (__arraySize(rawData) >= 7)) { |
11531 && (__arraySize(rawData) >= 11)) { |
11517 SIZE size; |
11532 SIZE size; |
11518 int avgWidth; |
11533 int avgWidth; |
11519 HGDIOBJ hFont; |
11534 HGDIOBJ hFont; |
11520 HGDIOBJ prevFont; |
11535 HGDIOBJ prevFont; |
11521 TEXTMETRIC tmet; |
11536 TEXTMETRIC tmet; |
11522 static char *s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; |
11537 static char *s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; |
11523 static int len; |
11538 static int len; |
|
11539 OBJ t; |
11524 |
11540 |
11525 hFont = _HGDIOBJVal(fontId); |
11541 hFont = _HGDIOBJVal(fontId); |
11526 |
11542 |
11527 /* |
11543 /* |
11528 * temporarily set this font in the tmpDC (root-) context |
11544 * temporarily set this font in the tmpDC (root-) context |
11536 __tmpDC_hfont = hFont; |
11552 __tmpDC_hfont = hFont; |
11537 } |
11553 } |
11538 #else |
11554 #else |
11539 prevFont = SelectObject(__tmpDC, hFont); |
11555 prevFont = SelectObject(__tmpDC, hFont); |
11540 #endif |
11556 #endif |
11541 GetTextMetrics(__tmpDC, &tmet); |
11557 GetTextMetricsW(__tmpDC, &tmet); |
11542 if (len == 0) { |
11558 if (len == 0) { |
11543 len = strlen(s); |
11559 len = strlen(s); |
11544 } |
11560 } |
|
11561 #if 0 |
11545 GetTextExtentPoint32(__tmpDC, s, len, &size); |
11562 GetTextExtentPoint32(__tmpDC, s, len, &size); |
|
11563 avgWidth = (size.cx / (len / 2) + 1) / 2; |
|
11564 #else |
|
11565 avgWidth = tmet.tmAveCharWidth; |
|
11566 #endif |
|
11567 |
11546 #ifndef CACHE_LAST_TMP_FONT |
11568 #ifndef CACHE_LAST_TMP_FONT |
11547 SelectObject(__tmpDC, prevFont); |
11569 SelectObject(__tmpDC, prevFont); |
11548 #endif |
11570 #endif |
11549 avgWidth = (size.cx / (len / 2) + 1) / 2; |
|
11550 |
11571 |
11551 __ArrayInstPtr(rawData)->a_element[0] = __MKSMALLINT(tmet.tmAscent); /* ascent -> (data at:1) */ |
11572 __ArrayInstPtr(rawData)->a_element[0] = __MKSMALLINT(tmet.tmAscent); /* ascent -> (data at:1) */ |
11552 __ArrayInstPtr(rawData)->a_element[1] = __MKSMALLINT(tmet.tmDescent); /* descent -> (data at:2) */ |
11573 __ArrayInstPtr(rawData)->a_element[1] = __MKSMALLINT(tmet.tmDescent); /* descent -> (data at:2) */ |
11553 __ArrayInstPtr(rawData)->a_element[2] = __MKSMALLINT(tmet.tmAscent); /* maxAscent -> (data at:3) */ |
11574 __ArrayInstPtr(rawData)->a_element[2] = __MKSMALLINT(tmet.tmAscent); /* maxAscent -> (data at:3) */ |
11554 __ArrayInstPtr(rawData)->a_element[3] = __MKSMALLINT(tmet.tmDescent); /* maxDescent -> (data at:4) */ |
11575 __ArrayInstPtr(rawData)->a_element[3] = __MKSMALLINT(tmet.tmDescent); /* maxDescent -> (data at:4) */ |
11555 __ArrayInstPtr(rawData)->a_element[4] = __MKSMALLINT(avgWidth); /* minWidth -> (data at:5) */ |
11576 __ArrayInstPtr(rawData)->a_element[4] = __MKSMALLINT(avgWidth); /* minWidth -> (data at:5) */ |
11556 __ArrayInstPtr(rawData)->a_element[5] = __MKSMALLINT(tmet.tmMaxCharWidth); /* maxWidth -> (data at:6) */ |
11577 __ArrayInstPtr(rawData)->a_element[5] = __MKSMALLINT(tmet.tmMaxCharWidth); /* maxWidth -> (data at:6) */ |
11557 __ArrayInstPtr(rawData)->a_element[6] = __MKSMALLINT(avgWidth); /* avgWidth -> (data at:7) */ |
11578 __ArrayInstPtr(rawData)->a_element[6] = __MKSMALLINT(avgWidth); /* avgWidth -> (data at:7) */ |
|
11579 __ArrayInstPtr(rawData)->a_element[7] = __MKSMALLINT(tmet.tmFirstChar); /* min -> (data at:8) */ |
|
11580 __ArrayInstPtr(rawData)->a_element[8] = __MKSMALLINT(tmet.tmLastChar); /* max -> (data at:9) */ |
|
11581 __ArrayInstPtr(rawData)->a_element[9] = __MKSMALLINT(tmet.tmDefaultChar); /* default -> (data at:10) */ |
|
11582 t = __charSetSymbolFor(tmet.tmCharSet); |
|
11583 __ArrayInstPtr(rawData)->a_element[10]= t; __STORE(rawData, t); /* charSet -> (data at:11) */ |
11558 |
11584 |
11559 DPRINTF(("textMetrics h=%x avgAsc=%d avgDesc=%d minW=%d maxW=%d avgW=%d\n", |
11585 DPRINTF(("textMetrics h=%x avgAsc=%d avgDesc=%d minW=%d maxW=%d avgW=%d\n", |
11560 hFont, tmet.tmAscent, tmet.tmDescent, avgWidth, tmet.tmMaxCharWidth, |
11586 hFont, tmet.tmAscent, tmet.tmDescent, avgWidth, tmet.tmMaxCharWidth, |
11561 tmet.tmAveCharWidth)); |
11587 tmet.tmAveCharWidth)); |
11562 RETURN (self); |
11588 RETURN (self); |