mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
292 lines
6.8 KiB
292 lines
6.8 KiB
/*++
|
|
*
|
|
* WOW v1.0
|
|
*
|
|
* Copyright (c) 1991, Microsoft Corporation
|
|
*
|
|
* WGPAL.C
|
|
* WOW32 16-bit GDI API support
|
|
*
|
|
* History:
|
|
* 07-Mar-1991 Jeff Parsons (jeffpar)
|
|
* Created.
|
|
*
|
|
* 09-Apr-1991 NigelT
|
|
* Various defines are used here to remove calls to Win32
|
|
* features which don't work yet.
|
|
--*/
|
|
|
|
|
|
#include "precomp.h"
|
|
#pragma hdrstop
|
|
|
|
MODNAME(wgpal.c);
|
|
|
|
|
|
ULONG FASTCALL WG32AnimatePalette(PVDMFRAME pFrame)
|
|
{
|
|
PPALETTEENTRY t4;
|
|
register PANIMATEPALETTE16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(ANIMATEPALETTE16), parg16);
|
|
GETPALETTEENTRY16(parg16->f4, parg16->f3, t4);
|
|
|
|
if( t4 ) {
|
|
AnimatePalette(HPALETTE32(parg16->f1),
|
|
WORD32(parg16->f2),
|
|
WORD32(parg16->f3),
|
|
t4);
|
|
FREEPALETTEENTRY16(t4);
|
|
}
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(0);
|
|
}
|
|
|
|
|
|
ULONG FASTCALL WG32CreatePalette(PVDMFRAME pFrame)
|
|
{
|
|
ULONG ul = 0L;
|
|
PLOGPALETTE t1;
|
|
register PCREATEPALETTE16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(CREATEPALETTE16), parg16);
|
|
GETLOGPALETTE16(parg16->f1, t1);
|
|
|
|
if( t1 ) {
|
|
ul = GETHPALETTE16(CreatePalette(t1));
|
|
WOW32APIWARN(ul, "CreatePalette");
|
|
FREELOGPALETTE16(t1);
|
|
}
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(ul);
|
|
}
|
|
|
|
|
|
ULONG FASTCALL WG32GetNearestPaletteIndex(PVDMFRAME pFrame)
|
|
{
|
|
ULONG ul;
|
|
register PGETNEARESTPALETTEINDEX16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(GETNEARESTPALETTEINDEX16), parg16);
|
|
|
|
ul = GETWORD16(GetNearestPaletteIndex(HPALETTE32(parg16->f1),
|
|
DWORD32(parg16->f2)));
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(ul);
|
|
}
|
|
|
|
|
|
ULONG FASTCALL WG32GetPaletteEntries(PVDMFRAME pFrame)
|
|
{
|
|
ULONG ul = 0L;
|
|
PPALETTEENTRY t4;
|
|
register PGETPALETTEENTRIES16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(GETPALETTEENTRIES16), parg16);
|
|
|
|
if( t4 = malloc_w((parg16->f3) * sizeof(PALETTEENTRY)) ) {
|
|
|
|
ul = GETWORD16(GetPaletteEntries(HPALETTE32(parg16->f1),
|
|
WORD32(parg16->f2),
|
|
WORD32(parg16->f3),
|
|
t4));
|
|
|
|
PUTPALETTEENTRY16(parg16->f4, parg16->f3, t4);
|
|
FREEPALETTEENTRY16(t4);
|
|
}
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(ul);
|
|
}
|
|
|
|
|
|
ULONG FASTCALL WG32GetSystemPaletteEntries(PVDMFRAME pFrame)
|
|
{
|
|
ULONG ul = 0L;
|
|
PPALETTEENTRY ppal;
|
|
register PGETSYSTEMPALETTEENTRIES16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(GETSYSTEMPALETTEENTRIES16), parg16);
|
|
|
|
if( ppal = malloc_w((parg16->f3) * sizeof(PALETTEENTRY)) ) {
|
|
|
|
ul = GETWORD16(GetSystemPaletteEntries(HDC32(parg16->f1),
|
|
WORD32(parg16->f2),
|
|
WORD32(parg16->f3),
|
|
ppal));
|
|
|
|
// if we fail but are on a rgb device, fill in the default 256 entries.
|
|
// WIN31 just calls Escape(hdc,GETCOLORTABLE) which on NT just calls
|
|
// GetSysteemPaletteEntries().
|
|
|
|
if (!ul && (GetDeviceCaps(HDC32(parg16->f1),BITSPIXEL) > 8))
|
|
{
|
|
if (parg16->f4 == 0)
|
|
{
|
|
ul = 256;
|
|
}
|
|
else
|
|
{
|
|
int j;
|
|
int i = WORD32(parg16->f2);
|
|
int c = WORD32(parg16->f3);
|
|
|
|
if ((c + i) > 256)
|
|
c = 256 - i;
|
|
|
|
if (c > 0)
|
|
{
|
|
BYTE abGreenRed[8] = {0x0,0x25,0x48,0x6d,0x92,0xb6,0xdb,0xff};
|
|
BYTE abBlue[4] = {0x0,0x55,0xaa,0xff};
|
|
|
|
// green mask 00000111
|
|
// red mask 00111000
|
|
// blue mask 11000000
|
|
// could certainly do this faster with a table and mem copy
|
|
// but I don't really care about performance here. Apps
|
|
// shouldn't be doing this. That is why it is in the wow
|
|
// layer.
|
|
|
|
for (j = 0; j < c; ++j,++i)
|
|
{
|
|
ppal[j].peGreen = abGreenRed[i & 0x07];
|
|
ppal[j].peRed = abGreenRed[(i >> 3) & 0x07];
|
|
ppal[j].peBlue = abBlue[(i >> 6) & 0x03];
|
|
ppal[j].peFlags = 0;
|
|
}
|
|
|
|
ul = c;
|
|
}
|
|
}
|
|
}
|
|
|
|
PUTPALETTEENTRY16(parg16->f4, ul, ppal);
|
|
FREEPALETTEENTRY16(ppal);
|
|
}
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(ul);
|
|
}
|
|
|
|
|
|
ULONG FASTCALL WG32GetSystemPaletteUse(PVDMFRAME pFrame)
|
|
{
|
|
ULONG ul;
|
|
register PGETSYSTEMPALETTEUSE16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(GETSYSTEMPALETTEUSE16), parg16);
|
|
|
|
ul = GETWORD16(GetSystemPaletteUse(HDC32(parg16->f1)));
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(ul);
|
|
}
|
|
|
|
|
|
ULONG FASTCALL WU32RealizePalette(PVDMFRAME pFrame)
|
|
{
|
|
ULONG ul;
|
|
register PREALIZEPALETTE16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(REALIZEPALETTE16), parg16);
|
|
|
|
ul = GETWORD16(RealizePalette(HDC32(parg16->f1)));
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(ul);
|
|
}
|
|
|
|
|
|
ULONG FASTCALL WG32ResizePalette(PVDMFRAME pFrame)
|
|
{
|
|
ULONG ul;
|
|
register PRESIZEPALETTE16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(RESIZEPALETTE16), parg16);
|
|
|
|
ul = GETBOOL16(ResizePalette(HPALETTE32(parg16->f1), WORD32(parg16->f2)));
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(ul);
|
|
}
|
|
|
|
|
|
ULONG FASTCALL WU32SelectPalette(PVDMFRAME pFrame)
|
|
{
|
|
ULONG ul;
|
|
register PSELECTPALETTE16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(SELECTPALETTE16), parg16);
|
|
|
|
ul = GETHPALETTE16(SelectPalette(HDC32(parg16->f1),
|
|
HPALETTE32(parg16->f2),
|
|
BOOL32(parg16->f3)));
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(ul);
|
|
}
|
|
|
|
|
|
ULONG FASTCALL WG32SetPaletteEntries(PVDMFRAME pFrame)
|
|
{
|
|
ULONG ul = 0;
|
|
PPALETTEENTRY t4;
|
|
register PSETPALETTEENTRIES16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(SETPALETTEENTRIES16), parg16);
|
|
GETPALETTEENTRY16(parg16->f4, parg16->f3, t4);
|
|
|
|
if( t4 ) {
|
|
ul = GETWORD16(SetPaletteEntries(HPALETTE32(parg16->f1),
|
|
WORD32(parg16->f2),
|
|
WORD32(parg16->f3),
|
|
t4));
|
|
FREEPALETTEENTRY16(t4);
|
|
}
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(ul);
|
|
}
|
|
|
|
|
|
ULONG FASTCALL WG32SetSystemPaletteUse(PVDMFRAME pFrame)
|
|
{
|
|
ULONG ul;
|
|
register PSETSYSTEMPALETTEUSE16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(SETSYSTEMPALETTEUSE16), parg16);
|
|
|
|
ul = GETWORD16(SetSystemPaletteUse(HDC32(parg16->f1), WORD32(parg16->f2)));
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(ul);
|
|
}
|
|
|
|
|
|
ULONG FASTCALL WG32UpdateColors(PVDMFRAME pFrame)
|
|
{
|
|
ULONG ul;
|
|
register PUPDATECOLORS16 parg16;
|
|
|
|
GETARGPTR(pFrame, sizeof(UPDATECOLORS16), parg16);
|
|
|
|
ul = GETINT16(UpdateColors(HDC32(parg16->f1)));
|
|
|
|
FREEARGPTR(parg16);
|
|
|
|
RETURN(ul);
|
|
}
|