source: trunk/src/user32/new/oslibres.cpp@ 821

Last change on this file since 821 was 821, checked in by sandervl, 26 years ago

Dialog changes

File size: 6.6 KB
Line 
1/* $Id: oslibres.cpp,v 1.8 1999-09-04 19:42:28 sandervl Exp $ */
2/*
3 * Window API wrappers for OS/2
4 *
5 *
6 * Copyright 1999 Sander van Leeuwen (sandervl@xs4all.nl)
7 *
8 *
9 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12#define INCL_WIN
13#define INCL_PM
14#include <os2.h>
15#include <os2wrap.h>
16#include <stdlib.h>
17#include <string.h>
18
19#include <misc.h>
20#include <winconst.h>
21#include "oslibwin.h"
22#include "oslibutil.h"
23#include "oslibmsg.h"
24#include "oslibgdi.h"
25#include "pmwindow.h"
26
27
28//******************************************************************************
29//******************************************************************************
30HANDLE OSLibWinSetAccelTable(HWND hwnd, HANDLE hAccel, PVOID acceltemplate)
31{
32 HAB hab = WinQueryAnchorBlock(hwnd);
33
34 if(hAccel == 0) {
35 hAccel = WinCreateAccelTable(hab, (PACCELTABLE)acceltemplate);
36 if(hAccel == 0) {
37 dprintf(("OSLibWinSetAccelTable: WinCreateAccelTable returned 0"));
38 return FALSE;
39 }
40 }
41 if(WinSetAccelTable(hab, hAccel, hwnd) == TRUE) {
42 return hAccel;
43 }
44 else return 0;
45}
46//******************************************************************************
47//******************************************************************************
48HANDLE OSLibWinCreateIcon(PVOID iconbitmap)
49{
50 POINTERINFO pointerInfo = {0};
51 HBITMAP hbmColor, hbmMask;
52 BITMAPARRAYFILEHEADER2 *bafh = (BITMAPARRAYFILEHEADER2 *)iconbitmap;
53 BITMAPFILEHEADER2 *bfhBW;
54 BITMAPFILEHEADER2 *bfhColor;
55 HPS hps;
56 HANDLE hIcon;
57
58 if(iconbitmap == NULL) {
59 dprintf(("OSLibWinCreateIcon iconbitmap == NULL!!"));
60 return 0;
61 }
62 if(bafh->usType == BFT_BITMAPARRAY && bafh->cbSize == sizeof(BITMAPARRAYFILEHEADER2)) {
63 bfhBW = &bafh->bfh2;
64 bfhColor = (BITMAPFILEHEADER2 *)((char *)&bafh->bfh2 + sizeof(RGB2)*2 + sizeof(BITMAPFILEHEADER2));
65 }
66 else {//single icon
67 bfhBW = (BITMAPFILEHEADER2 *)iconbitmap;
68 bfhColor = (BITMAPFILEHEADER2 *)((char *)bfhBW + sizeof(RGB2)*2 + sizeof(BITMAPFILEHEADER2));
69 bafh = (BITMAPARRAYFILEHEADER2 *)bfhBW; //for calculation bitmap offset
70 }
71 hps = WinGetScreenPS(HWND_DESKTOP);
72
73 hbmColor = GpiCreateBitmap(hps, &bfhColor->bmp2, CBM_INIT,
74 (char *)bafh + bfhColor->offBits,
75 (BITMAPINFO2 *)&bfhColor->bmp2);
76 if(hbmColor == GPI_ERROR) {
77 dprintf(("OSLibWinCreateIcon: GpiCreateBitmap failed!"));
78 WinReleasePS(hps);
79 return 0;
80 }
81 hbmMask = GpiCreateBitmap(hps, &bfhBW->bmp2, CBM_INIT,
82 (char *)bafh + bfhBW->offBits,
83 (BITMAPINFO2 *)&bfhBW->bmp2);
84 if(hbmMask == GPI_ERROR) {
85 dprintf(("OSLibWinCreateIcon: GpiCreateBitmap hbmMask failed!"));
86 GpiDeleteBitmap(hbmColor);
87 WinReleasePS(hps);
88 return 0;
89 }
90
91 pointerInfo.fPointer = FALSE; //icon
92 pointerInfo.xHotspot = bfhBW->xHotspot;
93 pointerInfo.yHotspot = bfhBW->yHotspot;
94 pointerInfo.hbmColor = hbmColor;
95 pointerInfo.hbmPointer = hbmMask;
96 hIcon = WinCreatePointerIndirect(HWND_DESKTOP, &pointerInfo);
97 if(hIcon == NULL) {
98 dprintf(("OSLibWinCreateIcon: WinCreatePointerIndirect failed!"));
99 }
100 GpiDeleteBitmap(hbmMask);
101 GpiDeleteBitmap(hbmColor);
102 WinReleasePS(hps);
103 return hIcon;
104}
105//******************************************************************************
106//******************************************************************************
107HANDLE OSLibWinCreatePointer(PVOID cursorbitmap)
108{
109 POINTERINFO pointerInfo = {0};
110 HBITMAP hbmColor;
111 BITMAPFILEHEADER2 *bfh = (BITMAPFILEHEADER2 *)cursorbitmap;
112 HPS hps;
113 HANDLE hPointer;
114
115 if(cursorbitmap == NULL) {
116 dprintf(("OSLibWinCreatePointer cursorbitmap == NULL!!"));
117 return 0;
118 }
119 //skip xor/and mask
120 hps = WinGetScreenPS(HWND_DESKTOP);
121 hbmColor = GpiCreateBitmap(hps, &bfh->bmp2, CBM_INIT,
122 (char *)bfh + bfh->offBits,
123 (BITMAPINFO2 *)&bfh->bmp2);
124 if(hbmColor == GPI_ERROR) {
125 dprintf(("OSLibWinCreatePointer: GpiCreateBitmap failed!"));
126 WinReleasePS(hps);
127 return 0;
128 }
129
130 pointerInfo.fPointer = TRUE;
131 pointerInfo.xHotspot = bfh->xHotspot;
132 pointerInfo.yHotspot = bfh->yHotspot;
133 pointerInfo.hbmColor = 0;
134 pointerInfo.hbmPointer = hbmColor;
135 hPointer = WinCreatePointerIndirect(HWND_DESKTOP, &pointerInfo);
136 if(hPointer == NULL) {
137 dprintf(("OSLibWinCreatePointer: WinCreatePointerIndirect failed!"));
138 }
139 GpiDeleteBitmap(hbmColor);
140 WinReleasePS(hps);
141 return hPointer;
142}
143//******************************************************************************
144//******************************************************************************
145HANDLE OSLibWinQuerySysIcon(ULONG type)
146{
147 ULONG os2type = 0;
148
149 switch(type) {
150 case IDI_APPLICATION_W:
151 os2type = SPTR_PROGRAM;
152 break;
153 case IDI_HAND_W:
154 os2type = SPTR_ICONWARNING;
155 break;
156 case IDI_QUESTION_W:
157 os2type = SPTR_ICONQUESTION;
158 break;
159 case IDI_EXCLAMATION_W:
160 os2type = SPTR_ICONWARNING;
161 break;
162 case IDI_ASTERISK_W:
163 os2type = SPTR_ICONINFORMATION;
164 break;
165 default:
166 return 0;
167 }
168
169 return WinQuerySysPointer(HWND_DESKTOP, os2type, TRUE);
170}
171//******************************************************************************
172//******************************************************************************
173HANDLE OSLibWinQuerySysPointer(ULONG type)
174{
175 ULONG os2type = 0;
176
177 switch(type) {
178 case IDC_ARROW_W:
179 os2type = SPTR_ARROW;
180 break;
181 case IDC_UPARROW_W:
182 os2type = SPTR_ARROW;
183 break;
184 case IDC_IBEAM_W:
185 os2type = SPTR_TEXT;
186 break;
187 case IDC_ICON_W:
188 os2type = SPTR_PROGRAM;
189 break;
190 case IDC_NO_W:
191 os2type = SPTR_ILLEGAL;
192 break;
193 case IDC_CROSS_W:
194 os2type = SPTR_MOVE;
195 break;
196 case IDC_SIZE_W:
197 os2type = SPTR_MOVE;
198 break;
199 case IDC_SIZEALL_W:
200 os2type = SPTR_MOVE;
201 break;
202 case IDC_SIZENESW_W:
203 os2type = SPTR_SIZENESW;
204 break;
205 case IDC_SIZENS_W:
206 os2type = SPTR_SIZENS;
207 break;
208 case IDC_SIZENWSE_W:
209 os2type = SPTR_SIZENWSE;
210 break;
211 case IDC_SIZEWE_W:
212 os2type = SPTR_SIZEWE;
213 break;
214 case IDC_WAIT_W:
215 os2type = SPTR_WAIT;
216 break;
217 case IDC_APPSTARTING_W:
218 os2type = SPTR_WAIT;
219 break;
220 case IDC_HELP_W: //TODO: Create a cursor for this one
221 os2type = SPTR_WAIT;
222 break;
223 default:
224 return 0;
225 }
226 return WinQuerySysPointer(HWND_DESKTOP, os2type, TRUE);
227}
228//******************************************************************************
229//******************************************************************************
Note: See TracBrowser for help on using the repository browser.