/* * GDI OEM bitmap objects * * Copyright 1994 Alexandre Julliard * static char Copyright[] = "Copyright Alexandre Julliard, 1994"; */ #include #include #ifdef USE_XPM #include #endif #include "gdi.h" #include "bitmap.h" #include "stddebug.h" #include "color.h" #include "debug.h" #define OBM_FIRST OBM_LFARROWI /* First OEM bitmap */ #define OBM_LAST OBM_OLD_CLOSE /* Last OEM bitmap */ #ifdef USE_XPM #define NB_COLOR_SYMBOLS 5 /* This is the list of the symbolic colors. All the colors used */ /* in the xpm files must be included in this list. If you need */ /* to add new colors, add them just before "black", and add the */ /* color identifier in OBM_Sys_Colors_Symbols below. */ /* Warning: black and white must always be the last 2 colors. */ static XpmColorSymbol OBM_Color_Symbols[NB_COLOR_SYMBOLS+2] = { { "button_face", NULL, 0 }, /* COLOR_BTNFACE */ { "button_shadow", NULL, 0 }, /* COLOR_BTNSHADOW */ { "button_highlight", NULL, 0 }, /* COLOR_BTNHIGHLIGHT */ { "button_text", NULL, 0 }, /* COLOR_BTNTEXT */ { "window_frame", NULL, 0 }, /* COLOR_WINDOWFRAME */ { "black", NULL, 0 }, { "white", NULL, 0 } }; static const int OBM_Sys_Colors_Symbols[NB_COLOR_SYMBOLS] = { COLOR_BTNFACE, COLOR_BTNSHADOW, COLOR_BTNHIGHLIGHT, COLOR_BTNTEXT, COLOR_WINDOWFRAME }; /* Don't change this list! */ static XpmColorSymbol OBM_BW_Symbols[2] = { { "white", NULL, 0 }, { "black", NULL, 1 } }; /* Include OEM pixmaps */ #include "bitmaps/obm_lfarrowi" #include "bitmaps/obm_rgarrowi" #include "bitmaps/obm_dnarrowi" #include "bitmaps/obm_uparrowi" #include "bitmaps/obm_combo" #include "bitmaps/obm_mnarrow" #include "bitmaps/obm_lfarrowd" #include "bitmaps/obm_rgarrowd" #include "bitmaps/obm_dnarrowd" #include "bitmaps/obm_uparrowd" #include "bitmaps/obm_restored" #include "bitmaps/obm_zoomd" #include "bitmaps/obm_reduced" #include "bitmaps/obm_restore" #include "bitmaps/obm_zoom" #include "bitmaps/obm_reduce" #include "bitmaps/obm_lfarrow" #include "bitmaps/obm_rgarrow" #include "bitmaps/obm_dnarrow" #include "bitmaps/obm_uparrow" #include "bitmaps/obm_close" #include "bitmaps/obm_old_restore" #include "bitmaps/obm_old_zoom" #include "bitmaps/obm_old_reduce" #include "bitmaps/obm_btncorners" #include "bitmaps/obm_checkboxes" #include "bitmaps/obm_check" #include "bitmaps/obm_btsize" #include "bitmaps/obm_old_lfarrow" #include "bitmaps/obm_old_rgarrow" #include "bitmaps/obm_old_dnarrow" #include "bitmaps/obm_old_uparrow" #include "bitmaps/obm_size" #include "bitmaps/obm_old_close" static const struct { char** data; /* Pointer to bitmap data */ BOOL color; /* Is it a color bitmap? */ } OBM_Pixmaps_Data[OBM_LAST-OBM_FIRST+1] = { { obm_lfarrowi, TRUE }, /* OBM_LFARROWI */ { obm_rgarrowi, TRUE }, /* OBM_RGARROWI */ { obm_dnarrowi, TRUE }, /* OBM_DNARROWI */ { obm_uparrowi, TRUE }, /* OBM_UPARROWI */ { obm_combo, FALSE }, /* OBM_COMBO */ { obm_mnarrow, FALSE }, /* OBM_MNARROW */ { obm_lfarrowd, TRUE }, /* OBM_LFARROWD */ { obm_rgarrowd, TRUE }, /* OBM_RGARROWD */ { obm_dnarrowd, TRUE }, /* OBM_DNARROWD */ { obm_uparrowd, TRUE }, /* OBM_UPARROWD */ { obm_restored, TRUE }, /* OBM_RESTORED */ { obm_zoomd, TRUE }, /* OBM_ZOOMD */ { obm_reduced, TRUE }, /* OBM_REDUCED */ { obm_restore, TRUE }, /* OBM_RESTORE */ { obm_zoom, TRUE }, /* OBM_ZOOM */ { obm_reduce, TRUE }, /* OBM_REDUCE */ { obm_lfarrow, TRUE }, /* OBM_LFARROW */ { obm_rgarrow, TRUE }, /* OBM_RGARROW */ { obm_dnarrow, TRUE }, /* OBM_DNARROW */ { obm_uparrow, TRUE }, /* OBM_UPARROW */ { obm_close, TRUE }, /* OBM_CLOSE */ { obm_old_restore, FALSE }, /* OBM_OLD_RESTORE */ { obm_old_zoom, FALSE }, /* OBM_OLD_ZOOM */ { obm_old_reduce, FALSE }, /* OBM_OLD_REDUCE */ { obm_btncorners, FALSE }, /* OBM_BTNCORNERS */ { obm_checkboxes, FALSE }, /* OBM_CHECKBOXES */ { obm_check, FALSE }, /* OBM_CHECK */ { obm_btsize, FALSE }, /* OBM_BTSIZE */ { obm_old_lfarrow, FALSE }, /* OBM_OLD_LFARROW */ { obm_old_rgarrow, FALSE }, /* OBM_OLD_RGARROW */ { obm_old_dnarrow, FALSE }, /* OBM_OLD_DNARROW */ { obm_old_uparrow, FALSE }, /* OBM_OLD_UPARROW */ { obm_size, FALSE }, /* OBM_SIZE */ { obm_old_close, FALSE }, /* OBM_OLD_CLOSE */ }; #else /* USE_XPM */ /* Include OEM bitmaps */ #include "bitmaps/check_boxes" #include "bitmaps/check_mark" #include "bitmaps/menu_arrow" static const struct { WORD width, height; char *data; } OBM_Bitmaps_Data[OBM_LAST-OBM_FIRST+1] = { { 0, 0, NULL }, /* OBM_LFARROWI */ { 0, 0, NULL }, /* OBM_RGARROWI */ { 0, 0, NULL }, /* OBM_DNARROWI */ { 0, 0, NULL }, /* OBM_UPARROWI */ { 0, 0, NULL }, /* OBM_COMBO */ { menu_arrow_width, menu_arrow_height, menu_arrow_bits }, /* OBM_MNARROW */ { 0, 0, NULL }, /* OBM_LFARROWD */ { 0, 0, NULL }, /* OBM_RGARROWD */ { 0, 0, NULL }, /* OBM_DNARROWD */ { 0, 0, NULL }, /* OBM_UPARROWD */ { 0, 0, NULL }, /* OBM_RESTORED */ { 0, 0, NULL }, /* OBM_ZOOMD */ { 0, 0, NULL }, /* OBM_REDUCED */ { 0, 0, NULL }, /* OBM_RESTORE */ { 0, 0, NULL }, /* OBM_ZOOM */ { 0, 0, NULL }, /* OBM_REDUCE */ { 0, 0, NULL }, /* OBM_LFARROW */ { 0, 0, NULL }, /* OBM_RGARROW */ { 0, 0, NULL }, /* OBM_DNARROW */ { 0, 0, NULL }, /* OBM_UPARROW */ { 0, 0, NULL }, /* OBM_CLOSE */ { 0, 0, NULL }, /* OBM_OLD_RESTORE */ { 0, 0, NULL }, /* OBM_OLD_ZOOM */ { 0, 0, NULL }, /* OBM_OLD_REDUCE */ { 0, 0, NULL }, /* OBM_BTNCORNERS */ { check_boxes_width, check_boxes_height, check_boxes_bits }, /* OBM_CHECKBOXES */ { check_mark_width, check_mark_height, check_mark_bits }, /* OBM_CHECK */ { 0, 0, NULL }, /* OBM_BTSIZE */ { 0, 0, NULL }, /* OBM_OLD_LFARROW */ { 0, 0, NULL }, /* OBM_OLD_RGARROW */ { 0, 0, NULL }, /* OBM_OLD_DNARROW */ { 0, 0, NULL }, /* OBM_OLD_UPARROW */ { 0, 0, NULL }, /* OBM_SIZE */ { 0, 0, NULL }, /* OBM_OLD_CLOSE */ }; #endif /* USE_XPM */ /*********************************************************************** * OBM_InitColorSymbols */ #ifdef USE_XPM static void OBM_InitColorSymbols() { int i; static int already_done = 0; if (already_done) return; /* Init the system colors */ for (i = 0; i < NB_COLOR_SYMBOLS; i++) { OBM_Color_Symbols[i].pixel = COLOR_ToPhysical( NULL, GetSysColor(OBM_Sys_Colors_Symbols[i])); } /* Init black and white */ OBM_Color_Symbols[i++].pixel = COLOR_ToPhysical( NULL, RGB(0,0,0) ); OBM_Color_Symbols[i++].pixel = COLOR_ToPhysical( NULL, RGB(255,255,255) ); already_done = 1; } #endif /* USE_XPM */ /*********************************************************************** * OBM_LoadOEMBitmap */ HBITMAP OBM_LoadOEMBitmap( WORD id ) { BITMAPOBJ * bmpObjPtr; HBITMAP hbitmap; WORD width, height, bpp; Pixmap pixmap; if ((id < OBM_FIRST) || (id > OBM_LAST)) return 0; id -= OBM_FIRST; #ifdef USE_XPM if (!OBM_Pixmaps_Data[id].data) return 0; { XpmAttributes attrs; int err; OBM_InitColorSymbols(); attrs.valuemask = XpmColormap | XpmDepth | XpmColorSymbols; attrs.colormap = COLOR_WinColormap; if (OBM_Pixmaps_Data[id].color) attrs.depth = bpp = screenDepth; else attrs.depth = bpp = 1; attrs.colorsymbols = (bpp > 1) ? OBM_Color_Symbols : OBM_BW_Symbols; attrs.numsymbols = (bpp > 1) ? NB_COLOR_SYMBOLS + 2 : 2; if ((err = XpmCreatePixmapFromData( display, rootWindow, OBM_Pixmaps_Data[id].data, &pixmap, NULL, &attrs )) != XpmSuccess) { fprintf( stderr, "Error %d creating pixmap %d\n", err, OBM_FIRST+id ); pixmap = width = height = 0; } else { width = attrs.width; height = attrs.height; } } #else if (!OBM_Bitmaps_Data[id].data) return 0; bpp = 1; width = OBM_Bitmaps_Data[id].width; height = OBM_Bitmaps_Data[id].height; pixmap = XCreateBitmapFromData( display, rootWindow, OBM_Bitmaps_Data[id].data, width, height ); #endif /* USE_XPM */ if (!pixmap) return 0; /* Create the BITMAPOBJ */ if (!(hbitmap = GDI_AllocObject( sizeof(BITMAPOBJ), BITMAP_MAGIC ))) { XFreePixmap( display, pixmap ); return 0; } bmpObjPtr = (BITMAPOBJ *) GDI_HEAP_ADDR( hbitmap ); bmpObjPtr->size.cx = 0; bmpObjPtr->size.cy = 0; bmpObjPtr->pixmap = pixmap; bmpObjPtr->bitmap.bmType = 0; bmpObjPtr->bitmap.bmWidth = width; bmpObjPtr->bitmap.bmHeight = height; bmpObjPtr->bitmap.bmWidthBytes = (width + 15) / 16 * 2; bmpObjPtr->bitmap.bmPlanes = 1; bmpObjPtr->bitmap.bmBitsPixel = bpp; bmpObjPtr->bitmap.bmBits = NULL; return hbitmap; }