--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uigraphics/palette/src/palette.cpp Thu Dec 17 09:14:12 2009 +0200
@@ -0,0 +1,262 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Provides the palette methods.
+*
+*/
+
+
+#include "Palette.h"
+#include "NokiaBlue.h"
+#include "PaletteConstants.h"
+
+#ifndef DISABLE_256_COLOR_PALETTE_SWITCHING
+#include "NokiaGreen.h"
+#include "NokiaPurple.h"
+#include "NokiaGrey.h"
+#include "SchemeRed.h"
+#include "SchemePink.h"
+#include "SchemeOrange.h"
+#include "Palette1.h"
+#include "Palette2.h"
+#include "Palette3.h"
+#include "Palette4.h"
+#include "Palette5.h"
+#include "Palette6.h"
+#include "Palette7.h"
+#include "Palette8.h"
+#include "Palette9.h"
+#include "Palette10.h"
+#include "Palette11.h"
+#include "Palette12.h"
+#include "Palette13.h"
+#endif
+
+class TColorSchemeStore
+ {
+public:
+ static TSeries60ColorScheme Get();
+ static void Set(TSeries60ColorScheme aScheme);
+ };
+
+enum TPalettePanic
+ {
+ EBadScheme
+ };
+
+_LIT(KPanic, "Palette");
+void Panic(TPalettePanic aCode)
+ {
+ User::Panic(KPanic, aCode);
+ }
+
+
+const TUint32 color16array[16] = {
+ 0x00000000, 0x00555555, 0x00000080, 0x00008080,
+ 0x00008000, 0x000000ff, 0x0000ffff, 0x0000ff00,
+ 0x00ff00ff, 0x00ff0000, 0x00ffff00, 0x00800080,
+ 0x00800000, 0x00808000,0x00aaaaaa, 0x00ffffff };
+
+const TUint8 color16inverse[512] = {
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05,
+ 0x04, 0x04, 0x01, 0x03, 0x03, 0x03, 0x05, 0x05, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x05,
+ 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x06, 0x06,
+ 0x07, 0x07, 0x07, 0x03, 0x03, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06,
+ 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x05, 0x05, 0x00, 0x00, 0x01, 0x02, 0x02, 0x02, 0x05, 0x05,
+ 0x04, 0x01, 0x01, 0x01, 0x03, 0x03, 0x05, 0x05, 0x04, 0x04, 0x01, 0x03, 0x03, 0x03, 0x03, 0x05,
+ 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x06, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x06, 0x06,
+ 0x07, 0x07, 0x07, 0x03, 0x03, 0x06, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06,
+ 0x0c, 0x0c, 0x01, 0x0b, 0x0b, 0x0b, 0x05, 0x05, 0x0c, 0x01, 0x01, 0x01, 0x0b, 0x0b, 0x05, 0x05,
+ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05,
+ 0x0d, 0x0d, 0x01, 0x01, 0x03, 0x0e, 0x0e, 0x06, 0x0d, 0x0d, 0x01, 0x01, 0x0e, 0x0e, 0x0e, 0x06,
+ 0x07, 0x07, 0x01, 0x01, 0x0e, 0x0e, 0x06, 0x06, 0x07, 0x07, 0x07, 0x07, 0x06, 0x06, 0x06, 0x06,
+ 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x05, 0x0c, 0x0c, 0x01, 0x0b, 0x0b, 0x0b, 0x0b, 0x05,
+ 0x0d, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x05, 0x0d, 0x0d, 0x01, 0x01, 0x01, 0x0e, 0x0e, 0x0e,
+ 0x0d, 0x0d, 0x01, 0x01, 0x0e, 0x0e, 0x0e, 0x0e, 0x0d, 0x0d, 0x01, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
+ 0x0d, 0x0d, 0x01, 0x0e, 0x0e, 0x0e, 0x0e, 0x06, 0x07, 0x07, 0x07, 0x0e, 0x0e, 0x0e, 0x06, 0x06,
+ 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x08, 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x08,
+ 0x0d, 0x0d, 0x01, 0x01, 0x0b, 0x0e, 0x0e, 0x08, 0x0d, 0x0d, 0x01, 0x01, 0x0e, 0x0e, 0x0e, 0x0e,
+ 0x0d, 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
+ 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0a, 0x0a, 0x0a, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f,
+ 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x08, 0x08, 0x0c, 0x0c, 0x0b, 0x0b, 0x0b, 0x0b, 0x08, 0x08,
+ 0x0d, 0x0d, 0x01, 0x01, 0x0e, 0x0e, 0x0e, 0x08, 0x0d, 0x0d, 0x01, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
+ 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e,
+ 0x0a, 0x0a, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0a, 0x0a, 0x0a, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f,
+ 0x09, 0x09, 0x09, 0x0b, 0x0b, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x0b, 0x0b, 0x08, 0x08, 0x08,
+ 0x09, 0x09, 0x01, 0x01, 0x0e, 0x0e, 0x08, 0x08, 0x0d, 0x0d, 0x01, 0x0e, 0x0e, 0x0e, 0x0e, 0x08,
+ 0x0d, 0x0d, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f, 0x0a, 0x0a, 0x0e, 0x0e, 0x0e, 0x0e, 0x0e, 0x0f,
+ 0x0a, 0x0a, 0x0a, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0a, 0x0a, 0x0a, 0x0a, 0x0f, 0x0f, 0x0f, 0x0f,
+ 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08,
+ 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08, 0x09, 0x09, 0x09, 0x0e, 0x0e, 0x0e, 0x08, 0x08,
+ 0x0a, 0x0a, 0x0a, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f, 0x0a, 0x0a, 0x0a, 0x0e, 0x0e, 0x0e, 0x0f, 0x0f,
+ 0x0a, 0x0a, 0x0a, 0x0a, 0x0f, 0x0f, 0x0f, 0x0f, 0x0a, 0x0a, 0x0a, 0x0a, 0x0f, 0x0f, 0x0f, 0x0f
+ };
+
+#ifndef DISABLE_256_COLOR_PALETTE_SWITCHING
+
+#define VIDEO_MEMORY_SCHEME_OFFSET(paletteSize, width, height, bytesPerPixel) ((paletteSize) + ((width)*((height)+1)*(bytesPerPixel)))
+
+#ifdef __PALETTE_INDEX_ADDRESS_FIXED
+#if defined __WINS__
+
+TSeries60ColorScheme theSchemeMem = ESeries60ColorSchemeBlue;
+TSeries60ColorScheme* const theScheme = &theSchemeMem;
+
+#else
+
+#define DEVICE_SCHEME_OFFSET VIDEO_MEMORY_SCHEME_OFFSET(DEVICE_VIDEO_PALETTE_SIZE, DEVICE_SCREEN_WIDTH, DEVICE_SCREEN_HEIGHT, DEVICE_BYTES_PER_PIXEL)
+#define DEVICE_SCHEME_ADDR (DEVICE_VIDEO_ADDR + DEVICE_SCHEME_OFFSET)
+TSeries60ColorScheme* const theScheme = (TSeries60ColorScheme*)(DEVICE_SCHEME_ADDR);
+
+#endif
+#endif
+#endif // DISABLE_256_COLOR_PALETTE_SWITCHING
+
+
+EXPORT_C const TUint32* DynamicPalette::Color16array()
+ {
+ return color16array;
+ }
+
+EXPORT_C const TUint8* DynamicPalette::Color16inverse()
+ {
+ return color16inverse;
+ }
+
+/**
+ *
+ * Returns the current system palette. Depending on the
+ * implementation this value depends on the current color
+ * scheme set using SetColorScheme.
+ *
+ * @returns "const TColor256Util*"
+ * Current system palette.
+ */
+EXPORT_C const TColor256Util* DynamicPalette::DefaultColor256Util()
+ {
+#ifdef DISABLE_256_COLOR_PALETTE_SWITCHING
+
+ return &KNokiaBlueColor256Util;
+
+#else // DISABLE_256_COLOR_PALETTE_SWITCHING
+
+#ifndef __PALETTE_INDEX_ADDRESS_FIXED
+ TSeries60ColorScheme* theScheme = (TSeries60ColorScheme*)Dll::Tls();
+ if (!theScheme)
+ {
+ TPckgBuf<TScreenInfoV01> info;
+ UserSvr::ScreenInfo(info);
+ TInt offset = VIDEO_MEMORY_SCHEME_OFFSET(DEVICE_VIDEO_PALETTE_SIZE, info().iScreenSize.iWidth, info().iScreenSize.iHeight, DEVICE_BYTES_PER_PIXEL);
+ theScheme = (TSeries60ColorScheme*)(((TUint8*)info().iScreenAddress) + offset);
+ Dll::SetTls(theScheme);
+ }
+#endif
+ switch (*theScheme)
+ {
+ case EIndex0:
+ return &KNokiaBlueColor256Util;
+
+ case EIndex1:
+ return &KNokiaGreenColor256Util;
+
+ case EIndex2:
+ return &KNokiaPurpleColor256Util;
+
+ case EIndex3:
+ return &KSchemeRedColor256Util;
+
+ case EIndex4:
+ return &KSchemePinkColor256Util;
+
+ case EIndex5:
+ return &KSchemeOrangeColor256Util;
+
+ case EIndex6:
+ return &KNokiaGreyColor256Util;
+
+ case EIndex7:
+ return &KPalette1Color256Util;
+
+ case EIndex8:
+ return &KPalette2Color256Util;
+
+ case EIndex9:
+ return &KPalette3Color256Util;
+
+ case EIndex10:
+ return &KPalette4Color256Util;
+
+ case EIndex11:
+ return &KPalette5Color256Util;
+
+ case EIndex12:
+ return &KPalette6Color256Util;
+
+ case EIndex13:
+ return &KPalette7Color256Util;
+
+ case EIndex14:
+ return &KPalette8Color256Util;
+
+ case EIndex15:
+ return &KPalette9Color256Util;
+
+ case EIndex16:
+ return &KPalette10Color256Util;
+
+ case EIndex17:
+ return &KPalette11Color256Util;
+
+ case EIndex18:
+ return &KPalette12Color256Util;
+
+ case EIndex19:
+ return &KPalette13Color256Util;
+
+ default:
+ return &KNokiaBlueColor256Util;
+ }
+
+#endif // DISABLE_256_COLOR_PALETTE_SWITCHING
+ }
+
+/**
+ *
+ * Sets the current color palette.
+ *
+ */
+#ifdef DISABLE_256_COLOR_PALETTE_SWITCHING
+
+EXPORT_C void DynamicPalette::SetColor256Util(DynamicPalette::TIndex /*aScheme*/)
+ {
+ }
+
+#else // DISABLE_256_COLOR_PALETTE_SWITCHING
+EXPORT_C void DynamicPalette::SetColor256Util(DynamicPalette::TIndex aScheme)
+ {
+#ifndef __PALETTE_INDEX_ADDRESS_FIXED
+ TSeries60ColorScheme* theScheme = (TSeries60ColorScheme*)Dll::Tls();
+ if (!theScheme)
+ {
+ TPckgBuf<TScreenInfoV01> info;
+ UserSvr::ScreenInfo(info);
+ TInt offset = VIDEO_MEMORY_SCHEME_OFFSET(DEVICE_VIDEO_PALETTE_SIZE, info().iScreenSize.iWidth, info().iScreenSize.iHeight, DEVICE_BYTES_PER_PIXEL);
+ theScheme = (TSeries60ColorScheme*)(((TUint8*)info().iScreenAddress) + offset);
+ Dll::SetTls(theScheme);
+ }
+#endif
+ *theScheme = (TSeries60ColorScheme)(aScheme);
+ }
+#endif // DISABLE_256_COLOR_PALETTE_SWITCHING
+
+// End of File