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

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

Icon + Cursor resource changes

File size: 6.5 KB
Line 
1/* $Id: oslibres.cpp,v 1.5 1999-08-20 20:09:51 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//******************************************************************************
30HWND OSLibWinCreateMenu(HWND hwndParent, PVOID menutemplate)
31{
32 return WinCreateMenu(hwndParent, menutemplate);
33}
34//******************************************************************************
35//******************************************************************************
36HANDLE OSLibWinSetAccelTable(HWND hwnd, HANDLE hAccel, PVOID acceltemplate)
37{
38 HAB hab = WinQueryAnchorBlock(hwnd);
39
40 if(hAccel == 0) {
41 hAccel = WinCreateAccelTable(hab, (PACCELTABLE)acceltemplate);
42 if(hAccel == 0) {
43 dprintf(("OSLibWinSetAccelTable: WinCreateAccelTable returned 0"));
44 return FALSE;
45 }
46 }
47 if(WinSetAccelTable(hab, hAccel, hwnd) == TRUE) {
48 return hAccel;
49 }
50 else return 0;
51}
52//******************************************************************************
53//TODO: handle single icons
54//******************************************************************************
55HANDLE OSLibWinCreateIcon(PVOID iconbitmap)
56{
57 POINTERINFO pointerInfo = {0};
58 HBITMAP hbmColor, hbmMask;
59 BITMAPARRAYFILEHEADER2 *bafh = (BITMAPARRAYFILEHEADER2 *)iconbitmap;
60 BITMAPFILEHEADER2 *bfh;
61 HPS hps;
62 HANDLE hIcon;
63
64 if(iconbitmap == NULL) {
65 dprintf(("OSLibWinCreateIcon iconbitmap == NULL!!"));
66 return 0;
67 }
68 //skip xor/and mask
69 bfh = (BITMAPFILEHEADER2 *)((char *)&bafh->bfh2 + sizeof(RGB2)*2 + sizeof(BITMAPFILEHEADER2));
70 hps = WinGetPS(HWND_DESKTOP);
71 hbmColor = GpiCreateBitmap(hps, &bfh->bmp2, CBM_INIT,
72 (char *)bafh + bfh->offBits,
73 (BITMAPINFO2 *)&bfh->bmp2);
74 if(hbmColor == GPI_ERROR) {
75 dprintf(("OSLibWinCreateIcon: GpiCreateBitmap failed!"));
76 WinReleasePS(hps);
77 return 0;
78 }
79 hbmMask = GpiCreateBitmap(hps, &bafh->bfh2.bmp2, CBM_INIT,
80 (char *)bafh + bafh->bfh2.offBits,
81 (BITMAPINFO2 *)&bafh->bfh2.bmp2);
82 if(hbmMask == GPI_ERROR) {
83 dprintf(("OSLibWinCreateIcon: GpiCreateBitmap hbmMask failed!"));
84 GpiDeleteBitmap(hbmColor);
85 WinReleasePS(hps);
86 return 0;
87 }
88
89 pointerInfo.fPointer = FALSE; //icon
90 pointerInfo.xHotspot = bfh->xHotspot;
91 pointerInfo.yHotspot = bfh->yHotspot;
92 pointerInfo.hbmColor = hbmColor;
93 pointerInfo.hbmPointer = hbmMask;
94 hIcon = WinCreatePointerIndirect(HWND_DESKTOP, &pointerInfo);
95 if(hIcon == NULL) {
96 dprintf(("OSLibWinCreateIcon: WinCreatePointerIndirect failed!"));
97 }
98 GpiDeleteBitmap(hbmMask);
99 GpiDeleteBitmap(hbmColor);
100 WinReleasePS(hps);
101 return hIcon;
102}
103//******************************************************************************
104//******************************************************************************
105HANDLE OSLibWinCreatePointer(PVOID cursorbitmap)
106{
107 POINTERINFO pointerInfo = {0};
108 HBITMAP hbmColor;
109 BITMAPFILEHEADER2 *bfh = (BITMAPFILEHEADER2 *)cursorbitmap;
110 HPS hps;
111 HANDLE hPointer;
112
113 if(cursorbitmap == NULL) {
114 dprintf(("OSLibWinCreatePointer cursorbitmap == NULL!!"));
115 return 0;
116 }
117 //skip xor/and mask
118 hps = WinGetPS(HWND_DESKTOP);
119 hbmColor = GpiCreateBitmap(hps, &bfh->bmp2, CBM_INIT,
120 (char *)bfh + bfh->offBits,
121 (BITMAPINFO2 *)&bfh->bmp2);
122 if(hbmColor == GPI_ERROR) {
123 dprintf(("OSLibWinCreatePointer: GpiCreateBitmap failed!"));
124 WinReleasePS(hps);
125 return 0;
126 }
127
128 pointerInfo.fPointer = TRUE;
129 pointerInfo.xHotspot = bfh->xHotspot;
130 pointerInfo.yHotspot = bfh->yHotspot;
131 pointerInfo.hbmColor = 0;
132 pointerInfo.hbmPointer = hbmColor;
133 hPointer = WinCreatePointerIndirect(HWND_DESKTOP, &pointerInfo);
134 if(hPointer == NULL) {
135 dprintf(("OSLibWinCreatePointer: WinCreatePointerIndirect failed!"));
136 }
137 GpiDeleteBitmap(hbmColor);
138 WinReleasePS(hps);
139 return hPointer;
140}
141//******************************************************************************
142//******************************************************************************
143HANDLE OSLibWinQuerySysIcon(ULONG type)
144{
145 ULONG os2type = 0;
146
147 switch(type) {
148 case IDI_APPLICATION_W:
149 os2type = SPTR_PROGRAM;
150 break;
151 case IDI_HAND_W:
152 os2type = SPTR_ICONWARNING;
153 break;
154 case IDI_QUESTION_W:
155 os2type = SPTR_ICONQUESTION;
156 break;
157 case IDI_EXCLAMATION_W:
158 os2type = SPTR_ICONWARNING;
159 break;
160 case IDI_ASTERISK_W:
161 os2type = SPTR_ICONINFORMATION;
162 break;
163 default:
164 return 0;
165 }
166
167 return WinQuerySysPointer(HWND_DESKTOP, os2type, TRUE);
168}
169//******************************************************************************
170//******************************************************************************
171HANDLE OSLibWinQuerySysPointer(ULONG type)
172{
173 ULONG os2type = 0;
174
175 switch(type) {
176 case IDC_ARROW_W:
177 os2type = SPTR_ARROW;
178 break;
179 case IDC_UPARROW_W:
180 os2type = SPTR_ARROW;
181 break;
182 case IDC_IBEAM_W:
183 os2type = SPTR_TEXT;
184 break;
185 case IDC_ICON_W:
186 os2type = SPTR_PROGRAM;
187 break;
188 case IDC_NO_W:
189 os2type = SPTR_ILLEGAL;
190 break;
191 case IDC_CROSS_W:
192 os2type = SPTR_MOVE;
193 break;
194 case IDC_SIZE_W:
195 os2type = SPTR_MOVE;
196 break;
197 case IDC_SIZEALL_W:
198 os2type = SPTR_MOVE;
199 break;
200 case IDC_SIZENESW_W:
201 os2type = SPTR_SIZENESW;
202 break;
203 case IDC_SIZENS_W:
204 os2type = SPTR_SIZENS;
205 break;
206 case IDC_SIZENWSE_W:
207 os2type = SPTR_SIZENWSE;
208 break;
209 case IDC_SIZEWE_W:
210 os2type = SPTR_SIZEWE;
211 break;
212 case IDC_WAIT_W:
213 os2type = SPTR_WAIT;
214 break;
215 case IDC_APPSTARTING_W:
216 os2type = SPTR_WAIT;
217 break;
218 case IDC_HELP_W: //TODO: Create a cursor for this one
219 os2type = SPTR_WAIT;
220 break;
221 default:
222 return 0;
223 }
224 return WinQuerySysPointer(HWND_DESKTOP, os2type, TRUE);
225}
226//******************************************************************************
227//******************************************************************************
Note: See TracBrowser for help on using the repository browser.