|
|
1.1 root 1: /*----------------------------
2: FONTS.C -- GPI Image Fonts
3: ----------------------------*/
4:
5: #define INCL_WIN
6: #define INCL_GPI
7: #include <os2.h>
8: #include <stdio.h>
9: #include <stdlib.h>
10: #include "easyfont.h"
11:
12: #define LCID_MYFONT 1L
13:
14: MRESULT EXPENTRY ClientWndProc (HWND, USHORT, MPARAM, MPARAM) ;
15:
16: int main (void)
17: {
18: static CHAR szClientClass [] = "Fonts" ;
19: static ULONG flFrameFlags = FCF_TITLEBAR | FCF_SYSMENU |
20: FCF_SIZEBORDER | FCF_MINMAX |
21: FCF_SHELLPOSITION | FCF_TASKLIST |
22: FCF_VERTSCROLL | FCF_HORZSCROLL ;
23: HAB hab ;
24: HMQ hmq ;
25: HWND hwndFrame, hwndClient ;
26: QMSG qmsg ;
27:
28: hab = WinInitialize (0) ;
29: hmq = WinCreateMsgQueue (hab, 0) ;
30:
31: WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
32:
33: hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
34: &flFrameFlags, szClientClass, NULL,
35: 0L, NULL, 0, &hwndClient) ;
36:
37: WinSendMsg (hwndFrame, WM_SETICON,
38: WinQuerySysPointer (HWND_DESKTOP, SPTR_APPICON, FALSE),
39: NULL) ;
40:
41: while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
42: WinDispatchMsg (hab, &qmsg) ;
43:
44: WinDestroyWindow (hwndFrame) ;
45: WinDestroyMsgQueue (hmq) ;
46: WinTerminate (hab) ;
47: return 0 ;
48: }
49:
50: MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
51: {
52: static CHAR *szFace[] = { "System", "Courier",
53: "Helv", "Tms Rmn" } ;
54: static CHAR *szSize[] = { "8", "10", "12", "14", "18", "24" } ;
55: static CHAR *szSel[] = { "Normal", "Italic", "Underscore",
56: "Strike-out", "Bold" } ;
57: static CHAR szBuffer[80] ;
58: static HWND hwndVscroll, hwndHscroll ;
59: static USHORT idFace[] = { FONTFACE_SYSTEM, FONTFACE_COUR,
60: FONTFACE_HELV, FONTFACE_TIMES } ;
61: static USHORT idSize[] = { FONTSIZE_8, FONTSIZE_10, FONTSIZE_12,
62: FONTSIZE_14, FONTSIZE_18, FONTSIZE_24 } ;
63: static USHORT afsSel[] = { 0, FATTR_SEL_ITALIC, FATTR_SEL_UNDERSCORE,
64: FATTR_SEL_STRIKEOUT, FATTR_SEL_BOLD } ;
65: static SHORT sVscrollMax = sizeof idFace / sizeof idFace[0] - 1,
66: sHscrollMax = sizeof afsSel / sizeof afsSel[0] - 1,
67: cxClient, cyClient, sHscrollPos, sVscrollPos ;
68: FONTMETRICS fm ;
69: HPS hps;
70: HWND hwndFrame ;
71: POINTL ptl ;
72: SHORT sIndex ;
73:
74: switch (msg)
75: {
76: case WM_CREATE:
77: hps = WinGetPS (hwnd) ;
78: EzfQueryFonts (hps) ;
79: WinReleasePS (hps) ;
80:
81: hwndFrame = WinQueryWindow (hwnd, QW_PARENT, FALSE),
82: hwndVscroll = WinWindowFromID (hwndFrame, FID_VERTSCROLL) ;
83: hwndHscroll = WinWindowFromID (hwndFrame, FID_HORZSCROLL) ;
84:
85: WinSendMsg (hwndVscroll, SBM_SETSCROLLBAR,
86: MPFROM2SHORT (sVscrollPos, 0),
87: MPFROM2SHORT (0, sVscrollMax)) ;
88:
89: WinSendMsg (hwndHscroll, SBM_SETSCROLLBAR,
90: MPFROM2SHORT (sHscrollPos, 0),
91: MPFROM2SHORT (0, sHscrollMax)) ;
92: return 0 ;
93:
94: case WM_SIZE:
95: cxClient = SHORT1FROMMP (mp2) ;
96: cyClient = SHORT2FROMMP (mp2) ;
97: return 0 ;
98:
99: case WM_VSCROLL:
100: switch (SHORT2FROMMP (mp2))
101: {
102: case SB_LINEUP:
103: case SB_PAGEUP:
104: sVscrollPos = max (0, sVscrollPos - 1) ;
105: break ;
106:
107: case SB_LINEDOWN:
108: case SB_PAGEDOWN:
109: sVscrollPos = min (sVscrollMax, sVscrollPos + 1) ;
110: break ;
111:
112: case SB_SLIDERPOSITION:
113: sVscrollPos = SHORT1FROMMP (mp2) ;
114: break ;
115:
116: default:
117: return 0 ;
118: }
119: WinSendMsg (hwndVscroll, SBM_SETPOS,
120: MPFROM2SHORT (sVscrollPos, 0), NULL) ;
121:
122: WinInvalidateRect (hwnd, NULL, FALSE) ;
123: return 0 ;
124:
125: case WM_HSCROLL:
126: switch (SHORT2FROMMP (mp2))
127: {
128: case SB_LINELEFT:
129: case SB_PAGELEFT:
130: sHscrollPos = max (0, sHscrollPos - 1) ;
131: break ;
132:
133: case SB_LINERIGHT:
134: case SB_PAGERIGHT:
135: sHscrollPos = min (sHscrollMax, sHscrollPos + 1) ;
136: break ;
137:
138: case SB_SLIDERPOSITION:
139: sHscrollPos = SHORT1FROMMP (mp2) ;
140: break ;
141:
142: default:
143: return 0 ;
144: }
145: WinSendMsg (hwndHscroll, SBM_SETPOS,
146: MPFROM2SHORT (sHscrollPos, 0), NULL) ;
147:
148: WinInvalidateRect (hwnd, NULL, FALSE) ;
149: return 0 ;
150:
151: case WM_CHAR:
152: switch (CHARMSG(&msg)->vkey)
153: {
154: case VK_LEFT:
155: case VK_RIGHT:
156: return WinSendMsg (hwndHscroll, msg, mp1, mp2) ;
157: case VK_UP:
158: case VK_DOWN:
159: case VK_PAGEUP:
160: case VK_PAGEDOWN:
161: return WinSendMsg (hwndVscroll, msg, mp1, mp2) ;
162: }
163: break ;
164:
165: case WM_PAINT:
166: hps = WinBeginPaint (hwnd, NULL, NULL) ;
167: GpiErase (hps) ;
168:
169: ptl.x = 0 ;
170: ptl.y = cyClient ;
171:
172: for (sIndex = 0 ; sIndex < 6 ; sIndex++)
173: if (EzfCreateLogFont (hps, LCID_MYFONT,
174: idFace[sVscrollPos],
175: idSize[sIndex],
176: afsSel[sHscrollPos]))
177: {
178: GpiSetCharSet (hps, LCID_MYFONT) ;
179: GpiQueryFontMetrics (hps, (LONG) sizeof fm, &fm) ;
180:
181: ptl.y -= fm.lMaxBaselineExt ;
182:
183: GpiCharStringAt (hps, &ptl,
184: (LONG) sprintf (szBuffer, "%s, %s point, %s",
185: szFace[sVscrollPos],
186: szSize[sIndex],
187: szSel[sHscrollPos]),
188: szBuffer) ;
189:
190: GpiSetCharSet (hps, LCID_DEFAULT) ;
191: GpiDeleteSetId (hps, LCID_MYFONT) ;
192: }
193:
194: WinEndPaint (hps) ;
195: return 0 ;
196: }
197: return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
198: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.