2 * GDI OEM bitmap objects
4 * Copyright 1994 Alexandre Julliard
7 static char Copyright
[] = "Copyright Alexandre Julliard, 1994";
10 #include <X11/Xutil.h>
17 /* #define DEBUG_BITMAP */
20 #define OBM_FIRST OBM_LFARROWI /* First OEM bitmap */
21 #define OBM_LAST OBM_OLD_CLOSE /* Last OEM bitmap */
26 #define NB_COLOR_SYMBOLS 5
28 /* This is the list of the symbolic colors. All the colors used */
29 /* in the xpm files must be included in this list. If you need */
30 /* to add new colors, add them just before "black", and add the */
31 /* color identifier in OBM_Sys_Colors_Symbols below. */
32 /* Warning: black and white must always be the last 2 colors. */
34 static XpmColorSymbol OBM_Color_Symbols
[NB_COLOR_SYMBOLS
+2] =
36 { "button_face", NULL
, 0 }, /* COLOR_BTNFACE */
37 { "button_shadow", NULL
, 0 }, /* COLOR_BTNSHADOW */
38 { "button_highlight", NULL
, 0 }, /* COLOR_BTNHIGHLIGHT */
39 { "button_text", NULL
, 0 }, /* COLOR_BTNTEXT */
40 { "window_frame", NULL
, 0 }, /* COLOR_WINDOWFRAME */
45 static const int OBM_Sys_Colors_Symbols
[NB_COLOR_SYMBOLS
] =
54 /* Don't change this list! */
55 static XpmColorSymbol OBM_BW_Symbols
[2] =
62 /* Include OEM pixmaps */
63 #include "bitmaps/obm_lfarrowi"
64 #include "bitmaps/obm_rgarrowi"
65 #include "bitmaps/obm_dnarrowi"
66 #include "bitmaps/obm_uparrowi"
67 #include "bitmaps/obm_combo"
68 #include "bitmaps/obm_mnarrow"
69 #include "bitmaps/obm_lfarrowd"
70 #include "bitmaps/obm_rgarrowd"
71 #include "bitmaps/obm_dnarrowd"
72 #include "bitmaps/obm_uparrowd"
73 #include "bitmaps/obm_restored"
74 #include "bitmaps/obm_zoomd"
75 #include "bitmaps/obm_reduced"
76 #include "bitmaps/obm_restore"
77 #include "bitmaps/obm_zoom"
78 #include "bitmaps/obm_reduce"
79 #include "bitmaps/obm_lfarrow"
80 #include "bitmaps/obm_rgarrow"
81 #include "bitmaps/obm_dnarrow"
82 #include "bitmaps/obm_uparrow"
83 #include "bitmaps/obm_close"
84 #include "bitmaps/obm_old_restore"
85 #include "bitmaps/obm_old_zoom"
86 #include "bitmaps/obm_old_reduce"
87 #include "bitmaps/obm_btncorners"
88 #include "bitmaps/obm_checkboxes"
89 #include "bitmaps/obm_check"
90 #include "bitmaps/obm_btsize"
91 #include "bitmaps/obm_old_lfarrow"
92 #include "bitmaps/obm_old_rgarrow"
93 #include "bitmaps/obm_old_dnarrow"
94 #include "bitmaps/obm_old_uparrow"
95 #include "bitmaps/obm_size"
96 #include "bitmaps/obm_old_close"
100 char** data
; /* Pointer to bitmap data */
101 BOOL color
; /* Is it a color bitmap? */
102 } OBM_Pixmaps_Data
[OBM_LAST
-OBM_FIRST
+1] = {
103 { obm_lfarrowi
, TRUE
}, /* OBM_LFARROWI */
104 { obm_rgarrowi
, TRUE
}, /* OBM_RGARROWI */
105 { obm_dnarrowi
, TRUE
}, /* OBM_DNARROWI */
106 { obm_uparrowi
, TRUE
}, /* OBM_UPARROWI */
107 { obm_combo
, FALSE
}, /* OBM_COMBO */
108 { obm_mnarrow
, FALSE
}, /* OBM_MNARROW */
109 { obm_lfarrowd
, TRUE
}, /* OBM_LFARROWD */
110 { obm_rgarrowd
, TRUE
}, /* OBM_RGARROWD */
111 { obm_dnarrowd
, TRUE
}, /* OBM_DNARROWD */
112 { obm_uparrowd
, TRUE
}, /* OBM_UPARROWD */
113 { obm_restored
, TRUE
}, /* OBM_RESTORED */
114 { obm_zoomd
, TRUE
}, /* OBM_ZOOMD */
115 { obm_reduced
, TRUE
}, /* OBM_REDUCED */
116 { obm_restore
, TRUE
}, /* OBM_RESTORE */
117 { obm_zoom
, TRUE
}, /* OBM_ZOOM */
118 { obm_reduce
, TRUE
}, /* OBM_REDUCE */
119 { obm_lfarrow
, TRUE
}, /* OBM_LFARROW */
120 { obm_rgarrow
, TRUE
}, /* OBM_RGARROW */
121 { obm_dnarrow
, TRUE
}, /* OBM_DNARROW */
122 { obm_uparrow
, TRUE
}, /* OBM_UPARROW */
123 { obm_close
, TRUE
}, /* OBM_CLOSE */
124 { obm_old_restore
, FALSE
}, /* OBM_OLD_RESTORE */
125 { obm_old_zoom
, FALSE
}, /* OBM_OLD_ZOOM */
126 { obm_old_reduce
, FALSE
}, /* OBM_OLD_REDUCE */
127 { obm_btncorners
, FALSE
}, /* OBM_BTNCORNERS */
128 { obm_checkboxes
, FALSE
}, /* OBM_CHECKBOXES */
129 { obm_check
, FALSE
}, /* OBM_CHECK */
130 { obm_btsize
, FALSE
}, /* OBM_BTSIZE */
131 { obm_old_lfarrow
, FALSE
}, /* OBM_OLD_LFARROW */
132 { obm_old_rgarrow
, FALSE
}, /* OBM_OLD_RGARROW */
133 { obm_old_dnarrow
, FALSE
}, /* OBM_OLD_DNARROW */
134 { obm_old_uparrow
, FALSE
}, /* OBM_OLD_UPARROW */
135 { obm_size
, FALSE
}, /* OBM_SIZE */
136 { obm_old_close
, FALSE
}, /* OBM_OLD_CLOSE */
141 /* Include OEM bitmaps */
142 #include "bitmaps/check_boxes"
143 #include "bitmaps/check_mark"
144 #include "bitmaps/menu_arrow"
150 } OBM_Bitmaps_Data
[OBM_LAST
-OBM_FIRST
+1] =
152 { 0, 0, NULL
}, /* OBM_LFARROWI */
153 { 0, 0, NULL
}, /* OBM_RGARROWI */
154 { 0, 0, NULL
}, /* OBM_DNARROWI */
155 { 0, 0, NULL
}, /* OBM_UPARROWI */
156 { 0, 0, NULL
}, /* OBM_COMBO */
157 { menu_arrow_width
, menu_arrow_height
, menu_arrow_bits
}, /* OBM_MNARROW */
158 { 0, 0, NULL
}, /* OBM_LFARROWD */
159 { 0, 0, NULL
}, /* OBM_RGARROWD */
160 { 0, 0, NULL
}, /* OBM_DNARROWD */
161 { 0, 0, NULL
}, /* OBM_UPARROWD */
162 { 0, 0, NULL
}, /* OBM_RESTORED */
163 { 0, 0, NULL
}, /* OBM_ZOOMD */
164 { 0, 0, NULL
}, /* OBM_REDUCED */
165 { 0, 0, NULL
}, /* OBM_RESTORE */
166 { 0, 0, NULL
}, /* OBM_ZOOM */
167 { 0, 0, NULL
}, /* OBM_REDUCE */
168 { 0, 0, NULL
}, /* OBM_LFARROW */
169 { 0, 0, NULL
}, /* OBM_RGARROW */
170 { 0, 0, NULL
}, /* OBM_DNARROW */
171 { 0, 0, NULL
}, /* OBM_UPARROW */
172 { 0, 0, NULL
}, /* OBM_CLOSE */
173 { 0, 0, NULL
}, /* OBM_OLD_RESTORE */
174 { 0, 0, NULL
}, /* OBM_OLD_ZOOM */
175 { 0, 0, NULL
}, /* OBM_OLD_REDUCE */
176 { 0, 0, NULL
}, /* OBM_BTNCORNERS */
177 { check_boxes_width
, check_boxes_height
,
178 check_boxes_bits
}, /* OBM_CHECKBOXES */
179 { check_mark_width
, check_mark_height
, check_mark_bits
}, /* OBM_CHECK */
180 { 0, 0, NULL
}, /* OBM_BTSIZE */
181 { 0, 0, NULL
}, /* OBM_OLD_LFARROW */
182 { 0, 0, NULL
}, /* OBM_OLD_RGARROW */
183 { 0, 0, NULL
}, /* OBM_OLD_DNARROW */
184 { 0, 0, NULL
}, /* OBM_OLD_UPARROW */
185 { 0, 0, NULL
}, /* OBM_SIZE */
186 { 0, 0, NULL
}, /* OBM_OLD_CLOSE */
191 extern WORD
COLOR_ToPhysical( DC
*dc
, COLORREF color
); /* color.c */
193 extern Colormap COLOR_WinColormap
;
196 /***********************************************************************
197 * OBM_InitColorSymbols
200 static void OBM_InitColorSymbols()
203 static int already_done
= 0;
205 if (already_done
) return;
207 /* Init the system colors */
208 for (i
= 0; i
< NB_COLOR_SYMBOLS
; i
++)
210 OBM_Color_Symbols
[i
].pixel
= COLOR_ToPhysical( NULL
,
211 GetSysColor(OBM_Sys_Colors_Symbols
[i
]));
213 /* Init black and white */
214 OBM_Color_Symbols
[i
++].pixel
= COLOR_ToPhysical( NULL
, RGB(0,0,0) );
215 OBM_Color_Symbols
[i
++].pixel
= COLOR_ToPhysical( NULL
, RGB(255,255,255) );
220 /***********************************************************************
223 HBITMAP
OBM_LoadOEMBitmap( WORD id
)
225 BITMAPOBJ
* bmpObjPtr
;
227 WORD width
, height
, bpp
;
230 if ((id
< OBM_FIRST
) || (id
> OBM_LAST
)) return 0;
234 if (!OBM_Pixmaps_Data
[id
].data
) return 0;
239 OBM_InitColorSymbols();
240 attrs
.valuemask
= XpmColormap
| XpmDepth
| XpmColorSymbols
;
241 attrs
.colormap
= COLOR_WinColormap
;
242 if (OBM_Pixmaps_Data
[id
].color
) attrs
.depth
= bpp
= screenDepth
;
243 else attrs
.depth
= bpp
= 1;
244 attrs
.colorsymbols
= (bpp
> 1) ? OBM_Color_Symbols
: OBM_BW_Symbols
;
245 attrs
.numsymbols
= (bpp
> 1) ? NB_COLOR_SYMBOLS
+ 2 : 2;
247 if ((err
= XpmCreatePixmapFromData( display
, rootWindow
,
248 OBM_Pixmaps_Data
[id
].data
,
250 &attrs
)) != XpmSuccess
)
252 fprintf( stderr
, "Error %d creating pixmap %d\n",
259 height
= attrs
.height
;
263 if (!OBM_Bitmaps_Data
[id
].data
) return 0;
265 width
= OBM_Bitmaps_Data
[id
].width
;
266 height
= OBM_Bitmaps_Data
[id
].height
;
267 pixmap
= XCreateBitmapFromData( display
, rootWindow
,
268 OBM_Bitmaps_Data
[id
].data
, width
, height
);
271 if (!pixmap
) return 0;
273 /* Create the BITMAPOBJ */
274 if (!(hbitmap
= GDI_AllocObject( sizeof(BITMAPOBJ
), BITMAP_MAGIC
)))
276 XFreePixmap( display
, pixmap
);
279 bmpObjPtr
= (BITMAPOBJ
*) GDI_HEAP_ADDR( hbitmap
);
280 bmpObjPtr
->size
.cx
= 0;
281 bmpObjPtr
->size
.cy
= 0;
282 bmpObjPtr
->pixmap
= pixmap
;
283 bmpObjPtr
->bitmap
.bmType
= 0;
284 bmpObjPtr
->bitmap
.bmWidth
= width
;
285 bmpObjPtr
->bitmap
.bmHeight
= height
;
286 bmpObjPtr
->bitmap
.bmWidthBytes
= (width
+ 15) / 16 * 2;
287 bmpObjPtr
->bitmap
.bmPlanes
= 1;
288 bmpObjPtr
->bitmap
.bmBitsPixel
= bpp
;
289 bmpObjPtr
->bitmap
.bmBits
= NULL
;