uigraphics/palette/src/palette.cpp
author William Roberts <williamr@symbian.org>
Tue, 23 Mar 2010 16:09:27 +0000
branchSymbian3_Theme
changeset 35 838be9535c06
parent 0 05e9090e2422
permissions -rw-r--r--
Start integration branch for Symbian^3 Theme The theme has been built using Carbide.ui on S60 5th Edition using the N97 plugin The source code in sf/mw/uiresources/skins/Symbian/srcdata was used to generate the installable SIS file which lives in the group directory, but the aim here is to build the theme for delivery in the ROM (preferrably as the default theme). Running "sbs -b bld.inf -c winscw" should build cleanly and deliver a matched set of files which then show up in the Settings | Themes | General list. Attempting to install it produces "Theme Corrupted".

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