| /* |
| * 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 |