75 lines
1.7 KiB
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;
|
|
}
|
|
|