blob: 66e00c516de376d075911240de137c6c68c483fa [file] [log] [blame]
/*
* Copyright (c) 2001, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#ifndef AWT_PALETTE_H
#define AWT_PALETTE_H
#include "awt_Win32GraphicsDevice.h"
#define CMAPSIZE 256 // number of colors to use in default cmap
#define GS_NOTGRAY 0 // screen is not grayscale
#define GS_INDEXGRAY 1 // screen is 8-bit indexed with several
// gray colormap entries
#define GS_STATICGRAY 2 // screen is 8-bit with 256 gray values
// from 0 to 255 (no index table used)
#define GS_NONLINGRAY 3 /* screen is 8-bit with 256 gray values
in non-monotonic order */
class AwtWin32GraphicsDevice;
class AwtPalette {
public:
HPALETTE Select(HDC hDC);
void Realize(HDC hDC);
HPALETTE GetPalette() { return logicalPalette; }
static void DisableCustomPalette();
static BOOL UseCustomPalette();
AwtPalette(AwtWin32GraphicsDevice *device);
static int FetchPaletteEntries(HDC hDC, PALETTEENTRY* pPalEntries);
int GetGSType(PALETTEENTRY* pPalEntries);
BOOL Update();
void UpdateLogical();
unsigned int *GetSystemEntries() {return systemEntries; }
unsigned int *GetLogicalEntries() {return logicalEntries; }
unsigned char *GetSystemInverseLUT() { return systemInverseLUT; }
private:
static BOOL m_useCustomPalette;
unsigned int logicalEntries[256];
unsigned int systemEntries[256];
PALETTEENTRY systemEntriesWin32[256]; // cached to eliminate
// copying it when unnec.
int numSystemEntries;
HPALETTE logicalPalette;
AwtWin32GraphicsDevice *device;
unsigned char *systemInverseLUT;
/**
* This custom palette is derived from the IE palette.
* Previously, we used a custom palette that used a patented
* algorithm for getting an evently distributed color space.
* But given the realites of desktop and web graphics, it seems
* more important to use a more standard palette, especially one
* that agrees with the predominant browser. The browser uses
* a slightly modified 6x6x6 colorcube plus a gray ramp plus a
* few other colors. We still flash with Netscape, but we end
* up using a very similar palette (Netscape uses a 6x6x6 color
* cube as well); the entries are just in different places (thus
* the flash).
* Another possible solution to use a standard palette would be
* to use the CreateHalftonePalette() call of win32. This gives
* us the IE palette on win98, but totally different palettes on
* different versions of Windows. We should at least use the same
* colors on different flavors of the same platform...
* The values coded below should be used for entries 10 through
* 245 of our custom palette. Entries 0-9 and 246-255 should be
* retrieved from the current system palette, to ensure that we
* are working well with the current desktop palette.
*
* The palette is initialized in awt_CustomPaletteDef.h
*/
static PALETTEENTRY customPalette[236];
};
#endif AWT_PALETTE_H