Sweden-Number/win32/gdi32.c

75 lines
1.7 KiB
C

/*
* Win32 GDI functions
*
* Copyright 1996 Thomas Sandford t.d.g.sandford@prds-grn.demon.co.uk
*/
#include <windows.h>
#include <gdi.h>
#include <pen.h>
#include <brush.h>
#include <bitmap.h>
#include <font.h>
#include <palette.h>
#include <debug.h>
int WIN32_GetObject( HANDLE handle, int count, LPVOID buffer )
/* largely a copy of GetObject, but with size mangling capabilities to
convert between win16 and win32 objects. Yeuch! */
{
void *temp = alloca(count);
GDIOBJHDR * ptr = NULL;
dprintf_win32(stddeb, "WIN32_GetObject: %d %d %p\n", handle, count, buffer);
if ((!count) || (temp == NULL))
return 0;
ptr = GDI_GetObjPtr(handle, MAGIC_DONTCARE);
if (!ptr) return 0;
/* FIXME: only bitmaps fixed so far */
switch(ptr->wMagic)
{
case PEN_MAGIC:
return PEN_GetObject( (PENOBJ *)ptr, count, buffer );
case BRUSH_MAGIC:
return BRUSH_GetObject( (BRUSHOBJ *)ptr, count, buffer );
case BITMAP_MAGIC: {
BITMAP *pbm = (BITMAP *)temp;
int *pdest = (int *)buffer;
if (buffer == NULL)
return 28;
BITMAP_GetObject( (BITMAPOBJ *)ptr, count, temp );
if (count > 3)
pdest[0] = pbm->bmType;
if (count > 7)
pdest[1] = pbm->bmWidth;
if (count > 11)
pdest[2] = pbm->bmHeight;
if (count > 15)
pdest[3] = pbm->bmWidthBytes;
if (count > 19)
pdest[4] = pbm->bmPlanes;
if (count > 23)
pdest[5] = pbm->bmBitsPixel;
if (count > 27)
pdest[6] = pbm->bmBits;
return (count > 28) ? 28 : count - (count % 4);
}
case FONT_MAGIC:
return FONT_GetObject( (FONTOBJ *)ptr, count, buffer );
case PALETTE_MAGIC:
return PALETTE_GetObject( (PALETTEOBJ *)ptr, count, buffer );
}
return 0;
}