# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1271419158 -10800 # Node ID 8a173132b0aa8c8cc9bec76511d8cf5b2bfe6adb # Parent 058b1fc1663ad4e4ab5dcb2592a3441909616ee0 Revision: 201015 Kit: 201015 diff -r 058b1fc1663a -r 8a173132b0aa CenRep/keys_screensaver.xls Binary file CenRep/keys_screensaver.xls has changed diff -r 058b1fc1663a -r 8a173132b0aa aif/screensaver_reg.rss --- a/aif/screensaver_reg.rss Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2004 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: -* resource definition. -* -*/ - - - - -#include -#include - -UID2 KUidAppRegistrationResourceFile -UID3 0x100056CF // Screensaver UID - -RESOURCE APP_REGISTRATION_INFO - { - app_file = "screensaver"; - hidden = KAppIsHidden; - } diff -r 058b1fc1663a -r 8a173132b0aa aif/screensaveraif.rss --- a/aif/screensaveraif.rss Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* -* Copyright (c) 2009 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: Resource for screensaver -* -*/ - - - - -#include - -RESOURCE AIF_DATA - { - app_uid=0x100056CF; - hidden=KAppIsHidden; - } diff -r 058b1fc1663a -r 8a173132b0aa animations/balloons.gif Binary file animations/balloons.gif has changed diff -r 058b1fc1663a -r 8a173132b0aa animations/bird.swf Binary file animations/bird.swf has changed diff -r 058b1fc1663a -r 8a173132b0aa animations/butterfly0.svg --- a/animations/butterfly0.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,335 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa animations/hypnose.swf Binary file animations/hypnose.swf has changed diff -r 058b1fc1663a -r 8a173132b0aa conf/screensaver.confml Binary file conf/screensaver.confml has changed diff -r 058b1fc1663a -r 8a173132b0aa conf/screensaver_101F8770.crml Binary file conf/screensaver_101F8770.crml has changed diff -r 058b1fc1663a -r 8a173132b0aa group/ScreensaverConfig.hrh --- a/group/ScreensaverConfig.hrh Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,62 +0,0 @@ -/* -* Copyright (c) 2009 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: -* configurations macros for screensaver -* -*/ - -#ifndef SCREENSAVERCONFIG_HRH -#define SCREENSAVERCONFIG_HRH - -// Enable logging -// #define LOGGING_ENABLED - -// Log layout rects -// #define LAYOUT_TRACING - -// Test content (faster activation, partial mode test line, -// some indicators on by default, layout area borders drawn) -// #define TEST_CONTENT - -// For devices with a twist display. This will cause Screensaver to -// stop slightly faster than with user activity created by the display -// position change -// NOTE that if screensaver is running on device default orientation (ie not -// forced), and there is an application that changes screen orientation, -// screensaver will commit suicide if it is activated on top of that -// application and this flag is defined. -#define FAST_STOP_ON_SCREENDEVICE_CHANGE - -// ONLY ONE OF THE POWERSAVE CONFIGURATIONS CAN BE ON AT A TIME -// -// Power save area should always be based on width of the bar, not height -// (for landscape displays with portrait power save) -// #define POWERSAVE_BASED_ON_WIDTH -// -// Power save area should be based on width of the bar, if display -// has been rotated (for rotatable displays with power save in original -// orientation only) -// #define POWERSAVE_BASED_ON_WIDTH_ROTATED - - -// DEFAULT ORIENTATION (not defined = device default) -// -// Always stay in portrait (overrides landscape if both defined) -// defining this attribute as lead HW for 3.2 supports screensaver only in portrait mode - #define ALWAYS_PORTRAIT -// -// Always stay in landscape -//#define ALWAYS_LANDSCAPE - -#endif // SCREENSAVERCONFIG_HRH diff -r 058b1fc1663a -r 8a173132b0aa group/backup_registration.xml --- a/group/backup_registration.xml Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ - - - - - diff -r 058b1fc1663a -r 8a173132b0aa group/bld.inf --- a/group/bld.inf Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -/* -* Copyright (c) 2009 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: -* Screensaver build information -* -*/ - -#include - -#ifndef TOOLS -// Plugins -// Not compiled on 3.0, also only if S60 browser is used (media plugins present) -#ifndef __SERIES60_30__ -#ifdef __SERIES60_NATIVE_BROWSER -#include "../scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/group/bld.inf" -#include "../scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/group/bld.inf" -#endif -#endif - -// Slideshow screensaver can be feature-variated -#ifdef __SLIDESHOW_SCREENSAVER -#include "../scrsaver/scrsaverplugins/SlideshowPlugin/group/bld.inf" -#endif - -// Screen saver AIW plugin for the time being a R&D feature only -#ifdef RD_SCREENSAVERAIWPLUGIN -#include "../scrsaver/screensaveraiwplugin/group/bld.inf" -#endif - -#endif // TOOLS - -PRJ_PLATFORMS -DEFAULT - - -PRJ_EXPORTS -// Backup -backup_registration.xml z:/private/100056CF/backup_registration.xml - -../rom/screensaver.iby CORE_MW_LAYER_IBY_EXPORT_PATH(screensaver.iby) - -// Generic configuration interface for component cenrep settings -../conf/screensaver.confml APP_LAYER_CONFML(screensaver.confml) -../conf/screensaver_101F8770.crml APP_LAYER_CRML(screensaver_101F8770.crml) - -PRJ_MMPFILES - -#ifndef TOOLS - -// Screensaver -screensaver.mmp - -#endif // TOOLS - -PRJ_TESTMMPFILES - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa group/screensaver.mmp --- a/group/screensaver.mmp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -/* -* Copyright (c) 2009 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: -* Project definition file -* -*/ - - -#include -#include -#include -#include "ScreensaverConfig.hrh" - -TARGET screensaver.exe -TARGETTYPE exe -UID 0x100039CE 0x100056CF - -VENDORID VID_DEFAULT -CAPABILITY CAP_APPLICATION PowerMgmt - -#ifdef LOGGING_ENABLED -MACRO USE_LOGGER -#endif - -#ifdef ALWAYS_PORTRAIT -MACRO SS_ALWAYSPORTRAIT -#endif - -#ifdef ALWAYS_LANDSCAPE -MACRO SS_ALWAYSLANDSCAPE -#endif - -#ifdef FAST_STOP_ON_SCREENDEVICE_CHANGE -MACRO SS_FASTSTOPONSCREENDEVICECHANGE -#endif - -SOURCEPATH ../src - -SOURCE Screensaver.cpp -SOURCE screensaverview.cpp -SOURCE screensaverappui.cpp -SOURCE screensaverbase.cpp -SOURCE screensaverctrlnone.cpp -SOURCE screensaverctrlplugin.cpp -SOURCE screensaverctrlmovingtext.cpp -SOURCE screensavershareddatai.cpp -SOURCE screensaverutility.cpp -SOURCE screensaverindicator.cpp -SOURCE screensaverindicatorarray.cpp -SOURCE screensaverindicatoricon.cpp -SOURCE screensaverindicatornumberandicon.cpp -SOURCE screensaverindicatortext.cpp -SOURCE screensaversubscriber.cpp -SOURCE screensaverrepositorywatcher.cpp -SOURCE screensavershareddatamonitor.cpp -SOURCE screensaverengine.cpp - -START RESOURCE screensaver.rss -HEADER -TARGETPATH APP_RESOURCE_DIR -LANGUAGE_IDS -END // RESOURCE - - -START RESOURCE ../aif/screensaver_reg.rss -// DEPENDS screensaver.rsg -// Do not change the UID below. -TARGETPATH /private/10003a3f/apps -END - -USERINCLUDE ../inc - -// This is a SYSTEMINCLUDE macro containing the middleware -// layer specific include directories -APP_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/ecom - -LIBRARY euser.lib -LIBRARY cone.lib -LIBRARY eikcore.lib -LIBRARY avkon.lib -LIBRARY apparc.lib -LIBRARY apgrfx.lib -LIBRARY ws32.lib -LIBRARY CommonEngine.lib -LIBRARY activitymanager.lib -LIBRARY aknlayout.lib -LIBRARY aknlayout2scalable.lib -LIBRARY fbscli.lib -LIBRARY egul.lib -LIBRARY msgs.lib -LIBRARY bafl.lib -LIBRARY power_save_display_mode.lib -LIBRARY gdi.lib -LIBRARY ProfileEng.lib -LIBRARY hal.lib -LIBRARY AknSkins.lib -LIBRARY FeatMgr.lib // Feature Manager API -LIBRARY AknIcon.lib -LIBRARY AknPictograph.lib -LIBRARY ecom.lib -LIBRARY CentralRepository.lib -LIBRARY CenRepNotifHandler.lib -LIBRARY efsrv.lib -LIBRARY flogger.lib -#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 -LIBRARY gfxtrans.lib -LIBRARY akntransitionutils.lib -LIBRARY akncapserverclient.lib -#endif - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa inc/ScreensaverUtils.h --- a/inc/ScreensaverUtils.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/* -* Copyright (c) 2003 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: Screensaver utilities collection -* -*/ - - -#ifndef C_SCREENSAVERUTILS_H -#define C_SCREENSAVERUTILS_H - -// ========== LOGGING MACROS =============================== - -#ifdef USE_LOGGER - -#include -#include -#include -#include - - -/* logging macros usage: - -// set logging on in mmp file... -MACRO USE_LOGGER -#ifdef WINS -MACRO USE_RDEBUG -#endif - - -void CTestAppUi::ConstructL() -{ -// creates log directory and log file on app startup. -// prints starting banner... -SCRLOGGER_CREATE; - -// entering to function... -SCRLOGGER_ENTERFN("ConstructL()"); - -TInt number = 42; -TFileName file; -file = "something" .... - -// print variable number of parameters... -// Note: use _L macro for format string! -SCRLOGGER_WRITEF(_L("SCR: number = %d, file = %S"), number, &file); - -// print just a string (no _L macro here!) -SCRLOGGER_WRITE("Hello world!"); - -// leave from function... -SCRLOGGER_LEAVEFN("ConstructL()"); -} - -CTestAppUi::~CTestAppUi() -{ -// print app exit banner when application exits. -SCRLOGGER_DELETE; -} - -*/ - -#ifdef USE_RDEBUG - -_LIT(KSCRLogBanner, "Screensaver log start"); -_LIT(KSCRLogEnterFn, "SCR: enter --> %S"); -_LIT(KSCRLogLeaveFn, "SCR: leave <-- %S"); -_LIT(KSCRLogWrite, "SCR: %S"); -_LIT(KSCRLogTag, "SCR: "); -_LIT(KSCRLogExit, "Screensaver log end"); -_LIT(KSCRLogTimeFormatString, "%H:%T:%S:%*C2"); - -#define SCRLOGGER_CREATE {RDebug::Print(KSCRLogBanner);} -#define SCRLOGGER_DELETE {RDebug::Print(KSCRLogExit);} -#define SCRLOGGER_ENTERFN(a) {_LIT(temp, a); RDebug::Print(KSCRLogEnterFn, &temp);} -#define SCRLOGGER_LEAVEFN(a) {_LIT(temp, a); RDebug::Print(KSCRLogLeaveFn, &temp);} -#define SCRLOGGER_WRITE(a) {_LIT(temp, a); RDebug::Print(KSCRLogWrite, &temp);} -#define SCRLOGGER_WRITE_TIMESTAMP(a) {_LIT(temp, a); TTime time; time.HomeTime(); TBuf<256> buffer; time.FormatL(buffer, KSCRLogTimeFormatString); buffer.Insert(0, temp); buffer.Insert(0, KSCRLogTag); RDebug::Print(buffer); } -#define SCRLOGGER_WRITEF RDebug::Print - -#else - -_LIT(KSCRLogDir, "SCR"); -_LIT(KSCRLogFile, "SCR.txt"); -_LIT8(KSCRLogBanner, "Screensaver log start"); -_LIT8(KSCRLogEnterFn, "SCR: -> %S"); -_LIT8(KSCRLogLeaveFn, "SCR: <- %S"); -_LIT8(KSCRLogExit, "Screensaver log end"); -_LIT(KSCRLogTimeFormatString, "%H:%T:%S:%*C2"); - -#define SCRLOGGER_CREATE {FCreate();} -#define SCRLOGGER_DELETE {RFileLogger::Write(KSCRLogDir, KSCRLogFile, EFileLoggingModeAppend, KSCRLogExit);} -#define SCRLOGGER_ENTERFN(a) {_LIT8(temp, a); RFileLogger::WriteFormat(KSCRLogDir, KSCRLogFile, EFileLoggingModeAppend, KSCRLogEnterFn, &temp);} -#define SCRLOGGER_LEAVEFN(a) {_LIT8(temp, a); RFileLogger::WriteFormat(KSCRLogDir, KSCRLogFile, EFileLoggingModeAppend, KSCRLogLeaveFn, &temp);} -#define SCRLOGGER_WRITE(a) {_LIT(temp, a); RFileLogger::Write(KSCRLogDir, KSCRLogFile, EFileLoggingModeAppend, temp);} -#define SCRLOGGER_WRITE_TIMESTAMP(a) {_LIT(temp, a); TTime time; time.HomeTime(); TBuf<256> buffer; time.FormatL(buffer, KSCRLogTimeFormatString); buffer.Insert(0, temp); RFileLogger::Write(KSCRLogDir, KSCRLogFile, EFileLoggingModeAppend, buffer); } -#define SCRLOGGER_WRITEF FPrint - -inline void FPrint(const TRefByValue aFmt, ...) - { - VA_LIST list; - VA_START(list, aFmt); - RFileLogger::WriteFormat(KSCRLogDir, KSCRLogFile, EFileLoggingModeAppend, aFmt, list); - } - -inline void FPrint(const TDesC& aDes) - { - RFileLogger::WriteFormat(KSCRLogDir, KSCRLogFile, EFileLoggingModeAppend, aDes); - } - -inline void FHex(const TUint8* aPtr, TInt aLen) - { - RFileLogger::HexDump(KSCRLogDir, KSCRLogFile, EFileLoggingModeAppend, 0, 0, aPtr, aLen); - } - -inline void FHex(const TDesC8& aDes) - { - FHex(aDes.Ptr(), aDes.Length()); - } - -inline void FCreate() - { - TFileName path(_L("c:\\logs\\")); - path.Append(KSCRLogDir); - path.Append(_L("\\")); - RFs& fs = CEikonEnv::Static()->FsSession(); - fs.MkDirAll(path); - RFileLogger::WriteFormat(KSCRLogDir, KSCRLogFile, EFileLoggingModeOverwrite, KSCRLogBanner); - } - -#endif // USE_RDEBUG - -#else // USE_LOGGER - -inline void FPrint(const TRefByValue /*aFmt*/, ...) { }; - -#define SCRLOGGER_CREATE -#define SCRLOGGER_DELETE -#define SCRLOGGER_ENTERFN(a) -#define SCRLOGGER_LEAVEFN(a) -#define SCRLOGGER_WRITE(a) -#define SCRLOGGER_WRITEF 1 ? ((void)0) : FPrint -#define SCRLOGGER_WRITE_TIMESTAMP(a) - -#endif // USE_LOGGER - -#endif // C_SCREENSAVERUTILS_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaver.h --- a/inc/screensaver.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/* -* Copyright (c) 2003 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: Main header file for screensaver application. -* -*/ - - - - -#ifndef C_SCREENSAVER_H -#define C_SCREENSAVER_H - -#include - -//For turning display off -#include - -#include - -#include -#include -#include - -// -// class CScreensaverEikDocument -// -class CScreensaverDocument : public CAknDocument - { -public: - /** - * ConstructL - * 2nd phase constructor. - * Perform the second phase construction of a - * CScreensaverDocument object. - */ - void ConstructL(); - /** - * CScreensaverDocument. - * C++ default constructor. - */ - CScreensaverDocument(CEikApplication& aApp); - - /** - * ~CScreensaverDocument - * Destructor. - */ - ~CScreensaverDocument(); -private: - // from CEikDocument - CEikAppUi* CreateAppUiL(); - }; - -// -// CScreensaverApplication -// - -class CScreensaverApplication : public CAknApplication -{ -private: - // from CApaApplication - /** - * From CApaApplication, CreateDocumentL. - * Creates CScreensaverDocument document object. The returned - * pointer in not owned by the CScreensaverApplication object. - * @return A pointer to the created document object. - */ - CApaDocument* CreateDocumentL(); - /** - * From CApaApplication, AppDllUid. - * @return Application's UID (KUidScreensaverApp). - */ - TUid AppDllUid() const; - }; - -#endif // C_SCREENSAVER_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaver.hrh --- a/inc/screensaver.hrh Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -/* -* Copyright (c) 2003 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: The enumeration for screensaver -* -*/ - - - - - - -#ifndef SCREENSAVER_HRH -#define SCREENSAVER_HRH - -#include - -// -// Screensaver indicator id's. -// -enum TScreensaverIndicatorId - { - ESsNewMessagesInd, - ESsMissedCallsInd, - ESsKeyLockInd, - ESsProfileInd, - ESsImInd, // Instant message (chat) - ESsMailInd, // New email - ESsVoicemailInd, // New voice mail - ESsAmPmInd // AM / PM indicator - }; - -// -// Indicator types. -// -enum TScreensaverIndicatorType - { - ESsNumericIndicator, - ESsIconIndicator, - ESsTextIndicator, - ESsNumberAndIconIndicator - }; - -// -// Indicator aligments. -// -enum TScreensaverAlignment - { - ESsAlignLeft, - ESsAlignRight - }; - - -// -// Indicator drawing priorities. -// -enum TScreensaverDrawType - { - ESsDrawTypeNotDrawn, - ESsDrawTypeSecondary, - ESsDrawTypePrimary - }; - - -// -// Default screensaver bar color modes. -// -enum TScreensaverBarColorModel - { - ESsColorModel3BitMode, - ESsColorModelHighColor - }; - -// -// Factory for display objects -// -enum TDisplayObjectType - { - EDisplayText = 0, - EDisplayTime, - EDisplayBitmap, - EDisplayPlugin, - EDisplayNone - }; - -enum TDisplayState - { - EDisplayOff = 0, - EDisplayOn - }; -#endif //SCREENSAVER_HRH - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverappui.h --- a/inc/screensaverappui.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -/* -* Copyright (c) 2009 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: The define of appui for screensaver -* -*/ - - - - -#ifndef C_SCREENSAVERAPPUI_H -#define C_SCREENSAVERAPPUI_H - -#include -#include - -#include "screensaverview.h" - - -class CScreensaverEngine; - -// UID of Screensaver application -const TUid KUidScreensaverApp = { 0x100056CF }; - -/** - * 'AppUi' class. - */ -class CScreensaverAppUi : public CAknViewAppUi - { -public: - /** - * ConstructL. - * 2nd phase constructor. - */ - void ConstructL(); - - /** - * ~CScreensaverAppUi. - * Destructor. - */ - ~CScreensaverAppUi(); - - /** - * Returns the pointer to screensaver model which is owned by AppUi - * @return Screensaver Model - */ - CScreensaverEngine& Model() const; - - /** - * From CEikAppUi. - * Takes care of command handling. - * @param aCommand command to be handled - */ - void HandleCommandL(TInt aCommand); - - /** - * Returns the pointer to CScreensaverView which is derived from AknView - * @return CScreensaverView - */ - CScreensaverView* ScreensaverView(); - -private: - - /** - * Creates the CScreensaverView object and the Display object - */ - void CreateViewL(); - - /** - * From CEikAppUi. - * Key event handler. - */ - TKeyResponse HandleKeyEventL(const TKeyEvent& /*aKeyEvent*/,TEventCode /*aType*/); - - /** - * From @c CCoeAppUiBase. - * Calls CAknViewAppUi::HandleScreenDeviceChangedL(). - */ - void HandleScreenDeviceChangedL(); - - /** - * From AknAppUi. Handles pointer-initiated view switch. Currently this - * function does nothing but calls base class function. - * @since Series 60 3.0 - * @param aEvent Window server event. - * @param aDestination Pointer to the control which the event is targeted to. - */ - void HandleWsEventL(const TWsEvent& aEvent, CCoeControl* aDestination); - -private: - - /** - * Screensaver Model. - * Owned. - */ - CScreensaverEngine* iModel; - - /** - * Screensaver view - * - * Owned - */ - CScreensaverView* iView; - }; - -#endif // C_SCREENSAVERAPPUI_H - diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverbase.h --- a/inc/screensaverbase.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,219 +0,0 @@ -/* -* Copyright (c) 2009 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: Definitions for base class of display object -* -*/ - - - -#ifndef C_SCREENSAVERBASE_H -#define C_SCREENSAVERBASE_H - -#include -#include -#include - -#include "screensaverplugin.h" -#include "screensaver.hrh" -#include "screensaverengine.h" -#include "screensaverindicator.h" -#include "screensaverindicatorarray.h" - - -/** - * The base class of all the different display object - */ -class CScreensaverBase : public CCoeControl, public MCoeControlContext, - public MAknPictographAnimatorCallBack - { -public: - /** - * Default c++ constructor - */ - CScreensaverBase(); - - /** - * Destructor - */ - virtual ~CScreensaverBase(); - - /** - * Show the control and start the refresh timer - */ - virtual void StartDrawObject(); - - /** - * Stop display the control and cancel the timers - */ - virtual void StopDrawObject(); - - /** - * Start the control needed timer - */ - virtual void StartTimer() = 0; - - /** - * Cancels the timer - */ - virtual void CancelTimer() = 0; - - /** - * Show the control - */ - virtual void DrawObject(); - - /** - * Clear the screen - */ - virtual void ClearScreen() = 0; - - /* - * Refresh the display - */ - virtual void Refresh() = 0; - - /** - * Get the screensaver view - */ - CScreensaverView* View() const; - - /** - * Returns the Screensaver Model which is owned by AppUi - * - * @return CScreensaverModel - */ - const CScreensaverEngine& Model() const; - - /** - * Returns the Indicator Array which is owned by Screensaver Model - * - * @return CScreensaverIndicatorArray - */ - CScreensaverIndicatorArray& Array() const; -public: - //From CCoeControl - - /** - * Resource change handling - */ - virtual void HandleResourceChange( TInt aType ) = 0; - - /** - * Responds to changes to the size and position of the contents - * of this control. - */ - virtual void SizeChanged() = 0; - - // Power save mode related functions - - /** - * Used to define the active area of display in power save mode - * - * @param aRect - */ - TInt SetPowerSaveDisplayActiveArea( TRect& aRect ); - - /** - * Activates power save display mode - * - * @param aFullColors - */ - TInt ActivatePowerSaveDisplay( TBool aFullColors = EFalse ) const; - -public: - // From MAknPictograpAnimatorCallback - /** - * This function is called when a redraw is needed for drawing - * new frames of animated pictographs. It should - * - * 1) Draw or clear the background of pictographs - * 2) If the pictographs are amongst text, draw the text - * 3) Draw the pictographs using MAknPictographDrawer interface - * - * In many cases, it is sufficient to implement this simply by - * calling CCoeControl::DrawNow for the appropriate control. - */ - virtual void DrawPictographArea(); - -protected: - - /** - * Start capturing timer - */ - void StartCaptureScreenTimer(); - - /** - * Initial the initial refresh rate - */ - TInt InitialRefreshRate(); - - /** - * Kill the timer - * - * @param aTimer the timer you want stop - */ - void DeleteTimer( CPeriodic*& aTimer ); - - /** - * for Lcd Partial mode. - */ - void ConstructAndConnectLCDL(); - - /** - * Returns the powersave display mode - */ - CPowerSaveDisplayMode* LcdPartialMode() const; - - /** - * If the timer expired, excute the refresh action - */ - static TInt HandleRefreshTimerExpiry( TAny* aPtr ); - - /** - * Callback fuction. Called when the window server heartbeat tiemr time out - */ - static TInt HandleCaptureTimerExpiry( TAny* aPtr ); - - /** - * Capture screen, and get the first pixel address of the bitmap - */ - TInt CaptureScreen(); - -protected: - - // Area of screen that is displayed when in power save mode - TRect iPowerSaveDisplayActiveArea; - - /** - * The capturing screen timer - */ - CPeriodic* iCaptureScreenTimer; - - - /** - * The pointer to the powersaver display mode - * - * Owned - */ - CPowerSaveDisplayMode* iPowerSaveDisplayMode; - - /** - * store the bitmap data - */ - CFbsBitmap* iOffScrnBmp; - - }; - -#endif // C_SCREENSAVERBASE_H - diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverctrlmovingtext.h --- a/inc/screensaverctrlmovingtext.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,260 +0,0 @@ -/* -* Copyright (c) 2003 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: Definitions screensaver moving text display class. -* -*/ - - - -#ifndef C_SCREENSAVERCTRLMOVINGTEXT_H -#define C_SCREENSAVERCTRLMOVINGTEXT_H - -#include - -#include "screensaverbase.h" - -const TInt KScreensaverDataReconnectingDelay = 50000; -const TInt KScreensaverBarHeight = 24; - -// -// class CScreensaverCtrlMovingText -// -class CScreensaverCtrlMovingText : public CScreensaverBase - { -public: - /** - * Two-phased constructor - * - * @param aType the type of display object - * @return CScreensaverCtrlMovingText the pointer of CScreensaverCtrlMovingText - * object - */ - static CScreensaverCtrlMovingText* NewL( TDisplayObjectType aType ); - - /** - * Destructor. - */ - ~CScreensaverCtrlMovingText(); - -public: - // From CCoeControl - - /** - * Resource change handling - */ - virtual void HandleResourceChange( TInt aType ); - - - /** - * Responds to changes to the size and position of the contents - * of this control. - */ - virtual void SizeChanged(); - - /** - * Drawing (override this to draw) - */ - virtual void Draw( const TRect& aRect ) const; - -public: - // Implemented here instead of shareddatainterface - - /** - * Set moving bar on / off - * - * @param aMove a bool type to decide if it can move or not - */ - void SetMoving( TBool aMove = ETrue ); - - /** - * Start the control needed timer - */ - void StartTimer(); - - /** - * Cancels the timer - */ - void CancelTimer(); - - /** - * Clear the screen - */ - void ClearScreen(); - - /* - * Refresh the display - */ - void Refresh(); - -protected: - - /** - * Constructor - * - * @param aType the type of the display object. - */ - CScreensaverCtrlMovingText( TDisplayObjectType aType ); - - /** - * Two-phased constructor - */ - void ConstructL(); - - /** - * Draw the object on the screen of this type - * - * @param aGc the CWindowGc object - * @param aRect - */ - virtual void DrawNew( CWindowGc& aGc, const TRect& aRect ) const; - - /** - * Draw the date on the bar - */ - virtual void DrawText( CWindowGc& aGc ) const; - - /** - * Draws text with pictographs - */ - void DrawPictoText( CWindowGc &aGc ) const; - - /** - * Get the current time - */ - void UpdateCurrentTimeL(); - - /** - * Generate the screensaver bar - */ - void GenerateDisplayAttributesForScreensaverBar(); - -private: - /** - * Get the random top value - * - * @return TInt the random value - */ - void GetRandomTopValue( TInt aBarHight ); - - /** - * Get the random seed - */ - TInt RandomSeed(); - - /** - * Get the text and background color - */ - void GetTextAndBgColor(); - - /** - * Format the display text - */ - void FormatTextL( TDes& aText, const TDesC& aFormat ); - - /** - * Set AmPm text payload to indicator - */ - void SetAmPmIndicatorPayloadL(); - - /** - * Format the data and time text - */ - void FormatTextFromResourceL( TDes &aDes, TInt aResourceId ); - - /** - * Get the clock area and text layout - */ - void GetClockLayout( const TRect& aRect ); - - /** - * Get the date area and text layout - */ - void GetDateLayout( const TRect& aRect ); - - /** - * Get the indicator area and text layout - */ - void GetIndicatorAreaLayout( const TRect& aRect ); - - /** - * Start the indicator bar refresh timer - */ - void StartBarRefreshTimer(); - - -protected://data - - /** - * The layout date and text - */ - TAknLayoutText iLayoutDateText; -private://data - /** - * The top position of the bar - */ - TInt iTop; - - /** - * The random seed to get the random value - */ - TInt64 iRandSeed; - - // For new layout - /** - * The time string that will be displayed on the bar - */ - TBuf<15> iTextTime; - - /** - * The date string that will be displayed on the bar - * or he text will be display the on the bar - */ - TBuf<25> iText; - - /** - * The type of the display text - */ - TDisplayObjectType iType; - - //Lay out - TAknLayoutRect iLayoutBar; - TAknLayoutRect iLayoutClock; - TAknLayoutRect iLayoutDate; // missing - TAknLayoutText iLayoutClockText; - TAknLayoutText iLayoutAmPmText; - - // Moving bar on / off - TBool iMoveBar; - - /** - * The color for background and text - */ - TInt iBgColor; - TInt iTextColor; - TInt iTextBgColor; - - /** - * The indicator bar refresh timer - */ - CPeriodic* iBarRefreshTimer; - - /** - * Pictograph drawing interface - */ - CAknPictographInterface* iPictoI; - }; - -#endif // C_SCREENSAVERCTRLMOVINGTEXT_H - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverctrlnone.h --- a/inc/screensaverctrlnone.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -/* -* Copyright (c) 2009 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: Definitions for the display object of none type -* -*/ - - - -#ifndef C_SCREENSAVERCTRLNONE_H -#define C_SCREENSAVERCTRLNONE_H - -#include "screensaverbase.h" - -/** - * The none type of the display object to cut off the screen light - */ -class CScreensaverCtrlNone : public CScreensaverBase - { -public: - /** - * The symbian c++ constructor - */ - static CScreensaverCtrlNone* NewL(); - - - /** - * destructor - */ - ~CScreensaverCtrlNone(); - - /** - * Start the control needed timer - */ - void StartTimer(); - - /** - * Cancels the timer - */ - void CancelTimer(); - - /** - * Show the control - */ - void DrawObject(); - - /** - * Clear the screen - */ - void ClearScreen(); - - /* - * Refresh the display - */ - void Refresh(); - -public: - // From CCoeControl - - /** - * Resource change handling - */ - void HandleResourceChange( TInt aType ); - - /** - * Responds to changes to the size and position of the contents - * of this control. - */ - void SizeChanged(); - -private: - - /** - *The Default C++ constructor - */ - CScreensaverCtrlNone(); - - /** - * The two-phased constructor - */ - void ConstructL(); - - /** - * Switch off light in aSecs - * - * @param aSecs after this seconds, screen will switch light - */ - void SwitchLights( TInt aSecs ); - - /** - * Switch on/off the screen - */ - void SwitchDisplayState( TInt aState ); - - }; - -#endif // C_SCREENSAVERCTRLNONE_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverctrlplugin.h --- a/inc/screensaverctrlplugin.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,205 +0,0 @@ -/* -* Copyright (c) 2009 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: Definitions for the display object of plugin type -* -*/ - - - -#ifndef C_SCREENSAVERCTRLPLUGIN_H -#define C_SCREENSAVERCTRLPLUGIN_H - -#include - -#include "screensaverbase.h" - -/** - * The plugin type of display object which is derived from the - * CScreensaverBase class - */ -class CScreensaverCtrlPlugin : public CScreensaverBase, - public MScreensaverPluginHost - { -public: - enum TScreensaverPluginFlag - { - // Indicates that plugin module wants to draw indicators - EPluginFlagOverrideIndicators = 0, - // Indicates that plugin does not use refresh timer and should not get - // Draw() calls - EPluginFlagTimerNotUsed, - EPluginFlagSuspend - }; -public: - /** - * Two-phased constructor. - */ - static CScreensaverCtrlPlugin* NewL(); - - /** - * Destructor - */ - ~CScreensaverCtrlPlugin(); - - /** - * Start the control needed timer - */ - void StartTimer(); - - /** - * Cancels the timer - */ - void CancelTimer(); - - - /** - * Show the control - */ - void DrawObject(); - - /** - * Clear the screen - */ - void ClearScreen(); - - /* - * Refresh the display - */ - void Refresh(); - - /** - * Send the event to plugin to deal with - * - * @param aEvent the event send to plugin - * @return TInt - */ - TInt SendPluginEvent( TScreensaverEvent aEvent ); - -public: - // From MScreensaverPluginHost - void UseStandardIndicators(); - void OverrideStandardIndicators(); - TBool StandardIndicatorsUsed() const; - void SetRefreshTimerValue( TInt aValue ); - TInt RefreshTimerValue() const; - TInt GetIndicatorPayload( TScreensaverIndicatorIndex aIndex, - TIndicatorPayload& aResult ) const; - TInt SetActiveDisplayArea( TRect& aRect, - const TScreensaverPartialMode& aMode ); - TInt SetActiveDisplayArea( TInt aStartRow, TInt aEndRow, - const TScreensaverPartialMode& aMode ); - void ExitPartialMode(); - const TScreensaverColorModel& GetColorModel() const; - void Suspend( TInt aTime ); - void RequestLights( TInt aSecs ); - TInt DisplayInfo( TScreensaverDisplayInfo* aDisplayInfo ); - void UseRefreshTimer( TBool aOn = ETrue ); - void RequestTimeout( TInt aSecs ); - void RevertToDefaultSaver(); - // End MScreensaverPluginHost - -protected: - /** - * The default C++ constuctor - * - * @param aType the type of the display object. - * @param aPlugin the plugin which the screensaver is setted. - */ - CScreensaverCtrlPlugin(); - - /** - * Symbian default constructor. - */ - void ConstructL(); - -protected: - // From CCoeControl - - /** - * Resource change handling - */ - virtual void HandleResourceChange( TInt aType ); - - /** - * Responds to changes to the size and position of the contents - * of this control. - */ - virtual void SizeChanged(); - - /** - * Drawing (override this to draw) - */ - virtual void Draw( const TRect& aRect ) const; - -private: - /* - * LoadPluginL() - */ - void LoadPluginL( MScreensaverPluginHost* aPluginHost ); - - /* - * Get the poiter of the plugin - */ - void LoadPluginModuleL(); - - /* - * Delete the plugin - */ - void DeletePlugin(); - - /** - * Starts the plugin refresh timer - */ - void StartPluginRefreshTimer(); - - /** - * Starts the plugin time out timer - */ - void StartPluginTimeoutTimer( TInt aSecs ); - - - /** - * Callback fuction. Called when the Plugin tiemr time out - */ - static TInt HandlePluginTimeoutTimerExpiry( TAny* aPtr ); - - -private://data - /** - * Plugin interface. - */ - MScreensaverPlugin* iPlugin; - - /** - * The plugin refresh timer - */ - CPeriodic* iPluginRefreshTimer; - - /** - * The plugin timeout timer - */ - CPeriodic* iPluginTimeoutTimer; - - - /** - * The plugin flag - */ - mutable TBitFlagsT iPluginFlag; - - /** - * The refresh rate of plugin - */ - TInt iPluginRefreshRate; - }; -#endif // C_SCREENSAVERCTRLPLUGIN_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverengine.h --- a/inc/screensaverengine.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,304 +0,0 @@ -/* -* Copyright (c) 2003 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: Screensaver engine class definition. -* -*/ - - - -#ifndef C_SCREENSAVERENGINE_H -#define C_SCREENSAVERENGINE_H - -#include -#include - -#include "screensaverindicator.h" -#include "screensaverindicatorarray.h" -#include "screensaverplugin.h" - -//delay before wserv timer is turned off -#define KWSERVHEARTBEATTIMEOUT 15 - -// FORWARD DECLARATIONS -class CUserActivityManager; -class CScreensaverSharedDataI; -class CScreensaverSharedDataMonitor; -class CScreensaverAppUi; -class CScreensaverView; -class CPowerSaveDisplayMode; - -/** -* CScreensaverModel -*/ -class CScreensaverEngine : public CBase - { -public: - - /** - * Two-phased constructor - * - * @param aAppUi the AppUi of the application - */ - static CScreensaverEngine* NewL(); - - /** - * Destructor - */ - ~CScreensaverEngine(); - - /** - * Return the pointer to the CScreensaverSharedDataI - * - * @return CScreensaverSharedDataI* - */ - CScreensaverSharedDataI* SharedDataInterface() const; - - /** - * Reset the time during which the user did not do anything - */ - void ResetInactivityTimeout(); - - /** - * Returns if the screensaver is on or not - */ - TBool ScreenSaverIsOn() const; - - /** - * Returns if the screensaver is previewing or not - */ - TBool ScreenSaverIsPreviewing() const; - - /** - * Starts screensaver - */ - void StartScreenSaver(); - - /** - * Stops the screensaver - */ - void StopScreenSaver(); - - /** - * Starts the preview model - */ - void StartPreviewModeL(); - - /* - * Display the Object(); - */ - void DisplayObject(); - - /** - * Start the suspend timer - */ - void StartSuspendTimer( TInt aSec ); - - /** - * Returns the indicator array - */ - CScreensaverIndicatorArray& IndicatorArray() const; - - /** - * Returns the color model - */ - const TScreensaverColorModel& GetColorModel( ) const; - - /** - * Adds the partial model - * - * @param aBpp the bits per pixels of the partial model - * @param aType the type of the partial type - */ - void AddPartialModeLevel( TInt aBpp, TScreensaverPartialModeType aType ); - - /** - * Updates the indicator attributes. - */ - void UpdateIndicatorAttributes( ); - -private: - - /** - * C++ default constructor - * - * @param aAppUi the AppUi of the application - */ - CScreensaverEngine(); - -private: - - /** - * Two-phased constructor - */ - void ConstructL(); - - /** - * Constructs the shared data member - */ - void EnableSharedDataAndMonitorL(); - - /** - * Destruct the shared data member - */ - void DisableSharedDataAndMonitor(); - - /** - * Starts to monitor the user activity - */ - void StartActivityMonitoringL(); - - /** - * Stops monitoring the user activity - */ - void StopActivityMonitoring( CUserActivityManager*& aActivityManager ); - - /** - * Gets the color model from the resource - */ - void SetupColorModelL(); - - /** - * Start the preview timer - */ - void StartPreviewTimer(); - - /** - * Kill the timer - * - * @param aTimer the timer you want stop - */ - void KillTimer( CPeriodic*& aTimer ); - - - /** - * Callback fuction. Called when the preivew tiemr time out - */ - static TInt HandlePreviewTimerExpiry( TAny* aPtr ); - - /** - * Called when the time that the user did activity is out. - */ - static TInt HandleActiveEventL(TAny* aPtr); - - /** - * Called when the time that the user did no activity is out. - */ - static TInt HandleInactiveEventL(TAny* aPtr); - - /** - * Called when the time that the user did activity is out. - */ - static TInt HandleActiveEventShortL(TAny* aPtr); - - /** - * Called when the time that the user did no activity is out. - */ - static TInt HandleInactiveEventShortL(TAny* aPtr); - - /** - * Callback fuction. Called when the suspension tiemr time out - */ - static TInt HandleSuspendTimerExpiry( TAny* aPtr ); - - - /** - * Returns the CScreensaverView - */ - CScreensaverView* View() const; - - /** - * Returns the timeout. - */ - TInt Timeout(); - - /** - * Returns the display flag. - */ - TInt DisplayFlag(); - - -private: - - /** - * The flag if append alert type indicator - */ - TBool iShowExtendedProfileInd; - - /** - * The flag if the screensaver is on or not - */ - TBool iScreenSaverIsOn; - - /** - * The flag if the screensaver is previewing or not - */ - TBool iScreenSaverIsPreviewing; - - /** - * The trigger for screensaver activation - */ - CUserActivityManager* iActivityManagerScreensaver; - - - /** - * The pointer to CScreensaverSharedDataI - * - * Owned - */ - CScreensaverSharedDataI* iSharedDataI; - - /* - * The pointer to the CScreensaverSharedDataMonitor - */ - CScreensaverSharedDataMonitor* iSharedDataMonitor; - - /** - * The pointer to the indicator array - * - * Owned - */ - CScreensaverIndicatorArray* iIndicatorArray; - - /** - * The trigger for screensaver activation, short timeout - */ - CUserActivityManager* iActivityManagerScreensaverShort; - - /** - * moved from view class - */ - TScreensaverColorModel iColorModel; - - - /** - * The preview timer - */ - CPeriodic* iPreviewTimer; - - /** - * The suspend timer - */ - CPeriodic* iSuspendTimer; - - /** - * used to intercept and capture application key event. - */ - RAknUiServer iAknUiServer; - }; - - - -#endif // C_SCREENSAVERENGINE_H - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverindicator.h --- a/inc/screensaverindicator.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,270 +0,0 @@ -/* -* Copyright (c) 2003 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: Definitions for screensaver indicator array. -* -*/ - - - -#ifndef C_SCREENSAVERINDICATOR_H -#define C_SCREENSAVERINDICATOR_H - -//#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "screensaver.hrh" - - -/* -* Base class for all indicators. -*/ -class CScreensaverIndicator : public CBase - { -public: - - /** - * Destructor - */ - virtual ~CScreensaverIndicator(); - - /** - * Draw the indicator. it should be implemented by the derived class - */ - virtual void Draw(CWindowGc& aGc) const = 0; - - /** - * two-phased constructor - * - * @param aReader the resource read of the STRUCT - * SCREENSAVER_PARAMETERS_ARRAY defined by ourself - * STRUCT SCREENSAVER_PARAMETERS_ARRAY - * { - * WORD KIndicatorMargin; - * WORD KIndicatorGap; - * WORD KIndicatorTopMargin; - * WORD KIndicatorTextLevel; - * LONG KBackGroundColor; - * WORD KHeight; - * } - * @param aBgColor the background color of display screen - * @param aTextColor the text color - */ - virtual void ConstructL(TResourceReader &aReader, TUint32 aBgColor, TUint aTextColor); - - /** - * Set the parameters of drawing - * - * @param aCorner the position of the lefttop of the indicator - * @param aParentRect - */ - virtual void SetupDrawingParameters(const TPoint& aCorner, const TRect& aParentRect) = 0; - - /** - * Check if indicator is visible or not - * - * @return TBool - */ - virtual TBool CheckVisibilityConditions() const = 0; - - /** - * Get the payload through the property - * - * @param aPayload the reference to the payload - */ - virtual void Payload(TIndicatorPayload& aPayload) const = 0; - - /** - * Set the property through the payload - * - * @param aPayload - */ - virtual void SetPayload(const TIndicatorPayload& aPayload) = 0; - - /** - * Set the Id by the parameter - * - * @param aId the Id value - */ - void SetId(TScreensaverIndicatorId aId); - - /** - * Check if visible or not - * - * @return TBool if visible return ETrue, or EFalse. - */ - virtual TBool Visible() const; - - /** - * Set the visibility - * - * @param aValue - */ - void SetVisibility(TBool aValue); - - /** - * Returns the indicator width - * - * @return TInt - */ - TInt Width() const; - - /** - * Returns the indicator Id - * - * @return TScreensaverIndicatorId - */ - TScreensaverIndicatorId Id() const; - - /** - * Returns the indicator alighment - * enum TScreensaverAlignment - * { - * ESsAlignLeft, - * ESsAlignRight - * }; - * - * @return TScreensaverAlignment - */ - TScreensaverAlignment Alignment() const; - - /** - * Returns the indicator DrawType, DrawType defined as below - * enum TScreensaverDrawType - * { - * ESsDrawTypeNotDrawn, - * ESsDrawTypeSecondary, - * ESsDrawTypePrimary - * }; - * - * @return TScreensaverDrawType - */ - TScreensaverDrawType DrawType() const; - - /** - * Makes a skin item ID from skinned bitmap id - * - * @param aSkinBmpId - * - * @return TAknsItemID - */ - TAknsItemID MakeSkinItemId(TInt aSkinBmpId); - - /** - * Sets the indicator type - * enum TScreensaverIndicatorType - * { - * ESsNumericIndicator, - * ESsIconIndicator, - * ESsTextIndicator, - * ESsNumberAndIconIndicator - * }; - * - * @param aType the type you want to set - */ - void SetType(TScreensaverIndicatorType aType); - - /** - * Returns the type of indicator - * - * @return TScreensaverIndicatorType - */ - TScreensaverIndicatorType Type(); - - /** - * Depending on indicator type these may or may not be implemented - * in derived classes. Replaces setupdrawingparameters. - * Used for new layout * - */ - virtual void SetIconLayout(TAknLayoutRect&, TInt); - virtual void SetTextLayout(TAknLayoutText&, TInt); - - /** - * Get the desired width of the indicator (where it fits completely) - */ - virtual TInt PreferredWidth(); - - /** - * Get the minimum width of the indicator - * (absolute minimum space it can be drawn in) - */ - virtual TInt MinimumWidth(); - - /** - * Set the width allowed for the indicator. This has effect only on - * indicators that have text, which may then be truncated. Bitmap - * widths are not adjusted - */ - virtual void SetWidth(TInt); - - /** - * Set X-position of indicator - */ - virtual void SetXPos(TInt); - -protected: - - /** - * The indicator Id - */ - TScreensaverIndicatorId iId; - - /** - * The topleft position of indicator - */ - TPoint iTopLeft; - - /** - * The flag indicates the indicator is visible or not - */ - TBool iVisible; - - /** - * The area of indicator - */ - TRect iRect; - - /** - * The indicator draw type - */ - TScreensaverDrawType iDrawType; - - /** - * The indicator alignment - */ - TScreensaverAlignment iAlignment; - - /** - * The indicator type. - */ - TScreensaverIndicatorType iType; - - /** - * Colors to be used to draw indicators - */ - TRgb iBgColor; - TRgb iTextColor; - - }; - - -#endif // C_SCREENSAVERINDICATOR_H - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverindicatorarray.h --- a/inc/screensaverindicatorarray.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,245 +0,0 @@ -/* -* Copyright (c) 2003 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: CScreensaverIndicatorArray declaration. -* -*/ - - - -#ifndef C_SCREENSAVERINDICATORARRAY_H -#define C_SCREENSAVERINDICATORARRAY_H - -#include "screensaverindicator.h" - -/* -* Indicator array class. -*/ -class CScreensaverIndicatorArray : public CBase - { - public: - - /** - * Two-phased constructor - * - * @param aOldLayout if construct the old layout or the new layout - * @param aColorInversionUsed if use the inverted color or the - * normal color - */ - static CScreensaverIndicatorArray* NewL( TBool aColorInversionUsed ); - - /** - * Destructor - */ - ~CScreensaverIndicatorArray(); - - /** - * Two-phased constructor - */ - void ConstructL( TBool aColorInversionUsed); - - /** - * Creates indicator of given type and pushes it to - * cleanup stack. - * - * @param aId Indicator to be created. - */ - CScreensaverIndicator *NewIndicatorLC(TScreensaverIndicatorType aType); - - /** - * Draws indicator array to given graphics context. Setup function - * must be called before calling Draw function. - * - * @param aGc Graphics context for drawing indicator array. - */ - void Draw(CWindowGc& aGc) const; - - /** - * Sets up indicator array for drawing. Sets positions for - * indicators. - */ - void Setup(TAknLayoutRect& aLayoutRect, TAknLayoutText& aLayoutText, - TAknLayoutRect& aLayoutInds); - - /* - * Set the attributes of the indicator - */ - void SetIndicatorsAttribute( - TInt& Ind, - TAknLayoutText& aLayoutText, - TAknLayoutRect& aLayoutInds, - TInt& aCurrentX ); - - /** - * Checks if there is dependency flag set for given indicator. - * - * @param - * @return ETrue if there is dependency conflict. - * EFalse if not. - */ - TBool CheckDependencyConflict(TScreensaverIndicatorId aId) const; - - /* - * Sets dependency flag to given indicator to given value. - * If dependency flag is set then the indicator is not drawn - * even when it would be otherwise visible. - */ - void SetDependencyStatus(TScreensaverIndicatorId aId, TBool aValue); - - /** - * Queries payload for given indicator. - * - * @param aId ID of the indicator - * @param aPayload Indicator payload to receive the information - * @return KErrNone if payload was set successfully. - */ - TInt GetIndicatorPayload( - TScreensaverIndicatorId aId, - TIndicatorPayload& aPayload) const; - - /** - * Sets payload for given indicator. - * NOTE that icon and displayed indication cannot be set - * - * @param aType - * @param aPayload - * @return KErrNone if payload was set successfully. - */ - TInt SetIndicatorPayload( - TScreensaverIndicatorId aId, - const TIndicatorPayload& aPayload); - - /** - * Returns value indicating which drawing mode screensaver should select - * based on indicator payloads and dependecies. This function aswers to question - * "What drawing mode should screensaver select if indicator payloads and - * dependencies were the only determining factor?". This doesn't mean - * that screensaver will be necessarily drawn in that mode if there is - * plugin module present or something happens while setting up indicator array - * for drawing. Screensaver needs this information when it prepares itself for - * drawing. - */ - TScreensaverDrawType PreferredDrawingMode() const; - - /** - * Returns value indicating which drawing mode screensaver should select. - * This function is basically same as 'PreferredDrawingMode', but it - * returns the final state of indicator array after it has been - * set up (which may be different from PreferredDrawingMode). - * Screensaver queries this information just before it draws the screen. - */ - TScreensaverDrawType ActualDrawingMode() const; - - /** - * Returns the height of indicator. - */ - TInt Height() const; - - /** - * To set visibility value for indicators - */ - void SetVisibilityForIndicators(); - -private: - - /** - * C++ default constructor - */ - CScreensaverIndicatorArray(); - - /** - * Construct the Indicator from the resource file - */ - void ConstructFromResourceL(); - - /* - * Constuct the screensaver param from the resource - */ - void ConstructParamFromResourceL(); - - /* - * Construct indicator array from resource - */ - void ConstructIndArrayL(); - - /* - * Construct the indicators from resource - */ - void ConstructIndicatorsL( TInt aResourceId ); - - /** - * Returns the dependency record by the index - */ - TBool Dependency(TInt aIndex) const; - -private: - - /** - * The count of the indicator - */ - TInt iCount; - - /** - * How many pixels between indicators. - */ - TInt iGap; - - /** - * Minimum indicator distance to left and right border. - */ - TInt iMargin; - - /** - * Distance from top border of indicator bar to top border of - * indicator icon. - */ - TInt iTopMargin; - - /** - * The level of the text - */ - TInt iTextLevel; - - /** - * The area of the indicator - */ - TRect iRect; - - /** - * The height of the indicator bar - */ - TInt iHeight; - - /** - * The array of indicators - */ - CArrayPtrFlat* iIndicators; - - /** - * The array of dependency record - */ - CArrayFixFlat* iDependencyRecord; - - /** - * The flag decised if use the old layout or not. - */ - TBool iOldLayout; - - /** - * Colors to be used for indicator layout - */ - TUint32 iBgColor; - TUint32 iTextColor; -}; - -#endif // C_SCREENSAVERINDICATORARRAY_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverindicatoricon.h --- a/inc/screensaverindicatoricon.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* -* Copyright (c) 2003 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: CScreensaverIndicatorIcon declaration. -* -*/ - - - -#ifndef C_SCREENSAVERINDICATORICON_H -#define C_SCREENSAVERINDICATORICON_H - -#include "screensaverindicator.h" - -/** -* Simple icon indicator. Displays icon, but no other information. -*/ -class CScreensaverIndicatorIcon : public CScreensaverIndicator - { -public: - - /** - * Destructor - */ - ~CScreensaverIndicatorIcon(); - - /** - * Draw the indicator. it should be implemented by the derived class - */ - virtual void Draw(CWindowGc& aGc) const; - - /** - * two-phased constructor - * - * @param aReader the resource read of the STRUCT - * SCREENSAVER_PARAMETERS_ARRAY defined by ourself - * @param aBgColor the background color of display screen - * @param aTextColor the text color - */ - virtual void ConstructL(TResourceReader &aReader, TUint32 aBgColor, TUint aTextColor); - - /** - * Set the parameters of drawing - * - * @param aCorner the position of the lefttop of the indicator - * @param aParentRect - */ - virtual void SetupDrawingParameters(const TPoint &aCorner, const TRect& aParentRect); - - /** - * Check if indicator is visible or not - * - * @return TBool - */ - virtual TBool CheckVisibilityConditions() const; - - /** - * Get the payload through the property - * - * @param aPayload the reference to the payload - */ - virtual void Payload(TIndicatorPayload& aPayload) const; - - /** - * Set the property through the payload - * - * @param aPayload - */ - virtual void SetPayload(const TIndicatorPayload& aPayload); - - /** - * Sets icon position and size - */ - virtual void SetIconLayout(TAknLayoutRect& aLayout, TInt aX = -1); - -private: - - /** - * The icon will be displayer - * - * Owned - */ - CGulIcon* iIcon; - }; - -#endif // C_SCREENSAVERINDICATORICON_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverindicatornumberandicon.h --- a/inc/screensaverindicatornumberandicon.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/* -* Copyright (c) 2003 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: CScreensaverIndicatorNumberAndIcon declaration. -* -*/ - - - -#ifndef C_SCREENSAVERINDICATORNUMBERANDICON_H -#define C_SCREENSAVERINDICATORNUMBERANDICON_H - -#include "screensaverindicator.h" - -class CScreensaverIndicatorNumberAndIcon : public CScreensaverIndicator - { -public: - ~CScreensaverIndicatorNumberAndIcon(); - - /** - * Draw the indicator. it should be implemented by the derived class - */ - virtual void Draw( CWindowGc& aGc ) const; - - /** - * two-phased constructor - * - * @param aReader the resource read of the STRUCT - * SCREENSAVER_PARAMETERS_ARRAY defined by ourself - * @param aBgColor the background color of display screen - * @param aTextColor the text color - */ - virtual void ConstructL( TResourceReader &aReader, TUint32 aBgColor, TUint aTextColor ); - - /** - * Set the parameters of drawing - * - * @param aCorner the position of the lefttop of the indicator - * @param aParentRect - */ - virtual void SetupDrawingParameters( const TPoint& aCorner, const TRect& aParentRect ); - - /** - * Check if indicator is visible or not - * - * @return TBool - */ - virtual TBool CheckVisibilityConditions() const; - - /** - * Get the payload through the property - * - * @param aPayload the reference to the payload - */ - virtual void Payload( TIndicatorPayload& aPayload ) const; - - /** - * Set the property through the payload - * - * @param aPayload - */ - virtual void SetPayload( const TIndicatorPayload& aPayload ); - - /** - * Sets icon position and size - */ - virtual void SetIconLayout( TAknLayoutRect& aLayout, TInt aX = -1 ); - - /** - * Sets text position and font - */ - virtual void SetTextLayout( TAknLayoutText& aLayout, TInt aX = -1 ); - - /** - * Width function overrides - */ - virtual TInt PreferredWidth(); - - /** - * Returns the icon width - */ - virtual TInt MinimumWidth(); - - /** - * virtual void SetWidth(TInt aWidth); - */ - virtual void SetXPos( TInt aX ); - - /** - * Initialize layout of graphics; - */ - virtual void InitializeLayout(); - - /** - * Initialize icon; - */ - virtual void InitializeIconL( TResourceReader &aReader ); - - /** - * draw icon; - */ - virtual void DrawIcon( CWindowGc& aGc ) const; - -private: - - /** - * The icon will be displayer - * - * Owned - */ - CGulIcon* iIcon; - - /** - * - */ - TInt iValue; - - /** - * The font of the text - * Not owned. - */ - const CFont *iFont; - - /** - * The icon alignment - */ - TScreensaverAlignment iIconAlign; - - /** - * Text position for legacy layout - */ - TPoint iTextPos; - - /** - * Rect inside which text is drawn - */ - TRect iTextRect; - - /** - * Text baseline offset from text rect top - */ - TInt iTextOffset; -}; - -#endif // C_SCREENSAVERINDICATORNUMBERANDICON_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverindicatortext.h --- a/inc/screensaverindicatortext.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -/* -* Copyright (c) 2003 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: CScreensaverIndicatorText declaration. -* -*/ - - - -#ifndef C_SCREENSAVERINDICATORTEXT_H -#define C_SCREENSAVERINDICATORTEXT_H - -#include "screensaverindicator.h" - -class CScreensaverIndicatorText : public CScreensaverIndicator - { -public: - - /** - * Draw the indicator. it should be implemented by the derived class - */ - virtual void Draw( CWindowGc& aGc ) const; - - /** - * two-phased constructor - * - * @param aReader the resource read of the STRUCT - * SCREENSAVER_PARAMETERS_ARRAY defined by ourself - * @param aBgColor the background color of display screen - * @param aTextColor the text color - */ - virtual void ConstructL( TResourceReader &aReader, TUint32 aBgColor, TUint aTextColor ); - - /** - * Set the parameters of drawing - * - * @param aCorner the position of the lefttop of the indicator - * @param aParentRect - */ - virtual void SetupDrawingParameters( const TPoint& aCorner, const TRect& aParentRect ); - - /** - * Check if indicator is visible or not - * - * @return TBool - */ - virtual TBool CheckVisibilityConditions() const; - - /** - * Get the payload through the property - * - * @param aPayload the reference to the payload - */ - virtual void Payload( TIndicatorPayload& aPayload ) const; - - /** - * Set the property through the payload - * - * @param aPayload - */ - virtual void SetPayload( const TIndicatorPayload& aPayload ); - - /** - * Sets text position and font - */ - virtual void SetTextLayout( TAknLayoutText& aLayout, TInt aX = -1 ); - - /** - * Returns the width where whole text fits - */ - virtual TInt PreferredWidth(); - - /** - * Set available width - */ - virtual void SetWidth( TInt aWidth ); - - /** - * Set x-position of indicator - */ - virtual void SetXPos( TInt aX ); - -private: - - /** - * The text should be displayed - */ - TBuf16 iText; - - /** - * The font of the text - * Not owned. - */ - const CFont *iFont; - - /** - * Rect inside which text is drawn - */ - TRect iTextRect; - - /** - * Text baseline offset from text rect top - */ - TInt iTextOffset; - }; - -#endif // C_SCREENSAVERINDICATORTEXT_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverrepositorywatcher.h --- a/inc/screensaverrepositorywatcher.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2003 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: CScreensaverRepositoryWatcher declaration. -* -*/ - - - -#ifndef C_SCREENSAVERREPOSITORYWATCHER_H -#define C_SCREENSAVERREPOSITORYWATCHER_H - -// INCLUDES -#include - -// CLASS DECLARATION -class CRepository; -/** -* The class used to monitor the change of register value -*/ -class CScreensaverRepositoryWatcher : public CBase, - public MCenRepNotifyHandlerCallback - { -public: - - /** - * Two-phased constructor - */ - static CScreensaverRepositoryWatcher* NewL(const TUid aUid, - const TUint32 aKey, CCenRepNotifyHandler::TCenRepKeyType aKeyType, - TCallBack aCallBack, CRepository* aRepository); - - /** - * Two-phased constructor - */ - static CScreensaverRepositoryWatcher* NewL(const TUid aUid, - TCallBack aCallBack, CRepository* aRepository); - - /** - * Destructor - */ - ~CScreensaverRepositoryWatcher(); - - /** - * Returns the changed key - */ - TUint32 ChangedKey(); - -public: - // from MCenRepNotifyHandlerCallback - void HandleNotifyInt(TUint32 aKey, TInt aNewValue); - void HandleNotifyString(TUint32 aKey, const TDesC16& aNewValue); - void HandleNotifyGeneric(TUint32 aKey); - void HandleNotifyError(TUint32 aKey, TInt aError, - CCenRepNotifyHandler* aHandler); - -private: - - /** - * C++ default constructor - */ - CScreensaverRepositoryWatcher(const TUid aUid, const TUint32 aKey, - TCallBack aCallBack, CRepository* aRepository); - - /** - * Two-phased constructor - */ - void ConstructL(CCenRepNotifyHandler::TCenRepKeyType aKeyType); - - /** - * Two-phased constructor - */ - void ConstructL(); - -private: - TUid iUid; - TUint32 iKey; - TUint32 iChangedKey; - TCallBack iCallBack; - CRepository* iRepository; - CCenRepNotifyHandler* iNotifyHandler; - - }; - -#endif // C_SCREENSAVERREPOSITORYWATCHER_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensavershareddatai.h --- a/inc/screensavershareddatai.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,381 +0,0 @@ -/* -* Copyright (c) 2005 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: Defines screensaver shared data connections. -* -*/ - - - -#ifndef _SCREENSAVERSHAREDDATAI_H__ -#define _SCREENSAVERSHAREDDATAI_H__ - -#include // for MMsvSessionObserver -#include - -#include "screensaverplugin.h" -#include "ScreensaverUtils.h" -#include "ScreensaverInternalPSKeys.h" -#include "ScreensaverInternalCRKeys.h" -#include "screensaverengine.h" - -// CLASS DECLARATION -class CRepository; -class CScreensaverRepositoryWatcher; -class CSubscriber; -class MProfile; -class MProfileEngine; - -class CScreensaverSharedDataI : public CBase, public MMsvEntryObserver, - public MMsvSessionObserver - { -public: - /** - * Two-phased constructor - */ - static CScreensaverSharedDataI* NewL(); - - /** - * Destructor - */ - ~CScreensaverSharedDataI(); - -public: - /** - * Get the screensaver object type - */ - TDisplayObjectType DisplayObjectType() const; - - /* - * Change the display object type of screensaver - */ - void SetDisplayObjectType( const TDisplayObjectType aType ); - - /** - * Gets the display text - */ - void GetDisplayObjectText( TDes& aDes ) const; - - /* - * Get the plug-in name - */ - void GetPluginName( TFileName& aFileName ) const; - - /* - * Get the flag if uses the inversive color - */ - TBool IsInvertedColors() const; - - /** - * Gets the timeout - */ - TInt ScreensaverTimeout() const; - - /* - * Is the New Contact Note is actived or not - */ - TBool IsNCNActive() const; - - /* - * Get the count of the missed calls - */ - TInt NewMissedCalls() const; - - /** - * Request screen lights to be turned on or off - * - * @param sSecs - lights on for aSecs seconds, 0 = off, max 30. - */ - void SetSSForcedLightsOn( const TInt aSecs ); - - /** - * Publish Screensaver on/off status - * - * @param aOn ETrue - saver on, EFalse - off - */ - void SetScreensaverStatus(const TBool aOn = ETrue); - - /** - * Publish "Screensaver started from Idle" status - */ - void SetSSStartedFromIdleStatus(); - - /* - * Get the flag that if the screensaver is allowed or not - */ - TInt IsScreenSaverAllowed() const; - - /* - * Get the Preview mode of screensaver - */ - TInt ScreensaverPreviewMode() const; - - /* - * Set the preview mode - */ - void SetScreensaverPreviewMode( const TInt aMode ); - - /** - * Get preview state - */ - TScreenSaverPreviewState ScreensaverPreviewState() const; - - /** - * Report preview state - */ - void SetScreensaverPreviewState( const TScreenSaverPreviewState aState ); - - /* - * Get keyguard status - * - * @return ETrue key guard is active. - * EFalse key guard is inactive. - */ - TBool IsKeyguardOn() const; - - /** - * Query power save mode usage - * - * @return ETrue, if power save mode should be used - */ - TBool IsUsePowerSaveMode() const; - - /** - * Query system startup completion status - * - * @return ETrue, if system startup is complete - */ - TBool IsSystemStartupComplete(); - - /** - * Gets the default screensaver type - */ - TDisplayObjectType DefaultScreensaverType() const; - - /** - * Returns number of unread messages in inbox. - * - * @return Number of unread messages in inbox. - */ - TInt UnreadMessagesNumber(); - - /** - * Return the name of currently selected profile - * - * @return Profile name descriptor. - */ - const TDesC& ProfileName(); - - /** - * Query active profile. - * - * @return Id of active profile, or system error code. - */ - TInt ActiveProfile(); - - /** - * Query new email status - * - * @return ETrue if there is new email - */ - TBool IsHaveNewEmail() const; - - /** - * Query new voice mail status - * - * @return ETrue, if there is new voice mail - */ - TBool IsHaveNewVoicemail() const; - - /** - * Query new instant message status - * - * @return ETrue, if there are instant messages pending - */ - TBool IsHaveNewInstantMessages() const; - - /** - * Query silent mode status - * - * @return ETrue, if silent mode is on - */ - TBool IsSilentMode(); - - /** - * Query vibra mode status - * - * @return ETrue, if vibra mode is on - */ - TBool IsVibraMode(); - -public: - /** - * From MMsvSessionObserver. Not used. - */ - void HandleSessionEventL(TMsvSessionEvent /*aEvent*/, TAny* /*aArg1*/, - TAny* /*aArg2*/, TAny* /*aArg3*/); - - /** - * From MMsvEntryObserver. Callback function. Handles global In-box events. - * @param aEvent An entry event. - */ - void HandleEntryEventL(TMsvEntryEvent aEvent, TAny* aArg1, TAny* aArg2, - TAny* aArg3); - - /* - * Returns the pointer of the screensaver repository - */ - CRepository* ScreensaverRepository() const; - -private: - - /** - * C++ default constructor - */ - CScreensaverSharedDataI(); - - /** - * Two-phased constructor - */ - void ConstructL(); - - /** - * Connect to the screensaver central repository - */ - void ConnectToSSCRL(); - - /** - * Connect to the Psln Setting central repository - */ - void ConnectToPslnSettingCRL(); - void ConnectToCommonTsyCRL(); - void ConnectToInboxL(); - - /** - * Connects to Profile engine. Returns ETrue if successfully connected - * iProfileEngine will then point to a valid MProfileEngine - */ - TBool ConnectToProfileEngine(); - - /** - * Connects to active profile. Returns ETrue if successfully connected - * iActiveProfile will then point to a valid MProfile - */ - TBool ConnectToActiveProfile(); - - /* - * Define the screensaver properties - */ - void DefineScreensaverProperties( TUint32 aKey, const TSecurityPolicy& aWritePolicy ); - -private: - // Shared data key state handlers. - - /** - * Callback fuction. Called when the timeout changed - */ - static TInt HandleTimeoutChanged(TAny* aPtr); - - /** - * Resets the inactivity timeout - */ - void ResetInactivityTimeout(); - - /** - * Callback fuction. Called when the display object changed - */ - static TInt HandleDisplayObjChanged(TAny* aPtr); - - /* - * Get the default type - */ - void GetDefaultType(); - - /* - * Get the default type string from the CR - */ - TInt GetDefaultTypeString( TDes& DefaultScreenSaver ); - - /* - * Get the count of the voice mail - */ - TInt VoiceMailCount( const TUint32 aKey ) const; - - /** - * Invalidate cached active profile - */ - void InvalidateActiveProfile(); - - /** - * Returns the AppUi - */ - CScreensaverAppUi *AppUi() const; - -private: - - /* - * The type of the display object - */ - TDisplayObjectType iDefaultType; - /** - * not owned! - */ - CScreensaverAppUi* iAppUi; - - /** - * Screensaver specific values. - */ - CRepository* iScreensaverRepository; - CScreensaverRepositoryWatcher* iScreensaverRepositoryWatcher; - - /** - * General Settings. - */ - CRepository* iSettingsRepository; - CScreensaverRepositoryWatcher* iSettingsRepositoryWatcher; - - /** - * Common tsy repository (voice message waiting) - */ - CRepository* iCTsyRepository; - - - /** - * Access to the profile engine - */ - MProfileEngine* iProfileEngine; - - /** - * Need to store also the profile, so that it's name - * can be used at any time - */ - MProfile* iActiveProfile; - - /** - * The Msv session pointer. - */ - CMsvSession* iMsvSession; - - /** - * In-box folder entry. Note that the entry is not owned by this class. - */ - CMsvEntry* iInboxFolder; - - /** - * System startup completion flag - */ - TBool iStartupComplete; - }; - -#endif // C_SCREENSAVERSHAREDDATAI_H -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa inc/screensavershareddatamonitor.h --- a/inc/screensavershareddatamonitor.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/* -* Copyright (c) 2003 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: Defination for screensaver shared data monitoring. -* -*/ - - - -#ifndef C_SCREENSAVERSHAREDDATAMONITOR_H -#define C_SCREENSAVERSHAREDDATAMONITOR_H - -// INCLUDES -#include - -// CLASS DECLARATION -class CScreensaverSharedDataI; -class CScreensaverRepositoryWatcher; -class CScreensaverEngine; -class CScreensaverView; -class CSubscriber; - - -/** - * Cscreensavershareddatamonitor - * - */ -class CScreensaverSharedDataMonitor : public CBase - { -public: - // Constructors and destructor - - /** - * Destructor. - */ - ~CScreensaverSharedDataMonitor( ); - - /** - * Two-phased constructor. - */ - static CScreensaverSharedDataMonitor* NewL( CScreensaverSharedDataI* aData ); - -private: - - /** - * Constructor for performing 1st stage construction - */ - CScreensaverSharedDataMonitor( CScreensaverSharedDataI* aData ); - - /** - * EPOC default constructor for performing 2nd stage construction - */ - void ConstructL(); - - /* - * Returns the pointer of screensaver appui - */ - CScreensaverView* View(); - - /* - * Returns the refrence of model instance - */ - CScreensaverEngine& Model(); - - /** - * detele CSubscriber - */ - void DeleteSubscriber( CSubscriber*& aSubscriber ); - -private: - - /** - * Callback fuction. Called when the preview mode changed - */ - static TInt HandlePreviewModeChanged(TAny* aPtr); - - /** - * Callback fuction. Called when the MMC state changed - */ - static TInt HandleMMCStateChanged(TAny* aPtr); - - /** - * Callback fuction. Called when the USB state changed - */ - static TInt HandleUSBStateChanged(TAny* aPtr); - - /** - * Callback fuction. Called when the Keyguard state changed - */ - static TInt HandleKeyguardStateChanged(TAny* aPtr); - - /** - * Callback fuction. Called when the Call state changed - */ - static TInt HandleCallStateChanged(TAny* aPtr); - - /** - * Callback fuction. Called when the ShuttingDown state changed - */ - static TInt HandleShuttingDownStateChanged(TAny* aPtr); - -private: - - /* - * The data of model class, Not own - */ - CScreensaverSharedDataI* iData; - - /* - * The Preview mode property and its monitor - */ - RProperty iPreviewModeProperty; - CSubscriber* iPreviewModeSubscriber; - - /* - * The MMC property and its monitor - */ - RProperty iMMCWatchProperty; - CSubscriber* iMMCWatchSubscriber; - - /* - * The USB property and its monitor - */ - RProperty iUSBWatchProperty; - CSubscriber* iUSBWatchSubscriber; - - /* - * The KeyGuard state property and its watcher - */ - RProperty iKeyguardStateProperty; - CSubscriber* iKeyguardStateSubscriber; - - /* - * The Call state property and its watcher - */ - RProperty iCallStateProperty; - CSubscriber* iCallStateSubscriber; - - /* - * The shutting down property and its watcher - */ - RProperty iShuttingDownProperty; - CSubscriber* iShuttingDownSubscriber; - - }; - -#endif // C_SCREENSAVERSHAREDDATAMONITOR_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaversubscriber.h --- a/inc/screensaversubscriber.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/* -* Copyright (c) 2003 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: Defines screensaver shared data Subscriber. -* -*/ - - - -#ifndef C_SCREENSAVERSUBSCRIBER_H -#define C_SCREENSAVERSUBSCRIBER_H - -#include -#include - -/** -* CSubscriber -*/ -class CSubscriber : public CActive - { -public: - CSubscriber(TCallBack aCallBack, RProperty& aProperty); - ~CSubscriber(); - -public: - // New functions - void SubscribeL(); - void StopSubscribe(); - -private: - // from CActive - void RunL(); - void DoCancel(); - -private: - TCallBack iCallBack; - RProperty& iProperty; - }; - -#endif // C_SCREENSAVERSUBSCRIBER_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverutility.h --- a/inc/screensaverutility.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -/* -* Copyright (c) 2009 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: Defines screensaver utility tools. -* -*/ - - - -#ifndef C_SCREENSAVERUTILITY_H -#define C_SCREENSAVERUTILITY_H - -// INCLUDES -#include - -// CLASS DECLARATION - -/** -* The uitility class of screensaver -*/ -class ScreensaverUtility - { -public: - - /** - * Panic - */ - static void Panic( TInt aPanic ); - - /** - * Flushes the draw buffer (before activating power save) - */ - static void FlushDrawBuffer(); - - /** - * Checks whether screen has been rotated - */ - static TBool ScreenRotated(); - - /** - * Query whether 12-hour clock is displayed - */ - static TBool Query12HourClock(); - - /** - * Brings the application to foreground - */ - static void BringToForeground(); - - /** - * Sends the application to background - */ - static void SendToBackground(); - - /** - * Drive info helpers - */ - static TBool IsDrivePresent(TInt aDrive); - - /** - * Loads the bitmap - */ - static CGulIcon* LoadBitmapL(); - - /** - * Stop the server heartbeat - */ - static void StopWServHeartBeat(); - }; - -#endif // C_SCREENSAVERUTILITY_H diff -r 058b1fc1663a -r 8a173132b0aa inc/screensaverview.h --- a/inc/screensaverview.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,161 +0,0 @@ -/* -* Copyright (c) 2009 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: Screensaver view class defination. -* -*/ - - - -#ifndef C_SCREENSAVERVIEW_H -#define C_SCREENSAVERVIEW_H - -#include -#include - -#include "screensaver.hrh" - -//CLASS DECLARATION -class CScreensaverBase; -class CScreensaverEngine; - -const TUid KUidScreensaverView ={ 1 }; -// -// class CScreensaverView -// an empty place holder for when we are in the background -class CScreensaverView : public CAknView - { -public: - - /** - * Two-phased constructor - */ - static CScreensaverView* NewL(); - - /** - * C++ default constructor - */ - CScreensaverView(); - - /** - * Destructor - */ - ~CScreensaverView(); - - /** - * Two-phased constructor - */ - void ConstructL(); - - /** - * Creates the display object by the parameter - * - * @param the object factory object, default type is EDisplayTime - */ - void CreateDisplayObjectL( TDisplayObjectType aType ); - - /** - * Resets the display object - */ - void SetDisplayObject( TDisplayObjectType aType ); - - /** - * Creates the preview display object - */ - void CreatePreviewDisplayObjectL(); - - -public://From CAknView - - /** - * Returns views id, intended for overriding by sub classes. - * @return id for this view. - */ - TUid Id() const; - - /** - * Handles a view activation and passes the message of type - * @c aCustomMessageId. This function is intended for overriding by - * sub classes. This function is called by @c AknViewActivatedL(). - * Views should not launch waiting or modal notes or dialogs in - * @c DoActivateL. - * @param aPrevViewId Specifies the view previously active. - * @param aCustomMessageId Specifies the message type. - * @param aCustomMessage The activation message. - */ - void DoActivateL( const TVwsViewId& aPrevViewId, TUid aCustomMessageId, - const TDesC8& aCustomMessage ); - - /** - * View deactivation function intended for overriding by sub classes. - * This function is called by @c AknViewDeactivated(). - */ - void DoDeactivate(); - - /** - * Shows the display object - */ - void ShowDisplayObject(); - - /** - * Hides the display object - */ - void HideDisplayObject(); - - /** - * Update indicator attributes and refresh display - */ - void UpdateAndRefresh(); - -private: - /** - * Returns the default type of screensaver - */ - TDisplayObjectType DefaultScreensaverType(); - - /** - * Returns the psln setting type of screensaver - */ - TDisplayObjectType PslnSettingScreensaverType(); - - /** - * Get the model of appui - */ - CScreensaverEngine& Model() const; - - /** - * Delete the display object - */ - void DestroyDisplayObject(); - -private: - /** - * The type of current control - */ - TDisplayObjectType iCurrentControlType; - - /** - * The display object of screensaver - * - * Owned - */ - CScreensaverBase* iControl; - - /** - * The plugin refresh rate - */ - TInt iPluginRefreshRate; - - }; - -#endif // C_SCREENSAVERVIEW_H diff -r 058b1fc1663a -r 8a173132b0aa layers.sysdef.xml --- a/layers.sysdef.xml Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ - - -]> - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa package_definition.xml --- a/package_definition.xml Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa rom/screensaver.iby --- a/rom/screensaver.iby Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* Copyright (c) 2002-2005 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: Screen saver application IBY -* -*/ - - - - - -#ifndef SCREENSAVER_IBY -#define SCREENSAVER_IBY - -// Application -S60_APP_EXE(screensaver) - -// Resources (not localised) -S60_APP_RESOURCE(screensaver) - -// Application information files -S60_APP_AIF_RSC(screensaver) - -// Backup registration -data=ZPRIVATE\100056CF\backup_registration.xml private\100056CF\backup_registration.xml - -#endif // SCREENSAVER_IBY diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/screensaveraiwplugin/group/bld.inf --- a/scrsaver/screensaveraiwplugin/group/bld.inf Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2006 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: Build information file for project screensaveraiwplugin -* -*/ - - - - - - -// ============================================================================ -// Platforms -// ============================================================================ -// -PRJ_PLATFORMS - -// ============================================================================ -// Exports -// ============================================================================ -// -PRJ_EXPORTS -../loc/screensaveraiwplugin.loc MW_LAYER_LOC_EXPORT_PATH(screensaveraiwplugin.loc) - -../rom/screensaveraiwplugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(screensaveraiwplugin.iby) -../rom/screensaveraiwpluginresources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(screensaveraiwpluginresources.iby) - - -// ============================================================================ -// MMP Files -// ============================================================================ -// -PRJ_MMPFILES - -#if defined(TOOLS) || defined(CWTOOLS) -#else -screensaveraiwplugin.mmp -#endif - -PRJ_TESTMMPFILES - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/screensaveraiwplugin/group/screensaveraiwplugin.mmp --- a/scrsaver/screensaveraiwplugin/group/screensaveraiwplugin.mmp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/* -* Copyright (c) 2006 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: Project definition file for project aknswallpaperplugin -* -*/ - - - - -#include -#include - -TARGET screensaveraiwplugin.dll -TARGETTYPE PLUGIN -UID 0x10009D8D 0x10282921 - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT - -SOURCEPATH ../src -SOURCE screensaveraiwplugin.cpp - -// Published to /resource -START RESOURCE screensaveraiwplugin.rss -HEADER -TARGET screensaveraiwplugin.rsc -TARGETPATH RESOURCE_FILES_DIR -LANGUAGE_IDS -END // RESOURCE - -// Published to /resource/plugins -START RESOURCE 10282921.rss -TARGET screensaveraiwplugin.rsc -END - -USERINCLUDE ../inc -USERINCLUDE ../../scrsaverplugins/ScreenSaverAnimPlugin/inc - -// This is a SYSTEMINCLUDE macro containing the middleware -// layer specific include directories -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE /epoc32/include/ecom - -LIBRARY euser.lib -LIBRARY servicehandler.lib -LIBRARY commonengine.lib // RConeResourceLoader -LIBRARY cone.lib // CCoeEnv -LIBRARY efsrv.lib // TParse -LIBRARY avkon.lib -LIBRARY aknskinsrv.lib // RAknsSrvSession -LIBRARY imageconversion.lib // CImageDecoder -LIBRARY CentralRepository.lib // CRepository diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/screensaveraiwplugin/inc/screensaveraiwplugin.h --- a/scrsaver/screensaveraiwplugin/inc/screensaveraiwplugin.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/* -* Copyright (c) 2005 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: Header file for class CScreenSaverAIWPlugin -* -*/ - - - - -#ifndef C_CSCREENSAVERAIWPLUGIN_H -#define C_CSCREENSAVERAIWPLUGIN_H - -#include -#include - -#define CSCREENSAVERAIWPLUGIN_TRACES - - -class CRepository; - -/** - * CScreenSaverAIWPlugin plugin implementation. - * - * This plugin implements an AIW provider for setting image files as slide set - * screen saver or setting a single animated image file as animated screen saver. - * - * - * @since S60 v3.2 - */ -class CScreenSaverAIWPlugin : public CAiwServiceIfMenu - { - public: - static CScreenSaverAIWPlugin* NewL(); - virtual ~CScreenSaverAIWPlugin(); - - private: - // from base class CAiwServiceIfMenu - - void InitialiseL( - MAiwNotifyCallback& aFrameworkCallback, - const RCriteriaArray& aInterest); - - void HandleServiceCmdL( - const TInt& aCmdId, - const CAiwGenericParamList& aInParamList, - CAiwGenericParamList& aOutParamList, - TUint aCmdOptions = 0, - const MAiwNotifyCallback* aCallback = NULL); - - void InitializeMenuPaneL( - CAiwMenuPane& aMenuPane, - TInt aIndex, - TInt aCascadeId, - const CAiwGenericParamList& aInParamList); - - void HandleMenuCmdL( - TInt aMenuCmdId, - const CAiwGenericParamList& aInParamList, - CAiwGenericParamList& aOutParamList, - TUint aCmdOptions = 0, - const MAiwNotifyCallback* aCallback = NULL); - - private: - CScreenSaverAIWPlugin(); - void ConstructL(); - - private: // New - - struct TImageFile - { - TPtrC iFileName; - TPtrC iMimeType; - }; - - void DisplayInfoNoteL(TInt aTextResourceId); - void ValidateParamListL(const CAiwGenericParamList& aParamList); - TBool AnyMimeTypeSupportedL(const CAiwGenericParamList& aParamList); - TBool IsMimeTypeSupportedL(const TDesC& aMimeTypeString); - TBool IsAnimatedMimeTypeL( const TDesC& aMimeTypeString, TBool& aUseImageDecoder ); - TPtrC GetAiwParamAsDescriptor(TInt& aIndex, - const CAiwGenericParamList& aParamList, - TGenericParamId aParamType); - void StoreImageListToFileL( const RArray& aSupportedImageFiles ); - void OpenImageFileL( RFile& aImageFile, const TInt aSlideSetType ); - TBool IsAnimatedImageL( const TDesC& aFileName, const TDesC& aMimeTypeString ); - TBool IsReallyAnimatedImageL( const TDesC& aFileName ); - -#ifdef CSCREENSAVERAIWPLUGIN_TRACES - - void DumpParamList(const TDesC& aMethod, const CAiwGenericParamList& aParamList); - void DumpParamList(const TDesC& aMethod, - TGenericParamId aParamType, - const CAiwGenericParamList& aParamList); - void DumpSupportedImageFileList(const RArray& aSupportedImageFiles); -#endif - - - void GetSupportedImageFilesL(const CAiwGenericParamList& aParamList, - RArray& aSupportedImageFiles); - void SetAnimatedScreenSaverL( const RArray& aSupportedImageFiles ); - void SetSlideShowScreenSaverL( const RArray& aSupportedImageFiles ); - - private: - RConeResourceLoader iConeResLoader; - RArray iSupportedImageFiles; - CRepository* iScreensaverRepository; - CRepository* iAnimationRepository; - CRepository* iSlideshowRepository; - }; - -#endif // C_CSCREENSAVERAIWPLUGIN_H diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/screensaveraiwplugin/inc/screensaveraiwplugin.rh --- a/scrsaver/screensaveraiwplugin/inc/screensaveraiwplugin.rh Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* -* Copyright (c) 2006 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: Resource header for project screensaveraiwplugin -* -*/ - - - - -#ifndef SCREENSAVERAIWPLUGIN_RH -#define SCREENSAVERAIWPLUGIN_RH - -#define KScreenSaverAIWPluginImplementationUid 0x10282921 - -// -// --------------------------------------------------------------------------- -// Menu commands for screensaver AIW plugin -// --------------------------------------------------------------------------- -// -enum TScreenSaverAIWPluginCommands - { - EScreenSaverAIWPluginCmdSetScreenSaver = 1 - }; - - -enum TScreenSaverAIWPluginNotes - { - EScreenSaverAIWPluginGeneralWaitNote = 1 - }; - -#endif // SCREENSAVERAIWPLUGIN_RH diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/screensaveraiwplugin/loc/screensaveraiwplugin.loc --- a/scrsaver/screensaveraiwplugin/loc/screensaveraiwplugin.loc Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* Copyright (c) 2005 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: Localization strings for project screensaveraiwplugin -* -*/ - - - - - -//d:Menu item text for setting the selected images as screen saver -//l:list_single_popup_menu_pane_1 -//w: -//r:3.2 -// -#define qtn_sanim_set_as_screensaver "Set as screen saver" - -//d:Menu item text for setting the selected images as screen saver -//l:list_single_popup_submenu_pane_t1 -//w: -//r:3.2 -// -#define qtn_sanim_submenu_screensaver "Screen saver" - - -//d:Confirmation note text for setting and image as animated -//d:screen saver. -//l:popup_note_window_1 -//w: -//r:3.2 -// -#define qtn_sanim_image_as_animation "File set as animated screen saver" - -//d:Confirmation note text for adding an image to slide set screen saver -//l:popup_note_window_1 -//w: -//r:3.2 -// -#define qtn_sanim_image_added "Image added to slide set screen saver" - -//d:Confirmation note text for adding images to slide set screen saver -//l:popup_note_window_1 -//w: -//r:3.2 -// -#define qtn_sanim_images_added "Images added to slide set screen saver" - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/screensaveraiwplugin/rom/screensaveraiwplugin.iby --- a/scrsaver/screensaveraiwplugin/rom/screensaveraiwplugin.iby Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/* -* Copyright (c) 2009 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: IBY file for screensaveraiwplugin -* -*/ - - - -#ifndef __SCREENSAVERAIWPLUGIN_IBY__ -#define __SCREENSAVERAIWPLUGIN_IBY__ - - -#ifdef RD_SCREENSAVERAIWPLUGIN -ECOM_PLUGIN(screensaveraiwplugin.dll,10282921.rsc) -#endif - -#endif // __SCREENSAVERAIWPLUGIN_IBY__ - -// End of File \ No newline at end of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/screensaveraiwplugin/rom/screensaveraiwpluginresources.iby --- a/scrsaver/screensaveraiwplugin/rom/screensaveraiwpluginresources.iby Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* -* Copyright (c) 2009 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: IBY file for screensaveraiwpluginresouces -* -*/ - - - -#ifndef __SCREENSAVERAIWPLUGINRESOURCES_IBY__ -#define __SCREENSAVERAIWPLUGINRESOURCES_IBY__ - -#ifdef RD_SCREENSAVERAIWPLUGIN -//localizable resources -data=DATAZ_\RESOURCE_FILES_DIR\screensaveraiwplugin.rsc RESOURCE_FILES_DIR\screensaveraiwplugin.rsc -#endif - -#endif // __SCREENSAVERAIWPLUGINRESOURCES_IBY__ \ No newline at end of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/screensaveraiwplugin/src/10282921.rss --- a/scrsaver/screensaveraiwplugin/src/10282921.rss Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* -* Copyright (c) 2005 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: AIW(ECOM) registration resource file for project screensaveraiwplugin -* -*/ - - - - -#include -#include -#include "screensaveraiwplugin.rh" - - -// --------------------------------------------------------------------------- -// Registration info for ECOM framework. -// Specifies also provider interest for AIW framework. -// --------------------------------------------------------------------------- -// -RESOURCE REGISTRY_INFO theInfo - { - resource_format_version = RESOURCE_FORMAT_VERSION_2; - dll_uid = KScreenSaverAIWPluginImplementationUid; - interfaces = - { - INTERFACE_INFO - { - // Menu service class (offers menu based services) - interface_uid = KAiwClassMenu; - implementations = - { - IMPLEMENTATION_INFO - { - implementation_uid = KScreenSaverAIWPluginImplementationUid; - version_no = 1; - display_name = ""; - default_data = "*"; - opaque_data = KAiwCmdAssignScreenSaverStr; - } - }; - } - }; - } diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/screensaveraiwplugin/src/screensaveraiwplugin.cpp --- a/scrsaver/screensaveraiwplugin/src/screensaveraiwplugin.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,657 +0,0 @@ -/* -* Copyright (c) 2005 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: Implementation file for class CScreenSaverAIWPlugin -* -*/ - - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "ScreenSaverAnimPluginInternalCRKeys.h" -#include "screensaveraiwplugin.h" -#include "screensaveraiwplugin.rh" - -_LIT(KResourceFileName, "screensaveraiwplugin.rsc"); -_LIT(KDriveZ, "z:"); -_LIT(KPluginUidAnimation, "[1020744D]25"); // '25' is the drive number (Z = ROM), not -_LIT(KPluginUidSlideshow, "[102823ED]25"); // mandatory - - -_LIT(KScreenSaverAIWPluginMimeTypeImage, "image"); -_LIT(KScreenSaverAIWPluginMimeTypeOTABitmap, "image/x-ota-bitmap"); -_LIT(KScreenSaverAIWPluginSeparator, "/"); - -_LIT(KScreenSaverAIWPluginMimeTypeGIF, "image/gif"); -_LIT(KScreenSaverAIWPluginMimeTypeSVG, "image/svg+xml"); -_LIT(KScreenSaverAIWPluginMimeTypeM3G, "application/m3g"); -_LIT(KScreenSaverAIWPluginMimeTypeSWF, "application/x-shockwave-flash"); - - -// ======== LOCAL FUNCTIONS ======== - -// ======== MEMBER FUNCTIONS ======== - -// ----------------------------------------------------------------------------- -// CScreenSaverAIWPlugin::NewL -// ----------------------------------------------------------------------------- -// -CScreenSaverAIWPlugin* CScreenSaverAIWPlugin::NewL() - { - CScreenSaverAIWPlugin* self = new( ELeave ) CScreenSaverAIWPlugin; - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAIWPlugin::CScreenSaverAIWPlugin -// ----------------------------------------------------------------------------- -// -CScreenSaverAIWPlugin::CScreenSaverAIWPlugin(): - iConeResLoader(*CCoeEnv::Static()) - { - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAIWPlugin::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::ConstructL() - { - TParse parse; - parse.Set(KResourceFileName, &KDC_RESOURCE_FILES_DIR, &KDriveZ); - TFileName resourceFileName; - resourceFileName.Append(parse.FullName()); - iConeResLoader.OpenL(resourceFileName); - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAIWPlugin::~CScreenSaverAIWPlugin -// ----------------------------------------------------------------------------- -// -CScreenSaverAIWPlugin::~CScreenSaverAIWPlugin() - { - iConeResLoader.Close(); - iSupportedImageFiles.Close(); - delete iScreensaverRepository; - delete iAnimationRepository; - } - -// --------------------------------------------------------------------------- -// From class CAiwServiceIfMenu. -// --------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::InitialiseL(MAiwNotifyCallback& /*aFrameworkCallback*/, - const RCriteriaArray& /*aInterest*/) - { - // Not needed. - } - -// --------------------------------------------------------------------------- -// From class CAiwServiceIfMenu. -// -// Implements setting the passed image(s) as screensaver. -// --------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::HandleServiceCmdL(const TInt& aCmdId, - const CAiwGenericParamList& aInParamList, - CAiwGenericParamList& /*aOutParamList*/, - TUint /*aCmdOptions*/, - const MAiwNotifyCallback* aCallback) - { - // Handle only KAiwCmdAssignScreenSaver command. - if ( aCmdId == KAiwCmdAssignScreenSaver ) - { -#ifdef CSCREENSAVERAIWPLUGIN_TRACES - DumpParamList(_L("HandleServiceCmdL"),aInParamList); -#endif - - // Leave, if there were not given all the required parameters - ValidateParamListL(aInParamList); - - // Get the supported image files to iSupportedImageFiles - GetSupportedImageFilesL(aInParamList,iSupportedImageFiles); - -#ifdef CSCREENSAVERAIWPLUGIN_TRACES - DumpSupportedImageFileList(iSupportedImageFiles); -#endif - - TInt textResourceId = 0; - if (iSupportedImageFiles.Count() == 1 && IsAnimatedImageL(iSupportedImageFiles[0].iFileName, - iSupportedImageFiles[0].iMimeType)) - { - textResourceId = R_SCREEN_SAVER_AIW_PLUGIN_TEXT_IMAGE_AS_ANIMATION; - SetAnimatedScreenSaverL(iSupportedImageFiles); - } - else - { - textResourceId = ((iSupportedImageFiles.Count() > 1)?R_SCREEN_SAVER_AIW_PLUGIN_TEXT_IMAGES_ADDED: - R_SCREEN_SAVER_AIW_PLUGIN_TEXT_IMAGE_ADDED); - SetSlideShowScreenSaverL(iSupportedImageFiles); - } - - // display confirmation note - DisplayInfoNoteL(textResourceId); - - // If aCallback defined inform consumers that we have done with - // the operation. - if (aCallback) - { - // Cope with the design problems of AIW framework - MAiwNotifyCallback* nonConstCallback = - const_cast (aCallback); - - CAiwGenericParamList* eventParamList = CAiwGenericParamList::NewL(); - CleanupStack::PushL(eventParamList); - nonConstCallback->HandleNotifyL( - KAiwCmdAssignScreenSaver, - KAiwEventCompleted, - *eventParamList, - aInParamList); - CleanupStack::PopAndDestroy(eventParamList); - } - } - } - -// --------------------------------------------------------------------------- -// From class CAiwServiceIfMenu. -// -// Inserts plugin's menu items to aMenuPane. -// --------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::InitializeMenuPaneL(CAiwMenuPane& aMenuPane, - TInt aIndex, - TInt /*aCascadeId*/, - const CAiwGenericParamList& aInParamList) - { -#ifdef CSCREENSAVERAIWPLUGIN_TRACES - DumpParamList(_L("InitializeMenuPaneL"),aInParamList); -#endif - - // Insert menu only if there is at least a single supported MIME type is given - if ( AnyMimeTypeSupportedL(aInParamList) ) - { - TResourceReader reader; - CCoeEnv::Static()->CreateResourceReaderLC(reader, R_SCREEN_SAVER_AIW_PLUGIN_MENU); - aMenuPane.AddMenuItemsL(reader, KAiwCmdAssignScreenSaver, aIndex); - CleanupStack::PopAndDestroy(); // reader - } - } - -// --------------------------------------------------------------------------- -// From class CAiwServiceIfMenu. -// -// Implements menu command handling for EScreenSaverAIWPluginCmdSetScreenSaver. -// --------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::HandleMenuCmdL( - TInt aMenuCmdId, - const CAiwGenericParamList& aInParamList, - CAiwGenericParamList& aOutParamList, - TUint aCmdOptions, - const MAiwNotifyCallback* aCallback) - { - if (aMenuCmdId == EScreenSaverAIWPluginCmdSetScreenSaver) - { - // Menu commands are handled as service commands. - HandleServiceCmdL( - KAiwCmdAssignScreenSaver, - aInParamList, - aOutParamList, - aCmdOptions, - aCallback ); - } - } - -// ----------------------------------------------------------------------------- -// Implements showing information note -// ----------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::DisplayInfoNoteL(TInt aTextResourceId) - { - HBufC* text = StringLoader::LoadLC(aTextResourceId); - CAknInformationNote* dlg = new (ELeave) CAknInformationNote(EFalse); - dlg->ExecuteLD(*text); - CleanupStack::PopAndDestroy(text); - } - - -// ----------------------------------------------------------------------------- -// Validates aParamList if it is not valid -// the method leaves with KErrArgument -// ----------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::ValidateParamListL(const CAiwGenericParamList& aParamList) - { - TBool valid = EFalse; - - // The parameter list must be dividable by 2 because the number of file name - // items must be equal with the number of MIME type items. - valid = !(aParamList.Count()%2); - - valid = valid && AnyMimeTypeSupportedL(aParamList); - - if (valid) - { - TInt index = 0; - TPtrC fileName = GetAiwParamAsDescriptor(index, aParamList, EGenericParamFile); - - // At least one file name parameter should be given - valid = !(fileName == KNullDesC); - } - - if (!valid) - { - User::Leave(KErrArgument); - } - } - -// ----------------------------------------------------------------------------- -// Gets supported image file list from generic param list -// ----------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::GetSupportedImageFilesL(const CAiwGenericParamList& aParamList, - RArray& aSupportedImageFiles) - { - aSupportedImageFiles.Reset(); - for (TInt i = 0;; i++) - { - TImageFile imageFile; - TPtrC fileName = GetAiwParamAsDescriptor(i, aParamList, EGenericParamFile); - - if (fileName == KNullDesC) - { - // last file item is reached - break; - } - - TPtrC mimeTypeString = GetAiwParamAsDescriptor(i, aParamList, EGenericParamMIMEType); - if (mimeTypeString == KNullDesC) - { - // missing MIME type for file - User::Leave(KErrArgument); - break; - } - else if (IsMimeTypeSupportedL(mimeTypeString)) - { - imageFile.iFileName.Set(fileName); - imageFile.iMimeType.Set(mimeTypeString); - aSupportedImageFiles.Append(imageFile); - } - } - } - - -// ----------------------------------------------------------------------------- -// Returns ETrue if any of the MIME types is supported -// ----------------------------------------------------------------------------- -// -TBool CScreenSaverAIWPlugin::AnyMimeTypeSupportedL(const CAiwGenericParamList& aParamList) - { - TBool ret = EFalse; - for (TInt i = 0;; i++) - { - TPtrC mimeTypeString = GetAiwParamAsDescriptor(i, aParamList, EGenericParamMIMEType); - if (mimeTypeString == KNullDesC) - { - // If no MIME type parameters are passed just leave - if (i <= 0) - { - User::Leave(KErrArgument); - } - break; - } - else if (IsMimeTypeSupportedL(mimeTypeString)) - { - ret = ETrue; - break; - } - } - return ret; - } -// ----------------------------------------------------------------------------- -// Implements checking if a given MIME type is supported or not -// ----------------------------------------------------------------------------- -// -TBool CScreenSaverAIWPlugin::IsMimeTypeSupportedL(const TDesC& aMimeTypeString) - { - // Check for a type separator in the string - TInt pos = aMimeTypeString.Find(KScreenSaverAIWPluginSeparator); - - // Leave if no separator was found.. the MIME - // standard requires it - if (pos == KErrNotFound) - { - User::Leave(KErrArgument); - } - - // Construct the compare string - TPtrC compareString(aMimeTypeString.Left(pos)); - - // Perform the comparison - TBool ret = EFalse; - - // Mime type case: IMAGE/* except IMAGE/X-OTA-BITMAP - if (!compareString.CompareF(KScreenSaverAIWPluginMimeTypeImage) && - aMimeTypeString.CompareF(KScreenSaverAIWPluginMimeTypeOTABitmap)) - { - ret = ETrue; - } - - if (!ret) - { - TBool dummy; - ret = IsAnimatedMimeTypeL(aMimeTypeString,dummy); - } - - return ret; - } - -// --------------------------------------------------------------------------- -// Determines if the MIME type is animated or not and in addition returns -// in aUseImageDecoder if image decoder should be used to determine if -// the image is really animated -// --------------------------------------------------------------------------- -// -TBool CScreenSaverAIWPlugin::IsAnimatedMimeTypeL( const TDesC& aMimeTypeString, TBool& aUseImageDecoder ) - { - TBool ret = EFalse; - aUseImageDecoder = EFalse; - - // check if animated an needs image decoder - if (!aMimeTypeString.CompareF(KScreenSaverAIWPluginMimeTypeGIF)) - { - aUseImageDecoder = ETrue; - ret = ETrue; - } - else if (!aMimeTypeString.CompareF(KScreenSaverAIWPluginMimeTypeSVG) || - !aMimeTypeString.CompareF(KScreenSaverAIWPluginMimeTypeM3G) || - !aMimeTypeString.CompareF(KScreenSaverAIWPluginMimeTypeSWF)) - { - ret = ETrue; - } - - return ret; - } - - -// ----------------------------------------------------------------------------- -// Implements getting a AIW parameter as descriptor -// ----------------------------------------------------------------------------- -// -TPtrC CScreenSaverAIWPlugin::GetAiwParamAsDescriptor( - TInt& aIndex, - const CAiwGenericParamList& aParamList, - TGenericParamId aParamType) - { - const TAiwGenericParam* genericParam = NULL; - genericParam = aParamList.FindFirst( - aIndex, - aParamType, - EVariantTypeDesC); - - if (aIndex != KErrNotFound && genericParam) - { - // Get the data - return genericParam->Value().AsDes(); - } - else - { - return KNullDesC(); - } - } - -#ifdef CSCREENSAVERAIWPLUGIN_TRACES - -// ----------------------------------------------------------------------------- -// Dump parameters in aParamList -// ----------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::DumpParamList(const TDesC& aMethod, const CAiwGenericParamList& aParamList) - { - DumpParamList(aMethod,EGenericParamFile,aParamList); - DumpParamList(aMethod,EGenericParamMIMEType,aParamList); - } - -// ----------------------------------------------------------------------------- -// Dump parameters in aParamList for a given aParamType -// ----------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::DumpParamList(const TDesC& aMethod, - TGenericParamId aParamType, - const CAiwGenericParamList& aParamList) - { - for (TInt i = 0 ;; i++) - { - TPtrC paramString = GetAiwParamAsDescriptor(i, aParamList, aParamType); - if (paramString == KNullDesC) - { - break; - } - else - { - RDebug::Print( _L("ScreenSaverAIWPlugin: %x CScreenSaverAIWPlugin::%S: Index=%d, paramType=%d, paramString=%S"), this, &aMethod, i, aParamType, ¶mString); - } - } - } - -// ----------------------------------------------------------------------------- -// Dump supported image file list -// ----------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::DumpSupportedImageFileList(const RArray& aSupportedImageFiles) - { - for (TInt i = 0 ; i < aSupportedImageFiles.Count() ; i++) - { - RDebug::Print( _L("ScreenSaverAIWPlugin: %x DumpSupportedImageFileList: Index=%d, file=%S, MIME type=%S"), this, i, &aSupportedImageFiles[i].iFileName, &aSupportedImageFiles[i].iMimeType); - } - } - -#endif - -// --------------------------------------------------------------------------- -// Determines if an image is animated or not -// --------------------------------------------------------------------------- -// -TBool CScreenSaverAIWPlugin::IsAnimatedImageL( const TDesC& aFileName, - const TDesC& aMimeTypeString ) - { - TBool useImageDecoder = EFalse; - TBool animated = IsAnimatedMimeTypeL( aMimeTypeString, useImageDecoder ); - - if (useImageDecoder) - { - animated = IsReallyAnimatedImageL(aFileName); - } - - return animated; - } - -// --------------------------------------------------------------------------- -// Determines if an image file is really animated or not -// --------------------------------------------------------------------------- -// -TBool CScreenSaverAIWPlugin::IsReallyAnimatedImageL( const TDesC& aFileName ) - { - CImageDecoder* decoder = CImageDecoder::FileNewL(CCoeEnv::Static()->FsSession(),aFileName); - CleanupStack::PushL( decoder ); - TBool animated = (decoder->FrameCount() > 1); - CleanupStack::PopAndDestroy(); // decoder - return animated; - } - -// --------------------------------------------------------------------------- -// Set and activate slide-show screen saver. -// --------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::SetSlideShowScreenSaverL( const RArray& aSupportedImageFiles ) - { - StoreImageListToFileL(aSupportedImageFiles); - - if (iScreensaverRepository == NULL) - { - // Setting the screensaver type & plugin name - iScreensaverRepository = CRepository::NewL(KCRUidScreenSaver); - } - if (iSlideshowRepository == NULL) - { - iSlideshowRepository = CRepository::NewL(KCRUidThemes); - } - - // set psln to "not random" - iSlideshowRepository->Set(KThemesScreenSaverSlideSetType, 0); - - // Slideshow plugin used - iScreensaverRepository->Set(KScreenSaverPluginName, KPluginUidSlideshow); - - // Type 3 = plugin - iScreensaverRepository->Set(KScreenSaverObject, EScreensaverTypePlugin); - - // Inform screensaver that slide set has changed - User::LeaveIfError( - RProperty::Set( - KPSUidScreenSaver, - KScreenSaverPluginSettingsChanged, - EScreenSaverPluginSettingsChanged ) ); - } - -// --------------------------------------------------------------------------- -// Set and activate animated screen saver. -// --------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::SetAnimatedScreenSaverL( const RArray& aSupportedImageFiles ) - { - if (iScreensaverRepository == NULL) - { - // Setting the screensaver type & plugin name - iScreensaverRepository = CRepository::NewL(KCRUidScreenSaver); - } - - if (iAnimationRepository == NULL) - { - // Setting the screensaver type & plugin name - iAnimationRepository = CRepository::NewL(KCRUidScreenSaverAnimPlugin); - } - - iAnimationRepository->Set(KScreenSaverAnimatedFileName, aSupportedImageFiles[0].iFileName); - - // Animation plugin used - iScreensaverRepository->Set(KScreenSaverPluginName, KPluginUidAnimation); - - // Type 3 = plugin - iScreensaverRepository->Set(KScreenSaverObject, EScreensaverTypePlugin); - } - -// --------------------------------------------------------------------------- -// Stores slide set image file names to file. -// --------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::StoreImageListToFileL( const RArray& aSupportedImageFiles ) - { - // Get file from server. - RFile imgFile; - OpenImageFileL( imgFile, EAknsSrvInifileSSSS ); - CleanupClosePushL( imgFile ); - - // Finally, write image filenames to the file. - TFileText textFile; - textFile.Set( imgFile ); - textFile.Seek( ESeekEnd ); - - for (TInt i = 0 ; i < aSupportedImageFiles.Count(); i++) - { - User::LeaveIfError( textFile.Write( aSupportedImageFiles[i].iFileName ) ); - } - - imgFile.Flush(); - - CleanupStack::PopAndDestroy(); // imgFile - } - -// --------------------------------------------------------------------------- -// Open image list file for operations. -// --------------------------------------------------------------------------- -// -void CScreenSaverAIWPlugin::OpenImageFileL( RFile& aImageFile, const TInt aSlideSetType ) - { - // First, connect to skin server. - RAknsSrvSession skinsrv; - User::LeaveIfError( skinsrv.Connect() ); - CleanupClosePushL( skinsrv ); - - // Then get file handle. - TInt fileserverhandle = 0; - TInt filehandle = 0; - // Validate type and open image file. - if ( aSlideSetType == EAknsSrvInifileSSWP ) - { - fileserverhandle = - skinsrv.OpenImageInifile( EAknsSrvInifileSSWP, filehandle ); - } - else - { - fileserverhandle = - skinsrv.OpenImageInifile( EAknsSrvInifileSSSS, filehandle ); - - } - if ( fileserverhandle <= 0 || filehandle == 0 ) - { - User::Leave( fileserverhandle ); - } - - // Finally adopt file from server. - User::LeaveIfError( aImageFile.AdoptFromServer( fileserverhandle, filehandle ) ); - CleanupStack::PopAndDestroy(); // skinsrv - } - - - -// ======== ECOM INITIALIZATION ======== - -// Map the interface UIDs to implementation factory functions -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY(KScreenSaverAIWPluginImplementationUid, CScreenSaverAIWPlugin::NewL) - }; - -// --------------------------------------------------------- -// Exported proxy for instantiation method resolution -// --------------------------------------------------------- -// -EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) - { - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); - return ImplementationTable; - } - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/screensaveraiwplugin/src/screensaveraiwplugin.rss --- a/scrsaver/screensaveraiwplugin/src/screensaveraiwplugin.rss Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* -* Copyright (c) 2005 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: Resource file for project aknswallpaperplugin -* -*/ - - - - - -NAME SSAP // screensaveraiwplugin AIW Provider - -// Resource types -#include - -// Commands etc. -#include "screensaveraiwplugin.rh" - - -// Localized texts. -#include - - -RESOURCE RSS_SIGNATURE { } - -// --------------------------------------------------------------------------- -// r_screen_saver_aiw_plugin_menu -// -// Menu for setting image(s) as screen saver. -// --------------------------------------------------------------------------- -// -RESOURCE MENU_PANE r_screen_saver_aiw_plugin_menu - { - items = - { - MENU_ITEM { - command = EScreenSaverAIWPluginCmdSetScreenSaver; - txt = qtn_sanim_set_as_screensaver; - extratxt = qtn_sanim_submenu_screensaver; - } - }; - } - -RESOURCE TBUF r_screen_saver_aiw_plugin_text_image_added { buf = qtn_sanim_image_added; } -RESOURCE TBUF r_screen_saver_aiw_plugin_text_images_added { buf = qtn_sanim_images_added; } -RESOURCE TBUF r_screen_saver_aiw_plugin_text_image_as_animation { buf = qtn_sanim_image_as_animation; } - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/EABI/bmpanimscrplugin_ecomU.def --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/EABI/bmpanimscrplugin_ecomU.def Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -EXPORTS - _Z24ImplementationGroupProxyRi @ 1 NONAME - _ZTI12CBmpAnimItem @ 2 NONAME ; ## - _ZTI13CBmpAnimModel @ 3 NONAME ; ## - _ZTI15CBmpAnimIniData @ 4 NONAME ; ## - _ZTI16CBmpAnimSettings @ 5 NONAME ; ## - _ZTI17CBmpAnimScrPlugin @ 6 NONAME ; ## - _ZTV12CBmpAnimItem @ 7 NONAME ; ## - _ZTV13CBmpAnimModel @ 8 NONAME ; ## - _ZTV15CBmpAnimIniData @ 9 NONAME ; ## - _ZTV16CBmpAnimSettings @ 10 NONAME ; ## - _ZTV17CBmpAnimScrPlugin @ 11 NONAME ; ## - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/bmarm/BMPANIMSCRPLUGINU.DEF --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/bmarm/BMPANIMSCRPLUGINU.DEF Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - CreatePluginModule__Fv @ 1 NONAME R3UNUSED ; CreatePluginModule(void) - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/bmarm/BMPANIMSCRPLUGIN_ECOMU.DEF --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/bmarm/BMPANIMSCRPLUGIN_ECOMU.DEF Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ImplementationGroupProxy__FRi @ 1 NONAME R3UNUSED ; ImplementationGroupProxy(int &) - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/bwins/BMPANIMSCRPLUGIN_ECOMU.DEF --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/bwins/BMPANIMSCRPLUGIN_ECOMU.DEF Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * __cdecl ImplementationGroupProxy(int &) - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/bwins/bmpanimscrpluginu.def --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/bwins/bmpanimscrpluginu.def Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ?CreatePluginModule@@YAPAVMScreensaverPlugin@@XZ @ 1 NONAME ; class MScreensaverPlugin * __cdecl CreatePluginModule(void) - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/ABLD.BAT --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/ABLD.BAT Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -@ECHO OFF - -REM Bldmake-generated batch file - ABLD.BAT -REM ** DO NOT EDIT ** - -perl -S ABLD.PL "\S60\BmpAnimScrPlugin\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9 -if errorlevel==1 goto CheckPerl -goto End - -:CheckPerl -perl -v >NUL -if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed? -goto End - -:End diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimConfig.hrh --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimConfig.hrh Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2009 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: Project definition file -* -*/ - - - -#ifndef BMPANIMCONFIG_HRH -#define BMPANIMCONFIG_HRH - -// Compiled at all? -// #define RD_SCREENSAVER_BMPANIM - -// use logging? -// #define LOGGING_ENABLED - -#endif // BMPANIMCONFIG_HRH diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimScrPlugin.ini --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimScrPlugin.ini Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -[info] -; Plugin name -name=Operator zaver 4.0 - -; Bitmap file name (on ROM full path is needed) -mbmfile=\resource\plugins\BmpAnimScrPlugin.mbm - -; Landscape bitmap file name (on ROM full path is needed) -;mbmfilelandscape=\resource\plugins\BmpAnimScrPluginL.mbm - -; Should separate landscape graphics be used (file must be defined) (1 = use landscape) -uselandscape=0 - -; Scale bitmaps to screen size (SVG is always scaled) (1 = scale) -scalebmps=0 - -; Running time in millis -runningtime=30000000 - -; Suspend time in millis (max 2147483647, -1 indefinitely) -suspendtime=-1 - -; Time between images in millis -timing=100000 - -; Time to keep lights on in seconds -lights=15 diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimScrPlugin.mmp --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimScrPlugin.mmp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -/* -* Copyright (c) 2003, 2004 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: Project definition file -* -*/ - - - - -// Animator configuration (logging flags) -#include "BmpAnimConfig.hrh" - -#include - -TARGET BmpAnimScrPlugin.dll -TARGETTYPE PLUGIN - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT -//2nd UID is the ECOM plugin UID, 3rd is screensaver plugin dll's uid -UID 0x10009D8D 0x101F86FF - -#ifdef LOGGING_ENABLED -MACRO USE_LOGGER -MACRO USE_RDEBUG -#endif - -SOURCEPATH ../src - -SOURCE BmpAnimScrPluginDll.cpp -SOURCE CBmpAnimScrPlugin.cpp -SOURCE CBmpAnimModel.cpp -SOURCE CBmpAnimItem.cpp -SOURCE CBmpAnimSettings.cpp -SOURCE CBmpAnimIniData.cpp - -LANG SC - -USERINCLUDE ../inc - -// This is a SYSTEMINCLUDE macro containing the middleware -// layer specific include directories -MW_LAYER_SYSTEMINCLUDE - -SYSTEMINCLUDE ../../../../inc -SYSTEMINCLUDE /epoc32/include/ecom - -LIBRARY ecom.lib -LIBRARY euser.lib -LIBRARY fbscli.lib -LIBRARY eikcore.lib -LIBRARY cone.lib -LIBRARY egul.lib -LIBRARY efsrv.lib -LIBRARY avkon.lib -LIBRARY aknicon.lib -// LIBRARY bitgdi.lib - -#ifdef LOGGING_ENABLED -LIBRARY flogger.lib -#endif - -// The deffile name has to be changed to be able to build -// ecom and non-ecom plugin versions -DEFFILE bmpanimscrplugin_ecom.def - -START RESOURCE 101F86FF.rss -TARGET BmpAnimScrPlugin.rsc -END - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimScrPlugin.pkg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimScrPlugin.pkg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -; -; Copyright (c) 2009 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: The Package file for BmpAnimScrPlugin -; - -;Languages -&EN - -;Header - ; {Names},(UID),major,minor,variant -#{"zippo Zaver"},(0x101F86FF),3,1,0 - -;Supports Series 60 v3 -;This line indicates that this installation is for the Series 60 platform v3 -;This line must appear _exactly_ as shown below in the sis file -;If this line is missing or incorrect, the sis file will not be able -;to be installed on Series 60 v3 platforms -;(0x10201A7A), 0, 0, 0, {"Series60v3.0"} -(0x101F7961), 0, 0, 0, {"Series60ProductID"} - -;Localised Vendor name -%{"zippo Zoftware"} - -;Unique Vendor name -:"zippo Zoftware" - -;Key and certificate -;*"rd-key.pem","rd.cer" - -; Bitmap Animator -"\epoc32\release\armv5\urel\BmpAnimScrPlugin.dll"-"!:\sys\bin\BmpAnimScrPlugin.dll" -"\epoc32\data\z\resource\plugins\BmpAnimScrPlugin.RSC"-"!:\resource\plugins\BmpAnimScrPlugin.RSC" - -; Animation images -; NOTE Switch between MIF or both, depending on which -; kind of bitmaps the animation has (bmp - both) -"\epoc32\data\z\resource\plugins\BmpAnimScrPlugin.mif"-"!:\resource\plugins\BmpAnimScrPlugin.mif" -"\epoc32\data\z\resource\plugins\BmpAnimScrPlugin.mbm"-"!:\resource\plugins\BmpAnimScrPlugin.mbm" - -; Settings file with MBM -"\epoc32\data\z\resource\plugins\BmpAnimScrPlugin.ini"-"!:\resource\plugins\BmpAnimScrPlugin.ini" diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/bld.inf --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/bld.inf Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/* -* Copyright (c) 2005 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: -* build information file for BmpAnimScrPlugin -* -*/ - - - - -#include "BmpAnimConfig.hrh" - -#ifdef RD_SCREENSAVER_BMPANIM - -PRJ_PLATFORMS -DEFAULT - -PRJ_EXPORTS -BmpAnimScrPlugin.ini /epoc32/wins/c/resource/plugins/BmpAnimScrPlugin.ini -BmpAnimScrPlugin.ini /epoc32/winscw/c/resource/plugins/BmpAnimScrPlugin.ini -BmpAnimScrPlugin.ini /epoc32/data/z/resource/plugins/BmpAnimScrPlugin.ini - -PRJ_MMPFILES -// Plugin -BmpAnimScrPlugin.mmp - -// Animation bitmaps, can be after actual mmp, bitmap header is not used -gnumakefile ../srcdata/animation.mk - -#endif -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/makesis_3x.bat --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/makesis_3x.bat Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -@echo off -rem -rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). -rem All rights reserved. -rem This component and the accompanying materials are made available -rem under the terms of "Eclipse Public License v1.0" -rem which accompanies this distribution, and is available -rem at the URL "http://www.eclipse.org/legal/epl-v10.html". -rem -rem Initial Contributors: -rem Nokia Corporation - initial contribution. -rem -rem Contributors: -rem -rem Description: Makesis command for BmpAnimScrPlugin -rem -@echo on - - - - -makesis BmpAnimScrPlugin.pkg -signsis BmpAnimScrPlugin.sis BmpAnimScrPlugin_3x.sisx \S60\AppinstUi\internal\RD_RootCA\rd.cer \S60\AppinstUi\internal\RD_RootCA\rd-key.pem diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/BmpAnimUtils.h --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/BmpAnimUtils.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,164 +0,0 @@ -/* -* Copyright (c) 2009 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: BmpAnimScrPlugin utilities collection -* -*/ - - - -#ifndef BMPANIMUTILS_H -#define BMPANIMUTILS_H - -// ========== LOGGING MACROS =============================== - -#ifdef USE_LOGGER - -#include -#include -#include -#include - - -/* logging macros usage: - -// set logging on in mmp file... -MACRO USE_LOGGER -#ifdef WINS -MACRO USE_RDEBUG -#endif - - -void CTestAppUi::ConstructL() -{ -// creates log directory and log file on app startup. -// prints starting banner... -BMALOGGER_CREATE; - -// entering to function... -BMALOGGER_ENTERFN("ConstructL()"); - -TInt number = 42; -TFileName file; -file = "something" .... - -// print variable number of parameters... -// Note: use _L macro for format string! -BMALOGGER_WRITEF(_L("BMA: number = %d, file = %S"), number, &file); - -// print just a string (no _L macro here!) -BMALOGGER_WRITE("Hello world!"); - -// leave from function... -BMALOGGER_LEAVEFN("ConstructL()"); -} - -CTestAppUi::~CTestAppUi() -{ -// print app exit banner when application exits. -BMALOGGER_DELETE; -} - -*/ - -#ifdef USE_RDEBUG - -_LIT(KBMALogBanner, "BmpAnim log start"); -_LIT(KBMALogEnterFn, "BMA: enter --> %S"); -_LIT(KBMALogLeaveFn, "BMA: leave <-- %S"); -_LIT(KBMALogWrite, "BMA: %S"); -_LIT(KBMALogTag, "BMA: "); -_LIT(KBMALogExit, "BmpAnim log end"); -_LIT(KBMALogTimeFormatString, "%H:%T:%S:%*C2"); - -#define BMALOGGER_CREATE {RDebug::Print(KBMALogBanner);} -#define BMALOGGER_DELETE {RDebug::Print(KBMALogExit);} -#define BMALOGGER_ENTERFN(a) {_LIT(temp, a); RDebug::Print(KBMALogEnterFn, &temp);} -#define BMALOGGER_LEAVEFN(a) {_LIT(temp, a); RDebug::Print(KBMALogLeaveFn, &temp);} -#define BMALOGGER_WRITE(a) {_LIT(temp, a); RDebug::Print(KBMALogWrite, &temp);} -#define BMALOGGER_WRITE_TIMESTAMP(a) {_LIT(temp, a); TTime time; time.HomeTime(); TBuf<256> buffer; time.FormatL(buffer, KBMALogTimeFormatString); buffer.Insert(0, temp); buffer.Insert(0, KBMALogTag); RDebug::Print(buffer); } -#define BMALOGGER_WRITEF RDebug::Print - -#else // !USE_RDEBUG - -_LIT(KBMALogDir, "BMA"); -_LIT(KBMALogFile, "BMA.txt"); -_LIT8(KBMALogBanner, "BmpAnim log start"); -_LIT8(KBMALogEnterFn, "BMA: -> %S"); -_LIT8(KBMALogLeaveFn, "BMA: <- %S"); -_LIT8(KBMALogExit, "BmpAnim log end"); -_LIT(KBMALogTimeFormatString, "%H:%T:%S:%*C2"); - -#define BMALOGGER_CREATE {FCreate();} -#define BMALOGGER_DELETE {RFileLogger::Write(KBMALogDir, KBMALogFile, EFileLoggingModeAppend, KBMALogExit);} -#define BMALOGGER_ENTERFN(a) {_LIT8(temp, a); RFileLogger::WriteFormat(KBMALogDir, KBMALogFile, EFileLoggingModeAppend, KBMALogEnterFn, &temp);} -#define BMALOGGER_LEAVEFN(a) {_LIT8(temp, a); RFileLogger::WriteFormat(KBMALogDir, KBMALogFile, EFileLoggingModeAppend, KBMALogLeaveFn, &temp);} -#define BMALOGGER_WRITE(a) {_LIT(temp, a); RFileLogger::Write(KBMALogDir, KBMALogFile, EFileLoggingModeAppend, temp);} -#define BMALOGGER_WRITE_TIMESTAMP(a) {_LIT(temp, a); TTime time; time.HomeTime(); TBuf<256> buffer; time.FormatL(buffer, KBMALogTimeFormatString); buffer.Insert(0, temp); RFileLogger::Write(KBMALogDir, KBMALogFile, EFileLoggingModeAppend, buffer); } -#define BMALOGGER_WRITEF FPrint - -inline void FPrint(const TRefByValue aFmt, ...) - { - VA_LIST list; - VA_START(list, aFmt); - RFileLogger::WriteFormat(KBMALogDir, KBMALogFile, EFileLoggingModeAppend, aFmt, list); - } - -inline void FPrint(const TDesC& aDes) - { - RFileLogger::WriteFormat(KBMALogDir, KBMALogFile, EFileLoggingModeAppend, aDes); - } - -inline void FHex(const TUint8* aPtr, TInt aLen) - { - RFileLogger::HexDump(KBMALogDir, KBMALogFile, EFileLoggingModeAppend, 0, 0, aPtr, aLen); - } - -inline void FHex(const TDesC8& aDes) - { - FHex(aDes.Ptr(), aDes.Length()); - } - -inline void FCreate() - { -#ifdef RD_PF_SEC_APPARC - // Use screensaver private dir - TFileName path(_L("c:\\private\\100056cf\\")); -#else - TFileName path(_L("c:\\logs\\")); -#endif - path.Append(KBMALogDir); - path.Append(_L("\\")); - RFs& fs = CEikonEnv::Static()->FsSession(); - fs.MkDirAll(path); - RFileLogger::WriteFormat(KBMALogDir, KBMALogFile, EFileLoggingModeOverwrite, KBMALogBanner); - } - -#endif // !USE_RDEBUG - -#else // !USE_LOGGER - -inline void FPrint(const TRefByValue /*aFmt*/, ...) { }; - -#define BMALOGGER_CREATE -#define BMALOGGER_DELETE -#define BMALOGGER_ENTERFN(a) -#define BMALOGGER_LEAVEFN(a) -#define BMALOGGER_WRITE(a) -#define BMALOGGER_WRITEF 1 ? ((void)0) : FPrint -#define BMALOGGER_WRITE_TIMESTAMP(a) - -#endif // USE_LOGGER - -#endif // BMPANIMUTILS_H - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimIniData.h --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimIniData.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -/* -* Copyright (c) 2003 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: Bitmap animator INI file handler -* -*/ - - - -#ifndef C_CBMPANIMINIDATA_H -#define C_CBMPANIMINIDATA_H - -#include - -class CBmpAnimIniData : public CBase - { -public: - // Constructor, pass in name of ini file to open - // Default search path is 'c:\system\data' on target filesystem - // ie. 'NewL(_L("c:\\system\\data\\ttools.ini"))' is equivalent - // to 'NewL(_L("ttools.ini"))' - static CBmpAnimIniData* NewL(const TDesC& aName); - virtual ~CBmpAnimIniData(); - - // Read text value regardless of section - // Returns: True(Success) or false(Failure) - TBool FindVar(const TDesC8& aKeyName, TDes16& aResult); - TBool FindVar(const TDesC8& aKeyName, TPtrC8& aResult); - - // Read integer value regardless of section - // Returns: True(Success) or false(Failure) - TBool FindVar(const TDesC8& aKeyName, TInt& aResult); - - // Read text value under section - // Returns: True(Success) or false(Failure) - TBool FindVar( - const TDesC8& aSection, const TDesC8& aKeyName, TDes16& aResult); - TBool FindVar( - const TDesC8& aSection, const TDesC8& aKeyName, TPtrC8& aResult); - - // Read integer value under section - // Returns: True(Success) or false(Failure) - TBool FindVar( - const TDesC8& aSection, const TDesC8& aKeyName, TInt& aResult); - - // Write integer value associated with a token - TInt WriteVarL( - const TDesC8& aSection, const TDesC8& aKeyName, TInt aValue); - - // Write string associated with a token - TInt WriteVarL( - const TDesC8& aSection, const TDesC8& aKeyName, const TDesC8& aValue); - - // Commits the changes done. NOTE if not called, the changes will NOT - // be saved into file - void CommitL(); - - -protected: - CBmpAnimIniData(); - void ConstructL(const TDesC& aName); - -private: - // Tries to locate the given section. EFalse if not found - TBool FindSection(const TDesC8& aSection, TInt& aStart, TInt& aEnd); - -private: - HBufC* iName; - HBufC8* iToken; - TPtr8 iPtr; // Holds the file in memory, written back in CommitL() - }; - -#endif // C_CBMPANIMINIDATA_H - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimItem.h --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimItem.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2003 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: Stores a single bitmap animation item: image with its -* properties (position, timing et al) -* -*/ - - - -#ifndef C_CBMPANIMITEM_H -#define C_CBMPANIMITEM_H - -// INCLUDES -#include // e32def, e32std -#include - -// CONSTANTS - -// MACROS - -// Item flags -#define BAIF_OWNSICON 0x01 - - -// DATA TYPES - -// EXTERNAL DATA STRUCTURES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DEFINITIONS -class CBmpAnimItem : public CBase - { -public: - // Public constructor, doesn't need a two-phase construction - CBmpAnimItem(); - - // Destructor - virtual ~CBmpAnimItem(); - - // Set icon. If owned, an icon is deleted by the item - void SetIcon(CGulIcon* aIcon, TBool aItemOwnsIcon = ETrue); - - // Set icon from bitmaps. If owned, an icon is deleted by the item - void SetIconL( - CFbsBitmap* aBitmap, - CFbsBitmap* aMask = NULL, - TBool aItemOwnsIcon = ETrue); - - // Get icon - CGulIcon* Icon() const { return iIcon; } - - // Set timing (microsecs to display the image) - void SetTiming(TInt aMicros) { iTiming = aMicros; } - - // Get timing - TInt Timing() { return iTiming; } - - // Set position - void SetPosition(TPoint aPos) { iPosition = aPos; } - - // Get position - TPoint Position() { return iPosition; } - - // Get flags - TInt Flags() const { return iFlags; } -protected: -private: - // Type flags - TInt iFlags; - - // Icon - CGulIcon* iIcon; - - // Timing - TInt iTiming; - - // Position - TPoint iPosition; - }; - -#endif // C_CBMPANIMITEM_H diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimModel.h --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimModel.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -/* -* Copyright (c) 2003 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: Takes care of storing and serving the bitmaps -* to be animated along with their properties -* -*/ - - - -#ifndef C_CBMPANIMMODEL_H -#define C_CBMPANIMMODEL_H - -#include "CBmpAnimItem.h" -#include "CBmpAnimSettings.h" - -// 5 seems like a reasonable granularity -const TInt KBmpAnimItemArrayGranularity = 5; - -// BmpAnim model. Contains BmpAnim items, serves the items to BmpAnim plugin -class CBmpAnimModel : public CBase - { -public: - // Default constructor & destructor - CBmpAnimModel(); - virtual ~CBmpAnimModel(); - -public: - // Two-phase constructor, initialises member arrays and stuff - virtual void ConstructL(CBmpAnimSettings* aSettings); - -public: // Access functions - // Number of items query - TInt NumberOfItems() const; - - // Add an item to the end of the array - void AppendItemL(CBmpAnimItem* aItem); - - // Insert an item at . Space must be reserved. - void InsertItemL(TInt aIndex, CBmpAnimItem* aItem); - - // Delete item at . - void DeleteItemL(TInt aIndex); - - // Delete all items - void DeleteAll(); - - // Get item at position - CBmpAnimItem* ItemAt(TInt aIndex) const; - - // Get current item index - inline TInt CurrentItemIndex() const; - - // Set current item index - inline void SetCurrentItemIndex(TInt aIndex); - - // Get next item in animation sequence. aWrapped is ETrue, if the - // next item caused a wrap to the beginning of sequence - CBmpAnimItem* NextItem(TBool& aWrapped); - - // Reserve space for items - void SetReserveL(TInt aCount); - - // Get settings - inline CBmpAnimSettings* Settings() const; - -private: // Utility functions - -private: - // Item array - CArrayPtrFlat* iItems; - - // Current item index - TInt iCurrentItem; - - CBmpAnimSettings* iSettings; - }; - - -// --- inlines --- - -// Get current item index -inline TInt CBmpAnimModel::CurrentItemIndex() const - { return iCurrentItem; } - - -// Set current item index -inline void CBmpAnimModel::SetCurrentItemIndex(TInt aIndex) - { - iCurrentItem = aIndex; - } - -// Get settings -inline CBmpAnimSettings* CBmpAnimModel::Settings() const - { return iSettings; } - -#endif // C_CBMPANIMMODEL_H - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimScrPlugin.h --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimScrPlugin.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,178 +0,0 @@ -/* -* Copyright (c) 2003 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: Main include file for plugin -* -*/ - - - -#ifndef C_CBMPANIMSCRPLUGIN_H -#define C_CBMPANIMSCRPLUGIN_H - -#include -#include -#include -#include -#include - -#include - -#include "CBmpAnimModel.h" -#include "CBmpAnimItem.h" -#include "CBmpAnimSettings.h" - -// The screensaver plugin implementation must inherit from -// CScreensaverPluginInterfaceDefinition -class CBmpAnimScrPlugin : public CScreensaverPluginInterfaceDefinition - { - enum TPluginState - { - EPluginStateLoading = 0, - EPluginStateInitializing, - EPluginStateAnimation, - EPluginStateStoppingAnimation, - }; - - enum TLoadedAnimation - { - ENone, - EPortrait, - ELandscape, - EPortraitRotated - }; - -public: - // Class instance creation - static CBmpAnimScrPlugin* NewL(); - -private: - // Construction - CBmpAnimScrPlugin(); - -public: - // Destruction - ~CBmpAnimScrPlugin(); - -public: // from MScreensaverPlugin - TInt InitializeL(MScreensaverPluginHost *aHost); - TInt Draw(CWindowGc& aGc); - const TDesC16& Name() const; - TInt HandleScreensaverEventL(TScreensaverEvent aEvent, TAny* aData); - TInt Capabilities(); - TInt PluginFunction(TScPluginCaps aFunction, TAny* aParam); - -private: - // Draws centered items - void DrawCentered(CWindowGc& aGc, CBmpAnimItem* aItem); - - // Loads the animation into the model - void LoadAnimationL(TBool aLandscape = EFalse, TBool aRotate = EFalse); - - // Re-loads the animation when display changes, if needed - void ReloadAnimationL(); - - // Starts the display timer - void StartDisplayTimer(); - - // Stops the display timer - void StopDisplayTimer(); - - // Display timer callback - static TInt DisplayTimerCallback(TAny* aPtr); - - // Starts the lights timer - void StartLightsTimer(); - - // Stops the lights - void StopLightsTimer(); - - // Lights timer callback - static TInt LightsTimerCallback(TAny* aPtr); - - // Advances the plugin state - void HandlePluginState(); - - // Requests a suitable display mode from host - void SetDisplayMode(); - - void Lights(TInt aSecs); - - // Configures the plugin - TInt ConfigureL(TAny* aParam); - - // Sets sizes of bitmaps - TInt ScaleBitmap(CFbsBitmap* aBmp, TBool aRotate = EFalse); - - // Returns ETrue if reload of the animation is needed - TBool ReloadNeeded(); - - // Returns ETrue if display is landscape - TBool DisplayIsLandscape(); - - // Returns ETrue if graphics should be rotated - TBool RotateNeeded(); - - // Returns ETrue if landscape graphics should be loaded - TBool LoadLandscape(); - - // Updates the saved display information - void UpdateDisplayInfo(); - - // Sets bitmap size and rotation (used instead of AknIconUtils function) - // Actually an "Easy Leaving :)" wrapper around the L-version - TInt SetSizeAndRotation(CFbsBitmap* aBmp, TSize aSize, TInt aAngle); - - // Sets bitmap size and rotation (used instead of AknIconUtils function) - void SetSizeAndRotationL(CFbsBitmap* aBmp, TSize aSize, TInt aAngle); - - // Rotates and scales a source bitmap into target bitmap - void RotateAndScaleBitmapL( - const TRect& aTrgRect, - CFbsBitmap* aTrgBitmap, - CFbsBitmap* aSrcBitmap, - TInt aAngle); - -private: - // Plugin host interface - MScreensaverPluginHost* iHost; - - // Plugin state - TInt iState; - - // Needed to retrieve bitmaps from files - CEikonEnv* iEikEnv; - - // Animator model, stores and serves animation items - CBmpAnimModel* iModel; - - // Animator settings. Created and deleted here, but used and managed by - // the model. Creating here enables retrieving the plugin name - // in non-plugin-host applications (such as Themes) - CBmpAnimSettings* iSettings; - - // Timer to control how long the animation is displayed - CPeriodic* iDisplayTimer; - - // Flag to control animation stop. Changed from display timer callback - TInt iStopDisplaying; - - TScreensaverDisplayInfo iDi; - - TLoadedAnimation iLoadedAnimation; - }; - - -#endif // C_CBMPANIMSCRPLUGIN_H - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimSettings.h --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimSettings.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,183 +0,0 @@ -/* -* Copyright (c) 2003 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: Loads and stores the bitmap animator settings -* -*/ - - - -#ifndef C_CBMPANIMSETTINGS_H -#define C_CBMPANIMSETTINGS_H - -#include -#include "CBmpAnimIniData.h" - -// Default plugin name -_LIT(KPluginName, "BitmapAnimator"); -const TInt KMaxPluginNameLength = 30; - -// BmpAnim settings -class CBmpAnimSettings : public CBase - { -public: - // User constructor - static CBmpAnimSettings* NewL(); - - // Construction & destruction -private: - CBmpAnimSettings(); - void ConstructL(); -public: - virtual ~CBmpAnimSettings(); - -public: // Access functions - // Load the current settings from file (may be used from outside, - // hence public). Usually just called from ConstructL(), tho - TBool LoadSettingsL(); - - // Save settings - TBool SaveSettingsL(); - - // Get running time (-1 = not defined) - inline TInt RunningTime(); - - // Get loop count (-1 = not defined) - inline TInt LoopCount(); - - // Get suspend time (-1 = indefinitely) - inline TInt SuspendTime(); - - // Get / set default timing - inline TInt Timing(); - inline void SetTiming(TInt aTiming); - - // Get plugin name - inline TDesC& PluginName(); - - // Get bitmap file name - inline TDesC& BitmapFilename(); - - // Get landscape bitmap file name - inline TDesC& BitmapFilenameLandscape(); - - // Get/set lights on time (secs) - inline TInt Lights(); - inline void SetLights(TInt aSecs); - - // Landscape used? - inline TInt UseLandscape(); - - // Should bitmaps be scaled to screen - inline TInt ScaleBmps(); - -private: // Utility functions - // Opens the settings file (initialises the settings reader) - TInt OpenSettings(); - - // Figures out the bitmap file name - void LoadBitmapFileName(TBool aLandscape = EFalse); - -private: - // Settings file handler - CBmpAnimIniData* iIniData; - - // Time to run the animation. Overrides loop count - TInt iRunningTime; - - // Number of loops to be run. Used if run time is undefined - TInt iLoopCount; - - // Time to suspend the animation. -1 = indefinitely - TInt iSuspendTime; - - // Time to display each image. Individual image timing overrides this. - TInt iTiming; - - // Plugin name - TBuf iPluginName; - - // Bitmap file name - TFileName iMbmFileName; - - // Landscale bitmap file name - TFileName iMbmFileNameL; - - // Lights on time (secs) - TInt iLights; - - // Landscape images used (0 = no) - TInt iUseLandscape; - - // Bitmaps scaled to screen size (0 = no) - TInt iScaleBmps; - }; - - -// --- inlines --- - -// Get run time (-1 = not defined) -inline TInt CBmpAnimSettings::RunningTime() - { return iRunningTime; } - - -// Get loop count (-1 = not defined) -inline TInt CBmpAnimSettings::LoopCount() - { return iLoopCount; } - - -// Get suspend time (-1 = indefinitely) -inline TInt CBmpAnimSettings::SuspendTime() - { return iSuspendTime; } - - -// Get default timing -inline TInt CBmpAnimSettings::Timing() - { return iTiming; } - -// Set default timing -inline void CBmpAnimSettings::SetTiming(TInt aTiming) - { iTiming = aTiming; } - - -// Get default bitmap file -inline TDesC16& CBmpAnimSettings::PluginName() - { return iPluginName; } - - -// Get default bitmap file -inline TDesC16& CBmpAnimSettings::BitmapFilename() - { return iMbmFileName; } - -// Get landscape bitmap file -inline TDesC16& CBmpAnimSettings::BitmapFilenameLandscape() - { return iMbmFileNameL; } - -// Get lights on time (secs) -inline TInt CBmpAnimSettings::Lights() - { return iLights; } - - -// Set lights on time (secs) -inline void CBmpAnimSettings::SetLights(TInt aSecs) - { iLights = aSecs; } - -// Use landscape? -inline TInt CBmpAnimSettings::UseLandscape() - { return iUseLandscape; } - -// Scale bitmaps? -inline TInt CBmpAnimSettings::ScaleBmps() - { return iScaleBmps; } - -#endif // C_CBMPANIMSETTINGS_H diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/rom/bmpanimscrplugin.iby --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/rom/bmpanimscrplugin.iby Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -/* -* Copyright (c) 2009 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: IBY file for BmpAnimScrPlugin -* -*/ - - - -#ifndef __BMPANIMSCRPLUGIN_IBY__ -#define __BMPANIMSCRPLUGIN_IBY__ - -REM Bmpanim screensaver plugin - -#ifdef RD_SCREENSAVER_BMPANIM - -ECOM_PLUGIN(BmpAnimScrPlugin.dll, 101F86FF.rsc) - -data=DATAZ_\resource\plugins\BmpAnimScrPlugin.ini \resource\plugins\BmpAnimScrPlugin.ini -data=DATAZ_\resource\plugins\BmpAnimScrPlugin.mif \resource\plugins\BmpAnimScrPlugin.mif - -// Only present, if using BMP graphics -data=DATAZ_\resource\plugins\BmpAnimScrPlugin.mbm \resource\plugins\BmpAnimScrPlugin.mbm - -#endif -#endif // __BMPANIMSCRPLUGIN_IBY__ diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/101F86FF.rss --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/101F86FF.rss Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/* -* Copyright (c) 2009 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: ECOM Resource file for BmpAnimScrPlugin -* -*/ - - - -// 101F86FF.RSS -// -// Registry file for Bounce-plugin Implementation. -// -// Interface(s) : -// - -#include -#include - - -RESOURCE REGISTRY_INFO theInfo - { - // plugin's UID - dll_uid = 0x101F86FF; - interfaces = - { - INTERFACE_INFO - { - // ScreenSaver ECOM Plugin interface UID. - interface_uid = KCScreensaverPluginInterfaceDefinitionUid; - implementations = - { - IMPLEMENTATION_INFO - { - // plugin's UID - implementation_uid = 0x101F87F9; - version_no = 1; - // This is the displayed name of the plugin. - // It can be localised if needed - display_name = "zippo Zaver 3.1"; - default_data = ""; - // This must correspond the value returned by - // CBmpAnimScrPlugin::Capabilities - opaque_data = KScrPluginCapabilitiesNoneStr; - } - }; - } - }; - } - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/BmpAnimScrPluginDll.cpp --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/BmpAnimScrPluginDll.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2003 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: Plugin DLL export that creates the plugin object itself -* -*/ - - - - - -#include "CBmpAnimScrPlugin.h" - - -#ifndef EKA2 -// Dll entry point or something -GLDEF_C TInt E32Dll(TDllReason) - { - return KErrNone; - } -#endif - - -#define KCScreensaverPluginInterfaceDefinitionImpUid 0x101F87F9 - -#include - -// __________________________________________________________________________ -// Exported proxy for instantiation method resolution -// Use the plugin UID and Implementation factory method -// as a pair for ECom instantiation. -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY(KCScreensaverPluginInterfaceDefinitionImpUid, CBmpAnimScrPlugin::NewL) - }; - -// Give the table to the caller -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) - { - aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); - return ImplementationTable; - } -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimIniData.cpp --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimIniData.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,472 +0,0 @@ -/* -* Copyright (c) 2003 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: Bitmap animator INI file handler -* -*/ - - - - - -#include "CBmpAnimIniData.h" - -#include -#include - -// Default directory to look for INI file -_LIT(KIniFileDir,"C:\\private\\100056cf\\"); - -const TInt KTokenSize=32; - -#ifdef _DEBUG -// Debugging aids -enum TIniPanic - { - ESectionNameTooBig, - EKeyNameTooBig, - }; - -void Panic(TIniPanic aPanic) - { - _LIT(CBmpAnimIniData,"CBmpAnimIniData"); - User::Panic(CBmpAnimIniData,aPanic); - } -#endif // _DEBUG - -// d'tor -CBmpAnimIniData::~CBmpAnimIniData() - { - delete (TText*)iPtr.Ptr(); - delete iToken; - delete iName; - } - - -// Public allocation method -CBmpAnimIniData* CBmpAnimIniData::NewL(const TDesC& aName) - { - CBmpAnimIniData* p=new(ELeave) CBmpAnimIniData; - CleanupStack::PushL(p); - p->ConstructL(aName); - CleanupStack::Pop(); - return p; - } - - -// Find a key's string) value regardless of section (wide) -TBool CBmpAnimIniData::FindVar(const TDesC8& aKeyName, TDes16& aResult) - { - TPtrC8 tmpRes; - if (!FindVar(aKeyName, tmpRes)) - { - return EFalse; - } - - // Copy the 8-bit result into the 16-bit descriptor - aResult.Copy(tmpRes); - return ETrue; - } - - -// Find a key's (string) value regardless of section -TBool CBmpAnimIniData::FindVar(const TDesC8& aKeyName, TPtrC8& aResult) - { - _LIT8(KDummySection, ""); - // Call with no section, so starts at beginning - if (FindVar(KDummySection, aKeyName, aResult)) - { - return ETrue; - } - else - { - return EFalse; - } - } - - -// Find a key's (string) value given a section name and a key name (wide) -TBool CBmpAnimIniData::FindVar(const TDesC8& aSectName, - const TDesC8& aKeyName, - TDes16& aResult) - { - TPtrC8 tmpRes; - if (!FindVar(aSectName, aKeyName, tmpRes)) - { - return EFalse; - } - - // Copy the 8-bit result into the 16-bit descriptor - aResult.Copy(tmpRes); - return ETrue; - } - - -// Find a key's (string) value given a section name and a key name -TBool CBmpAnimIniData::FindVar(const TDesC8& aSectName, - const TDesC8& aKeyName, - TPtrC8& aResult) - { - __ASSERT_DEBUG(aSectName.Length() <= KTokenSize, Panic(ESectionNameTooBig)); - __ASSERT_DEBUG(aKeyName.Length() <= KTokenSize, Panic(EKeyNameTooBig)); - - TInt posStartOfSection(0); - TInt posEndOfSection(0); - TPtrC8 SearchBuf; - - // If we have a section, set pos to section start - if (aSectName.Length() > 0) - { - if (!FindSection(aSectName, posStartOfSection, posEndOfSection)) - { - return EFalse; - } - } - - // Look for key in ini file data Buffer - TInt posI = posStartOfSection; // Position in internal data Buffer - TBool FoundKey(EFalse); - while (!FoundKey) - { - // Search for next occurrence of aKeyName - SearchBuf.Set(iPtr.Mid(posI)); - TInt posSB = SearchBuf.Find(aKeyName); - - // If not found, return - if (posSB == KErrNotFound) - { - return EFalse; - } - - // Check this is at beginning of line (ie. non-commented) - // ie. Check preceding char was CR or LF - if(posSB > 0) - { - // Create a Buffer, starting one char before found subBuf - TPtrC8 CharBefore(SearchBuf.Right(SearchBuf.Length() - posSB + 1)); - // Check first char is end of prev - if(CharBefore[0] == '\n') - { - FoundKey = ETrue; - posI = posI + posSB; - } - else - { - posI = posI + posSB + 1; - } - } - else - { - FoundKey = ETrue; - } - - } // while (!FoundKey) - - // Set pos to just after '=' sign - SearchBuf.Set(iPtr.Mid(posI)); - TInt posSB = SearchBuf.Locate('='); - if (posSB == KErrNotFound) // Illegal format, should flag this... - { - return EFalse; - } - - // Identify start and end of data (EOL or EOF) - posI = posI + posSB + 1; // 1 char after '=' - TInt posValStart = posI; - TInt posValEnd; - SearchBuf.Set(iPtr.Mid(posI)); - posSB = SearchBuf.Locate('\r'); - if (posSB != KErrNotFound) - { - posValEnd = posI + posSB; - } - else - { - posValEnd = iPtr.Length(); - } - - // Check we are still in the section requested - if (aSectName.Length() > 0) - { - if (posValEnd > posEndOfSection) - { - return EFalse; - } - } - - // Parse Buffer from posn of key - // Start one space after '=' - TLex8 lex(iPtr.Mid(posValStart, posValEnd - posValStart)); - lex.SkipSpaceAndMark(); // Should be at the start of the data - aResult.Set(lex.MarkedToken().Ptr(), - posValEnd - posValStart - lex.Offset()); - - return ETrue; - } - - -// Find integer value regardless of section -TBool CBmpAnimIniData::FindVar(const TDesC8& aKeyName, TInt& aResult) - { - TPtrC8 ptr(NULL, 0); - if (FindVar(aKeyName, ptr)) - { - TLex8 lex(ptr); - if (lex.Val(aResult) == KErrNone) - { - return ETrue; - } - } - return EFalse; - } - - -// Find integer value within a given section -TBool CBmpAnimIniData::FindVar( - const TDesC8& aSection, const TDesC8& aKeyName, TInt& aResult) - { - TPtrC8 ptr(NULL, 0); - if (FindVar(aSection, aKeyName, ptr)) - { - TLex8 lex(ptr); - if (lex.Val(aResult) == KErrNone) - { - return ETrue; - } - } - return EFalse; - } - - -// Write integer value in given section -TInt CBmpAnimIniData::WriteVarL( - const TDesC8& aSection, const TDesC8& aKeyName, TInt aValue) - { - TBuf8<32> buf; - buf.Num(aValue); - return WriteVarL(aSection, aKeyName, buf); - } - - -// Write string value in given section -TInt CBmpAnimIniData::WriteVarL( - const TDesC8& aSection, const TDesC8& aKeyName, const TDesC8& aValue) - { - // First find the variable - this gives us a descriptor into the - // ini data giving the bound of the item that has to be replaced - TPtrC8 ptr; - TInt pos; - TBool found = FindVar(aSection, aKeyName, ptr); - - HBufC8* text = HBufC8::NewLC( - aSection.Length() + aKeyName.Length() + aValue.Length() + 7); // +7 for '=', '[', ']' and 2*cr+lf. - TPtr8 textp = text->Des(); - - if (found) - { - pos = ptr.Ptr() - iPtr.Ptr(); - textp.Append(aValue); - } - else - { - TInt posStartOfSection = 0; - TInt posEndOfSection = 0; - - if (FindSection(aSection, posStartOfSection, posEndOfSection)) - { - pos = posEndOfSection; - } - else - { - pos = iPtr.Length(); - textp.Append('['); - textp.Append(aSection); - textp.Append(']'); - textp.Append('\r'); - textp.Append('\n'); - } - textp.Append(aKeyName); - textp.Append('='); - textp.Append(aValue); - textp.Append('\r'); - textp.Append('\n'); - } - - TInt size = (iPtr.Length() + textp.Length() - ptr.Length()) * sizeof(TText8); - - if (size > iPtr.MaxLength()) - { - TText8* newdata = (TText8*) User::ReAllocL((TUint8*)iPtr.Ptr(), size); - iPtr.Set(newdata, iPtr.Length(), size/sizeof(TText8)); - } - - iPtr.Replace(pos, ptr.Length(), textp); - - CleanupStack::PopAndDestroy(text); - - return KErrNone; - } - - -// Commits the changes in variables, ie writes the file data (held in iPtr) -// into the actual disk file -void CBmpAnimIniData::CommitL() - { - TAutoClose fs; - User::LeaveIfError(fs.iObj.Connect()); - fs.PushL(); - - // Just replace the file with the data, no seeking necessary - TAutoClose file; - file.iObj.Replace(fs.iObj, *iName, EFileStreamText|EFileWrite); - file.PushL(); - - TPtrC8 ptrc8((TUint8*)iPtr.Ptr(), iPtr.Size()); - User::LeaveIfError(file.iObj.Write(ptrc8)); - - file.Pop(); - fs.Pop(); - } - - -// --- protected --- - -// c'tor -CBmpAnimIniData::CBmpAnimIniData() -: iPtr(NULL, 0) - { - __DECLARE_NAME(_S("CBmpAnimIniData")); - } - - -// Allocate a buffer and Read file's contents into iPtr -void CBmpAnimIniData::ConstructL(const TDesC& aName) - { - // Allocate space for token - iToken = HBufC8::NewL(KTokenSize + 2); // 2 extra chars for [tokenName] - - // Connect to file server - TAutoClose fs; - User::LeaveIfError(fs.iObj.Connect()); - fs.PushL(); - - // Find file, given name - TFindFile ff(fs.iObj); - TAutoClose file; - TInt err = ff.FindByDir(aName, KIniFileDir); - - // If found - cool, use the found file's name and open it - if (err == KErrNone) - { - iName = ff.File().AllocL(); - err = file.iObj.Open(fs.iObj, *iName, EFileStreamText | EFileRead); - } - - // If not found - create the file using the given name - if (err == KErrNotFound) - { - err = file.iObj.Create(fs.iObj, aName, EFileStreamText); - iName = aName.AllocL(); - } - - file.PushL(); - - // Get file size and read in as 8-bit data - TInt size = 0; - User::LeaveIfError(file.iObj.Size(size)); - TText8* data = (TText8*) User::AllocL(size); - iPtr.Set(data, size, size); - TPtr8 dest((TUint8*)data, 0, size); - User::LeaveIfError(file.iObj.Read(dest)); - - file.Pop(); - fs.Pop(); - } - - -// --- private --- - - -// Find a section in the INIfile -TBool CBmpAnimIniData::FindSection( - const TDesC8& aSection, TInt& aStart, TInt& aEnd) - { - TInt posI = 0; // Position in internal databuffer - TBool FoundSection = EFalse; - TPtrC8 SearchBuf; - - while (!FoundSection) - { - // Move search buffer to next area of interest - SearchBuf.Set(iPtr.Mid(posI)); - - // Make up token "[SECTIONNAME]", to search for - TPtr8 sectionToken = iToken->Des(); - _LIT8(sectionTokenFmtString,"[%S]"); - sectionToken.Format(sectionTokenFmtString, &aSection); - - // Search for next occurrence of aSection - TInt posSB = SearchBuf.Find(sectionToken); - - // If not found, return - if (posSB == KErrNotFound) - { - return EFalse; - } - - // Check this is at beginning of line (ie. non-commented) - // ie. Check preceding char was LF - if (posSB > 0) - { - // Create a Buffer, starting one char before found subBuf - TPtrC8 CharBefore(SearchBuf.Right(SearchBuf.Length() - posSB + 1)); - // Check first char is end of prev - if (CharBefore[0] == '\n') - { - FoundSection = ETrue; // found - posI = posI + posSB; - } - else - { - posI = posI + posSB + 1; // try again - } - } - else - { - FoundSection = ETrue; - } - - } // while (!FoundSection) - - // Set start of section, after section name, (incl '[' and ']') - aStart = posI + aSection.Length() + 2; - - // Set end of section, by finding begin of next section or end - SearchBuf.Set(iPtr.Mid(posI)); - - _LIT8(nextSectionBuf,"\n["); - - TInt posSB = SearchBuf.Find(nextSectionBuf); - if (posSB != KErrNotFound) - { - aEnd = posI + posSB + 1; - } - else - { - aEnd = iPtr.Length(); - } - - return ETrue; - } - -// EOF diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimItem.cpp --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimItem.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2003 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: Stores a single bitmap animation item: image with its -* properties (position, timing et al) -* -*/ - - - - - -// INCLUDES -#include -#include -#include - -#include "CBmpAnimItem.h" - -// default 0.20 secs -const TInt KDefaultTiming = 200000; - -// Public constructor, doesn't need a two-phase construction -CBmpAnimItem::CBmpAnimItem() - : iFlags(BAIF_OWNSICON), - iTiming(KDefaultTiming), - iPosition(TPoint(0, 0)) - { - } - - -// Destructor -CBmpAnimItem::~CBmpAnimItem() - { - if (Flags() & BAIF_OWNSICON) - { - delete iIcon; - } - } - - -// Set icon. If owned, an icon is deleted by the item -void CBmpAnimItem::SetIcon( - CGulIcon* aIcon, - TBool aItemOwnsIcon /*= ETrue */) - { - // Get rid of old icon, if any and if owned - if ((iIcon) && (Flags() & BAIF_OWNSICON)) - { - delete iIcon; - } - - iIcon = aIcon; - - if (aItemOwnsIcon) - { - iFlags |= BAIF_OWNSICON; - } - else - { - iFlags &= ~BAIF_OWNSICON; - } - } - - -// Set icon from bitmaps. If owned, an icon is deleted by the item -void CBmpAnimItem::SetIconL( - CFbsBitmap* aBitmap, - CFbsBitmap* aMask /* = NULL */, - TBool aItemOwnsIcon /* = ETrue */) - { - // Create a new icon - CGulIcon* icon = CGulIcon::NewL(); - - // Plug the bitmaps in - icon->SetBitmap(aBitmap); - icon->SetMask(aMask); - - // Does icon own bitmaps? - icon->SetBitmapsOwnedExternally(!aItemOwnsIcon); - - // Store the newly created icon - SetIcon(icon, aItemOwnsIcon); - } -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimModel.cpp --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimModel.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,170 +0,0 @@ -/* -* Copyright (c) 2003 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: Takes care of storing and serving the bitmaps -* to be animated along with their properties -* -*/ - - - - - -#include "CBmpAnimModel.h" - - -// C'tor -CBmpAnimModel::CBmpAnimModel() - { - } - - -// D'tor -CBmpAnimModel::~CBmpAnimModel() - { - // Delete item array - if (iItems) - { - iItems->ResetAndDestroy(); - } - delete iItems; - } - - -// Two-phase constructor, initialises member arrays and stuff -void CBmpAnimModel::ConstructL(CBmpAnimSettings* aSettings) - { - // Create item array - iItems = new(ELeave) CArrayPtrFlat( - KBmpAnimItemArrayGranularity); - - iSettings = aSettings; - } - - -// Number of items query -TInt CBmpAnimModel::NumberOfItems() const - { - return iItems ? iItems->Count() : 0; - } - - -// Add an item to the end of the array -void CBmpAnimModel::AppendItemL(CBmpAnimItem* aItem) - { - // Sanity check - if (!iItems) - { - ASSERT(EFalse); - return; - } - - // Stash it in - iItems->AppendL(aItem); - } - - -// Insert an item at . Space must be reserved. -void CBmpAnimModel::InsertItemL(TInt aIndex, CBmpAnimItem* aItem) - { - if ((iItems) && (aIndex >= 0) && (aIndex <= NumberOfItems())) - { - // Squeeze it in - iItems->InsertL(aIndex, aItem); - } - else - { - ASSERT(EFalse); - } - } - - -// Delete item at -void CBmpAnimModel::DeleteItemL(TInt aIndex) - { - if ((iItems) && (aIndex >= 0) && (aIndex <= NumberOfItems())) - { - // Grab hold of the item for deletion, remove from array - // and compress the array - CBmpAnimItem* ptr = iItems->At(aIndex); - iItems->Delete(aIndex); - delete ptr; - iItems->Compress(); - } - else - { - ASSERT(EFalse); - } - } - - -// Delete all Items -void CBmpAnimModel::DeleteAll() - { - if (iItems) - { - iItems->ResetAndDestroy(); - } - } - - -// Get item at position -CBmpAnimItem* CBmpAnimModel::ItemAt(TInt aIndex) const - { - if ((iItems) && (aIndex >= 0) && (aIndex < NumberOfItems())) - { - return iItems->At(aIndex); - } - else - { - return NULL; - } - } - - -// Get next item in animation sequence. Returns NULL at the end of the -// sequence (or if there are no items at all), and wraps around to the -// beginning, so that next call again returns an item. -CBmpAnimItem* CBmpAnimModel::NextItem(TBool& aWrapped) - { - CBmpAnimItem* pItem = ItemAt(iCurrentItem++); - - if (pItem) - { - aWrapped = EFalse; - } - else - { - // Apparently there are no more items - wrap around and set indicator - iCurrentItem = 0; - aWrapped = ETrue; - - pItem = ItemAt(iCurrentItem++); - } - - return pItem; - } - - -// Reserve space for Items -void CBmpAnimModel::SetReserveL(TInt aCount) - { - if ((iItems) && (aCount >= NumberOfItems())) - { - iItems->SetReserveL(aCount); - } - } - - -// --- private functions --- -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimScrPlugin.cpp --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimScrPlugin.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1073 +0,0 @@ -/* -* Copyright (c) 2003 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: Main code file for plugin -* -*/ - - - -#include -#include -#include -#include -#include -#include - -#include "CBmpAnimScrPlugin.h" -#include "BmpAnimUtils.h" - -#include -#include -// "BmpAnimScrPlugin.rsg" - -const TInt KDefaultViewTime = 1000000; - -// -// CBmpAnimSrcPlugin -// - -// Creates and returns a new instance of CBmpAnimScrPlugin -CBmpAnimScrPlugin* CBmpAnimScrPlugin::NewL() - { - CBmpAnimScrPlugin *plugin = new (ELeave) CBmpAnimScrPlugin(); - - // Initialize settings object so that the plugin name can be retrieved - iSettings = CBmpAnimSettings::NewL(); - - return plugin; - } - - -// Default constructor -CBmpAnimScrPlugin::CBmpAnimScrPlugin() - : iState(EPluginStateLoading), - iStopDisplaying(EFalse), - iLoadedAnimation(ENone) - { - BMALOGGER_CREATE; - - } - - -// Destructor -CBmpAnimScrPlugin::~CBmpAnimScrPlugin() - { - delete iModel; - delete iSettings; - - StopDisplayTimer(); - delete iDisplayTimer; - - BMALOGGER_DELETE; - } - - -// --- from Screensaverplugin --- - - -// Initialization function. Must be called before anything but -// name query can be done -TInt CBmpAnimScrPlugin::InitializeL(MScreensaverPluginHost *aHost) - { - ASSERT(aHost); - - // Sanity check - if (!aHost) - { - return KErrArgument; - } - - // Save the host interface - iHost = aHost; - - // Start state - iState = EPluginStateLoading; - - // Initial timing (may be overridden by settings) - iHost->SetRefreshTimerValue(KDefaultViewTime); - - // Lie that we'll show indicators so that host does not prevent - // plugin to be run if there are any to show. We'll stop after a - // while anyway and the indicators are shown by normal Screensaver - iHost->OverrideStandardIndicators(); - - // Grab hold of the environment (this could be in the plugin host interface) - iEikEnv = CEikonEnv::Static(); - - // Create the model to store the animation in - iModel = new(ELeave) CBmpAnimModel(); - iModel->ConstructL(iSettings); - - // Get screen info - UpdateDisplayInfo(); - - // Load the animation (Reload figures out which graphics should be used) - ReloadAnimationL(); - - // Create display timer - iDisplayTimer = CPeriodic::NewL(CActive::EPriorityStandard); - - return KErrNone; - } - - -// Draw function being called repeatedly by the host -TInt CBmpAnimScrPlugin::Draw(CWindowGc& aGc) - { - // If initializing, start the timer and move on to animation state - if (iState == EPluginStateInitializing) - { - BMALOGGER_WRITE("First draw, initializing"); - - StartDisplayTimer(); - HandlePluginState(); - SetDisplayMode(); - TInt nLights = iModel->Settings()->Lights(); - - if (nLights > 0) - { - Lights(nLights); - } - - // Make sure the animation sequence starts from the beginning - iModel->SetCurrentItemIndex(0); - } - - // Retrieve the next image in sequence - TBool endOfSequence = EFalse; - CBmpAnimItem* pItem = iModel->NextItem(endOfSequence); - - if ((endOfSequence) || (!pItem)) - { - // End of sequence reached, see if we've shown enough (1 minute) - if (iStopDisplaying) - { - // Stop the timer - StopDisplayTimer(); - - // Back to square 1 - iState = EPluginStateInitializing; - - // Set a lower refresh rate while plugin is suspended. - // This allows the Screensaver to stop Window Server heartbeat - // and the system is able to sleep normally - // NOTE: Not needed anymore, Screensaver now shuts down - // WSERV heartbeat for suspended plugins - // iHost->SetRefreshTimerValue(KDefaultViewTime); - - TInt suspendTime = iModel->Settings()->SuspendTime(); - - BMALOGGER_WRITEF(_L("BMA: Done drawing, suspending for %d"), - suspendTime); - - iHost->Suspend(suspendTime); - - return KErrNone; - } - } - - if (pItem) - { - // Make sure the window is empty in case the bitmap doesn't - // fill the whole screen - aGc.Clear(); - - DrawCentered(aGc, pItem); - } - -// Activate code if centering INI-controllable -#if 0 - // Retrieve drawing information - CGulIcon* pIcon = pItem->Icon(); - TPoint position = pItem->Position(); - CFbsBitmap* bitmap = pIcon->Bitmap(); - CFbsBitmap* mask = pIcon->Mask(); - - // Draw the whole bitmap at position - TRect rect(position, bitmap->SizeInPixels()); - - if (mask) - { - // Looks like a real icon - draw masked - aGc.BitBltMasked(position, bitmap, rect, mask, ETrue); - } - else - { - // Just the bitmap - no masked draw - aGc.BitBlt(position, bitmap, rect); - } - - // Wait for the specified time until next image - // - // TODO: The new wk28 Screensaver crashes if the next call - // is uncommented. Maybe the timer is not stopped - // before starting again? Hmm... doesn't seem to happen - // anymore. I wonder what changed. Anyway, I'll have it - // commented out for the time being, in order to control - // all frames' rate with the single setting - // - // NOTE: There was a flaw in Screensaver where it would try to - // start refresh timer twice, if plugin changes the value during - // the first draw. The fix is released for 2.6_wk40_FB4 - // iHost->SetRefreshTimerValue(pItem->Timing()); - } -/* - aGc.SetPenColor(TRgb(255,0,0)); - aGc.SetPenStyle(CGraphicsContext::ESolidPen); - aGc.DrawRect(TRect(30, 30, 100, 100)); - - aGc.SetPenColor(TRgb(255,0,0)); - aGc.SetPenSize(TSize(3,3)); - aGc.DrawRect(TRect(120, 100, 200, 150)); -*/ -#endif - return KErrNone; - } - - -// Return the name of the plugin -const TDesC16& CBmpAnimScrPlugin::Name() const - { - if (iSettings) - { - return iSettings->PluginName(); - } - - return KPluginName; - } - - -// Handles events sent by the screensaver -TInt CBmpAnimScrPlugin::HandleScreensaverEventL( - TScreensaverEvent aEvent, - TAny* /* aData */) - { - switch (aEvent) - { - case EScreensaverEventStarting: - BMALOGGER_WRITE("Start event"); - break; - case EScreensaverEventStopping: - BMALOGGER_WRITE("Stop event"); - StopDisplayTimer(); - iState = EPluginStateInitializing; - break; - case EScreensaverEventDisplayChanged: - BMALOGGER_WRITE("Display changed event"); - // Grab current screen info - UpdateDisplayInfo(); - // Reload animation, if needed - ReloadAnimationL(); - break; - default: - break; - } - - return KErrNone; - } - - -// Return plugin capabilities (configurable) -TInt CBmpAnimScrPlugin::Capabilities() - { - return EScpCapsConfigure; - } - - -// Perform a plugin function -TInt CBmpAnimScrPlugin::PluginFunction(TScPluginCaps aFunction, TAny* aParam) - { - switch (aFunction) - { - case EScpCapsConfigure: - { - TRAPD(err, err = ConfigureL(aParam)); - return err; - } - break; - default: - return KErrNotSupported; - break; - } - } - - -// --- private functions --- - -// Draws centered items -void CBmpAnimScrPlugin::DrawCentered(CWindowGc& aGc, CBmpAnimItem* aItem) - { - CGulIcon* pIcon = aItem->Icon(); - CFbsBitmap* bitmap = pIcon->Bitmap(); - CFbsBitmap* mask = pIcon->Mask(); - - if (!bitmap) - return; - - // Center the bitmap horizontally and vertically (crop off excess) - TPoint pos; - TRect rectToDraw; - TSize sizeBmp = bitmap->SizeInPixels(); - TInt screenWidth = iDi.iRect.Width(); - TInt screenHeight = iDi.iRect.Height(); - - // Horizontally - if (sizeBmp.iWidth <= screenWidth) - { - // Width fits on screen - center xpos - pos.iX = (screenWidth - sizeBmp.iWidth) / 2; - - // Whole width of bmp can be drawn - rectToDraw.SetWidth(sizeBmp.iWidth); - } - else - { - // Bmp wider than screen - xpos top left - pos.iX = 0; - - // Adjust draw rect position and width - rectToDraw.iTl.iX = (sizeBmp.iWidth - screenWidth) / 2; - rectToDraw.SetWidth(screenWidth); - } - - // Vertically - if (sizeBmp.iHeight <= screenHeight) - { - // Height fits on screen - center ypos - pos.iY = (screenHeight - sizeBmp.iHeight) / 2; - - // Whole height of bmp can be drawn - rectToDraw.SetHeight(sizeBmp.iHeight); - } - else - { - // Bmp higher than screen - ypos top left - pos.iY = 0; - - // Adjust draw rect position and height - rectToDraw.iTl.iY = (sizeBmp.iHeight - screenHeight) / 2; - rectToDraw.SetHeight(screenHeight); - } - - // Do the drawing - if (mask) - { - // Looks like a real icon - draw masked - aGc.BitBltMasked(pos, bitmap, rectToDraw, mask, ETrue); - } - else - { - // Just the bitmap - no masked draw - aGc.BitBlt(pos, bitmap, rectToDraw); - } - } - - -// Loads the animation into the model -void CBmpAnimScrPlugin::LoadAnimationL(TBool aLandscape, TBool aRotate) - { - // Rotated landscape not supported - ASSERT(!(aLandscape && aRotate)); - - // Start by getting rid of a possible loaded animation - iModel->DeleteAll(); - - // Bitmap index. If negative, loading is finished. - TInt nIndex = KMifIdFirst; - - TFileName fileName; - - if (aLandscape) - { - fileName = iModel->Settings()->BitmapFilenameLandscape(); - } - else - { - fileName = iModel->Settings()->BitmapFilename(); - } - - BMALOGGER_WRITEF(_L("BMA: Loading from: %S"), &(fileName)); - - while (nIndex > 0) - { - CFbsBitmap* pBmp = NULL; - - TRAPD(err, pBmp = AknIconUtils::CreateIconL(fileName, nIndex)); - - if ((pBmp) && (err == KErrNone)) - { - // Got bitmap, push and set size - CleanupStack::PushL(pBmp); - TInt scaleErr = ScaleBitmap(pBmp, aRotate); - if (scaleErr == KErrNone) - { - // Create an item with the bitmap and store it in the model - CBmpAnimItem* pItem = new(ELeave) CBmpAnimItem(); - CleanupStack::PushL(pItem); - - pItem->SetIconL(pBmp); - iModel->AppendItemL(pItem); - - CleanupStack::Pop(2); // pBmp, pItem - - BMALOGGER_WRITEF(_L("BMA: Loaded bmp %d"), nIndex); - - // Try loading next bitmap (skip mask IDs) - nIndex += 2; - } - else - { - BMALOGGER_WRITEF(_L("BMA: Bmp %d scale err %d"), - nIndex, scaleErr); - - // Apparently SVG icon was not found, this is not caught - // in CreateIconL(). Assume last image was loaded. - CleanupStack::PopAndDestroy(); // pBmp - nIndex = -1; - } - } - else - { - // Loading failed - maybe reached end of bitmaps - nIndex = -1; - - BMALOGGER_WRITEF(_L("BMA: Bmp load failed: %d"), err); - } - } - - // Save the type of loaded animation - if (aLandscape) - { - iLoadedAnimation = ELandscape; - } - else if (aRotate) - { - iLoadedAnimation = EPortraitRotated; - } - else - { - iLoadedAnimation = EPortrait; - } - - // On to next state - HandlePluginState(); - - // Start animating, when appropriate - iHost->SetRefreshTimerValue(iModel->Settings()->Timing()); - - BMALOGGER_WRITE("BMA: Animation loaded"); - } - - -// Re-loads the animation into the model, if needed -void CBmpAnimScrPlugin::ReloadAnimationL() - { - // Check if the correct graphics are already loaded - if (!ReloadNeeded()) - { - // Done! That was easy :) - return; - } - - // Load correct graphics - LoadAnimationL(LoadLandscape(), RotateNeeded()); - } - - -// Starts the display timer -void CBmpAnimScrPlugin::StartDisplayTimer() - { - ASSERT(iDisplayTimer); - - TInt time = iModel->Settings()->RunningTime(); - - BMALOGGER_WRITEF(_L("BMA: Start display timer for %d"), time); - - iStopDisplaying = EFalse; - iDisplayTimer->Start( - time, - time, - TCallBack(DisplayTimerCallback, this)); - } - - -// Stops the display timer -void CBmpAnimScrPlugin::StopDisplayTimer() - { - BMALOGGER_WRITE("BMA: Stop display timer"); - - if (iDisplayTimer) - { - iDisplayTimer->Cancel(); - } - - iStopDisplaying = EFalse; - } - - -// Display timer callback - sets animation stop flag -TInt CBmpAnimScrPlugin::DisplayTimerCallback(TAny* aPtr) - { - BMALOGGER_WRITE("BMA: Display timer timeout"); - - CBmpAnimScrPlugin* _this = REINTERPRET_CAST(CBmpAnimScrPlugin*, aPtr); - _this->iStopDisplaying = ETrue; - return KErrNone; - } - - -// Changes the internal state flag -void CBmpAnimScrPlugin::HandlePluginState() - { - switch (iState) - { - case EPluginStateLoading: - iState = EPluginStateInitializing; - break; - case EPluginStateInitializing: - iState = EPluginStateAnimation; - break; - case EPluginStateAnimation: - break; - case EPluginStateStoppingAnimation: - iHost->SetRefreshTimerValue(KDefaultViewTime); - iState = EPluginStateInitializing; - break; - } - } - - -// Requests display mode from host -void CBmpAnimScrPlugin::SetDisplayMode() - { - if (!iHost) - { - return; - } - - // Exit partial mode - iHost->ExitPartialMode(); - } - - -void CBmpAnimScrPlugin::Lights(TInt aSecs) - { - BMALOGGER_WRITEF(_L("BMA: Request lights for %d secs"), aSecs); - iHost->RequestLights(aSecs); - } - - -// Configure the plugin -TInt CBmpAnimScrPlugin::ConfigureL(TAny* aParam) - { - if (!iSettings) - { - return KErrNotFound; - } - - // Grab the parameter (CEikonEnv in this case) - CEikonEnv* eikEnv = NULL; - - if (aParam) - { - // The host was kind enough to provide us with a param - use it - eikEnv = REINTERPRET_CAST(CEikonEnv*, aParam); - } - else if (iEikEnv) - { - // Use own env, if initialized - eikEnv = iEikEnv; - } - - TInt setting = iSettings->Lights(); - - CAknNumberQueryDialog* dlg = CAknNumberQueryDialog::NewL(setting); - CleanupStack::PushL(dlg); - _LIT(KPrompt, "Lights time (sec)"); - dlg->SetPromptL(KPrompt); - dlg->SetMinimumAndMaximum(0, 30); - CleanupStack::Pop(); - - if (dlg->ExecuteLD(R_AVKON_DIALOG_QUERY_VALUE_NUMBER)) - { - iSettings->SetLights(setting); - iSettings->SaveSettingsL(); - } - - // All was swell! - return KErrNone; - } - - -// Scale bitmap to screen size, set size of SVG bitmaps -TInt CBmpAnimScrPlugin::ScaleBitmap(CFbsBitmap* aBmp, TBool aRotate) - { - TInt ret = KErrNone; - - // SVG size always screen size - TSize size = iDi.iRect.Size(); - - if (!AknIconUtils::IsMifIcon(aBmp)) - { - // Bitmaps maintain their original size, unless scaling requested, in which - // case screen size is OK - if (!iSettings->ScaleBmps()) - { - // No scaling, use original size - size = aBmp->SizeInPixels(); - - if (aRotate) - { - // Lie the target size, otherwise IconUitls will think - // the image needs scaling (this won't work perfectly - // either, the image gets clipped a little :( - //size.SetSize(size.iHeight, size.iHeight); - - // Flip size for rotation - size.SetSize(size.iHeight, size.iWidth); - } - } - } - - if (aRotate) - { - // Set image to screen size and rotate 90 deg left (270 right) - // ret = SetSizeAndRotation(aBmp, size, 270); - ret = AknIconUtils::SetSizeAndRotation( - aBmp, size, EAspectRatioPreservedSlice, 270); - } - else - { - // Just set image to size - ret = AknIconUtils::SetSize(aBmp, size, EAspectRatioPreserved); - } - - return ret; - } - - -// Returns ETrue if reload of the animation is needed -TBool CBmpAnimScrPlugin::ReloadNeeded() - { - // Assume reload needed - TBool needed = ETrue; - - switch (iLoadedAnimation) - { - case EPortrait: - // No reload if display portrait - if (!DisplayIsLandscape()) - { - needed = EFalse; - } - break; - - case ELandscape: - case EPortraitRotated: - // No reload if display landscape - if (DisplayIsLandscape()) - { - needed = EFalse; - } - break; - - case ENone: - default: - // Reload - break; - } - - return needed; - } - - -// Returns ETrue if display in landscape -TBool CBmpAnimScrPlugin::DisplayIsLandscape() - { - // Should actually check the rotation and stuff, but what the hey... - return (iDi.iRect.Width() > iDi.iRect.Height()); - } - - -// Returns ETrue if graphics should be rotated -TBool CBmpAnimScrPlugin::RotateNeeded() - { - // Rotate needed, if only portrait graphics are used, and - // display is landscape - return ((!iSettings->UseLandscape()) && (DisplayIsLandscape())); - } - - -// Returns ETrue if landscape graphics should be loaded -TBool CBmpAnimScrPlugin::LoadLandscape() - { - // Landscape, if only available and display is landscape - return ((iSettings->UseLandscape()) && (DisplayIsLandscape())); - } - - -// Updates the saved information about display -void CBmpAnimScrPlugin::UpdateDisplayInfo() - { - iDi.iSize = sizeof(TScreensaverDisplayInfo); - iHost->DisplayInfo(&iDi); - } - -#if 0 -// Rotates and scales a source bitmap into target bitmap (non-leaving wrapper) -TInt CBmpAnimScrPlugin::SetSizeAndRotation( - CFbsBitmap* aBmp, TSize aSize, TInt aAngle) - { - // Anything to do? - if ((aBmp) && (aBmp->SizeInPixels() == aSize) && ((aAngle % 360) == 0)) - { - // Duh, the bitmap is already as requested - return KErrNone; - } - - // Call the actual workhorse - TRAPD(err, SetSizeAndRotationL(aBmp, aSize, aAngle)); - - return err; - } - - -// Rotates and scales a source bitmap into target bitmap (leaving version) -void CBmpAnimScrPlugin::SetSizeAndRotationL( - CFbsBitmap* aBmp, TSize aSize, TInt aAngle) - { - // Make a copy of the source bitmap, and use the original source as target - CFbsBitmap* tmpBmp = new (ELeave) CFbsBitmap; - CleanupStack::PushL(tmpBmp); - - User::LeaveIfError(tmpBmp->Duplicate(aBmp->Handle())); - - // Discard original bitmap - aBmp->Reset(); - - // Create new target bitmap in the original object - User::LeaveIfError(aBmp->Create(aSize, tmpBmp->DisplayMode())); - - // Let the workhorse do its work - RotateAndScaleBitmapL(TRect(aSize), aBmp, tmpBmp, aAngle); - - // Not interested in original anymore - CleanupStack::PopAndDestroy(tmpBmp); - } - - -// Rotates and scales a source bitmap into target bitmap -void CBmpAnimScrPlugin::RotateAndScaleBitmapL( - const TRect& aTrgRect, - CFbsBitmap* aTrgBitmap, - CFbsBitmap* aSrcBitmap, - TInt aAngle) - { - aAngle = aAngle % 360; - if (aAngle < 0) - { - aAngle+=360; - } - - if (!aSrcBitmap) User::Leave(KErrArgument); - if (!aTrgBitmap) User::Leave(KErrArgument); - if (aSrcBitmap->DisplayMode() != aTrgBitmap->DisplayMode()) - User::Leave(KErrArgument); - - TSize trgBitmapSize = aTrgBitmap->SizeInPixels(); - if ((trgBitmapSize.iHeight < aTrgRect.iBr.iY) || - (trgBitmapSize.iWidth < aTrgRect.iBr.iX)) - { - User::Leave(KErrArgument); - } - - if (aTrgRect.IsEmpty()) - return; - - TSize srcSize = aSrcBitmap->SizeInPixels(); - - TInt centerX = srcSize.iWidth / 2; - TInt centerY = srcSize.iHeight / 2; - - TInt trgWidth = aTrgRect.Width(); - TInt trgHeight = aTrgRect.Height(); - - TInt scalefactor = 65536; - TInt xscalefactor = (srcSize.iWidth << 16) / trgWidth; - TInt yscalefactor = (srcSize.iHeight << 16) / trgHeight; - - // Check if rotating 90 left or right, no need to scale - if (((aAngle == 270) || (aAngle == 90)) && - (srcSize.iWidth == trgHeight) && - (srcSize.iHeight == trgWidth)) - { - scalefactor = 65535; - } - else - { - if (xscalefactor < yscalefactor) - { - scalefactor = yscalefactor; - } - else - { - scalefactor = xscalefactor; - } - } - - TBool srcTemporary = EFalse; - TBool hardMask = EFalse; - if (aSrcBitmap->IsRomBitmap()) - { - srcTemporary = ETrue; - } - if (aSrcBitmap->IsCompressedInRAM()) - { - srcTemporary = ETrue; - } - - TBool fallbackOnly = EFalse; - TDisplayMode displayMode = aSrcBitmap->DisplayMode(); - TUint8 fillColor = 0; - - switch(displayMode) - { - case EGray2: - srcTemporary = ETrue; - hardMask = ETrue; - fillColor = 0xff; // white - break; - case EGray4: - case EGray16: - case EColor16: - case EColor16M: - case ERgb: - fallbackOnly = ETrue; - break; - case EColor256: - fillColor = 0xff; // should be black in our indexed palette.... - case EGray256: - case EColor4K: - case EColor64K: - - case EColor16MU: - // These are the supported modes - break; - default: - fallbackOnly = ETrue; - } - - if (fallbackOnly) - { - // Color mode not supported - User::Leave(KErrNotSupported); - } - - CFbsBitmap* realSource = aSrcBitmap; - CFbsBitmap* realTarget = aTrgBitmap; - if (srcTemporary) - { - realSource = new (ELeave) CFbsBitmap(); - CleanupStack::PushL(realSource); - if (hardMask) - { - realTarget = new (ELeave) CFbsBitmap(); - CleanupStack::PushL(realTarget); - User::LeaveIfError(realSource->Create(srcSize, EGray256)); - displayMode = EGray256; - User::LeaveIfError(realTarget->Create( - aTrgBitmap->SizeInPixels(), EGray256)); - } - else - { - User::LeaveIfError(realSource->Create( - srcSize, aSrcBitmap->DisplayMode())); - } - - CFbsBitmapDevice* dev = CFbsBitmapDevice::NewL(realSource); - CleanupStack::PushL(dev); - CFbsBitGc* gc = NULL; - User::LeaveIfError(dev->CreateContext(gc)); - CleanupStack::PushL(gc); - gc->BitBlt(TPoint(0,0), aSrcBitmap); - CleanupStack::PopAndDestroy(2); // dev, gc - } - - // Heap lock for FBServ large chunk is only needed with large bitmaps. - if (realSource->IsLargeBitmap() || realTarget->IsLargeBitmap()) - { - realTarget->LockHeapLC(ETrue); // fbsheaplock - } - else - { - // Bogus push so we can pop() anyway - CleanupStack::PushL((TAny*)NULL); - } - - TUint32* srcAddress = realSource->DataAddress(); - TUint32* trgAddress = realTarget->DataAddress(); - - TReal realsin; - TReal realcos; - TInt sin; - TInt cos; - - User::LeaveIfError(Math::Sin(realsin, ((2*KPi)/360) * aAngle)); - User::LeaveIfError(Math::Cos(realcos, ((2*KPi)/360) * aAngle)); - - sin = ((TInt)(realsin * scalefactor)); - cos = ((TInt)(realcos * scalefactor)); - - TInt xx = ((trgWidth)/2) - ((srcSize.iWidth/2) - centerX); - TInt yy = ((trgHeight)/2) - ((srcSize.iHeight/2) - centerY); - - TInt x = 0; - TInt y = 0; - TInt u = 0; - TInt v = 0; - - if( (displayMode==EGray256) || (displayMode==EColor256) ) - { - TInt srcScanLen8 = CFbsBitmap::ScanLineLength( - srcSize.iWidth, displayMode); - TInt trgScanLen8 = CFbsBitmap::ScanLineLength( - trgBitmapSize.iWidth, displayMode); - TUint8* srcAddr8 = reinterpret_cast(srcAddress); - TUint8* trgAddr8 = reinterpret_cast(trgAddress); - - // skip left and top margins in the beginning - trgAddr8 += trgScanLen8 * aTrgRect.iTl.iY + aTrgRect.iTl.iX; - - for (y = 0; y < trgHeight; y++) - { - u = (-xx) * cos + (y-yy) * sin + (centerX<<16); - v = (y-yy) * cos - (-xx) * sin + (centerY<<16); - for (x = 0; x < trgWidth; x++) - { - if (((u>>16)>=srcSize.iWidth) || - ((v>>16)>=srcSize.iHeight) || - ((u>>16)<0) || - ((v>>16)<0)) - { - *trgAddr8++ = fillColor; - } - else - { - *trgAddr8++ = srcAddr8[(u>>16)+(((v>>16))*srcScanLen8)]; - } - u += cos; - v -= sin; - } - trgAddr8 += trgScanLen8 - trgWidth; - } - } - else if( displayMode == EColor64K || displayMode == EColor4K) - { - TInt srcScanLen16 = CFbsBitmap::ScanLineLength( - srcSize.iWidth, displayMode) / 2; - TInt trgScanLen16 = CFbsBitmap::ScanLineLength( - trgBitmapSize.iWidth, displayMode) / 2; - TUint16* srcAddr16 = reinterpret_cast(srcAddress); - TUint16* trgAddr16 = reinterpret_cast(trgAddress); - - // skip left and top margins in the beginning - trgAddr16 += trgScanLen16 * aTrgRect.iTl.iY + aTrgRect.iTl.iX; - - for (y = 0; y < trgHeight; y++) - { - u = (-xx) * cos + (y-yy) * sin + (centerX<<16); - v = (y-yy) * cos - (-xx) * sin + (centerY<<16); - for (x = 0; x < trgWidth; x++) - { - if (((u>>16)>=srcSize.iWidth) || - ((v>>16)>=srcSize.iHeight) || - ((u>>16)<0) || - ((v>>16)<0)) - { - *trgAddr16++ = 0; - } - else - { - *trgAddr16++ = - srcAddr16[(u>>16)+(((v>>16))*srcScanLen16)]; - } - u += cos; - v -= sin; - } - trgAddr16 += trgScanLen16 - trgWidth; - } - } - else if(displayMode == EColor16MU) - { - TInt srcScanLen32 = CFbsBitmap::ScanLineLength( - srcSize.iWidth, displayMode) / 4; - TInt trgScanLen32 = CFbsBitmap::ScanLineLength( - trgBitmapSize.iWidth, displayMode) / 4; - TUint32* srcAddr32 = srcAddress; - TUint32* trgAddr32 = trgAddress; - - // skip left and top margins in the beginning - trgAddr32 += trgScanLen32 * aTrgRect.iTl.iY + aTrgRect.iTl.iX; - - for (y = 0; y < trgHeight; y++) - { - u = (-xx) * cos + (y-yy) * sin + (centerX<<16); - v = (y-yy) * cos - (-xx) * sin + (centerY<<16); - for (x = 0; x < trgWidth; x++) - { - if (((u>>16)>=srcSize.iWidth) || - ((v>>16)>=srcSize.iHeight) || - ((u>>16)<0) || - ((v>>16)<0)) - { - *trgAddr32++ = 0; - } - else - { - *trgAddr32++ = - srcAddr32[(u>>16)+(((v>>16))*srcScanLen32)]; - } - u += cos; - v -= sin; - } - trgAddr32 += trgScanLen32 - trgWidth; - } - } - else - { - // Display mode not supported - but this should've been caught - // already earlier - User::Leave(KErrUnknown); - } - - CleanupStack::PopAndDestroy(); // fbsheaplock - - if (srcTemporary) - { - if (hardMask) - { - CFbsBitmapDevice* dev = CFbsBitmapDevice::NewL(aTrgBitmap); - CleanupStack::PushL(dev); - CFbsBitGc* gc = NULL; - User::LeaveIfError(dev->CreateContext(gc)); - CleanupStack::PushL(gc); - gc->BitBlt(TPoint(0,0), realTarget); - CleanupStack::PopAndDestroy(3); // dev, gc, realtarget - } - CleanupStack::PopAndDestroy(); // realSource - } - } -#endif - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimSettings.cpp --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimSettings.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,320 +0,0 @@ -/* -* Copyright (c) 2003 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: Loads and stores the bitmap animator settings -* -*/ - - - - - -#include - -#include "CBmpAnimSettings.h" - -#include "BmpAnimUtils.h" -#include - -// Defaults -const TInt KRunningTime = 1000000 * 60; // 60 secs -const TInt KTiming = 200000; // 5 fps -const TInt KSuspendTime = -1; // Max = KMaxTInt, -1 = indefinitely -const TInt KUndefined = -1; - -// Configuration file name -_LIT(KIniFile, "BmpAnimScrPlugin.ini"); - -// Default bitmap file name -_LIT(KMbmFileName, "BmpAnimScrPlugin.mbm"); - -// Default bitmap file name - lansdscape -_LIT(KMbmFileNameL, "BmpAnimScrPluginL.mbm"); - -// Basic info section name -_LIT8(KIniSectionInfo, "info"); - -// Info section keys -_LIT8(KIniKeyName, "name"); // plugin name -_LIT8(KIniKeyNumImages, "numimages"); // number of images -_LIT8(KIniKeyMbmFile, "mbmfile"); // name of imagefile -_LIT8(KIniKeyMbmFileL, "mbmfilelandscape"); // name of landscape imagefile -_LIT8(KIniKeyRunningTime, "runningtime"); // time to run animation (in millis) -_LIT8(KIniKeyLoopCount, "loopcount"); // loop count (if time is not defined) -_LIT8(KIniKeySuspendTime, "suspendtime"); // time to suspend (in millis) -_LIT8(KIniKeyTiming, "timing"); // time to display each image (RE-USED BELOW) -_LIT8(KIniKeyLights, "lights"); // lights on for 5 secs. Over 5 = number of secs -_LIT8(KIniKeyUseLandscape, "uselandscape"); // 1 = landscape image file used -_LIT8(KIniKeyScaleBmps, "scalebmps"); // 1 = bitmaps scaled to screen size - -// Image section base name -_LIT8(KIniSectionImageBase, "image"); // image information section name - -// Image section keys -_LIT8(KIniKeyType, "type"); // 0 = background, 1 = bitmap, 2 = icon -_LIT8(KIniKeyIndex, "index"); // index of image in mbm -_LIT8(KIniKeyMaskIndex, "maskindex"); // index of icon mask in mbm -_LIT8(KIniKeyFile, "file"); // name of image file (not yet supported) -_LIT8(KIniKeyPosX, "posx"); // display position X -_LIT8(KIniKeyPosY, "posy"); // display position Y -// _LIT8(KIniKeyTiming, "timing"); // time to display this image (NOTE RE-USE!) - - -// User constructor -CBmpAnimSettings* CBmpAnimSettings::NewL() - { - CBmpAnimSettings* self = new(ELeave) CBmpAnimSettings(); - - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); - - return self; - } - - -// C'tor, sets defaults -CBmpAnimSettings::CBmpAnimSettings() - : iRunningTime(KRunningTime), - iLoopCount(KUndefined), - iSuspendTime(KSuspendTime), - iTiming(KTiming), - iPluginName(KPluginName), - iMbmFileName(KMbmFileName), - iMbmFileNameL(KMbmFileNameL), - iLights(KUndefined), - iUseLandscape(0), - iScaleBmps(0) - { - } - - -// Two-phase constructor -void CBmpAnimSettings::ConstructL() - { - // Try to open the settings file - if (OpenSettings() == KErrNone) - { - LoadSettingsL(); - } - } - - -// D'tor -CBmpAnimSettings::~CBmpAnimSettings() - { - delete iIniData; - } - - -// --- Access functions --- - - -// Loads (common) settings from the settings file -TBool CBmpAnimSettings::LoadSettingsL() - { - // Sanity check - if (!iIniData) - { - return EFalse; - } - - // Running time (never mind the section) - if (!(iIniData->FindVar(KIniKeyRunningTime, iRunningTime))) - { - // Running time not found - try loop count - if (!(iIniData->FindVar(KIniKeyLoopCount, iLoopCount))) - { - // That's not there either - use default running time - iRunningTime = KRunningTime; - } - else - { - // Loop count found - running time is undefined - iRunningTime = KUndefined; - } - } - - // Suspend time - if (!(iIniData->FindVar(KIniKeySuspendTime, iSuspendTime))) - { - iSuspendTime = KSuspendTime; // TODO: KUndefined - } - - // Default timing (need to use section as well) - if (!(iIniData->FindVar( - KIniSectionInfo, - KIniKeyTiming, - iTiming))) - { - iTiming = KTiming; - } - - // Lights time - if (!(iIniData->FindVar(KIniKeyLights, iLights))) - { - iLights = KUndefined; - } - - // Use landscape - if (!(iIniData->FindVar(KIniKeyUseLandscape, iUseLandscape))) - { - iUseLandscape = 0; - } - - // Scale bmps - if (!(iIniData->FindVar(KIniKeyScaleBmps, iScaleBmps))) - { - iScaleBmps = 0; - } - - // Plugin name - iPluginName = KNullDesC; - if ((!(iIniData->FindVar(KIniKeyName, iPluginName))) || - (iPluginName.Length() <= 0)) - { - // Not found, or empty setting - use default - iPluginName = KPluginName; - } - - // Load BMP file names - LoadBitmapFileName(); - LoadBitmapFileName(ETrue); - - BMALOGGER_WRITEF(_L("BMA: Detected settings:")); - BMALOGGER_WRITEF(_L(" Name: %S"), &iPluginName); - BMALOGGER_WRITEF(_L(" Run for: %d"), RunningTime()); - BMALOGGER_WRITEF(_L(" Loops: %d"), LoopCount()); - BMALOGGER_WRITEF(_L(" Suspend: %d"), SuspendTime()); - BMALOGGER_WRITEF(_L(" Timing: %d"), Timing()); - BMALOGGER_WRITEF(_L(" Lights: %d"), Lights()); - BMALOGGER_WRITEF(_L(" Bitmap file: %S"), &iMbmFileName); - BMALOGGER_WRITEF(_L(" Lanscape bitmap file: %S"), &iMbmFileNameL); - BMALOGGER_WRITEF(_L(" Use landscape: %d"), UseLandscape()); - BMALOGGER_WRITEF(_L(" Scale bmps: %d"), ScaleBmps()); - BMALOGGER_WRITEF(_L("BMA: End settings")); - - return ETrue; - } - - -// Saves (common) settings -TBool CBmpAnimSettings::SaveSettingsL() - { - // Sanity check - if (!iIniData) - { - return EFalse; - } - - // Write lights - if (iIniData->WriteVarL( - KIniSectionInfo, KIniKeyLights, iLights) == KErrNone) - { - iIniData->CommitL(); - } - - return ETrue; - } - -// --- private --- - - -// Opens the settings file (initialises the settings reader) -TInt CBmpAnimSettings::OpenSettings() - { - // Locate the dll path - TFileName dllName; -// Dll::FileName(dllName); - dllName.Append(_L("\\resource\\plugins\\")); - - // Combine the dll path with the settings file name - TParse p; - p.SetNoWild(KIniFile, &dllName, NULL); - - BMALOGGER_WRITEF(_L("Searching INI: %S"), &(p.FullName())); - - // Try to open the INI file from plugin directory - TRAPD(err, iIniData = CBmpAnimIniData::NewL(p.FullName())); - - if (err != KErrNone) - { - BMALOGGER_WRITE("INI not in plugin dir, trying \\system\\data"); - // Try \system\data instead - TRAP(err, iIniData = CBmpAnimIniData::NewL(KIniFile)); - } - - if (err != KErrNone) - { - // Make sure the settings are not attempted to be used - delete iIniData; - iIniData = NULL; - BMALOGGER_WRITE("INI not found"); - } - else - { - BMALOGGER_WRITE("INI found"); - } - - return err; - } - - -// Gets the bitmap file name from settings, or uses default -void CBmpAnimSettings::LoadBitmapFileName(TBool aLandscape) - { - // Get the DLL path name. The path is used, if only a file name - // is specified. - TFileName dllName; - Dll::FileName(dllName); - - // Get whatever's in the settings - TFileName fileName; - TBool res = ETrue; - if (aLandscape) - { - res = iIniData->FindVar(KIniKeyMbmFileL, fileName); - } - else - { - res = iIniData->FindVar(KIniKeyMbmFile, fileName); - } - - if (!res) - { - // Not found - use the default name with the plugin directory - // there's really no need to do anything here (I think) - fileName = (_L("\\resource\\plugins\\")); - } - - // The combination order should be: - // 1. use whatever was defined in the settings (part or full path) - // 2. use the default name part - // 3. use the DLL path, if no path parts have yet been defined - TParse p; - if (p.SetNoWild(fileName, - aLandscape ? &KMbmFileNameL : &KMbmFileName, - &dllName) == KErrNone) - { - if (aLandscape) - { - iMbmFileNameL = p.FullName(); - } - else - { - iMbmFileName = p.FullName(); - } - } - } - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/animation.mk --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/animation.mk Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -# -# Copyright (c) 2005 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: Bitmap animation plugin animation makefile -# - -include bitmaps.mk - -ifeq (WINS,$(findstring WINS, $(PLATFORM))) -ZDIR=\epoc32\release\$(PLATFORM)\$(CFG)\Z -else -ZDIR=\epoc32\data\z -endif - -# ---------------------------------------------------------------------------- -# TODO: Configure these -# ---------------------------------------------------------------------------- - -TARGETDIR=$(ZDIR)\resource\plugins -ICONTARGETFILENAME=$(TARGETDIR)\bmpanimscrplugin.mif - -HEADERDIR=\epoc32\include -HEADERFILENAME=$(HEADERDIR)\bmpanimscrplugin.mbg - -do_nothing : - @rem do_nothing - -MAKMAKE : do_nothing - -BLD : do_nothing - -CLEAN : do_nothing - -LIB : do_nothing - -CLEANLIB : do_nothing - -# ---------------------------------------------------------------------------- -# TODO: Configure these. -# -# NOTE 1: DO NOT DEFINE MASK FILE NAMES! They are included automatically by -# MifConv if the mask detph is defined. -# -# NOTE 2: Usually, source paths should not be included in the bitmap -# definitions. MifConv searches for the icons in all icon directories in a -# predefined order, which is currently \s60\icons, \s60\bitmaps2, \s60\bitmaps. -# The directory \s60\icons is included in the search only if the feature flag -# __SCALABLE_ICONS is defined. -# ---------------------------------------------------------------------------- - -RESOURCE : - mifconv $(ICONTARGETFILENAME) /h$(HEADERFILENAME) $(ANIMBITMAPS) - -FREEZE : do_nothing - -SAVESPACE : do_nothing - -RELEASABLES : - @echo $(HEADERFILENAME)&& \ - @echo $(ICONTARGETFILENAME) - -FINAL : do_nothing diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.mk --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.mk Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -# -# Copyright (c) 2009 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: The bitmap files will be used int bitmap animation plugin -# - -# Do not change the ANIMBITMAPS variable name, remember to -# add line continuation marks (backslash) until the last line. -# NOTE that rotation (portrait graphics used in landscape) supports -# only color modes c1, c8, c16, c32 - -BMPDIR = s60 - -ANIMBITMAPS = \ -/c16 $(BMPDIR)\BmpAnim01.bmp \ -/c16 $(BMPDIR)\BmpAnim02.bmp \ -/c16 $(BMPDIR)\BmpAnim03.bmp \ -/c16 $(BMPDIR)\BmpAnim04.bmp \ -/c16 $(BMPDIR)\BmpAnim05.bmp \ -/c16 $(BMPDIR)\BmpAnim06.bmp \ -/c16 $(BMPDIR)\BmpAnim07.bmp \ -/c16 $(BMPDIR)\BmpAnim08.bmp \ -/c16 $(BMPDIR)\BmpAnim09.bmp \ -/c16 $(BMPDIR)\BmpAnim10.bmp \ -/c16 $(BMPDIR)\BmpAnim11.bmp \ -/c16 $(BMPDIR)\BmpAnim12.bmp \ -/c16 $(BMPDIR)\BmpAnim13.bmp \ -/c16 $(BMPDIR)\BmpAnim14.bmp \ -/c16 $(BMPDIR)\BmpAnim15.bmp \ -/c16 $(BMPDIR)\BmpAnim16.bmp \ -/c16 $(BMPDIR)\BmpAnim17.bmp \ -/c16 $(BMPDIR)\BmpAnim18.bmp \ -/c16 $(BMPDIR)\BmpAnim19.bmp \ -/c16 $(BMPDIR)\BmpAnim20.bmp \ -/c16 $(BMPDIR)\BmpAnim21.bmp \ -/c16 $(BMPDIR)\BmpAnim22.bmp \ -/c16 $(BMPDIR)\BmpAnim23.bmp \ -/c16 $(BMPDIR)\BmpAnim24.bmp \ -/c16 $(BMPDIR)\BmpAnim25.bmp \ -/c16 $(BMPDIR)\BmpAnim26.bmp \ -/c16 $(BMPDIR)\BmpAnim27.bmp diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.s60.mk --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.s60.mk Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -# -# Copyright (c) 2009 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: The bitmap files will be used int bitmap animation plugin -# - -# Do not change the ANIMBITMAPS variable name, remember to -# add line continuation marks (backslash) until the last line. -# NOTE that rotation (portrait graphics used in landscape) supports -# only color modes c1, c8, c16, c32 - -BMPDIR = s60 - -ANIMBITMAPS = \ -/c16 $(BMPDIR)\BmpAnim01.bmp \ -/c16 $(BMPDIR)\BmpAnim02.bmp \ -/c16 $(BMPDIR)\BmpAnim03.bmp \ -/c16 $(BMPDIR)\BmpAnim04.bmp \ -/c16 $(BMPDIR)\BmpAnim05.bmp \ -/c16 $(BMPDIR)\BmpAnim06.bmp \ -/c16 $(BMPDIR)\BmpAnim07.bmp \ -/c16 $(BMPDIR)\BmpAnim08.bmp \ -/c16 $(BMPDIR)\BmpAnim09.bmp \ -/c16 $(BMPDIR)\BmpAnim10.bmp \ -/c16 $(BMPDIR)\BmpAnim11.bmp \ -/c16 $(BMPDIR)\BmpAnim12.bmp \ -/c16 $(BMPDIR)\BmpAnim13.bmp \ -/c16 $(BMPDIR)\BmpAnim14.bmp \ -/c16 $(BMPDIR)\BmpAnim15.bmp \ -/c16 $(BMPDIR)\BmpAnim16.bmp \ -/c16 $(BMPDIR)\BmpAnim17.bmp \ -/c16 $(BMPDIR)\BmpAnim18.bmp \ -/c16 $(BMPDIR)\BmpAnim19.bmp \ -/c16 $(BMPDIR)\BmpAnim20.bmp \ -/c16 $(BMPDIR)\BmpAnim21.bmp \ -/c16 $(BMPDIR)\BmpAnim22.bmp \ -/c16 $(BMPDIR)\BmpAnim23.bmp \ -/c16 $(BMPDIR)\BmpAnim24.bmp \ -/c16 $(BMPDIR)\BmpAnim25.bmp \ -/c16 $(BMPDIR)\BmpAnim26.bmp \ -/c16 $(BMPDIR)\BmpAnim27.bmp diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.series60.mk --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.series60.mk Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,47 +0,0 @@ -# -# Copyright (c) 2009 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: The bitmap files will be used int bitmap animation plugin -# - -# First image MUST be named BmpAnim_first, and -# last image BmpAnim_last. Middle ones don't matter. -# Do not change the ANIMBITMAPS variable name, remember to -# add line continuation marks (backslash) until the last line. - -# NOTE that rotation (portrait graphics used in landscape) supports only color -# modes c1, c8, c16, c32 - -BMPDIR = series60 - -ANIMBITMAPS = \ -/c16 $(BMPDIR)\SS10000.bmp \ -/c16 $(BMPDIR)\SS10001.bmp \ -/c16 $(BMPDIR)\SS10002.bmp \ -/c16 $(BMPDIR)\SS10003.bmp \ -/c16 $(BMPDIR)\SS10004.bmp \ -/c16 $(BMPDIR)\SS10005.bmp \ -/c16 $(BMPDIR)\SS10006.bmp \ -/c16 $(BMPDIR)\SS10007.bmp \ -/c16 $(BMPDIR)\SS10008.bmp \ -/c16 $(BMPDIR)\SS10009.bmp \ -/c16 $(BMPDIR)\SS10010.bmp \ -/c16 $(BMPDIR)\SS10011.bmp \ -/c16 $(BMPDIR)\SS10012.bmp \ -/c16 $(BMPDIR)\SS10013.bmp \ -/c16 $(BMPDIR)\SS10014.bmp \ -/c16 $(BMPDIR)\SS10015.bmp \ -/c16 $(BMPDIR)\SS10016.bmp \ -/c16 $(BMPDIR)\SS10017.bmp \ -/c16 $(BMPDIR)\SS10018.bmp \ -/c16 $(BMPDIR)\SS10019.bmp diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.series60_lowcolor.mk --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.series60_lowcolor.mk Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -# -# Copyright (c) 2009 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: The bitmap files will be used int bitmap animation plugin -# - -# First image MUST be named BmpAnim_first, and -# last image BmpAnim_last. Middle ones don't matter. -# Do not change the ANIMBITMAPS variable name, remember to -# add line continuation marks (backslash) until the last line. -BMPDIR = series60 - -ANIMBITMAPS = \ -/c4 $(BMPDIR)\SS10000.bmp \ -/c4 $(BMPDIR)\SS10001.bmp \ -/c4 $(BMPDIR)\SS10002.bmp \ -/c4 $(BMPDIR)\SS10003.bmp \ -/c4 $(BMPDIR)\SS10004.bmp \ -/c4 $(BMPDIR)\SS10005.bmp \ -/c4 $(BMPDIR)\SS10006.bmp \ -/c4 $(BMPDIR)\SS10007.bmp \ -/c4 $(BMPDIR)\SS10008.bmp \ -/c4 $(BMPDIR)\SS10009.bmp \ -/c4 $(BMPDIR)\SS10010.bmp \ -/c4 $(BMPDIR)\SS10011.bmp \ -/c4 $(BMPDIR)\SS10012.bmp \ -/c4 $(BMPDIR)\SS10013.bmp \ -/c4 $(BMPDIR)\SS10014.bmp \ -/c4 $(BMPDIR)\SS10015.bmp \ -/c4 $(BMPDIR)\SS10016.bmp \ -/c4 $(BMPDIR)\SS10017.bmp \ -/c4 $(BMPDIR)\SS10018.bmp \ -/c4 $(BMPDIR)\SS10019.bmp diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim01.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim01.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:32:55Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:03:52Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX//2Q== - - - - - - - image/svg+xml - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim02.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim02.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:23:39Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -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 - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:03:44Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 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 - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim03.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim03.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:23:58Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:03:37Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim04.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim04.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:25:01Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -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 - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:03:31Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 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 - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim05.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim05.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:25:35Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -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 -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FX/2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:03:27Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 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 q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FX/2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim06.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim06.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:25:56Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -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 -fhapzuHFJrpx8b/80r7DN5oezsemjUfq6nq63W6/JqJXLl0CcZnuE7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:03:22Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 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 fhapzuHFJrpx8b/80r7DN5oezsemjUfq6nq63W6/JqJXLl0CcZnuE7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim07.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim07.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:26:11Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -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 -7FX/2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:03:16Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVO4uYLeMyzyLGg/aY0yjUarHg hx5JCMfNnDHKRqIssa1PzcxrHYLxHT13G/8AsV/rnCdqe2RNx0wr+kf0D9fydtp+zOs/kk0GsanD MZUuH5MatyPIH5g7Zy2DtrV4pmcckrPO9wfgXYT0uOQogJ7Y+cUNEvYuJ/37HuPpU751+g9tInbU Rr+lH9X9rrc3ZZ5wPzT+1vbW6TnbyrIvfidx8x1Gdlpdbh1EeLFISHl+kcw6zJilA1IUrZlNbsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVSDzB5pj025Fkif6S6 B1eTZKEkCniajOX7f7fnpD4eOFzIuzyHw5l2ei7OOWPGfpti11e3V3J6lxIZG7V6D5DoM8z1euza mfFlkZH8chyDuceKMBURSjmK2OxV2KrXvVsh9YMvo8OjgkH6Kb5dp5ZBMHGSJeWy+Hx7VbIvIvmu 61ue8hl+KK1VDHIwo7ciwNabds9S9nNbnyxlHNLiMa3r8W6ntbQRwCJHOVsuzpnSuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvOvzNipqdpL/ADwFK/6rk/8AG2cD 7XQ/fQl3xr5H9r1XYEv3ch/S/Qxa3v7mCgVuSD9htxnHyxiXN3M8MZJnb6rby0D/ALt/fp9+Y08B HLdxJ6eQ5bowEEVG4yinHS7U9btrMFF/ez/yA7D/AFjmZp9HLJudouRh05nvyDF7y+ubuTnO/L+V Rso+QzcYsUYCoh2WPGICgzz8n/8AenU/9SL9b51vsz9U/cP0vPe0f0w+P6Hpmda8s7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqwb8z4vg0+UDoZUJ+fEj9Rzi/bCG 2OX9Yfc9H7Py3mPd+lgWcQ9M4Ak0AqcQLQSuuprq3tHEcrJWgIB6VPbLseIGQ4hbARjI7hIySTU9 cz3Jdir0T8n/APenU/8AUi/W+dT7M/VP3D9LzXtH9MPj+h6ZnWvLOxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KsR/MuLlo9vL3S4A+hkb+mcr7WwvTxl3T+8F3nYEv 3sh/R/SHn1tZzXBqoog6uemcHjwyny5PUZMoijfq8cK0Ub92PU5leGIjZx+My5pbqYrbyD6fuNcr h9YcnHzSPMpyXYq9E/J//enU/wDUi/W+dT7M/VP3D9LzXtH9MPj+h6ZnWvLOxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kpdr2jpq1h9Vc8aOJFr0JWuxp881/aegGq xcBNb25ej1RwT4h7mGajpd1YUSWH04xsjKPgPyI2zi9XosmDaUaH2O/waiOTcGz9qTT981U3PglO o/7zyfLMeP1BzMaRZluSmmgeW9U1y69Gyj+Bf72dto0H+Uf4DfMzR6HJqJVAe89A4mr1uPBG5n4d S9i8r+VNP8v2rRwEy3EtPrFw2xYjoAvRQK9M7rs/s6GmjUd5HmXitdr56iVnaI5BOs2DguxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVbJHHIhSRQ6NsysAQR7g5 GcBIURYTGRBsc2Nav5ItrgGSwf6vL/vtqmM/Tuy/jnOa72chk3xHhl3dP1j7Xb6XtaUdpjiH2vPv MGk6hp6yR3cLRkg8W6q21fhYbHOM1Oiy6fIBkjX3H3F6bSanHlFwNoryj+Xd5qvC81Hla6eaFV6S yj/JB+yvufozoOzexJ5qnk9MPtLidodsRxXGHqn9ger2NhZ2FqlrZxLDAn2UUU+k+J9znZ4cMMcR GAoB5DLmlklxSNlXy1rdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVWTQQzxmOaNZY26o4DKaexyM4RkKkLHmyjMxNg0V+SYuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv /9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim08.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim08.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:26:27Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -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 -ftD2YjP1YTwnuPL58x9ru9J2yY7ZBY7xzY9ov5ZXt1qDz6x/o9ojbQqwLyU91qFX365i9m+z2Q/3 -3pA6dT+xz9X25CMaxeqXf0D0qzs7WytktrWJYYIxRI0FAM7HFijjiIxFAPLZMkpy4pGyVbLGDsVd -irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi -rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir -sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs -VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV -dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd -irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi -rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir -sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs -VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV -dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd -irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi -rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir -sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs -VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV -dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd -irsVdirsVf/Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:03:05Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqhbnVNPtZFjnnVJG6K dz9NOn05r9V2tptPIQyTEZHp+vu+Ldj0+SYuIsIlJEkUOjB0PRlNQfpGZuPJGY4okEHqGogg0W8m h2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Koe91Gzso +dxIE/lXqx+Q65g67tLBpY8WWQj5dT7g24sE8hqIYtqXmu6nrHaD6vF05/7sP0/s/Rnn3antdmzX HD+7h3/xfs+Hzdzg7NjHeXqP2JEzMxLMSSdyT1OcjKRJs83ZAUr2l/eWj8reVoz3AOx+YOxzL0fa GfTG8UjH7viOTVkwwmKkLZBY+ceiXsX/AD1j/ip/rnZaD206aiP+dH9X6j8HWZuy+sD80/tNQs7t eVvKsniB9ofMHfOz0faODUi8UxL7/lzdZlwzh9QpEZmtTsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdiqVeaNQutO0Se8tqCWMpud9mcKf15qe29Rkw6WU8ZqQrf3kBz ez8EcuYQlyN/c8+TWI7yQvNIfWbqZDUn6c8h1AyzkZSJmT16vUHSmAoDbyRGYrU7FXYqo3V3b2sR kncIvbxPsBlmPFKZqIZwgZGglWma/cXXmPTIoSYrc3kAIH2mBlWtT4HwzpOyNIMeoxnnLjj97fqN MI4Jk7nhl9z2nPVnhXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FUp82xep5cv18IuX/AEN/DNX23Di0mQf0fu3c7s2VaiHveP55Q92iLe/uYKBW5IP2G3GQljEubTP DGSZ2+q28tA/7t/fp9+Y08BHLdxJ6eQ5bobU9ft7WscNJp/b7K/Mj9WX6fQynvLYMsOmMtzsGM3V 3cXUpkncu3bwA8AM28McYCgKdjCAiKCM8s/8pHpX/MZb/wDJ1cztB/jGP+vH7w0a3+4n/Ul9z37P S3zt2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVCaxH6uk3sX88 Eq/ehGYuuhxYJjvhL7m/SyrLE90h97xTPHn0JtUZ24qKk9sIBPJBNK/1fgKtu34ZZ4dc2vjtIJxS aQf5R/XmdDkHJHJZkkpl5Z/5SPSv+Yy3/wCTq5l6D/GMf9eP3hxdb/cT/qS+579npb527FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq06hkZT0YEH6cEhYpING3ittp txM5FOMakhpD0qPDxzx3HppSPk+g5M8YjzR/1aKBOKD5sepzL8MQFBxfEMjug5++Y03Igxy6FLiQ f5RP375kw+kOZHkpZJkmnleN38y6UEUsRdwMQBXZZASdvACuZnZ4J1GOv58fvcTXEDBO/wCafue+ Z6U+eOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVItS8rQT8 ntH9GQ7+m26E/rH45odZ2HCdnGeE93T9jssHaJjtLcfaw7VNOvbJ+NzE0dfst1U/Jhsc5HWaTLhN TjX3fN32nzwyC4m0ln75qpuwgx27/wB6ZPnmRj+kOZHkmPl3yvqmvXPp2icYUP765eojT6e59hmx 0XZ+TUyqI26noHE1mux6eNy59B1eweW/Kml6Db8bZfUuWFJrpwObew/lX2GdzoezsemjUd5dT1eM 1vaGTUS9W0egTnM9wXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FVk0MM0ZimRZI2+0jgEH6DkMmOMxwyAI82UZmJsGixPWvIME4Mmmyei/wDviQkofk27D8c5 ftD2YjP1YTwnuPL58x9ru9J2yY7ZBY7xzY9ov5ZXt1qDz6x/o9ojbQqwLyU91qFX365i9m+z2Q/3 3pA6dT+xz9X25CMaxeqXf0D0qzs7WytktrWJYYIxRI0FAM7HFijjiIxFAPLZMkpy4pGyVbLGDsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVf/Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim09.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim09.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,167 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:26:45Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVOa4iiHxHfso64s4wMuSHTUULUdeI -7Eb4thwHoi0kRxVGDD2xaSCObeKHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FWmdVXkxoB3OKQLQU+oE/DFsP5j/DFyIYe9BkkmpNSepOLfTWKW1dkNVJB8Ri -ggFFxagw2kHIfzDri0SwDojIpo5V5RmoBofni0SiRzX4sXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FUs1tmVIWU0oSPvphDmaQAkhAR3SnZ9j49sXJlj7lcEEVG4w -NbsVaZgoqTQDviqCnvC1Vj2X+bucNMgFe01yy0+xKyEvMXJES9eg6noM0fantBptJsTxZP5o5/Hu -+/yY/k55ZbbDvTCx8w6Zd0USelIf91yfD9x6HIaD2k0mp2EuCXdLb7eR+dtObQ5IdLHkmWb5xHYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYql+uLW0U+Dj9RwhytIfV8E -jwuxXJI6H4T9GBBiCri8UISw3HYY00yhSAu74dZGp4IM1vaHa+n0gvJLf+aN5H4fr2bMeGUuSWT3 -0smyfAvt1+/PPO1PavUai44/3cPL6j8f1fa5+PTRjz3KGzlXJdiqOsdb1KyoIpSYx/up/iX7u30Z -t9B27qtLtCVx/mncfs+FONm0mPJzG7IbHzfZy0W7QwP/ADj4k/qM7XQe2WDJtmBxy7+cf1j7fe6v -N2ZMbxNp5DNFNEssTiSJxyR1NQQe4IzsITE4iUTYLrpRMTR2K/JMXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FUHq61sXP8AKVP40xDkaY+sMfyTs3Yqtf7BHjgIYy5MIi1edHK3 -A9ShoW/a2/XniGoxGUySTxder0h00SPTsmMF3BOP3bAn+U7H7swp4zHm408co81bINbsVUbq7t7W -P1J3CL28SfADLMWKUzUQzhAyNBi+p69cXdY4qxQHsPtN8z/DNzp9HHHud5Oxw6YR3O5ezeUf+UY0 -v/mGj/4iM9U7N/xeH9UPD9of4xP+sU2zNcN2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 -KuxV2KuxVD6ivKymH+TX7jXFtwH1hjeSds7FVr/ZOLGXJ59fJwvbhP5ZHH3Mc8d18OHUZI905fe9 -VgN44nyCgCQag0I6EZiNqOt9Vnjosn7xPf7X35TPDE+Tjz00Ty2XX/mKGCMCFC0zCoDCgHz8clg0 -JkbJ2asekJO/JjVzdT3Mpkmcu58eg9gO2beEBEUBQdhCAiKClkmb3ryj/wAoxpf/ADDR/wDERnpP -Zv8Ai8P6ofPe0P8AGJ/1im2ZrhuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K -tOqupVhVWFCD4YpBrdKrvRerWx/55t/A4bczHq+kkrkjkjYpIpVh2OFzYyBFhYehxRLkwPWk4arc -jxav/BAH+OeT9uQ4dZkH9K/nu9LojeGPuQaI7sFUVJ7DNWIk7ByiQOaKFqIxV928Owy/wq5tPiXy -SfVQfrCnsVp+Jy/By+LkY+SCy5sdir3ryj/yjGl/8w0f/ERnpPZv+Lw/qh897Q/xif8AWKbZmuG7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqpz28M68ZVDDt4j5HFlCZib -CU3WiyrU255qduJ2IrhtzY6oEVJhPmPQbga5ItaRlI2eXtXjQgePTPOvaDSSlrJHoRH7q/Q9D2fq -4jAO+yoC1ht04xj5sepzXDEICg3eIZGyg5++Y02+CQat/ep8jksHIuZj5IHLm1VtbW5up0t7aNpp -5DRI0FSTk8eOU5CMRZLCeSMAZSNAPe/L1nPZaHYWlwAs8ECJIoINGC7ioz0nRYpY8MIy5iIfPdZk -E8spR5ElMMynGdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVULu -xtbuPhcRhx2PQj5EbjKNRpseYVMW2Y80oG4liur+T7lAZLFvXQf7qagcfI9G/DOW13s/OO+I8Q7u -v7fsd1pu04nae33MPvIpInaOVCki7MjAgg+4OcnmhKJIkKLvcUgRY3DH9W/vE+RwYOrnY+SI8u+V -9U1659O0TjCh/fXL1EafT3PsM2ui7PyamVRG3U9A4+s12PTxuXPoOr2Dy35U0vQbfjbL6lywpNdO -Bzb2H8q+wzudD2dj00ajvLqerxmt7QyaiXq2j0Cc5nuC7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUHqWj6dqUfC7hDkCiyDZ1+TDf6OmYer0GHUCskb8+ -o+LkYNVkxG4H9TEJPyut5dTR5bovpyVJipSUkkUUsNqeJH3Zz+H2XjDKSZXj+33ft+x3X8vy8OhH -1/YzWzs7WytktrWJYYIxRI0FAM6jFijjiIxFAOgyZJTlxSNkq2WMHYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:02:59Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVOa4iiHxHfso64s4wMuSHTUULUdeI 7Eb4thwHoi0kRxVGDD2xaSCObeKHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FWmdVXkxoB3OKQLQU+oE/DFsP5j/DFyIYe9BkkmpNSepOLfTWKW1dkNVJB8Ri ggFFxagw2kHIfzDri0SwDojIpo5V5RmoBofni0SiRzX4sXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FUs1tmVIWU0oSPvphDmaQAkhAR3SnZ9j49sXJlj7lcEEVG4w NbsVaZgoqTQDviqCnvC1Vj2X+bucNMgFe01yy0+xKyEvMXJES9eg6noM0fantBptJsTxZP5o5/Hu +/yY/k55ZbbDvTCx8w6Zd0USelIf91yfD9x6HIaD2k0mp2EuCXdLb7eR+dtObQ5IdLHkmWb5xHYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYql+uLW0U+Dj9RwhytIfV8E jwuxXJI6H4T9GBBiCri8UISw3HYY00yhSAu74dZGp4IM1vaHa+n0gvJLf+aN5H4fr2bMeGUuSWT3 0smyfAvt1+/PPO1PavUai44/3cPL6j8f1fa5+PTRjz3KGzlXJdiqOsdb1KyoIpSYx/up/iX7u30Z t9B27qtLtCVx/mncfs+FONm0mPJzG7IbHzfZy0W7QwP/ADj4k/qM7XQe2WDJtmBxy7+cf1j7fe6v N2ZMbxNp5DNFNEssTiSJxyR1NQQe4IzsITE4iUTYLrpRMTR2K/JMXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FUHq61sXP8AKVP40xDkaY+sMfyTs3Yqtf7BHjgIYy5MIi1edHK3 A9ShoW/a2/XniGoxGUySTxder0h00SPTsmMF3BOP3bAn+U7H7swp4zHm408co81bINbsVUbq7t7W P1J3CL28SfADLMWKUzUQzhAyNBi+p69cXdY4qxQHYqPtN8z/AAzc6fRxx7neTssOmEdzuXs3lH/l GNL/AOYaP/iIz1Ts3/F4f1Q8N2h/jE/6xTbM1w3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FUPqK8rKYf5NfuNcW3AfWGN5J2zsVWv8AZOLGXJ59fJwvbhP5ZHH3Mc8d18OHUZI9 05fe9VgN44nyCgCQag0I6EZiNqOt9Vnjosn7xPf7X35TPDE+Tjz00Ty2XX/mKGCMCFC0zCoDCgHz 8clg0JkbJ2asekJO/JjVzdT3Mpkmcu58eg9gO2beEBEUBQdhCAiKClkmb3ryj/yjGl/8w0f/ABEZ 6T2b/i8P6ofPe0P8Yn/WKbZmuG7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 06q6lWFVYUIPhikGt0qu9F6tbH/nm38DhtzMer6SSuSOSNikilWHY4XNjIEWFh6HFEuTA9aThqty PFq/8EAf455P25Dh1mQf0r+e70uiN4Y+5BojuwVRUnsM1YiTsHKJA5ooWojFX3bw7DL/AAq5tPiX ySfVQfrCnsVp+Jy/By+LkY+SCy5sdir3ryj/AMoxpf8AzDR/8RGek9m/4vD+qHz3tD/GJ/1im2Zr huxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kqc9vDOvGVQw7eI+RxZQm YmwlN1osq1NueanbidiK4bc2OqBFSYT5j0G4GuSLWkZSNnl7V40IHj0zzr2g0kpayR6ER+6v0PQ9 n6uIwDvsqAtYbdOMY+bHqc1wxCAoN3iGRsoOfvmNNvgkGrf3qfI5LByLmY+SBy5tVbW1ubqdLe2j aaeQ0SNBUk5PHjlOQjEWSwnkjAGUjQD3vy9Zz2Wh2FpcALPBAiSKCDRgu4qM9J0WKWPDCMuYiHz3 WZBPLKUeRJTDMpxnYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FV C7sbW7j4XEYcdj0I+RG4yjUabHmFTFtmPNKBuJYrq/k+5QGSxb10H+6moHHyPRvwzltd7PzjviPE O7r+37HdabtOJ2nt9zD7yKSJ2jlQpIuzIwIIPuDnJ5oSiSJCi73FIEWNwx/Vv7xPkcGDq52PkiPL vlfVNeufTtE4wof31y9RGn09z7DNrouz8mplURt1PQOPrNdj08blz6Dq9g8t+VNL0G342y+pcsKT XTgc29h/KvsM7nQ9nY9NGo7y6nq8Zre0Mmol6to9AnOZ7guxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVB6lo+nalHwu4Q5Aosg2dfkw3+jpmHq9Bh1ArJG /PqPi5GDVZMRuB/UxCT8rreXU0eW6L6clSYqUlJJFFLDaniR92c/h9l4wykmV4/t937fsd1/L8vD oR9f2M1s7O1srZLa1iWGCMUSNBQDOoxYo44iMRQDoMmSU5cUjZKtljB2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim10.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim10.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:27:02Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -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 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:02:54Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 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 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim11.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim11.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:27:16Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -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 - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:02:49Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUDqes2GnJW4f94R8MS7ufo/ri5Gn0 s8p9I270ntPPFs8pW6gMUZPwup50H+UNvwxdhl7IkB6TZZBa3lrdR+pbyrKniprT5jti6vJilA1I UrYtbsVdiqGvdRs7KPncSBK/ZXqx+QG+YOu7SwaWPFllXl1PuDbiwTyGohjGoebbyV6WY9CMGoYg M5+dagZwHaPtjnyGsA8OPfsZH9A/G7uMPZsAPXuUTY+cTsl7F/z1j/ip/rmboPbTpqI/50f1fqPw as3ZfWB+af2moWd4vK3lWTxA2YfNTvnZ6PtHBqReKYl9/wAubrMuGcD6hSIzNanYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqp3FxBbxGWeRY416sxoMWUISkaiLLFNX85u3KLThwXo bhh8R/1VPT6cXd6bsoDfJ8mMSSSSOZJGLuxqzMakn3JxdxGIAocluKVS3ubi3kEsEjRyDoymhxYT xxkKkLDI9O863EdEvo/VXp6qUD/SOh/DF1WfsmJ3ga8mSWutaZdWUl7DOGtoSRM+44FQCwPyrleX LHHEzkaiBZdRPTTjMQI9RSLUvN7OCmnrxU/7vbc/7Ff65wHantjI3DTjh/pHn8B+v5OzwdmVvP5M dlllmkMkrl3bqzGpP35xGXNPJIymTKR6l2kYiIobBblbJ2Kto7owdGKsNwwNCPpGShOUDxRNEdQg gEUUf/j2bS0H1xhcj9mM7SH5Efxzr+yvabWRNT/eQ89j/pv1guIeyI5T6fT9zPs9NebdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVYF+bEtxBbabcQuUKySIadDyVTuOn7OSi9N7NxjKU 4kdAwyy8wxPRLkem3843U/0wmLv8uiI3jum6OrqGQhlPQjcZBwSCObeKFkssUMbSSsERd2YmgGKs Y1PzHPdFoLGscPRpjsx+Xh+vDIiPNt4RHcs68hxE+RL6AEkO1wPmTGuajtKRyYZjvifuee12Q/mo y/q/exuGeeD+6ei/yHcZ5TPGJc3ozIS+oI+DVYm+GYem3j1XMWenI5NUsHWO6OVlYAqQQehGY5BH NoIpxIAJJoB1OICEj1PzIiVis6O/QzH7I+Xjmz0+gvefyc3DpCd5McllklcySMXdtyx3ObQAAUHY AACg+js9XfMnYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWE/m1Fy8u28neO6T7ijj +mSi9D7NSrUEd8T94eSZY9wiLW+ubVqwuQO6ndT9GAhqyYYz5hN18zQLbs80TCVR9lehPTqemR4X WZtIYbg7JDeXt5qMnO4bjED8EQ6D/PxyqeUR2HNoMhHlzWKoUUAoMxCSebSTb1X8tUD+WJEPRp5A fpVcpyRsEPO9pmswPkGHkEEg9Rsc8qIp6cOpXAoLccksNWicoO47fdg8Li2plLICPUl2rareXEhh ZuMS0+Fdgdu+ZWm08YCxzcvDhjHcJbmU5DsVfSGerPmLsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirFvzLi5+Ubpv99PE/wB8gX/jbJR5u57AlWqiO8H7ni+WPoDsVU7ggQP70p94xcfU j0qSyMvuPDNbTz9qqyK3sfDBTK3qv5XMT5enB6LdOB8vTjP8crk892t/ej+r+ksZ1CP07+5j6cJX WnyYjPLtVHhyyHdI/e9FglcInyC1bchecnwqeg7nDjwGXPkieYDkh7hq7dAOgzJMBEUGkSJ5pPfj /Sn+j9QyOL6XfY/pCHyxm7FX0hnqz5i7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq kfniH1fKepr1pFz/AOAYN/DCObseyJcOqgfP79nhWWvpDsVUrn+5b6P14tOo+gqI6Zri86W0RnYI ilnYgKoFSSegAxQTT2LyDpd/pOhmG9ULLPKZ/T/aVWRVAb3+HK5bvNdoaiOTJceQFIDWNJNve3F6 0ZkWaRnQ0+FeRrv779843W9lyjllkI9JN+TsdPrhLHGAO4CS3DFiSTU5hyFN8SgJsxpuTFKtR/3p PyGV4vpd9j5IXLGxlflLyDqGtFbm55Wum9fVI+OQeEYP/Eunzzddm9jz1Hql6cf3+79bqO0O1oYP TH1T+73/AKnsud48Q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqp3FvDcwSW86CSG VSkiN0KkUIOLKEzCQlE0Q888xflSp5XGhyUO5NnKdvkjn/jb78mJPVaH2j/hzD/OH6R+r5PPL2wv LG4a3vIXgmXqjgg/MeI98k9RizQyR4oEEIaQAxvXf4SfuGFjqPoKjbW89zLHBAjSzSEKkaipJ9hm vlzedySEbJ5PVPKHkiDSVW8vQsuokbDqsXsv+V4n7vesl5zW685PTHaP3sryLrlknbLI8mJSXUfL dncgtD/o8vbj9g/Nf6Zq9X2Rjybx9Mvs+X6nOwa+cOfqDEdV0e/sTWeP93WglXdD9Pb6c5XW6DLg +obd/R3mm1UMn0nfuSG7gmnvlhhRpZZKBI0BLEnsAM1+miZCgLL0okIxsmg9D8o/lnFBwvdcUSzb NHZbFF/4yfzH26fPO07N7BEanm3P83p8e/7nme0O2zK4Yth/O/U9AAAAAFANgBnTPOOxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVBaroumatb/V7+3WdP2SdmU+KsN1+jCC5G m1WTDLigaLzfzD+VOoQsz6NILqF/hEEhCSLy2+0aKwH0ZISenwe0MMkDHKOGXeOR/UnnlfydaaDE S9JtQI4y3FNh4qlei/rzXzO5ea1utlml3R7k/wAg4LsVWSdsshyYlZkkKkNq1yTHQFSKPXcUPjh4 OLZlG72Rll5f0axvJby1tUiuJdmcDoPBR0UfLIafs/BhkZQiIk/jbu+DnZdZlyREZSJA/HxTDMxx nYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVGa0il3+y38w/jlc 8YKCEDNbSxdRVf5h0zGljIYEKOQVZJ2yyHJiVS2tXnag2QfabLIxtIFpvFEkSBEFAMvApsAXYUux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVDTWMb7p8Df hlMsIPJiYoZdPleXi/woOrePyyMMZ6seFMUREUKgoo6DLwKbG8KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv8A/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim12.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim12.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,187 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:27:28Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUq13zNpGixcryX96RWO3T4pG+jsPc -7Yubo+z8uoPoG3f0Yzp35q2UtwyX9o1vCT+7ljPqUH+WtAfu+7F2+f2cmI3CXEe7l8mZWGpWGoQ+ -tZXCXEfdkNaV7MOoPscXQZsE8RqYMSicWp2KuxVDXuo2dlHzuJAlfsr1Y/IDfMHXdpYNLHiyyry6 -n3BtxYJ5DUQxjUPNt5K9LMehGDUMQGc/OtQM4DtH2xz5DWAeHHv2Mj+gfjd3GHs2AHr3KJsfOJ2S -9i/56x/xU/1zN0Htp01Ef86P6v1H4NWbsvrA/NP7TULO8XlbyrJ4gbMPmp3zs9H2jg1IvFMS+/5c -3WZcM4H1CkRma1OxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVRvL20s7dri6lWG -FPtSOaDFsxYpZJcMRZee+Y/zOlk5W+ir6adDeOPiP+op6fM/cMXqND7PgerNuf5v6ywOaaaeVpZn -aSVzV5HJZifEk4vSxgIigKCzFkr2d7eWU4ntJngmXo6Eqfwxa8uKGQcMgCGaaL+aV5Fxi1aEXCDY -3EVFk+ZX7LfRTF57V+z0Jb4jwnuPL9f3s50zzJoup6dLqNncrJaQMyTyUI4OgBZWB7gMMry5Y44m -ctogWXm82iy48nhyHqKUal5vZwU09eKn/d7bn/Yr/XOA7U9sZG4accP9I8/gP1/J2GDsyt5/Jjss -ss0hklcu7dWY1J+/OIy5p5JGUyZSPUu0jERFDYLcrZOxVtHdGDoxVhuGBoR9IyUJygeKJojqEEAi -ij/8ezaWg+uMLkfsxnaQ/Ij+Odf2V7TayJqf7yHnsf8ATfrBcQ9kRyn0+n7mfZ6a827FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8h/5yHuLy0stDvbaQxtHNPG1Oh5qjUI6H7HfJwFvd -exEITnlhIXcYn5X+t5jpfnO3lpHfr6L9PVWpQ/MdRhOPuev1HZUo7w3Hd1ZHHJHIgeNg6NurKag5 -W6qUSDRXYoU7i5gtoWnnkWKJBVnY0AxpQLYRqvmvUdXkez0UNDa9JbtvhYj2/lH44MmSOMXJskY4 -hc/k9f8Aylsja/l3d2SuXV5rguT3Zo1B2znu0tRLLjkOQ4Tt8Hh+19SZayM+VcP3qUbTwf3L0H8j -brnm08Qk7YagS+sfFGQ6pGTxnX0m8eqnMWenI5J8K94m0arKwBUgg9CMxiCObURTiQASTQDqcQEJ -HqfmRErFZ0d+hmP2R8vHNnp9Be8/k5uHSE7yY5LLJK5kkYu7bljuc2gAAoOwAAFB9HZ6u+ZOxV2K -uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvLP+circSeSrOYfah1CP/gWilB/GmTx83s/Y -edayQ78Z++L5zy59VRmn6rf2D8raUqD9qM7ofmMBALRm00Mo9QZGnnu0SyeW5gYTxgURN1Yk02J6 -ZWcbotV2cce4NxSGYav5gmFxqTmGzBrDarUbfL+JzDz6yMNo7ydbm1Uce0N5JpDBDBGIokCRr0UZ -qZzMjZ5uqnMyNnm9l/KlQ3lSRT0a5lB+lVyjIL2eW7XNZh7glpBBIPUdc8+Ids4gEUO4xSCRyWc2 -twZI5DGB1HVT9GR8Hj2pv/NCvWL+9K9W1W8uJDCzcYlp8K7A7d8yNNp4wFjm7TDhjEWEtzKch2Kv -pDPVnzF2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVgH56W/q/lxfv/viW3k++ZU/4 -3ycOb03shOu0ID+cJD/Yk/ofL+XPsTsVUrxuNrJ47U+fIHFwtfG8fxT+O4kTbqvgc5oi3zoSRUdx -G+1aN4HIGLYDb2T8omY+WbgE7LeSBfl6cZ/jlUubzXbI/ej+r+koW8Thdzp/LI4+5iM4LPGskh3E -uxxG4g+Sm4WKP1Jdgfsr3OSxacyY5Mwild1O8rVOyj7KjoMzxjERQcUzMuaX3w/0l/o/UMxsX0vY -YvpChk2x2KvpDPVnzF2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVin5q231j8vNcj -pXjb+p2/3U6yd/8AVyUebu/ZzJw6/Ef6VfMU+S8vfbXYqoXw/wBGf2p+sYuNrP7sp2m6KfYZzkub -5rLmvRHd1RFLOxCqoFSSdgABgYk1u9z/AC10zUtE8vmC/UCW4ma49KvxIrIihW/yvg6ZVMAvLdpa -qOTLcdwBSrq0C29xNdFDJ6rsybfCtTXf785rUdmyGSUyPSTbkYtaDARHOmPXMjyOXc1Y4OEAUFBt -ByZRJuihdQH+kfQMwsR9L2WL6UNljYyvyl5B1DWitzc8rXTevqkfHIPCMH/iXT55uuzex56j1S9O -P7/d+t1HaHa0MHpj6p/d7/1PZc7x4h2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVR -vLO1vbSazu4lmtrhGjmicVVkYUIOLZiyyxyE4mpRNgvGPOv/ADj2repeeVJuJ3Y6ZcNt8opT+p/+ -CywZO97/ALK9tiKhqh/nj9I/V8njOqaTqelXj2WpWslpdR/ailUqfmK9R4EbZaC99p9TjzQE8chK -J6hATqDBICK/Cx+4VxY6z+6Pw+9OdPtp7owQW0bTTShVjjQVZiR2Gc9k+ovmueQiZE7AF7J5I8gW -+jKt9fhZtUYfCNmSH2Txbxb7vekl5bX9onL6Y7Q+9mWRdWoXP7P05kYuTCSUXuiW04LRfuZPb7J+ -j+mYeo7OhPePpP2ORi1co89wxzUNNu7Q1lT4OgkXdT9P9c5/VaTJi+obd/R2uDPGfIoC7gmnvlhh -RpZZKBI0BLEnsAM1OmiZCgLL24kIxsmg9D8o/lnFBwvdcUSzbNHZbFF/4yfzH26fPO07N7BEanm3 -P83p8e/7nme0O2zK4Yth/O/U9AAAAAFANgBnTPOOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux -V2KuxV2KuxV2KuxVK/MHljQfMNmbPWLOO6i34Mwo6E943FGU/I4QaczRdoZ9LPjxSMT9h945F4j5 -y/5x71m2Z5fLEwv7aX4Bazssc0fP4ftmiOq1qTsfY5YMne97pPbLFlxmGoHBOuY3ia+0faynyd5D -tPK9uElK3GqBfTnuQNhTYrHXotR16n8M5/MfWfe8B2j2hLPM1tC+X62TZU612KqFx1XMjFyYSUct -YImx06a/l9JFHD/djN9kA+P9MlHHx7M4RJOzJ7Hy/o1jeS3lrapFcS7M4HQeCg7KPYZbp+z8GGRl -CIiT+Nu74O0y6zLkiIykSB+PimGZjjOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku -xV2KuxV2KuxV2KoK80m1uatT05T+2vc+475j5dNGfkWJiCkd3pt1amrryj7SLuPp8M12XBKHPk1G -JCFyhChcdVzIxcmElfTNMnvpaL8MSn95Ieg9h75k48ZkVhAll1rawWsIhhXig+8nxOZsYgCg5QFK -uSS7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq4gEUPTFU -tvNEt5qtD+6k8B9k/R2+jMTLpIy3GxYGCWR+X7qW6CTD04U3ZxvX2XKsOnkNi1+GSWRQQRQRLFEo -VF2AGZ4AAoNwFL8KXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FX/2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:02:42Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 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 7FXYq7FXYq7FXYq7FXYq7FX/2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim13.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim13.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,205 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:27:40Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqlmpeYbCxqnL1px/upD0P -+UegzQdqe0em0lxvjyfzR+k9Pv8AJzMGink35DvS6z85RM3G7hKAnZ4/iA+YOaTRe2sJGs0OHzjv -8x+Pc5WXssj6TfvT61vbS6TnbyrIO9DuPmOozr9LrsOojxYpCQ8v0jmHW5MUoGpClbMtrdirsVdi -rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqVa75m0jRYuV5L+9IrHbp8UjfR -2HudsXN0fZ+XUH0Dbv6MZ0781bKW4ZL+0a3hJ/dyxn1KD/LWgP3fdi7fP7OTEbhLiPdy+TMrDUrD -UIfWsrhLiPuyGtK9mHUH2OLoM2CeI1MGJU9Q1exsF/fyfvKVES7sfo7fTmq7R7Z0+jH7yXq/mjeX -497PBpZ5OQ272K6l5mvruqRH6vAf2VPxEe7f0zzztT2o1GpuMP3ePuHM+8/qp3WDQQhufUUozmXO -diq6OWSJw8blHHRlJBH0jJ48sscuKJMZDqNkSiCKKdWPm2+hotyBcRjufhf7xsfuzq9B7YajFtlH -iR+Uvn+z4uvzdmwl9PpLJNI1my1a3ee0Yskchikr2cAMR4HZhnoXZ+vhqsfiQBA5UebqNTpp4ZcM -uotHZnOO7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVG8vbSzt2uLqVYYU+1I5o -MWzFilklwxFl575j/M6WTlb6Kvpp0N44+I/6inp8z9wxeo0Ps+B6s25/m/rLA5ppp5WlmdpJXNXk -clmJ8STi9LGAiKAoLMWSvZ3t5ZTie0meCZejoSp/DFry4oZBwyAIRreYtRlunuJ35ySUMhoACQKV -4ig+7OT7X9mI6mZyQNTPQ8v1j7XGGhxiIjEUAmNh5gsbsNRxVGMblTVQ46qfAiuef67svLpp8Exu -4mXSSimasrAFSCD0IzWkU4pFN4oUbq7t7WP1J3CL28SfADLMWKUzUQzhAyNBi+p69cXdY4qxQHsP -tN8z/DNzp9HHHud5Oxw6YR3O5ejflJ/yjlz/AMxj/wDJqPPQfZv/ABeX9c/dF5j2h/vx/UH3lm2d -A6J2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvIf+ch7i8tLLQ722kMbRzTxtTo -eao1COh+x3ycBb3XsRCE55YSF3GJ+V/reY6X5zt5aR36+i/T1VqUPzHUYTj7nr9R2VKO8Nx3dWRx -yRyIHjYOjbqymoOVuqlEg0V2KFO4uYLaFp55FiiQVZ2NAMaUC2HXmv6v5gnax0JWhtBtPetVTT5/ -sj2HxZVqNRjwRuZ+Cc2XHgjxTO/QM88k6Da6Xon1VSZiZGaSRh1YgVoO2ecduak58/GRWweV1vaO -TJk4geHyCeLDNCeVtIV8UO6nNFPECnH2iDtkF+YW3mtz2tvV4P3xNFNfh+eV49CJS3OznYcUMh9M -rDGrm6nuZTLM5dj49B7Ads2sMcYigKDsoQERQUskzetflJ/yjlz/AMxj/wDJqPO29m/8Xl/XP3Re -O9of78f1B95ZtnQOidirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiryz/AJyKtxJ5 -Ks5h9qHUI/8AgWilB/GmTx83s/YedayQ78Z++L5zy59VRmn6rf2D8raUqD9qM7ofmMBALRm00Mo9 -QZGnnu0SyeW5gYTxgURN1Yk02J6ZWcbotV2cce4NxQMGk615lmW81hmttPB5Q2i1BI7bHp/rHfwz -VaztSOL04/VLv6B0er7Shh9OP1T7+gZba2ltaQLb20axQoKKi9M5nJklOXFI2XnMmSU5cUjZZLoQ -JsyBueZ/UM0PaA/efBxMvNNBHQVPXMThpp4kPdorpxYBlJ3B3GGPNsxyMTY2KS3+nWkcbTB/RA7H -cH2HfMiFyNB2uLtaUB69x9qU5J6AGxb1r8pP+Ucuf+Yx/wDk1Hna+zf+Ly/rn7ovH+0P9+P6g+8s -2zoHROxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVgH56W/q/lxfv/viW3k++ZU/ -43ycOb03shOu0ID+cJD/AGJP6Hy/lz7E7FVK7fjbSEbH4ePzDA4kW4WvjeP4vQLe+mhoK8kH7J/g -c4MxBfHY5CExgvYJtgeL/wAp/hlRgQ3RmCy3y3/vA/8AxlI/4Vc1GtHr+DjZ/qTF8wC1hLtUvYLS -DnIasT8CDqTlmDEZyoMjMR5sSvL2a7l5yHYfYQdAM3GLEICg4c8hkd1e2tp7mZILeNpZpDxSNBVi -fYDNfGEpy4YiyX0HjEYXI0AHtPkPQL3RNDa2vCvrzTNOyKa8OSKvEnufg7Z3vY+jnp8PDPmTf2D9 -TxPa2rjny8UeQFfeyPNq6x2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KsU/NW2+ -sfl5rkdK8bf1O3+6nWTv/q5KPN3fs5k4dfiP9KvmKfJeXvtrsVUL4f6M/tT9YxcbWf3ZZxEaxIet -VG/0Zw8uZfGJj1FeqszBVBLE0AG5JORYW9C8sWd5Z6Z6d1/eO5kCncqpAAB99sw9TpY5N+Rddl1v -r23CJ1S/+qQ8ghZ22X+UfM5rPyE73+nvbRqokbc2IX08s7NJK3JyeuZuOAjsGriJNlTtLKe6fjGP -hH2nPQZlY8UpnZhkyiA3e7+WPKWmaDbD0U53jqBNdOBzJ7gfyr7DOp0HZuPTjbeXUuZrNfkz/VtE -dE8zYOE7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqo3lna3tpNZ3cSzW1wjR -zROKqyMKEHFsxZZY5CcTUomwXjHnX/nHtW9S88qTcTux0y4bb5RSn9T/APBZYMne9/2V7bEVDVD/ -ADx+kfq+TxnVNJ1PSrx7LUrWS0uo/tRSqVPzFeo8CNstBe+0+px5oCeOQlE9QgJ1BgkBFfhY/cK4 -sdZ/dH4fezPTo5J4beOFTI7ogRVFSagZxObaZ95fGtSeGcr7z97PvL/lqKwAuLkCS8PTusfy9/fK -SXR6nVGew+lPcDhoW+AIQHcb1H3Zmacektc0on0i1mYHdBWrKvQ/0yMtHAm+TZDUyARUUUcSBI1C -oOgGZMYgCg0ykSbL2vOhdo7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FUr8weWNB8w2Zs9Ys47qLfgzCjoT3jcUZT8jhBpzNF2hn0s+PFIxP2H3jkXiPnL/nHvWbZnl8s -TC/tpfgFrOyxzR8/h+2aI6rWpOx9jlgyd73uk9ssWXGYagcE65jeJr7R9qcaF5Uj0CIW0xWa/hHo -zTL9mqfCQlf2ajON1P8AeS/rH73zbX6s5skiNo8R+9NsocF2KoS96p9OZun+n4teRDZe1o/R9FvN -VuvRtxRRvLKfsoPf38BluLEZmgzhjMjs9ZzduzdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir -sVdirsVdirsVdirsVdirsVdiqVap5b0+/wCUgHo3B39VB1P+UvfMLUaCGTflLva5YwWI6noOoaeS -0ic4e0ybr9Ph9OaLUaPJi5jbvaJQIS7MVghL3qn05m6f6fi15EXoPl+71e44p8FuhHrTnoPYeLZm -4cJmfJceMyL0vT9OtNPtVtrVOEa9T3Y92Y9zm3hARFB2EYiIoInJsnYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXEAggioOxBxVItU8p2VzWS1pbTHegHwE/L -t9Ga3UdmwnvH0n7GqWIHkx+DyZqFxfiK6Ho20e8kqkHkD0Ce5/DMfTaGYNS2aPAJO/JnFpaW9pbp -b26COKMUVR/n1zcRiIig5cYgCgq5JLsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs -VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV -dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd -irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi -rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir -sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs -VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV -dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd -irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi -rsVdirsVdirsVdirsVdirsVdirsVdirTMqirGgHfBKQAspAtRN0K7CozEOr32GzYMapHMklQp3HU -ZkY8onyYSiQvyxi7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYqp3IrA49v45XmFxLPGfUlrl0XrTNfwuVsVfTK8pD8t8y9P1as/RH5kuO7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVGW0ik8R40yqWGJL -ZHIQqoiooVRRR0GWAUwJtvCh2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K -uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku -xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux -V2KuxV2KuxV//9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:02:33Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 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 TC/tpfgFrOyxzR8/h+2aI6rWpOx9jlgyd73uk9ssWXGYagcE65jeJr7R9qcaF5Uj0CIW0xWa/hHo zTL9mqfCQlf2ajON1P8AeS/rH73zbX6s5skiNo8R+9NsocF2KoS96p9OZun+n4teRDZe1o/R9FvN VuvRtxRRvLKfsoPf38BluLEZmgzhjMjs9ZzduzdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdiqVap5b0+/wCUgHo3B39VB1P+UvfMLUaCGTflLva5YwWI6noOoaeS 0ic4e0ybr9Ph9OaLUaPJi5jbvaJQIS7MVghL3qn05m6f6fi15EXoPl+71e44p8FuhHrTnoPYeLZm 4cJmfJceMyL0vT9OtNPtVtrVOEa9T3Y92Y9zm3hARFB2EYiIoInJsnYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXEAggioOxBxVItU8p2VzWS1pbTHegHwE/L t9Ga3UdmwnvH0n7GqWIHkx+DyZqFxfiK6Ho20e8kqkHkD0Ce5/DMfTaGYNS2aPAJO/JnFpaW9pbp b26COKMUVR/n1zcRiIig5cYgCgq5JLsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirTMqirGgHfBKQAspAtRN0K7CozEOr32GzYMapHMklQp3HU ZkY8onyYSiQvyxi7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYqp3IrA49v45XmFxLPGfUlrl0XrTNfwuVsVfTK8pD8t8y9P1as/RH5kuO7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVGW0ik8R40yqWGJL ZHIQqoiooVRRR0GWAUwJtvCh2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV//9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim14.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim14.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,211 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:27:56Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -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 -e+U6vIJ5pyHWRP2t5jOO7FUu1X7UfyP8M2mi+g+9oy80BmW0px5Z8r6l5hvxa2a8UXee4avCNfE+ -JPYd8v0+nlllQbcWEzNB9EKqr0FK51EYCPJ3xLeSQ7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYqx7X/JGj6tylC/Vbxqn14gPiJ7uvRv1++arW9kYs+/0z7x+lqnhE -ve8513yjrOjsWmi9W27XMXxJ/su6/TnKazszLg3IuPePxs4c8Rikua9rS7VftR/I/wAM2mi+g+9o -y80x8o+TtQ8x3nCL91ZREfWbojZR/Kv8zHw+/NrptLLKduXenDgOQ+T3PRtF0/RrCOxsI/ThTck7 -szHqznuTnR4sUcceGLuMeMQFBHZYzdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi -rsVdirsVdirsVdirsVcyhgVYAqRQg7gg4kWrEte/LvS77lNYUsrk78VH7pj7qPs/7H7s0es7Dx5N -4eiX2fs+DRPADy2Yfa/lhrN7rC29+Pq1jBvNcKQ3MHosXuadxt38Mw9D2VkiTGewvn+pxPyspS35 -PVdO06y06zis7KIQ28IoiL+s+JPc50sICAocnYRiIigiMmydirsVdirsVdirsVdirsVdirsVdirs -VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV -dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd -irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi -rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir -sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs -VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV -dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd -irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi -rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVWySJGhdzxUdSchOYiLPJMYkmggn1 -QB/gSqdydic1U+1hxbD0uQNPtuUTb3kM5KofjWhZT1Fc2Gn1McosNU8ZjzVsyGt2KuxV2KuxV2Ku -xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVDamhexlUCpoCB8iDmNq -43iLdpzUwxyVpooj8VD4eGaAYxe7tBRKP8shi9wxrQhd/ffNtoBzcXXcgnubJ17sVdirsVdirsVd -irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVQV1pFrcEE1TerBehz -EyaOEjfJyIamUUVFDFDGI4lCIvQDMmMREUGmUiTZX5Ji7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:02:24Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 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 e+U6vIJ5pyHWRP2t5jOO7FUu1X7UfyP8M2mi+g+9oy80BmW0px5Z8r6l5hvxa2a8UXee4avCNfE+ JPYd8v0+nlllQbcWEzNB9EKqr0FK51EYCPJ3xLeSQ7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 7FXYq7FXYq7FXYq7FXYq7FXYqx7X/JGj6tylC/Vbxqn14gPiJ7uvRv1++arW9kYs+/0z7x+lqnhE ve8513yjrOjsWmi9W27XMXxJ/su6/TnKazszLg3IuPePxs4c8Rikua9rS7VftR/I/wAM2mi+g+9o y80x8o+TtQ8x3nCL91ZREfWbojZR/Kv8zHw+/NrptLLKduXenDgOQ+T3PRtF0/RrCOxsI/ThTck7 szHqznuTnR4sUcceGLuMeMQFBHZYzdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVcyhgVYAqRQg7gg4kWrEte/LvS77lNYUsrk78VH7pj7qPs/7H7s0es7Dx5N 4eiX2fs+DRPADy2Yfa/lhrN7rC29+Pq1jBvNcKQ3MHosXuadxt38Mw9D2VkiTGewvn+pxPyspS35 PVdO06y06zis7KIQ28IoiL+s+JPc50sICAocnYRiIigiMmydirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVWySJGhdzxUdSchOYiLPJMYkmggn1 QB/gSqdydic1U+1hxbD0uQNPtuUTb3kM5KofjWhZT1Fc2Gn1McosNU8ZjzVsyGt2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVDamhexlUCpoCB8iDmNq 43iLdpzUwxyVpooj8VD4eGaAYxe7tBRKP8shi9wxrQhd/ffNtoBzcXXcgnubJ17sVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVQV1pFrcEE1TerBehz EyaOEjfJyIamUUVFDFDGI4lCIvQDMmMREUGmUiTZX5Ji7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq//9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim15.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim15.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,234 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:28:12Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -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 -V2KuxV2KuxV2KuxV2KuxV//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:02:17Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 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 sVdirsVdirsVdirsVdir/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim16.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim16.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,259 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:28:25Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqhb7U7KxTlcSBSfsoN2PyGa7X9q6fSRvLKj3dT8PwG7Dp5 -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 -7FXYq7FXYq7FXYq7FXYq7FXYq7FX/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:02:09Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqhb7U7KxTlcSBSfsoN2PyGa7X9q6fSRvLKj3dT8PwG7Dp5 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 V2KuxV2KuxV2KuxV2KuxV2KuxV//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim17.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim17.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,275 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:28:37Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -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 -rsVdirsVdirsVdirsVdirsVdirsVdirsVf/Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:02:05Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq 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 fQfe0ZeaY+UfJ2oeY7zhF+6soiPrN0Rso/lX+Zj4ffm102lllO3LvThwHIfJ7no2i6fo1hHY2Efp wpuSd2Zj1Zz3Jzo8WKOOPDF3GPGICgjssZuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuZQwKsAVIoQdwQcSLViWvfl3pd9ymsKWVyd+Kj90x91H2f9j92aPW dh48m8PRL7P2fBongB5bMPtfyw1m91hbe/H1axg3muFIbmD0WL3NO427+GYeh7KyRJjPYXz/AFOJ +VlKW/J6rp2nWWnWcVnZRCG3hFERf1nxJ7nOlhAQFDk7CMREUERk2TsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqQeffMM3l7yhqesQANcW0YEHLcCSV1iQkdwGcG mKvFPy/8hXX5ji+1rzBrFw4hl9FQCHlLlQ5NXqqIARQBfupir13yD+Xdn5NN+tnezXUF76NI5wv7 sxc60K0Hxep4dsVTbWfNeh6Q4ivbik5FfRQF3oe5A6fTirejeatD1hzFZXHKZRyMLgo9PEA9foxV HTX9rDcx28jUll+wKGhqadcVU01jT5LpbaOXnKxIHEEioFevTFUZirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqWeZtCttf0G+0e4YpFeRGPmBUq32kenfiwBxV85 +n+YX5V6w0gUpbTNxL0MlnchdxvtQ/cwxV7b5D/MvS/Nmk3FxHGbbULJOd5ZE8qChIZGoOSmnht+ tViflG/0ufzJcalr0yVKtIhmFVMrMANjX7K1pires3ulWvnO1vtFdPq4aKR/R2TkWpIoAHdevzxV mvmskXsJGxEex/2RxVONP0axtkikEdZ1AJkJNakb7VpiqYYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqoX+oWOn2r3d/cR2trGVEk8zBI15sEXkzUAqzAYqknmLz D5Hk0G7/AEtf2dxpkkbCWP1Y5OYp0RQSWav2ab1xV4v/AM4+addXPmTVJV5LaLp7wTuBUcppE4L8 /gY/RirKfJ8elWnmCay16GPiVaEeuBxSVWHXlsK0Irir0I6Z5HjkjX0bASyMqxL+75M5NFCjqTXF UN5s/wB7If8AjH/xscVZNF/dp8h+rFV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KoDXtC03XtJuNJ1KMyWVzx9VFYoTwcOtGWh2ZQcVYKv5AeQRLzP1xlrX0jMO Py2Tl+OKs40Hy7ougWAsNItUtLYHkVWpLNSnJ2NWY7dScVQ2teT9C1iX1ruAi4pQzxsUYgePY/SM VQmn/l75csbqK6RJZJYXWSIySGgZSCpooXoR3xVOb7SbO9kWScMWUcRQ02rXFUYAAAB0GwxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KqV1dW9rA09w4jiSnJz 7mg/HKdRqIYYGczUQzx45TlwxFlj8/nNBOBDb84B1ZjRj8utM4nP7bRGSseO8fmaJ93d+OTtIdlH h3O6a6Xrun6k0kdu59aIBpYmG6hq0rTbemdR2X2vi1seKFgjmCPwC4Wo0k8VGXI9UwzaOKkVz5lu I7q+hg09riPT+JuJFkVSFZeVQpG+wOKpvZXcV5aRXUNfTmUOtetD2OKqa3bnUntKDgsQkDd6lqYq iiQBUmgHUnFVqSxv9h1anWhBxVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdiqT+b4Gn8uX0agsxRWAG5JV1bt8s1PbmPj0eQeX3EFz+zJ8OoifxyeU3suoWNk370qxoOP XiD755lHSjiHEN3soiGSXJkn5QLIZ9UlYMVKxDma0LVY0r4523szHefdt+l03tERUB7/AND0rOte XYgltqd1rfmC2spIoUmMKXEkgZmCtGw+ACgr164qyiws47KyhtIySkKBAT1NO5+eKoVP+O/L/wAw 6/8AE8VRtxII4XcryAH2fHFUNFy+ux8ggJQmieHviqNxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxVxAIodweoxVjuseRtF1NlZg8A5BpFiICsAakUNeP0ZpNT2Bp8sxIX Hvrkf1fB2mm7Wy4hXP3p3Y2NnY2yWtnEsMEYokaig/tPuc2+LDHHERgKiHX5csskuKRslXyxrUor S2hnmnjjCzXHEzOOrcRRa/KuKquKrBDEJjMFHqleJfvTrTFV5AIIIqD1BxVYkEKGqIFPiPfFV+Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim18.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim18.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,295 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:28:51Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXAg9DXADa27CrsVdirsVdirsVdirsVdirsVdirsVdir -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 -xV2KuxV2KuxV2KuxV2KuxV2Kse1/yRo+rcpQv1W8ap9eID4ie7r0b9fvmq1vZGLPv9M+8fpap4RL -3vOdd8o6zo7FpovVtu1zF8Sf7Luv05yms7My4NyLj3j8bOHPEYpLmva0u1X7UfyP8M2mi+g+9oy8 -0x8o+TtQ8x3nCL91ZREfWbojZR/Kv8zHw+/NrptLLKduXenDgOQ+T3PRtF0/RrCOxsI/ThTck7sz -HqznuTnR4sUcceGLuMeMQFBHZYzdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs -VdirsVdirsVdirsVcyhgVYAqRQg7gg4kWrEte/LvS77lNYUsrk78VH7pj7qPs/7H7s0es7Dx5N4e -iX2fs+DRPADy2Yfa/lhrN7rC29+Pq1jBvNcKQ3MHosXuadxt38Mw9D2VkiTGewvn+pxPyspS35PV -dO06y06zis7KIQ28IoiL+s+JPc50sICAocnYRiIigiMmydirsVdirsVdirsVdirsVdirsVdirsVd -irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi -rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir -sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs -VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqkLu1M/1cSr63++6jl49MVVcVdirsVdir -sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirD/AM3vOVz5M/LbXfMloqteWMCr -a8hVRNPIkETMO4V5QxHfFXy3+Tv5Q3/52DVvNHnLzJeyLbXH1ZArCSdpSqyMay8ljjAYBVVflSmK -vo78oPyW0z8sm1dNN1W61C11T6txhuglYTb+rUqU4g8/W3+EdO+Ksh80fmN5R8szC31W9C3bAMLW -JWlkCnoWCii+3IiuKu8rfmL5S8zytBpV5zu0Xm1rKrRycR3AYUYf6pOKprea/pdnqNvp1xKUurqn -orxJBqSo+LoNxiqEXzn5dk1AWEVz6055bxqzJ8Klj8VKHYdsVU7Y6JPq63EU0jTuxZYyCF5U8aYq -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 -sVdirsVdirsVdirsVdirsVdirsVf/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:01:59Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXAg9DXADa27CrsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqx5lXbqfDK5ZAGJmAoPIzdTt4ZRKZLUZErQSD UGmRBpFqizsOu+WDKerMTKqsyN3offLhkBZiYK/JsnYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYqhbyd42VR9kjfKcsi1zKisyN3ofA5jtSpirsVWSyxxIXkYIg6 sTQZDJkjCJlIgRHUsoxMjQFlIdQ8zDeOzFf+LW/gM4/tL2sjG46ccR/nHl8B1/HN3Om7JJ3ybeST fpG/EwmE7iQbBgxFB4fLORPampOTxfElx99/Z7vLk7gafGI8NCk5sfOFzHRbyMTL/vxKK33dD+Gd NoPbPLDbPHjHeNj8uR+xwc3ZkTvA0yGx1fT72gglBf8A323wt9x/hna6HtnTar+7mOL+adj8v1Or zabJj+oIzNo47sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqB1H7SfI5 Rm6NWRB5Q1rlldeh28DiqD1nzFFpsUZdKvMSEJ+wCKdab981HbHaZ0kAYx4pS5d3xdh2foDqJHfa PzY5dajcXrepLJzX9kD7I+QGeaa7tHPqZXlPw6D4fgvR4dLDEKiK+9QzBbnYq7FVryJEpkdgiruW JoBhiCTtzSBeyZeT/N91f66mmLIZbX03YvJuaqNuNd6fPPRPZnVanxBjyTMo1yO9fHm4PafZ8ceL xKqVs+zuXnHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqgtSG8Z+f8Mozd GrIgsoa1ks0cScpGCr74CQOaCaYv5znt7jTYHjarJLQqdiAVP9M5n2mqWCJHSX6C9B7N5Ac0h/R/ SGJQ3E0JrGxXxHY/RnDyiDzewnjEuaZW+sI1FnXif5xuPuzHnp+5xJ6U9EwSRHUMjBlPcZjmJHNx SCOaE1DVbWyX4zylP2Yl6n5+GX4NLLJy5d7biwyny5MWv9Uur16yNSMfZjX7I/rm6w6eOMbOyxYY w5Mh/K//AJSuP/jDL+rOh9n/APGR7i6zt3/Fz7w9jzu3inYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYqgtS/3X/sv4ZRm6NWRJLrVIo6rF+8fx/ZH9cw55QOTjyyVySmaaWZ+U jFj+r5ZjGRPNpJtK9eWtgT/KwP8ADNN25G9OfIh3ns7KtUB3g/rY3nEvoDqV2GKFUevAjOrFGodh 8u+WDGCRxNZqWyQu7uxZyWY7ljuTmxApyQKaxSy38r/+Urj/AOMMv6s3fs//AIyPcXTdu/4ufeHs ed28U7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqlWu+ZtI0WLleS/vSKx26f FI30dh7nbFzdH2fl1B9A27+jAr/8ybi9dUNsIrcFuScuXIH7NTQUIyjNAyGzsdb7NZeEHFISPUHb 5H9avaarp14B6cgjc/sOdvobNfLFTyefBPFLhyRMJef6O9FsjKdxTKiKaaQOsLysJR7V+41zW9rR vTTHl9ztexZcOqgfP7xTHLe2mnbjGtfFuw+ecLjxmZ2fRJ5BEbo9bOOBf5n7sf4ZmDCI+9xjlMkJ dfZb5HKZc26DHMzHMdirLfyv/wCUrj/4wy/qzd+z/wDjI9xdN27/AIufeHsed28U7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqo3l7aWdu1xdSrDCn2pHNBi2YsUskuGIsvPfMf5nSycr fRV9NOhvHHxH/UU9PmfuGL1Gh9nwPVm3P839ZYHNNNPK0sztJK5q8jksxPiScXpYwERQFBZiybV2 U1UkHxGRMQebTnwQyx4ZgSj5prp/mO+taIx9SLujbj7v6Zjz0w6PLa32Vid8EuH+jLcfPmPtTCTz NZ6hCILOH155HMDorjiG2qtf5vi+jNZrcEBjkMh4Y8Js/peTyRzaLURjKP7ywQL57/pTp9OmtrZP 3IjTiCwQ8gpPif45xlwG0eT1+HV+Lufq7ksn75RN2EEtuBUEZhzcuDG8zXMROn6deahcrb2kZkkP WnQDxY9hi05s8MUeKRoPSPJGi2Ok6nGgIub+RWEs+4WMBSSqDvuNyc2fYGtiNYMcQCZXZ7qBOzzP aepnmxk/TAch3+9n+ehvOuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KvIf+ch7i8t LLQ722kMbRzTxtToeao1COh+x3ycBb3XsRCE55YSF3GJ+V/reY6X5zt5aR36+i/T1VqUPzHUYTj7 nr9R2VKO8Nx3dWRxyRyIHjYOjbqymoOVuqlEg0V2KFO5ube2hee4kWKFBVnY0AxUBiw1DzB5su30 7y5G0NkNrnUHqoA/1v2a9gPiOYut12HSx4sh36DqWrV6vDpY8WU79I9T+Pk9J8p+VLLy7psVpC5n mRzK9w4AJkNKlRvxG2efdpdrZdXI36YHbhHd597532jrDqs/jEAHYDyAZZb6u6bSCo/mX+Iznhp5 498Uq8jyRHVA/WPivnsdOv1LRn0pP50G3+yTLI64DbIOA/Y7PT6yUeR4x9rHdV0e+tAWdOcP+/U3 X6fD6cumLFjcO802rhk2Bo9xSnRPK13qbmZz9XsFJ5Tt3AO4QHr8+mZZIAst2r7Qji2Hqn3frZZG bOxtvqemp6UP+7Jf25D4k5qdTrTL0w5OqEJTlx5Dcu7oEx8qrXWIz4K5/CmbT2Sjeuj5Rl9zR2if 3R+DN89ZeddirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVeWf8AORVuJPJVnMPtQ6hH /wAC0UoP40yePm9n7DzrWSHfjP3xfOeXPqqM0/Vb+wflbSlQftRndD8xgIBaM2mhlHqDI18+Wkdk 8tzAwnQbIm6sTt1P2crON0Wq7POPcG4lEaL5L1/zZNHqPmFnstJB5QWS1V3HbY/ZB/mO57Zznant BjwXDD6snf0H6y8t2l29j09ww+vJ39B+t6hp+nWOnWkdnYwrb20QokaCg+Z8Se5OcJnzzyyM5nik Xhs+eeWRnM8UiicqanYq2rMpBUkEdCMEogiioJG4V28wLYwNLdsPRXqT1PtTvmPDQy4v3JMSenRy RreEevl9q++u3kIiWiQKBwjUUFKA9BmBl1U8go/Y9DpsYA4upQuUOSnXlEA6sT4RMR94GdV7HC9Z /mH9Dr+0/wC6+LNM9UefdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVYB+elv6v5cX 7/74lt5PvmVP+N8nDm9N7ITrtCA/nCQ/2JP6Hy/lz7E7FVK6cpbuwNGHHifcMDgIvZwu0I8WOuj2 +01W6tqLX1Ih+w3h7HtnkksYL86QzEJ1aapa3NFDcJP5G2J+XjmPLGQ5McgkjMrbHYqg9T1S10+D 1JjVj/dxj7TH2y/Bp5ZTQasuUQFlg2p6rdahP6kxoo/u4x9lR/n3zoMGnjiFB1WXKZmy9Jm+3/sV /wCIjPOap9H0/wDdj3LMW5PvJoP6SlPYQkfey52HsUP8Kkf9rP8Auout7UP7sf1v0FmGenOhdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVYp+att9Y/LzXI6V42/qdv8AdTrJ3/1clHm7 v2cycOvxH+lXzFPkvL3212KqF8P9Gf2p+sYuNrP7svYbc1gjNa1VTX6M8pyD1H3vzflFTPvVMg1o +z1i4gokn72MdifiHyOVzxAt0cxHNE6j5mtba1DxAvO9QkZFACO7H+mS0+ilkO/0ssmpERtzYbd3 dxdztPO5eRu57DwHgM32PHGAqPJ1s5mRsqOTYPV7hSspU7EBQR7gDPM5Gzb6ZgFQC+ysri8uFggX k7d+wHiT4ZlaLQ5dTkGPGLkfs8z5MsuWOOPFJnGk6Rb6dBxT4pmH72XufYe2et9j9jYtFjqO8z9U u/8AY85qdTLKd+Xcj83DjOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KqN5Z2t7aTW d3Es1tcI0c0TiqsjChBxbMWWWOQnE1KJsF4x51/5x7VvUvPKk3E7sdMuG2+UUp/U/wDwWWDJ3vf9 le2xFQ1Q/wA8fpH6vk8Z1TSdT0q8ey1K1ktLqP7UUqlT8xXqPAjbLQXvtPqceaAnjkJRPUICdQYJ ARX4WP3CuLHWf3R+H3vWNNYNp1qw3BhjIPzUZ5ZqRWSX9Y/e/OesFZpj+kfvROUuO7FUv1X/AHV/ sv4Zs9F9J97RmS/Mxpdir2NNPuL7UnhgG9asx6KKdTnn/ZvZ2XV5BjxjoLPQDvL6Qc0ceOyzLTNL ttPtxFEKuf7yU9WP9PbPXuyuysWix8EPq6y6n9ncHQajUSyysozNm0OxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVK/MHljQfMNmbPWLOO6i34Mwo6E943FGU/I4QaczRdoZ9L PjxSMT9h945F4j5y/wCce9ZtmeXyxML+2l+AWs7LHNHz+H7Zojqtak7H2OWDJ3ve6T2yxZcZhqBw TrmN4mvtH2uXTptMA02dlaaxH1aVkrxLRfAxWtDSq55nrBWaf9aX3vlOryCeach1kT9reYzjuxVL tV+1H8j/AAzaaL6D72jLzQGZbSnHlnyvqXmG/FrZrxRd57hq8I18T4k9h3y/T6eWWVBtxYTM0H0J b2tvbhhCgQOeTU7nN/o9Dh00eHFERD0E8kpcyq5lsHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FWPa/wCSNH1blKF+q3jVPrxAfET3dejfr981Wt7IxZ9/pn3j9LVP CJe95zrvlHWdHYtNF6tt2uYviT/Zd1+nOU1nZmXBuRce8fjZw54jFJc17Wl2q/aj+R/hm00X0H3t GXmmPlHydqHmO84RfurKIj6zdEbKP5V/mY+H35tdNpZZTty704cByHye56Noun6NYR2NhH6cKbkn dmY9Wc9yc6PFijjjwxdxjxiAoI7LGbsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirmUMCrAFSKEHcEHEi1Ylr35d6XfcprCllcnfio/dMfdR9n/Y/dmj1nYePJ vD0S+z9nwaJ4AeWzD7X8sNZvdYW3vx9WsYN5rhSG5g9Fi9zTuNu/hmHoeyskSYz2F8/1OJ+VlKW/ J6rp2nWWnWcVnZRCG3hFERf1nxJ7nOlhAQFDk7CMREUERk2TsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVUhd2pn+riVfW/33UcvHpiqrirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVYf8Am95yufJn5ba75ktFVryx gVbXkKqJp5EgiZh3CvKGI74q+W/yd/KG/wDzsGreaPOXmS9kW2uPqyBWEk7SlVkY1l5LHGAwCqq/ KlMVfR35Qfktpn5ZNq6abqt1qFrqn1bjDdBKwm39WpUpxB5+tv8ACOnfFWQ+aPzG8o+WZhb6rehb tgGFrErSyBT0LBRRfbkRXFXeVvzF8peZ5Wg0q853aLza1lVo5OI7gMKMP9UnFU1vNf0uz1G3064l KXV1T0V4kg1JUfF0G4xVCL5z8uyagLCK59ac8t41Zk+FSx+KlDsO2KqdsdEn1dbiKaRp3YssZBC8 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 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim19.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim19.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,309 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:29:06Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq4kAVOwxVpWVhVSCPEYBIHkgEFvCl2KuxV2KuxV2KuxV2K -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 - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:01:53Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq4kAVOwxVpWVhVSCPEYBIHkgEFvCl2KuxV2KuxV2KuxV2K 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 - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim20.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim20.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,333 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:29:28Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq4kAEk0A6k4CaW1qSRuOSMGHiDXBGYkLBtAkDyXZJLsVdi -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 -q7FXYq//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:01:48Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq4kAEk0A6k4CaW1qSRuOSMGHiDXBGYkLBtAkDyXZJLsVdi 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 KuxV/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim21.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim21.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,361 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:29:42Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq5mVQWYgKNyTsMBIAsoJpZFNFKvKJ1dfFSCPwyMMkZi4kE -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 - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:01:43Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq5mVQWYgKNyTsMBIAsoJpZFNFKvKJ1dfFSCPwyMMkZi4kE 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 - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim22.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim22.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,397 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:29:58Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq5mVQWYgKNyTsMBIAsoJpZFNFKvKJ1dfFSCPwyMMkZi4kE -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 -xV2KuxV2KuxV/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:01:36Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq5mVQWYgKNyTsMBIAsoJpZFNFKvKJ1dfFSCPwyMMkZi4kE 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 /9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim23.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim23.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,411 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:30:16Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq0XQMFLAM32VJ3NPDImcQQCdymjzbySHYq7FXMyqCzEBRuSdhgJAFlBN -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 -sVdirsVdir//2Q== - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:01:29Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq0XQMFLAM32VJ3NPDImcQQCdymjzbySHYq7FXMyqCzEBRuSdhgJAFlBN LIpopV5ROrr4qQR+GRhkjMXEghEZiQsG1+TZOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxVZNPDBGZJnEca9WY0GU588MUTOZEYjqWUIGRoCyxvUvN43jsF9vXcf8RX+u cN2p7Zc46Yf5x/QP1/J22DszrP5McmubiaUyyyM8h35k7/RnD59Tkyz45yMpd7tY44xFAbJlY+Zt TtqK7fWIx+zJufobr9+bzQe1OrwbSPiR7pc/9Nz+duJm7Pxz5ek+TIbHzPptzRZG+ryH9mT7P0N0 ++mdtoParS59pHw5f0uX+m5fOnV5uz8kOXqHkq32vWdsOKH1peyodvpbNjqu1cWMek8UvL9bpdRr I49ucmOX2qXl4f3r0j7Rrso/r9Oc3qtdkzH1Hbu6OnzameTmdu5DxTTQvzidkbxUkH8MxseSUDcS QWmMzE2DSa2vmW8joJ1Ey+P2W+8bfhm3wdtZI7THEPkXOxdozH1bpxa67p9xQc/Sc/sybfj0zc4O 1MOTrwnz/FOxxa3HPrR80wBBFRuD0ObEFy3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FUq8y602j6eLpY/ULSCPfovIE8iO/TNR232hPSYOOABkTW/Ic93N0Gk8fJw3W1sKm1aXU m9WSf1fAdAtfBe2eTa/W6jUT4s0jL7h7uj0MNMMQoClPMFk7FXYqslliijMkrBEXqx2GGMTI0OaQ CdglUPmT1tSgt7f4LdnAeRv2h7A9M3/Z+CeMiz8Ojg9tdmYzpZ5JxHHGO39rJs3T5g7FVG7vLWzg ae6lWGFersaD5fPG2UYmRoMQ1XzXe31YtP5WlqdjcH+9cf5I/YHv1zrOxvZPNqqnlvHi/wBkfcOn vPyL0fZ/YMp1LJsHaV5s8w6WI0tb1/RjAVYZDzSg/wAlq0r3I3z0mHY+mhjGOMajH5/Pq9R+RxcP DTMdK/NlDxTVbPie81uaj/gGP/G2a/P2F1xy+B/W4mTsz+afmzHS/MuhaoALK8jkkP8AuonhJ/wD UbNPn0eXF9UT+h1+TTzh9QTPMZpdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirHfP0XP y1O1P7p42+9wv/G2aD2mhejke4xP21+l2vY0q1A8wfueWI7IwZSVYdCNs8zezIB5o+31iVaCYcx/ MNjlE8APLZxZ6UHkmcF1BOKxuCe46H7sxp4zHm4k8co80LqOr2tktGPOb9mIdfp8MuwaWWTflHvZ 4sEp+5i1/qV1eycpm+EfZjH2Rm6w4I4xQdnjwxhyQ8X94vzzJx/UHW9vf4ll/qpvZ6vf2lBFISg/ 3W/xL/Z9GZ744jL/AM9xWdl6j2/78ninxfu6nux65fpdNPPljjxi5y5OVpNKc8xAMdmu59SkF3dz i5b/AHWFP7pP9RRt9PXPU+xfZTDpankrJl/2MfcP0n4U9xoOyceAWd5N51rtnYq7FWwSDUdcVR2h /mprFr5i0vQ7W8N2L27gtZRMfUSNZZVjNGPxVAboDmj7QwYDEkR9QHTZ1uqx4qNDd77nLuldirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVSjzbF6vlu/Xwj5f8AAEN/DNV23Di0eQf0fu3c7s2V aiHveQZ5S924Ak0G5PbFCsIWT4iaMOlO2WcFc2BkCkLli7ciWapqx6k5sacgLcUrov7xfnlmP6g6 jt7/ABLL/VRJIGbvS6GeXflHvfFc2ojD3pbrnxWlDuK9M7PsHSwxamAiOvP4Fr0GeUswNsejSSB/ UtpGgfvx+yfmp2z0ent9P2vlhtL1D7fmmFvr88dFvIuS/wC/ov4qcXeaftLFl2uj3FNra9tbpeUE iuO4HUfMdcLsF1zcwW0LTTuI4l+0zdMjKQAsoJA5sI13zdcXnK3s6w224Z+juP8AjUZr82pMthyc TJmJ2HJV/LKH1vzB8vpttexPv/kNz/41zXak/u5e5xM30F9hZzzqnYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FUJrEXq6RexfzwSr96EZia+HFgyR74S+5v0suHLE/0h97xq2tJrhqRjYfaY9B nkePFKZ2e+yZBEbpitnHbrt8T92OZgwiA83EOUyQs/fKJt8GNSf3jfM/rzMDmDktyUYmRocyxnMR BJ5Bcn2hnSaHskRIlk3Pd0eF9o+2zk02SGPaNc+v7FfOjAfI0u1v/eUf62bPsYf4VD4/7kuw7M/v QkWd89K7FUPcGCL96SY5P2WQ0avtTJRiTydhpNbmgaibHceSRavqN5dzATytIqAcFPQbe1N/fNXr L4yO56GWQyAJ7kBmKxZr+TEPrfmboabbSTPv0+C3kf8A41zG1h/dFqz/AEF9aZoHVuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KtOodGU9GBB+RwSFikg0bYjf+U5rWP8A0AerAvSMbOP+av1+ 2chq+wZ4x+69Ue7r+38bO8w9pCZ9ex+z9jF7pWRmVgVZTRlIoQR4jObyxINHm7jGQdwls/fMGbmQ Y3N/ev8A6x/XmXHkHMCm4Jjagrsc2PZenyZdRAQF+ofe42uF4J/1T9y21khICiXhN3jlFAf9Vume jns/h/rPiXampy5DwSBgO7v+PX7kSXKHjKpQ9q9D8jmLPFKPN0MsRCB1r/eQfMZn9jf41D4/7kub 2Z/ehIs756RC3V6kNVX4pPDsPnlkMZPubseEy3PJK5JHkYs5qTmUAByc2MQNgl93/ft9H6hnPaz+ 9k7uP0j+qPuUcxkvQ/yEh9T8yrF6D9zDcPv13iZNvf48w9cf3RaNT9D6mzRutdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVSvXrLQ5bV59TKQogp9ZJCMvhRu/sN8wtZ2fh1A9Y37+v4+ xzNHlzCQGOye55PfXmmm7kjtJXkgB/dyyLw5fRU/jnF9o+zubF6sf7yP+y+XX4fJ7bDiycIMhUu4 bpDLGWnkPbkd/pw9l9j5M4Bl6Yd/6nMiNnMoEbAeB/Vnd6HTY8FRgKFhhqR+6l/VP3JcyqwoRUZ0 5APN87y4o5BUhYXRS3EI4xvyj/31J8S/1GY09MDydHqewonfEa8juP1j7UHqF7HdBLW1jb6078BG rKUDVHjlOmjj0+YZJ7CN/cQ6OMTps4jOO5SnWYNV04rFc27QM/STqp/1WFR+OdfotRhzjihIS/Hc 9HhhGW6S9c2LmOxVBXwAuWA8EP3qM5rUm8kve7sch7h9y/TNMv8AVL2KxsIGuLqY0jiQVJ9z4Ady emYeo1EMMDPIeGI6qTT6D/KXyDY+WNSjmuGW71ueN0mlUn0oF41KR/zEkULH6M8/HtadZrRgxj91 v79gT+A1ajFI4zI7B65m+dW7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8h/5yHuL y0stDvbaQxtHNPG1Oh5qjUI6H7HfJwFvdexEITnlhIXcYn5X+t5jpfnO3lpHfr6L9PVWpQ/MdRhO Puev1HZUo7w3Hd1ZHHJHIgeNg6NurKag5W6qUSDRbb7J+WShzDVmFwPuKVyzRQxtJKwRF3LHYZ0L 52k4udT1qdrXSkMduNpbltgB8+3yG+U6jUwwi5H4MM+eGEXM/BlGjeXrLTIEVR60ynmZnAry61Uf s9M5jV6yWYm9o9zyuqzeNl8Qjfomd3cJIgiuI1kjavJSAQenVTtmDgjkxS4sUjEt+HPtuxzUfJen XQMmnyfVpevA1aM/R9pfxzqtD7W5MZ4dRGx39f2/jdz4ZvixXUtD1PTmP1qEiOtBMvxIf9kP452e j7SwagXjlfl1b4zBa0TyjrHmXV2t7CPjDGqG5u5Nool4jdm8T2UbnOV7b7WwaISnlPU0Op/He747 UPc9p8u+XNH8tWRtdLUtNIALvUHFJZT4D+RPBRnhnb3tLm10+dQHIfj7/ucvDpusubJ/Kq11iM+C ufwpg9ko3ro+UZfcx7RP7o/Bm+esvOuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kv LP8AnIq3EnkqzmH2odQj/wCBaKUH8aZPHzez9h51rJDvxn74vnPLn1VGafqt/YPytpSoP2ozuh+Y wEAtGbTQyj1BkQ8+Wkdk8lzA4nUbIm6sTt1P2cr4KLodZ2cYDY7HZUsPLuq6y8d5qvO1sWo8NvQq zKehAPQHxO+ZGftnEARiInLv6D9r472hrfy5MALn9n7WYWtrb2sCwW8YiiTZUXpmgyZJTPFI2XmM mSUzxSNlVyDBD3fVfpyePq3Y+SHBINQaHxywgHm2g0jIJC0TtckC0XaWRhUb/s0/aJ8M12pzjT74 yfE6R/HIebk48hP1cu9mAhtrSEWllCltarRxFEoQFmAJZgO+eYa/tTPq58eWVl7vS4gIg9VuYDlJ 15RAOrE+ETEfeBnVexwvWf5h/Q6/tP8AuvizTPVHn3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FWAfnpb+r+XF+/++JbeT75lT/jfJw5vTeyE67QgP5wkP9iT+h8v5c+xOxVSunKW7sDR hx4n3DA4CL2cLtCPFjro9tt9QmiURuBND/vt96fI9RnlESYniieGXk/OXHYqW4RCx2tz/vM/CT/f EhoT/qt3zc6btkjbKP8AOH6R+px56QHeB+ChJG8bFXUqw7HN5jyxmOKJsOFKBiaKFu+q/Tl+Pq2Y +S304YIRc3ZKxH+7jH25CP5fbxOYOr1/CeDHvP7I+/8AU5MYAC5cvvSq+v5rtxyASJNooV+yo/r4 nNZGFEkm5HmWuczL3PTJvt/7Ff8AiIzzWqfSNP8A3Y9yzFuT7yaD+kpT2EJH3sudh7FD/CpH/az/ ALqLre1D+7H9b9BZhnpzoXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWKfmrbfWPy 81yOleNv6nb/AHU6yd/9XJR5u79nMnDr8R/pV8xT5Ly99tdiqhfD/Rn9qfrGLjaz+7L2G3NYIzWt VU1+jPKcg9R97835RUz71TINaMg1JwoiuF9eLsG+0Pk2SxzljPFA8JZmXEKkLClf3Wl26rOvKZzX 0rdxQA+LnuB4d83GPtDPljw/T3yH6PNpMIQ3G/kx66up7qZpp25OfuA7ADsMnDGIig48pmRsqOSY vV7hSspU7EBQR7gDPM5Gzb6ZgFQC+ysri8uFggXk7d+wHiT4ZlaLQ5dTkGPGLkfs8z5MsuWOOPFJ nGk6Rb6dBxT4pmH72XufYe2et9j9jYtFjqO8z9Uu/wDY85qdTLKd+Xcj83DjOxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KqN5Z2t7aTWd3Es1tcI0c0TiqsjChBxbMWWWOQnE1KJsF4x5 1/5x7VvUvPKk3E7sdMuG2+UUp/U//BZYMne9/wBle2xFQ1Q/zx+kfq+TxnVNJ1PSrx7LUrWS0uo/ tRSqVPzFeo8CNstBe+0+px5oCeOQlE9QgJ1BgkBFfhY/cK4sdZ/dH4fe9Y01g2nWrDcGGMg/NRnl mpFZJf1j97856wVmmP6R+9E5S47sVS/Vf91f7L+GbPRfSfe0ZkvzMaXYq9jTT7i+1J4YBvWrMeii nU55/wBm9nZdXkGPGOgs9AO8vpBzRx47LMtM0u20+3EUQq5/vJT1Y/09s9e7K7KxaLHwQ+rrLqf2 dwdBqNRLLKyjM2bQ7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUr8weWNB 8w2Zs9Ys47qLfgzCjoT3jcUZT8jhBpzNF2hn0s+PFIxP2H3jkXiPnL/nHvWbZnl8sTC/tpfgFrOy xzR8/h+2aI6rWpOx9jlgyd73uk9ssWXGYagcE65jeJr7R9rl06bTANNnZWmsR9WlZK8S0XwMVrQ0 queZ6wVmn/Wl975Tq8gnmnIdZE/a3mM47sVS7VftR/I/wzaaL6D72jLzQGZbSnHlnyvqXmG/FrZr xRd57hq8I18T4k9h3y/T6eWWVBtxYTM0H0Jb2tvbhhCgQOeTU7nN/o9Dh00eHFERD0E8kpcyq5ls HYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWPa/5I0fVuUoX6re NU+vEB8RPd16N+v3zVa3sjFn3+mfeP0tU8Il73nOu+UdZ0di00Xq23a5i+JP9l3X6c5TWdmZcG5F x7x+NnDniMUlzXtaXar9qP5H+GbTRfQfe0ZeaY+UfJ2oeY7zhF+6soiPrN0Rso/lX+Zj4ffm102l llO3LvThwHIfJ7no2i6fo1hHY2EfpwpuSd2Zj1Zz3Jzo8WKOOPDF3GPGICgjssZuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuZQwKsAVIoQdwQcSLViWvfl3 pd9ymsKWVyd+Kj90x91H2f8AY/dmj1nYePJvD0S+z9nwaJ4AeWzD7X8sNZvdYW3vx9WsYN5rhSG5 g9Fi9zTuNu/hmHoeyskSYz2F8/1OJ+VlKW/J6rp2nWWnWcVnZRCG3hFERf1nxJ7nOlhAQFDk7CMR EUERk2TsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVSVPO3k9/MZ8srrNm3mBRyOlieP6xsvMj068uXD4uPXjv0xVOsVdirsVdirsVedfmZ+YdxpM v6H0lwt8VDXVzsTEGFQqg/tEb17D8NnodGJ+qXJxs+atgxzSvy385a5bLqV9qBtzcAPH9YeSSVlO 4LDsD88ysmtxYzwgXXc1RwyluS9D8i+WNQ8vadcWl7dLdmSb1InUtsvEClG6bg5rNXnjlkCBTk4o GIorvOPmGbTYI7a1PG6nBJfqUQbVHuT0x02ETNnkFyTpINP8r61qtj+kGuyHlqYlkZmZ6GlS1dq5 kzzwgeGmsYyRa/yv5jv7XUk06+dpIZH9Kkhq0claDc9q7UwajDEx4gnHMg0Wf5rXIdirsVdirsVd irsVdirsVdirsVdirsVYf+b3nK58mfltrvmS0VWvLGBVteQqomnkSCJmHcK8oYjvir5b/J38ob/8 7Bq3mjzl5kvZFtrj6sgVhJO0pVZGNZeSxxgMAqqvypTFX0d+UH5LaZ+WTaumm6rdaha6p9W4w3QS sJt/VqVKcQefrb/COnfFUZ5+/Oz8uPIlytn5g1QJqLqHGn26PPOFPRnVAQgPbmRXtirfkD86vy68 +XElp5e1P1NQiUyPYTxvBPwBoWVXADgd+BNO+Kphr/5m+TtA816V5V1S8aDWdaCnT4fTco/qOY1r IBwWrrTc4qkEn/OQ/wCU36fbQrfWfrl7GkzyvawyywqLaJ5pP3oXg1EjP2CcVeV+UZP+cePMf552 vmfRtc1K48x6hcvc2ulvDJHbG69Jizl2iVgtAWCl/te3w4q+h/M/mry95W0eXWPMF9Hp+mw0Dzy1 3Y9FRVDO7HsqgnFXnOk/85T/AJMalqKWI1eS0aRuEdxdW8sUJJNBWShCA+L0Hjir1S71Cxs7GW/u 7iO3sYIzNNdSMFiSNRyLs5NAoG9cVeS3n/OWH5LW161sup3Fwqtxa5htZjF1oSCwViB4hflXFXp3 lzzNovmTQbXXtHuPrOlXqGS3uCjx1VWKtVZArCjKRuMVfP66la3/AJqGpaoT9Unu/XuhQsfT58ig A/yfhGdTwGOPhjzp1fFcrL0h/wA79LE3GPS52gr9tnRWp/qAMP8Ahs1Y7KlX1ByvzQ7ma+W/NGk+ YbI3WnyE8CFmhcUkjY9AwBPXsRtmBnwSxGpN8MgkLDC/PExk8wyoTURJGg9qrz/42zP0gqDRlPqZ /o6BNJskHRYIh/wgzW5T6j73IjyDzXzD+58w3jR7FZi4PuTy/Xm1w7wHucaf1PVEYMisOjAH7805 ctvFXYq7FXYq7FXYq7FXYq7FXYq7FXYqkXnrylZeb/KGq+Wr1jHBqcBi9UCpjcENHIB34SKrU9sV fFAh/Ob/AJx98zPMqGOxuXCNLQzaZfKlSoJ+GjAE0+zIPlir6k/Kr8+fL/n7yvqGpRQNZ6vo8DT6 npRbkQqqWDxPQc0bjTpUHY9iVXzJ+RnmbydqX5s6n5t/My+tqvDNdQNfDnE15LIirRSGH7uMtwWm 21OmKrvP3mLyVov/ADkBo/mP8vri3GlLNZ3M5sQUgEjSFLmMKoFBJH9oAftHFWQ/85rO8f5haBJG xR00tWR1NCCLmUggjFXuX5a/84+flp5b0vR7/wDRK3WvR2ytc6hPJK5eWaHjN+6L+lwIdl48aU8T virwXQLOzsv+cyBaWcEdtaw6pcLFBCixxov1R9lVQAB8sVXf85ceZptW/NXTvK9zcG30bSYoBJv8 KyXZDyzH5RFB9Hviqa/85Daj+Quofl1aQ+TJ9MOtaXNBHZrYoEmNtRldHbipdd+R5Emu/jiqvd3n mXzR/wA4a2y2fq3M2lTiDUFQFmaysp2K7D9mJPSJ9lriqX/84yeevyYsNDl8tebbGzg1q8umYalq NvFLBPG4UJEZnVvSC8fsvRO9anFX1jaaXpWl6H9R0m2hs9Ohif6vbWyLHCivVzwVKKASxO2GPMIP J8+eVNLi1XzHp+nzVMM8wEoGxKL8TCvuozqdRkMMZkHWY43IB7V5z8qaLceVL6OKyhhktLd5rV44 1RlaJeQAIA2bjQ5odNqJjILJ3LnZcYMTs83/ACfvpoPNy26n91dwyJIvb4B6in5jj+ObTtKAOK+4 uNpj6mSedFI8yXZP7QjI/wCRaj+GYul/uw25fqeiaVvpdn/xgj/4gM1mT6j73JjyeaeZ/wDjv33/ ABkP6hm1wfQHFnzL1KEEQoDsQoqPozUHm5YX4FdirsVdirsVdirsVdirsVdirsVdiqD1fWNJ0bT5 NR1a8h0/T4Sgmu7mRYok9RxGnN3IVauwG5xVi3nTzn+VMvlLUP8AEWraZeaFNA4uIPXhm9UAE8Yk ViWkqPg478umKvlz/nD7y/f6p5x8xuhePTjok9ldzKKjndyRiJd+9I3Yf6uKpH+Q9t5K0X80b7y9 +ZdhaCJoprEfpNUMMF7FKpHMyfCnIIyhj7eOKvqZvJ//ADjnbXdpEdP8tR3dzNHDZRD6r6sk7sFj SJQeTMWIoBirwP8A5za/5T/Qv+2UP+omXFX2BpP/AByrL/jBF/xAYq+P9M/9bSf/ALatx/1BviqE /wCct9Dn0f8AN+y8wXNv9Y0zVLe3mUMPgka0IimhNf8AIVCfZsVe9aPoH/OMuraNBrFpp/lsWM8Y kDSraxMgIqVkVyCjL0YHpirMdF1D8s/L/lm0k0i70rTPLV9M0djLDLDDZzTPy5LG9RG7N6TdDvQ4 q+a/+crPIn5T6Vpdl5g8tSWtlr17dLHLp1hJGYZoWjZmm9FDSPiVX4kABruKmuKvZ/8AnF291a8/ JbRH1Jmk9NriG0kfdjbRTukY37LQoPYDFWIWyf4X8+RrdKVi0+8HM7n9yW2cf8825DOmkfFw7dQ6 0eie/R67518z6Pb+Ur6WK8hla7geG1EUisXaVSlV4k148qnNJpcEjlArkXNyzAiXnf5N6XNceZnv wp9Cyhbk/bnL8Cr93I/Rmz7TyAY66lxdNG5Wy78wLJ49TiuwP3c8YXl/lodx9xGYejlcab8w3tkn lvWLGTQbd3mRDbRiOYMQCvpim/zAzFz4yJnbm2QkKYMqnWPMZ9MErdXBanhGWqSfkubD6MfuDR9U nqmady3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FUn83+U9E83eXbzy9rkTT6XfBBcRo7RsfSkWVCHQg ijxqcVeTp/zh3+T63AlP6SZK19A3S8KeFRGHp/ssVereUfJflfyhpC6T5c0+PT7FTzZI6lnegBeR 2LO7UHViTirGPzA/Ij8tfPd5+kNb05k1QqEbUbSRoJmUCg50qj0AoC6kjp0xVI/K3/OLX5T+XdZs 9Yt4L27vtPnjurNrm5Yqk0LB434xCLlxZQaNUeNcVT78xPyP8h/mBqltqfmKK4kurSD6tCYJjEvp 82fcAGpq5xVnkEKQQRwx/YiUItdzRRQYqwOH8j/IcP5hHz8kVx/iEzvcmQzH0vUeMxn93SlOLYqy Tzf5K8r+cNIbSPMmnx6hYswdUfkrI42DxyIVdG3pVSNtumKvKx/zh5+T4uPVI1Ix1J+rm6HD5VEf P/hsVZtrP5Lfl9q/kew8k3NlIvl/S5RPYwRzyh45QJBy9QszN/fvs1Rv8sVYbp3/ADiF+TtpdpcS wX98imv1a4uj6Z+fpLE//DYq9ksbGysLKCxsYEtrO2RYre3iUIiIgoqqo2AAxVI/NfkPRPMnGW5D QXqLxS6ioGp2VgdmH+dcytPq54uXJqyYhJisH5HWCy1n1WWSKu6JEqNT/WLOPwzMPap6RahpR3s+ 0TQtM0SwWx06ERQqeTHqzserO3cnNblyyyG5ORGAiKCtqGnWmoWrW10nONt/Ag9ip7HBCZibCSAW MSflzbF6x3rqn8rIGP3gr+rMsa09zV4PmneieWtO0mrwgyTsKNM9K08BToMx8ueU+fJnGACa5Szd irsVdirsVdirsVdirsVdirsVdirsVUrq6t7WBp7hxHElOTn3NB+OU6jUQwwM5mohnjxynLhiLLH5 /OaCcCG35wDqzGjH5daZxOf22iMlY8d4/M0T7u78cnaQ7KPDud010vXdP1JpI7dz60QDSxMN1DVp Wm29M6jsvtfFrY8ULBHMEfgFwtRpJ4qMuR6phm0cVid954vYdQ1a2tdHe8h0bg15MkyKQjoX5BGF TQKdhirI9M1G31LTre/tiTBcxrJHXYgMK0PuOhxVL4tbuH83T6KY0+rxWS3Qk35lmk4U60pTFU3l mihiaWZ1jiQFnkchVUDqSTsMVQ1jrGk37Mthe292yCriCVJCoPSvAmmKq15eW1nay3V1IsNvCpeW RjQADFUBoHmTSddtBcWEysdy8BZTKg5FVLoCSvLjUVxVC+cfNMXl7TkmHpvd3EgitoZXCAkkcnPf ilfixVMtHnvLjT4prt7eSWQFhJZszwMpPwlGbc1GKuvNZ0iylWG9vre2lcVSOaVI2YVpUBiCcVRg IIqNwehxVRnvbO3r688cNAGPqOq0BNAdz44qrAggEGoPQ4qpNeWisFaeMMSVCllBqDQjr44q3HdW 0jmOOVHkX7SKwJFPEDFVTFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUn83wNP5cvo1BZiisANySrq3 b5Zqe3MfHo8g8vuILn9mT4dRE/jk8pvZdQsbJv3pVjQcevEH3zzKOlHEOIbvZREMkuTJPygWQz6p KwYqViHM1oWqxpXxztvZmO8+7b9LpvaIioD3/oelZ1ry7zeKw13UPNXnCy0ye3t4rk20V5NMru4R 4XX90FIFaE9cVZ7pGmQ6Xpdrp8BLRWsaxqzdTxG5NPHriqQW/wD5M27/AO2VH/yfxVNvM+pwaXoF 7fz24uooY/ityKh+RChW2barb7dMVYdpDXJ/MDTXuEsoZ5tOkd4rAMFCMeSiQnZjirOdYiWXSbxG QOGgk+EitTxNNvniqRflnFbr5N06SNEEro/qOoHJqSuPiI3NMVQ35oxRPo+nsyKzDUbdQSATRq1H 00xVmKIkaBI1CIooqqKADwAGKvOI4NHudR87HWVhe7jJ9Mz8eaQCI+mY+W4/Z+z3p7YqynyC1y3k 7STcV9T0ABy68ASI/wDhKYqs1Cztbvzfax3MSzRrZs4RwGWocgVB2PXFWRAAAACgHQYqxwwQtZ6x IyAuJ3AYjcUauxxVFC3hgv8ASfSUJyjkDEbVpGDv49cVTnFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXEAih3B6jFWO6x5G0XU2VmDwDkGkWIgKwBqRQ14/Rmk1PYGnyzEhce+uR/V8HaabtbLiFc/endj Y2djbJa2cSwwRiiRqKD+0+5zb4sMccRGAqIdflyyyS4pGyVfLGtDW+m2NtdXN3BCsdzeFTcyjq5Q ELX5A4qicVQ66fZLfNfiFRePGIWn/aMYPIL8q4qqzwQXELwTxrLDICskbgMrKeoIOxGKpfp/lnQN OlWaxsIbeVeXGSNQG+MANv17YqmeKoDTdB0bS3lfT7OK1aenqmJePKlafrxVWv8ATbG/iSK8hWeO N1lRW6B1+y30YqicVSzUfLPl/Urhbm/sIbmdAAJHUE0HQHxHzxVMlVVUKoCqooqjYADsMVUza25u RdGMfWFQxiTuFJrT78VVcVUfqdtwlT0xxmJaUfzE9ScVXG3hLxuUHKEERH+WooafRiqpirsVdirs VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdir//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim24.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim24.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,416 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:30:28Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq0XQMFLAM32VJ3NPDImcQQCdymjzbySHYq7FXMyqCzEBRuSdhgJAFlBN -LIpopV5ROrr4qQR+GRhkjMXEghEZiQsG1+TZOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K -uxV2KuxV2KuxV2KuxVZNPDBGZJnEca9WY0GU588MUTOZEYjqWUIGRoCyxvUvN43jsF9vXcf8RX+u -cN2p7Zc46Yf5x/QP1/J22DszrP5McmubiaUyyyM8h35k7/RnD59Tkyz45yMpd7tY44xFAbJlY+Zt -TtqK7fWIx+zJufobr9+bzQe1OrwbSPiR7pc/9Nz+duJm7Pxz5ek+TIbHzPptzRZG+ryH9mT7P0N0 -++mdtoParS59pHw5f0uX+m5fOnV5uz8kOXqHkq32vWdsOKH1peyodvpbNjqu1cWMek8UvL9bpdRr -I49ucmOX2qXl4f3r0j7Rrso/r9Oc3qtdkzH1Hbu6OnzameTmdu5DxTTQvzidkbxUkH8MxseSUDcS -QWmMzE2DSa2vmW8joJ1Ey+P2W+8bfhm3wdtZI7THEPkXOxdozH1bpxa67p9xQc/Sc/sybfj0zc4O -1MOTrwnz/FOxxa3HPrR80wBBFRuD0ObEFy3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FUq8y602j6eLpY/ULSCPfovIE8iO/TNR232hPSYOOABkTW/Ic93N0Gk8fJw3W1sKm1aXU -m9WSf1fAdAtfBe2eTa/W6jUT4s0jL7h7uj0MNMMQoClPMFk7FXYqslliijMkrBEXqx2GGMTI0OaQ -CdglUPmT1tSgt7f4LdnAeRv2h7A9M3/Z+CeMiz8Ojg9tdmYzpZ5JxHHGO39rJs3T5g7FVG7vLWzg -ae6lWGFersaD5fPG2UYmRoMQ1XzXe31YtP5WlqdjcH+9cf5I/YHv1zrOxvZPNqqnlvHi/wBkfcOn -vPyL0fZ/YMp1LJsHaV5s8w6WI0tb1/RjAVYZDzSg/wAlq0r3I3z0mHY+mhjGOMajH5/Pq9R+RxcP -DTMdK/NlDxTVbPie81uaj/gGP/G2a/P2F1xy+B/W4mTsz+afmzHS/MuhaoALK8jkkP8AuonhJ/wD -UbNPn0eXF9UT+h1+TTzh9QTPMZpdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirHfP0XP -y1O1P7p42+9wv/G2aD2mhejke4xP21+l2vY0q1A8wfueWI7IwZSVYdCNs8zezIB5o+31iVaCYcx/ -MNjlE8APLZxZ6UHkmcF1BOKxuCe46H7sxp4zHm4k8co80LqOr2tktGPOb9mIdfp8MuwaWWTflHvZ -4sEp+5i1/qV1eycpm+EfZjH2Rm6w4I4xQdnjwxhyQ8X94vzzJx/UHW9vf4ll/qpvZ6vf2lBFISg/ -3W/xL/Z9GZ744jL/AM9xWdl6j2/78ninxfu6nux65fpdNPPljjxi5y5OVpNKc8xAMdmu59SkF3dz -i5b/AHWFP7pP9RRt9PXPU+xfZTDpankrJl/2MfcP0n4U9xoOyceAWd5N51rtnYq7FWwSDUdcVR2h -/mprFr5i0vQ7W8N2L27gtZRMfUSNZZVjNGPxVAboDmj7QwYDEkR9QHTZ1uqx4qNDd77nLuldirsV -dirsVdirsVdirsVdirsVdirsVdirsVdirsVSjzbF6vlu/Xwj5f8AAEN/DNV23Di0eQf0fu3c7s2V -aiHveQZ5S924Ak0G5PbFCsIWT4iaMOlO2WcFc2BkCkLli7ciWapqx6k5sacgLcUrov7xfnlmP6g6 -jt7/ABLL/VRLMB886Ps/sjLqTf0w7/1d74hqdbDFtzl3IHUqPBRgCCeh6Z6D2NoMWnyREBv1PUur -w6vJPKJXVcq6JKLP0n9S0ka3k78d1PzU7Z2NPYaL2n1GLaf7yPnz+f67RMWsXcFFvIeaf7/h3+9T -i9fou3tNqNhLhl3S2/YUytr21ul5QSK47gdR8x1wu5XXNzBbQtNO4jiX7TN0yMpACygkDmwjXfN1 -xecrezrDbbhn6O4/41Ga/NqTLYcnEyZidhyVfyyh9b8wfL6bbXsT7/5Dc/8AjXNdqT+7l7nEzfQX -2FnPOqdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVQmsRerpF7F/PBKv3oRmJr4cWDJHvhL -7m/Sy4csT/SH3vGra0muGpGNh9pj0GeR48UpnZ77JkERumK2cduu3xP3Y5mDCIDzcQ5TJCz98om3 -wY1J/eN8z+vMwOYOS3J48cpyEYiyWGXLHHEykaiOa5NmBzuOyvZuMCJ5vVL+b0+Pf93vfL/ab2sO -bDPFgFQI3keZ93d9/uVM68Ctg+TkobUP7kfPMzQ/30fj9xcnSfWl2dI7V2KoG/8AqUC+tITFL+w0 -Z4uT7UycMZkaDuuze1dViNQlce6W4/Z8GL6vqN5dzATys6IBwUnYVHtTf3zV6yxkI7nv45TkjGR6 -gH5oDMRWa/kxD635m6Gm20kz79Pgt5H/AONcxtYf3Ras/wBBfWmaB1bsVdirsVdirsVdirsVdirs -VdirsVdirsVdirsVdirTqHRlPRgQfkcEhYpING2I3/lOa1j/ANAHqwL0jGzj/mr9ftnIavsGeMfu -vVHu6/t/GzvMPaQmfXsfs/Yxe6VkZlYFWU0ZSKEEeIzm8sSDR5u4xkHcJbP3zBm5kGNzf3r/AOsf -15lx5BzAozKTDJT+Un8M2/YmGc9Xj4BdTjfutwO1Y3pMv/C5fcUJbXPABRJR/wCSTp9Bz2OWkHxf -n/WzlM8JHCjkukrxkBjb36ffmNPDKLqZ4SFl+QYQR0rl2g/vo/H7i2aT60uzpHaJfqGrRWoKJR5/ -5ew+eX4sBlv0crBpjPc7Bj088s8hklYsx7n+GbGMREUHaRgIiggLr+/b5L/xEZyut/vpe97fB/dw -/qR/3IUsxWx6H+QkPqfmVYvQfuYbh9+u8TJt7/HmHrj+6LRqfofU2aN1rsVdirsVdirsVdirsVdi -rsVdirsVdirsVdirsVdirsVdiqV69ZaHLavPqZSFEFPrJIRl8KN39hvmFrOz8OoHrG/f1/H2OZo8 -uYSAx2T3PJ768003ckdpK8kAP7uWReHL6Kn8c4vtH2dzYvVj/eR/2Xy6/D5PbYcWThBkKl3DdIZY -y08h7cjv9OHsvsfJnAMvTDv/AFOZEbNSqBA4A24n9Wd92dpoYJRjAUOINGvH+D5B/Ql9xSQgEUO+ -d0Rb4pOAkKIttHljFFaq/wAjbjKpYgXXZezh/Aa8ipz3hfjDAD6rNx4AgrX6cqxwhjmJy6Ou4PDy -ASG6A1m71G0VYmiMLOP73qD/AKp6ZvdJ4eXeJt22n08TvzY+SSancnqc2TsGsVQ16ALkgfyofvQZ -yOqN5Ze97bF9Ef6o+5fpmmX+qXsVjYQNcXUxpHEgqT7nwA7k9MwtRqIYYGeQ8MR1Zk0+gvyl8g2P -ljUo5rhhd63PG6TSqT6UClalI/5iSKFj9Gefj2tOs1owYx+639+wJ/AatRikcZkdg9dzfOrdirsV -dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVeQ/85D3F5aWWh3ttIY2jmnjanQ81RqEdD9jv -k4C3uvYiEJzywkLuMT8r/W8x0vznby0jv19F+nqrUofmOownH3PX6jsqUd4bju6sjjkjkQPGwdG3 -VlNQcrdVKJBouf7DfI5PH9Q97j6kXikP6J+5IXdEUs5CqOpOds+IoH1ru/kMNmpWMfbmO2QyZY4x -ZY5MkcYuScWGmW9pGoHxyA19RhvX28M1GbOch35OnzT458RC7UpVcIkqhlNagioPTqDlWnEoSJga -crT5Nt0jutBtZgWtm9J/5eq/1Gb3T9tSjtkFubGaTXen3dqf30ZC9nG6n6c32DVY8o9JbBIFE6J5 -R1jzLq7W9hHxhjVDc3cm0US8BuzeJ7KNznC9udrYNHxTynqaHU/jve3htEDyH3PafLvlzR/LVkbX -S1LTSAC71BxSWU+A/kTwUZ4Z297S5tdPnUByH4+/7nOw6brLmyfyqtdYjPgrn8KYPZKN66PlGX3M -e0T+6PwZvnrLzrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiryz/nIq3EnkqzmH2od -Qj/4FopQfxpk8fN7P2HnWskO/Gfvi+c8ufVUZp+q39g/K2lKg/ajO6H5jAQC0ZtNDKPUGRDz3aJY -vJcwOJ1GyJurE7dT9nICFF0Gt7NMBsdjsut9Jv7307i+V4LZwHiiZShZT0IDDp750X8q4Zg+FITr -nXT9r8866UtNI4yPWPl8+qdQwxQxiOJQiL0UZhSkZGy6WUjI2V+RYoLUesf0/wAMuw8y5WDkgwSN -xlxDcj9PtZLoM0pEdmm007CoH+SB+0x8M0/afacNGLBvIfpiOv6h5uVggZ8/p73p6QW1nbrZWcSW -9qlG9ONQgZmAJZgO5zwXtHtXPrJmeU2X0vSYYxgDzNNZr3LTryiAdWJ8ImI+8DOq9jhes/zD+h1/ -af8AdfFmmeqPPuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KsA/PS39X8uL9/98S28 -n3zKn/G+Thzem9kJ12hAfzhIf7En9D5fy59idiqldOUt3YGjDjxPuGBwEXs4XaEeLHXR7XFeyLH6 -MqieD/fUm9P9U9RnlWLLPFLjxyMZd4fnEkSFSHEFOTS7a5+Kxk4Sf8s0poT/AKjd867Qe1ZHp1A/ -zo/pH6vk63P2WDviPwKXTQTQSGOVCjjqpFM7HBqMeaPHjIlHydPkxygakKKXaj1j+n+GZmHmW/By -VbPTE9EXl8THan+7QbSSkdkr0Hi2aPtft6OAnFi9Wb7I+/z/AKPzdhi09jiltH727u8e44qFEUEe -0MCfZUfxJ7nvnGHilIzkeKcuZPX8dB0b5SvbkHp032/9iv8AxEZ5lVPpOn/ux7lmLcn3k0H9JSns -ISPvZc7D2KH+FSP+1n/dRdb2of3Y/rfoLMM9OdC7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYqxT81bb6x+XmuR0rxt/U7f7qdZO/+rko83d+zmTh1+I/0q+Yp8l5e+2uxVQvh/oz+1P1j -FxtZ/dl7DbmsEZrWqqa/RnlOQeo+9+b8oqZ96pkGtFJfco/Ru0FxD2DfaX/Vbrl2n1GTBLjxSMZf -f7xyKZ8MxUxxBA38Gi2zpcjlcGh9G0cUAbxkI6geHfOlj7RarNiMABCXWY7v6I6Hz6dHEGlxYjY3 -8v1pTc3U9zMZZm5OdvYDsAOwGYMICIoIlIyNlRyTF6vcKVlKnYgKCPcAZ5nI2bfTMAqAX2VlcXlw -sEC8nbv2A8SfDMrRaHLqcgx4xcj9nmfJllyxxx4pM40nSLfToOKfFMw/ey9z7D2z1vsfsbFosdR3 -mfql3/sec1OpllO/LuR+bhxnYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVG8s7W9t -JrO7iWa2uEaOaJxVWRhQg4tmLLLHITialE2C8Y86/wDOPat6l55Um4ndjplw23yilP6n/wCCywZO -97/sr22IqGqH+eP0j9XyeM6ppOp6VePZalayWl1H9qKVSp+Yr1HgRtloL32n1OPNATxyEonqEBOo -MEgIr8LH7hXFjrP7o/D73rGmsG061YbgwxkH5qM8s1IrJL+sfvfnPWCs0x/SP3onKXHdiqX6r/ur -/ZfwzZ6L6T72jMl+ZjS7FXsaafcX2pPDAN61Zj0UU6nPP+zezsuryDHjHQWegHeX0g5o48dlmWma -XbafbiKIVc/3kp6sf6e2evdldlYtFj4IfV1l1P7O4Og1GolllZRmbNodirsVdirsVdirsVdirsVd -irsVdirsVdirsVdirsVdirsVdirsVdiqV+YPLGg+YbM2esWcd1FvwZhR0J7xuKMp+Rwg05mi7Qz6 -WfHikYn7D7xyLxHzl/zj3rNszy+WJhf20vwC1nZY5o+fw/bNEdVrUnY+xywZO973Se2WLLjMNQOC -dcxvE19o+1y6dNpgGmzsrTWI+rSsleJaL4GK1oaVXPM9YKzT/rS+98p1eQTzTkOsiftbzGcd2Kpd -qv2o/kf4ZtNF9B97Rl5oDMtpTjyz5X1LzDfi1s14ou89w1eEa+J8Sew75fp9PLLKg24sJmaD6Et7 -W3twwhQIHPJqdzm/0ehw6aPDiiIh6CeSUuZVcy2DsVdirsVdirsVdirsVdirsVdirsVdirsVdirs -VdirsVdirsVdirsVdirsVdirHtf8kaPq3KUL9VvGqfXiA+Inu69G/X75qtb2Riz7/TPvH6WqeES9 -7znXfKOs6OxaaL1bbtcxfEn+y7r9OcprOzMuDci494/GzhzxGKS5r2tLtV+1H8j/AAzaaL6D72jL -zTHyj5O1DzHecIv3VlER9ZuiNlH8q/zMfD782um0ssp25d6cOA5D5Pc9G0XT9GsI7Gwj9OFNyTuz -MerOe5OdHixRxx4Yu4x4xAUEdljN2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku -xV2KuxV2KuxV2KuxVzKGBVgCpFCDuCDiRasS178u9LvuU1hSyuTvxUfumPuo+z/sfuzR6zsPHk3h -6JfZ+z4NE8APLZh9r+WGs3usLb34+rWMG81wpDcweixe5p3G3fwzD0PZWSJMZ7C+f6nE/KylLfk9 -V07TrLTrOKzsohDbwiiIv6z4k9znSwgIChydhGIiKCIybJ2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV -2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 -KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K -uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku -xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KpKnnbye/mM+WV1mzbzAo5HSxPH9Y2XmR -6deXLh8XHrx36YqnWKuxV2KuxV2KvFPz1/Oe98uz/wCGvLsgj1VkD397QMYFcVWNART1GU8uX7Ip -Tc7b7snswZR4k/p6DvcHVakx9MebCvL35I/mb5rsU1zVtZaza8USQi8lmluHRt1ZgPsgg1AJr7Zn -5u1dPhPBGN13VTjw0uSYsl7P+UvkPWfJmi3mnapqC6g01z60EiFyFQoq8aP0+IE7Zou0dXDPMSiO -HZztPiMBRNtfmh51udBtIbHTmCaheAsZepiiG1QD+0x2B9jjoNKMhJl9IXPl4RQ5sN0X8v8AzV5i -0g6zJqRWWcM1uk7yO8nEkVZq/DUjbrmdl1mPFLg4eTRHDKQu1b8vfPGsadrseiavNJNazSfVuMxL -PDNy4rRjU8eXwkfTg1mljKHHHnz96cOUg0Xs2aJznYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWH/m95 -yufJn5ba75ktFVryxgVbXkKqJp5EgiZh3CvKGI74q+W/yd/KG/8AzsGreaPOXmS9kW2uPqyBWEk7 -SlVkY1l5LHGAwCqq/KlMVfR35Qfktpn5ZNq6abqt1qFrqn1bjDdBKwm39WpUpxB5+tv8I6d8VRnn -787Py48iXK2fmDVAmouocafbo884U9GdUBCA9uZFe2Kt+QPzq/Lrz5cSWnl7U/U1CJTI9hPG8E/A -GhZVcAOB34E074qmGv8A5m+TtA816V5V1S8aDWdaCnT4fTco/qOY1rIBwWrrTc4qkEn/ADkP+U36 -fbQrfWfrl7GkzyvawyywqLaJ5pP3oXg1EjP2CcVeV+UZP+cePMf552vmfRtc1K48x6hcvc2ulvDJ -HbG69Jizl2iVgtAWCl/te3w4q+h/M/mry95W0eXWPMF9Hp+mw0Dzy13Y9FRVDO7HsqgnFXnWlf8A -OU/5MajqKWI1eS1aRgkdxdW8sUJJNBWQghB7vQYq9Tu9QsbOxlv7u4jt7GCMzTXUjBYkjUci7OTQ -KBvXFXkt5/zlh+S1tetbLqdxcKrcWuYbWYxdaEgsFYgeIX5VxV6b5d8z6J5j0C11/SLn6xpN4jSQ -XJV46qrFWJWQKwoykbjFXxiuuafq/wCYA1vX2P6OutR+t368S5MHq82jCj/I+AZ3/hShh4IfUI0P -e6HiEp3Llb26X/nKzQFueEOg3TWlaCVpY0kp/wAYwGX/AIfNCPZ+dbyFud+fHc9S8j+ffLvnPSzq -GjSsfSIS6tZQFmhYioDqCevYgkH6Dmo1Wknglwz/ALXLxZYzFh5T+bdy03nW5jJqLaKGJR4AoJP1 -yZuOzo1iHnbiag+t7L5XiWLy1pUa9Fs4B4f7qXfNFnN5Je8ubj+kPB/Ov+i+ddUeH4WS7aVT4MTz -r95zotLvijfc6/LtMvomJxJGkg2DgMAfcVzmSKdmuwK7FXYq7FXYq7FXYq7FXYq7FXYq7FUi89eU -rLzf5Q1Xy1esY4NTgMXqgVMbgho5AO/CRVantir4oEP5zf8AOPvmZ5lQx2Ny4RpaGbTL5UqVBPw0 -YAmn2ZB8sVfUn5Vfnz5f8/eV9Q1KKBrPV9HgafU9KLciFVSweJ6DmjcadKg7HsSq+ZPyM8zeTtS/ -NnU/Nv5mX1tV4ZrqBr4c4mvJZEVaKQw/dxluC022p0xVd5/8xeStF/P/AEjzJ+X1xb/opZrO6n+o -jhCJGkKXMaqAOIkj+0AP2jirIf8AnNZ3j/MLQJI2KOmlqyOpoQRcykEEYq9y/LX/AJx8/LTy3pej -3/6JW616O2VrnUJ5JXLyzQ8Zv3Rf0uBDsvHjSnid8VeC6BZ2dl/zmQLSzgjtrWHVLhYoIUWONF+q -PsqqAAPliq7/AJy48zTat+auneV7m4Nvo2kxQCTf4VkuyHlmPyiKD6PfFU1/5yG1H8hdQ/Lq0h8m -T6Yda0uaCOzWxQJMbajK6O3FS678jyJNd/HFVe7vPMvmj/nDW2Wz9W5m0qcQagqAszWVlOxXYfsx -J6RPstcVS/8A5xk89fkxYaHL5a822NnBrV5dMw1LUbeKWCeNwoSIzOrekF4/Zeid61OKvq+HS9K0 -vy89jpNtDZ6dDBJ9XtrZFjhRXDOeCpRQCWJ2yUPqCJcnxb+XmgW/mDzto2j3IJtru5UXCqaExJV5 -AD2qqkVzvtZmOPFKQ5gOhww4pgPqT8z/AMvfK95+Xuqw22l21vNp9pLc2EkESRvG9uhcKrKBswTi -RnI6DWZI54kyJ4jR+Lts+GJgduTxD/nGvVbq0/MZbKNj6Go2s0c6V2rEvqo1PEFKfSc3/bmMHBfW -JH6nA0UqnXezL81EZfPWok9GEBX5egg/hmD2f/cj4/e35/rL27y6QfL+mEbg2kFD/wA81zQ5vrl7 -y58PpDwXz/8A8plq3/Gc/qGdFo/7qPuddm+ovoa1BW2hBFCEUEHqDTOZlzdkFTAl2KuxV2KuxV2K -uxV2KuxV2KuxV2KoPV9Y0nRtPk1HVryHT9PhKCa7uZFiiT1HEac3chVq7AbnFWLec/Of5UzeUdQP -mHV9MvNCmgcTw+vDN6y0rxiRWJeSo+DjvXpir5c/5w+8v3+qecfMboXj046JPZXcyio53ckYiXfv -SN2H+riqR/kPbeStF/NG+8vfmXYWgiaKaxH6TVDDBexSqRzMnwpyCMoY+3jir6mbyf8A845213aR -HT/LUd3czRw2UQ+q+rJO7BY0iUHkzFiKAYq8D/5za/5T/Qv+2UP+omXFX2BpP/HKsv8AjBF/xAYq -+P8ATP8A1tJ/+2rcf9Qb4qhP+ct9Dn0f837LzBc2/wBY0zVLe3mUMPgka0IimhNf8hUJ9mxV71o+ -gf8AOMuraNBrFpp/lsWM8YkDSraxMgIqVkVyCjL0YHpirMtFv/yz8veWrSTSLvStM8tX0zR2MsMs -EVnNO/LksT1Ebs3pN0O9Dir5q/5ys8iflPpWl2XmDy1Ja2WvXt0scunWEkZhmhaNmab0UNI+JVfi -QAGu4qa4q9n/AOcXr3Vr38ldEfUmaT02uILR33Jtop3SMb9loUHsBirwexi/wD+bkEeoKUt9H1IC -QkEn6sX2kHc1hYOM7qZ/MaY8POUft/tdGP3eTfoX0h+aPnzy3Z/lzq1xBqdtcPqNpLa6eIJkkMrz -oYgY+BNeHLkT2pnL6DSZJZ4gxI4TZ27naZ8sRA783i//ADjLoF1eeepdXCEWml2z85e3qzj00T5l -eZ+jN727mEcPD1kfucHQwud9z0D86NKlh1621EL+4u4Qhft6kRIIP+xK5rezMgMDHuLkamO9s68i -+Z9Jm8nWck11HCbCBYLpXYKU9EcQSPAqARmv1eCQymhzLkYpjh9zyNI28z+eWEKlo9QvWelNxCXL -En/Vjzck+Fh3/hDh/XP3l9E5zLsnYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUn83+U9E83eXbzy9rkT -T6XfBBcRo7RsfSkWVCHQgijxqcVeTp/zh3+T63AlP6SZK19A3S8KeFRGHp/ssVereUfJflfyhpC6 -T5c0+PT7FTzZI6lnegBeR2LO7UHViTirGPzA/Ij8tfPd5+kNb05k1QqEbUbSRoJmUCg50qj0AoC6 -kjp0xVI/K3/OLX5T+XdZs9Yt4L27vtPnjurNrm5Yqk0LB434xCLlxZQaNUeNcVT78xPyP8h/mBql -tqfmKK4kurSD6tCYJjEvp82fcAGpq5xVnkEKQQRwx/YiUItdzRRQYqwOH8j/ACHD+YR8/JFcf4hM -73JkMx9L1HjMZ/d0pTi2Ksk83+SvK/nDSG0jzJp8eoWLMHVH5KyONg8ciFXRt6VUjbbpirysf84e -fk+Lj1SNSMdSfq5uhw+VRHz/AOGxVm2s/kt+X2r+R7DyTc2Ui+X9LlE9jBHPKHjlAkHL1CzM39++ -zVG/yxVhunf84hfk7aXaXEsF/fIpr9WuLo+mfn6SxP8A8Nir2SxsbKwsoLGxgS2s7ZFit7eJQiIi -CiqqjYADFWH/AJh/lH5W878J75XtdTiXhFqFvQPx6hZFIKuoPjv4EZn6PtHJp9hvHuLRm08cnPm8 -/tP+cUdIW4DXfmG4mt67xxW6RPSnTmzyj/hc2UvaCVbQF+9xh2eOpev+VfKeheVtIj0rRbYW9qh5 -OSeTyOQAZJGO7MafwG2aXUaieaXFM2XNx4xAUEVrWiabrWnvY6hEJYH3HZlYdGU9iMhiyyhK4plE -SFF5/N+R1iZaw6tKkVfsPErtT/WDIPwzZDtU1vFxjpR3sr8qeRNE8t8pLUNNeSDi91LQtx68VAAC -jMPUaueXnybseIRZHmK2uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KqV1dW9rA09w4jiSnJz7mg/HKdR -qIYYGczUQzx45TlwxFlj8/nNBOBDb84B1ZjRj8utM4nP7bRGSseO8fmaJ93d+OTtIdlHh3O6a6Xr -un6k0kdu59aIBpYmG6hq0rTbemdR2X2vi1seKFgjmCPwC4Wo0k8VGXI9UwzaOKxO+88XsOoatbWu -jveQ6Nwa8mSZFIR0L8gjCpoFOwxVkemajb6lp1vf2xJguY1kjrsQGFaH3HQ4ql8Wt3D+bp9FMafV -4rJboSb8yzScKdaUpiqbyzRQxNLM6xxICzyOQqqB1JJ2GKoax1jSb9mWwvbe7ZBVxBKkhUHpXgTT -FVa8vLaztZbq6kWG3hUvLIxoABiqA0DzJpOu2guLCZWO5eAsplQciql0BJXlxqK4qhfOPmmLy9py -TD03u7iQRW0MrhASSOTnvxSvxYqmWjz3lxp8U129vJLICwks2Z4GUn4SjNuajFXXms6RZSrDe31v -bSuKpHNKkbMK0qAxBOKowEEVG4PQ4qhrvVNMs6i7u4bbiodvVkRKKTxDHkRsTtiqJBDAEGoO4I6E -Yqhn1PTUcRvdwq7MUVDIoJZTxIpXqDtiq6HULCaZoYbmKWZK840dWYU2NQDXFVfFXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FUn83wNP5cvo1BZiisANySrq3b5Zqe3MfHo8g8vuILn9mT4dRE/jk8pvZdQ -sbJv3pVjQcevEH3zzKOlHEOIbvZREMkuTJPygWQz6pKwYqViHM1oWqxpXxztvZmO8+7b9LpvaIio -D3/oelZ1ry7zeKw13UPNXnCy0ye3t4rk20V5NMru4R4XX90FIFaE9cVZ7pGmQ6Xpdrp8BLRWsaxq -zdTxG5NPHriqQW//AJM27/7ZUf8AyfxVNvM+pwaXoF7fz24uooY/ityKh+RChW2barb7dMVYdpDX -J/MDTXuEsoZ5tOkd4rAMFCMeSiQnZjirOdYiWXSbxGQOGgk+EitTxNNvniqRflnFbr5N06SNEEro -/qOoHJqSuPiI3NMVQ35oxRPo+nsyKzDUbdQSATRq1H00xVmKIkaBI1CIooqqKADwAGKvOI4NHudR -87HWVhe7jJ9Mz8eaQCI+mY+W4/Z+z3p7YqynyC1y3k7STcV9T0ABy68ASI/+EpiqVaxplhqP5k2E -N9AlzDHpryCKUBkLCUqCVOx+13xVmgAUAAUA2AHQDFWDNaW0ml+Z53iVplu5gshALAK9RQ9tziqY -LZWtprPlv6vGIy8M6yFQAW4wg/FTqamuKspxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVxAIodweox -VjuseRtF1NlZg8A5BpFiICsAakUNeP0ZpNT2Bp8sxIXHvrkf1fB2mm7Wy4hXP3p3Y2NnY2yWtnEs -MEYokaig/tPuc2+LDHHERgKiHX5csskuKRslXyxrQ1vptjbXVzdwQrHc3hU3Mo6uUBC1+QOKonFU -Oun2S3zX4hUXjxiFp/2jGDyC/KuKqs8EFxC8E8aywyArJG4DKynqCDsRiqX6f5Z0DTpVmsbCG3lX -lxkjUBvjADb9e2KpniqA03QdG0t5X0+zitWnp6piXjypWn68VVr/AE2xv4kivIVnjjdZUVugdfst -9GKonFUs1Hyz5f1K4W5v7CG5nQACR1BNB0B8R88VTJVVVCqAqqKKo2AA7DFVBtPsmvlvzCpvEjMK -z/tCMnkV+VcVRGKob9GWHpTxegvp3TF7hezs3UnFV5srVpYJTGDJbAi3bugYcTT5jFVbFXYq7FXY -q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq -7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FX//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:01:23Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq0XQMFLAM32VJ3NPDImcQQCdymjzbySHYq7FXMyqCzEBRuSdhgJAFlBN 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 VS7VftR/I/wzaaL6D72jLzQGZbSnHlnyvqXmG/FrZrxRd57hq8I18T4k9h3y/T6eWWVBtxYTM0H0 Jb2tvbhhCgQOeTU7nN/o9Dh00eHFERD0E8kpcyq5lsHYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FWPa/5I0fVuUoX6reNU+vEB8RPd16N+v3zVa3sjFn3+mfeP0tU8 Il73nOu+UdZ0di00Xq23a5i+JP8AZd1+nOU1nZmXBuRce8fjZw54jFJc17Wl2q/aj+R/hm00X0H3 tGXmmPlHydqHmO84RfurKIj6zdEbKP5V/mY+H35tdNpZZTty704cByHye56Noun6NYR2NhH6cKbk ndmY9Wc9yc6PFijjjwxdxjxiAoI7LGbsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirmUMCrAFSKEHcEHEi1Ylr35d6XfcprCllcnfio/dMfdR9n/Y/dmj1nYeP JvD0S+z9nwaJ4AeWzD7X8sNZvdYW3vx9WsYN5rhSG5g9Fi9zTuNu/hmHoeyskSYz2F8/1OJ+VlKW /J6rp2nWWnWcVnZRCG3hFERf1nxJ7nOlhAQFDk7CMREUERk2TsVdirsVdirsVdirsVdirsVdirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVSVPO3k9/MZ8srrNm3mBRyOlieP6xs vMj068uXD4uPXjv0xVOsVdirsVdirsVeKfnr+c975dn/AMNeXZBHqrIHv72gYwK4qsaAinqMp5cv 2RSm5233ZPZgyjxJ/T0He4Oq1Jj6Y82FeXvyR/M3zXYprmray1m14okhF5LNLcOjbqzAfZBBqATX 2zPzdq6fCeCMbruqnHhpckxZL2f8pfIes+TNFvNO1TUF1Bprn1oJELkKhRV40fp8QJ2zRdo6uGeY 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 irsVdirsVdirsVdirsVdirsVdirsVf/Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim25.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim25.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,419 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:30:40Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq0XQMFLAM32VJ3NPDImcQQCdymjzbySHYq7FXMyqCzEBRuSdhgJAFlBN -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 -V2KuxV2KuxV2Kv8A/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:01:18Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq0XQMFLAM32VJ3NPDImcQQCdymjzbySHYq7FXMyqCzEBRuSdhgJAFlBN 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 KuxV2KuxV2KuxV2Kv//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim26.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim26.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,419 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:30:56Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq0XQMFLAM32VJ3NPDImcQQCdymjzbySHYq7FXMyqCzEBRuSdhgJAFlBN -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 -V2KuxV2KuxV2Kv8A/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:01:12Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq0XQMFLAM32VJ3NPDImcQQCdymjzbySHYq7FXMyqCzEBRuSdhgJAFlBN LIpopV5ROrr4qQR+GRhkjMXEghEZiQsG1+TZOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KuxVZNPDBGZJnEca9WY0GU588MUTOZEYjqWUIGRoCyxvUvN43jsF9vXcf8RX+u cN2p7Zc46Yf5x/QP1/J22DszrP5McmubiaUyyyM8h35k7/RnD59Tkyz45yMpd7tY44xFAbJlY+Zt TtqK7fWIx+zJufobr9+bzQe1OrwbSPiR7pc/9Nz+duJm7Pxz5ek+TIbHzPptzRZG+ryH9mT7P0N0 ++mdtoParS59pHw5f0uX+m5fOnV5uz8kOXqHkq32vWdsOKH1peyodvpbNjqu1cWMek8UvL9bpdRr I49ucmOX2qXl4f3r0j7Rrso/r9Oc3qtdkzH1Hbu6OnzameTmdu5DxTTQvzidkbxUkH8MxseSUDcS QWmMzE2DSa2vmW8joJ1Ey+P2W+8bfhm3wdtZI7THEPkXOxdozH1bpxa67p9xQc/Sc/sybfj0zc4O 1MOTrwnz/FOxxa3HPrR80wBBFRuD0ObEFy3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FUq8y602j6eLpY/ULSCPfovIE8iO/TNR232hPSYOOABkTW/Ic93N0Gk8fJw3W1sKm1aXU m9WSf1fAdAtfBe2eTa/W6jUT4s0jL7h7uj0MNMMQoClPMFk7FXYqslliijMkrBEXqx2GGMTI0OaQ CdglUPmT1tSgt7f4LdnAeRv2h7A9M3/Z+CeMiz8Ojg9tdmYzpZ5JxHHGO39rJs3T5g7FVG7vLWzg ae6lWGFersaD5fPG2UYmRoMQ1XzXe31YtP5WlqdjcH+9cf5I/YHv1zrOxvZPNqqnlvHi/wBkfcOn vPyL0fZ/YMp1LJsHaV5s8w6WI0tb1/RjAVYZDzSg/wAlq0r3I3z0mHY+mhjGOMajH5/Pq9R+RxcP DTMdK/NlDxTVbPie81uaj/gGP/G2a/P2F1xy+B/W4mTsz+afmzHS/MuhaoALK8jkkP8AuonhJ/wD UbNPn0eXF9UT+h1+TTzh9QTPMZpdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirHfP0XP y1O1P7p42+9wv/G2aD2mhejke4xP21+l2vY0q1A8wfueWI7IwZSVYdCNs8zezIB5o+31iVaCYcx/ MNjlE8APLZxZ6UHkmcF1BOKxuCe46H7sxp4zHm4k8co80LqOr2tktGPOb9mIdfp8MuwaWWTflHvZ 4sEp+5i1/qV1eycpm+EfZjH2Rm6w4I4xQdnjwxhyQ8X94vzzJx/UHW9vf4ll/qpvZ6vf2lBFISg/ 3W/xL/Z9GZ744jL/AM9xWdl6j2/78ninxfu6nux65fpdNPPljjxi5y5OVpNKc8xAMdmu59SkF3dz i5b/AHWFP7pP9RRt9PXPU+xfZTDpankrJl/2MfcP0n4U9xoOyceAWd5N51rtnYq7FWwSDUdcVR2h /mprFr5i0vQ7W8N2L27gtZRMfUSNZZVjNGPxVAboDmj7QwYDEkR9QHTZ1uqx4qNDd77nLuldirsV dirsVdirsVdirsVdirsVdirsVdirsVdirsVSjzbF6vlu/Xwj5f8AAEN/DNV23Di0eQf0fu3c7s2V aiHveQZ5S924Ak0G5PbFCsIWT4iaMOlO2WcFc2BkCkLli7ciWapqx6k5sacgLcUrov7xfnlmP6g6 jt7/ABLL/VRDyBfc+Gdf2P7OZ9aeL6MX84/70dfu83wrXdqY8G31T7v19yhJSQFXAZT1Uioz1Tsz sfT6KHDjG/WR5n8d3J5LP2jmyTE+IgjlW1e5Ln0aNHMtlI1pKevDdD80O2bOnqey/bvWaeo5f30P PaX+m6/EFr6/qNrtewerGP8Aj4g3/wCCTrgfR+y/a7Q6ygJcE/5s9vkeR+d+SNtr21ul5QSK47gd R8x1wvTrrm5gtoWmncRxL9pm6ZGUgBZQSBzYRrvm64vOVvZ1httwz9Hcf8ajNfm1JlsOTiZMxOw5 Kv5ZQ+t+YPl9Ntr2J9/8huf/ABrmu1J/dy9ziZvoL7CznnVOxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KoTWIvV0i9i/nglX70IzE18OLBkj3wl9zfpZcOWJ/pD73jVtaTXDUjGw+0x6DPI8eK Uzs99kyCI3TFbOO3Xb4n7sczBhEB5uIcpkhZ++UTb4Mak/vG+Z/XmYHMHJaSB1y3DhnlmIQFykaA as+eGGByTPDCIsnuC5RQ1756n2F7EQxVk1Xrn/M/hHv/AJ33e98Q9qv+CHLVRlp9IOHEdjM/VL3D +Ef7L+q3noIAAocny0m3YVdirsVSnWU0m3j+sXFYZjX03iPGRj7U6/TluLDLIaD0/YntB2hpyI4p 8UB/DLeP6x/mkMI1fUry8mUTys6IB6asRtUewG/vmq1wrIY3yfaMOolmxQnLYyiD8xaAzDZs1/Ji H1vzN0NNtpJn36fBbyP/AMa5jaw/ui1Z/oL60zQOrdirsVdirsVdirsVdirsVdirsVdirsVdirsV dirsVadQ6Mp6MCD8jgkLFJBo2xG/8pzWsf8AoA9WBekY2cf81fr9s5DV9gzxj916o93X9v42d5h7 SEz69j9n7GL3SsjMrAqymjKRQgjxGc3liQaPN3GMg7hLZ++YM3Mgxub+9f8A1j+vMuPIOYEPdLW1 m9kY/cM33s1jnLtDCYi6yQvyHELdR7QQ4uz84/2qf2RJSe3v7mDZW5J/I24z6MnhjJ+ZJ4oy5pnb 6rbybP8Au29+n35jSwyHm4c9NIct0YCCKjcHocpcem8VSjWfMNvYAxRUluv5P2V/1v6ZmafSHJud oufpdDLJudo/ewu6u7i6mM07l5G7nsPADsM3EMYiKDvseOMBURQQdz/fH5L/AMRGcX2h/fz9763o f8Xx/wDC4f7kKWYblPQ/yEh9T8yrF6D9zDcPv13iZNvf48w9cf3RaNT9D6mzRutdirsVdirsVdir sVdirsVdirsVdirsVdirsVdirsVdirsVSvXrLQ5bV59TKQogp9ZJCMvhRu/sN8wtZ2fh1A9Y37+v 4+xzNHlzCQGOye55PfXmmm7kjtJXkgB/dyyLw5fRU/jnF9o+zubF6sf7yP8Asvl1+Hye2w4snCDI VLuG6Qyxlp5D25Hf6cPZfY+TOAZemHf+pzIjZbcKBaygDbg36s9B7K00MGSEYChxR+9wu2Ig6LMP 9qn/ALksWz1d+XXYqrQXdxB/duQP5TuPuyEscZc2EscZcwo6z5ju0hWGFRE8gPKYdaf5PhktPpIk 2d6bdLoIE8R3Hcxckkkk1J3JObR2zsVUrwAXBA/lQ/egzhdYbzS/rF9b0v8Acw/qR/3IX6Zpl/ql 7FY2EDXF1MaRxIKk+58AO5PTMDUaiGGBnkPDEdW8mn0H+UvkGx8salHNcMt3rc8bpNKpPpQLxqUj /mJIoWP0Z5+Pa06zWjBjH7rf37An8Bq1GKRxmR2D1zN86t2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV5D/zkPcXlpZaHe20hjaOaeNqdDzVGoR0P2O+TgLe69iIQnPLCQu4xPyv9bzHS /OdvLSO/X0X6eqtSh+Y6jCcfc9fqOypR3huO7qyOOSORA8bB0bdWU1Byt1UokGi6UVicD+U/qy3A anH3hxNdEnBMD+ZL7mJ56m/KrsVdiqVa31h/2X8MyNNzPw/S5+l+n4pZmW5LsVTbQ/KOseZdWa3s I+MMaxm5u5Nool4Ddm8T2UbnPMO3e18OjMp5T1NDqfx3vrmAVjgP6Mfue0+XfLmj+WrI2ulqWmkA F3qDiksp8B/Ingozwvt72lza6fOoDkPx9/3Oxw6brLmyfyqtdYjPgrn8KYPZKN66PlGX3Me0T+6P wZvnrLzrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiryz/AJyKtxJ5Ks5h9qHUI/8A gWilB/GmTx83s/YedayQ78Z++L5zy59VRmn6rf2D8raUqD9qM7ofmMBALRm00Mo9QZF/ju0Sxkku YHE6igRN1YnbqemQEKILz+u7MMYkA7S2+xa0MyJG8kTxLKoeP1EZCynoQGAz0jSa7BqYmWKcZgbG jdHuPc/I+s0WXTZDjyx4ZD4/IjY/BbmW4rsVSrW/tQ/Jv4Zkabmfh+lz9L9PxSzMtyU00TQLnVJG fl6FlEf9Iu2FVX2UftOeyjOe9oPaPB2bjuXqyy+mA5y/4mPfI/Czs5el0ksp7ojmfx1e9Q21vY2s djZxrDaxgHgihOTFRV2A6sc+Se0+1s+tynJlO5L7Fo8EYQHU03mtcxOvKIB1YnwiYj7wM6r2OF6z /MP6HX9p/wB18WaZ6o8+7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqwD89Lf1fy4v 3/3xLbyffMqf8b5OHN6b2QnXaEB/OEh/sSf0Pl/Ln2J2KqV05S3dgaMOPE+4YHARezhdoR4sddHt K3PKH6vcRrc23++ZBUD/AFT1XPLtNqcunn4mGUsc++Jr59/xfm+YjkjwzAlHzSy78rW1xV9Kl4yf 8scxAJ/1H6H6c9K7G/4IpFQ1sf8AkpAf7qP6Y/6V57V+zwPqwH/NP6D+v5sdubW5tZjDcRtFKvVW FDnp2k1mHU4xkxSE4HqHmc2GeOXDMGJSXW/tQ/Jv4ZsdNzPw/S5Wl+n4o7QvK5uIl1DUi0GnH+7Q bSzkdo69F8Wzkfab2yhorwaesmp6/wA2H9bz7o/Ouu70mgMxxz2h9p9362QzTh0SGKNYLWEUgt02 VB/EnuTuc8fy5Z5chyZJGeSXOR5n9Q7hyDtyRVAVEdHqE32/9iv/ABEZ5fVPpWn/ALse5Zi3J95N B/SUp7CEj72XOw9ih/hUj/tZ/wB1F1vah/dj+t+gswz050LsVdirsVdirsVdirsVdirsVdirsVdi rsVdirsVdirsVdirFPzVtvrH5ea5HSvG39Tt/up1k7/6uSjzd37OZOHX4j/Sr5inyXl77a7FVC+H +jP7U/WMXG1n92XsNuawRmtaqpr9GeU5B6j735vyipn3qmQa1c3EU8P1e+iW6g7B/tr/AKr9RmXo dfn0mTxMEzjl5cj7xyPxY5scMseHIBIfjkUkvtA8u29zHesXu1UH0LGUUUP4yMPtKPDv3zuD7ea/ PpziiI48h2lkj3f0R0kepvbpRdZj7KwYZWCZDpE/p8lC5uZrmUyytyY7AdAAOgA7AZzMYCI2cqUj I2VLJMXq9wpWUqdiAoI9wBnmcjZt9MwCoBfZWVxeXCwQLydu/YDxJ8MytFocupyDHjFyP2eZ8mWX LHHHikzjSdIt9Og4p8UzD97L3PsPbPW+x+xsWix1HeZ+qXf+x5zU6mWU78u5H5uHGdirsVdirsVd irsVdirsVdirsVdirsVdirsVdirsVdirsVUbyztb20ms7uJZra4Ro5onFVZGFCDi2YssschOJqUT YLxjzr/zj2repeeVJuJ3Y6ZcNt8opT+p/wDgssGTve/7K9tiKhqh/nj9I/V8njOqaTqelXj2WpWs lpdR/ailUqfmK9R4EbZaC99p9TjzQE8chKJ6hATqDBICK/Cx+4VxY6z+6Pw+96xprBtOtWG4MMZB +ajPLNSKyS/rH735z1grNMf0j96Jylx3Yql+q/7q/wBl/DNnovpPvaMyX5mNLsVexpp9xfak8MA3 rVmPRRTqc8/7N7Oy6vIMeMdBZ6Ad5fSDmjjx2WZaZpdtp9uIohVz/eSnqx/p7Z692V2Vi0WPgh9X WXU/s7g6DUaiWWVlGZs2h2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KpX5 g8saD5hszZ6xZx3UW/BmFHQnvG4oyn5HCDTmaLtDPpZ8eKRifsPvHIvEfOX/ADj3rNszy+WJhf20 vwC1nZY5o+fw/bNEdVrUnY+xywZO973Se2WLLjMNQOCdcxvE19o+1y6dNpgGmzsrTWI+rSsleJaL 4GK1oaVXPM9YKzT/AK0vvfKdXkE805DrIn7W8xnHdiqXar9qP5H+GbTRfQfe0ZeaAzLaU48s+V9S 8w34tbNeKLvPcNXhGvifEnsO+X6fTyyyoNuLCZmg+hLe1t7cMIUCBzyanc5v9HocOmjw4oiIegnk lLmVXMtg7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqx7X/ACRo +rcpQv1W8ap9eID4ie7r0b9fvmq1vZGLPv8ATPvH6WqeES97znXfKOs6OxaaL1bbtcxfEn+y7r9O cprOzMuDci494/GzhzxGKS5r2tLtV+1H8j/DNpovoPvaMvNMfKPk7UPMd5wi/dWURH1m6I2Ufyr/ ADMfD782um0ssp25d6cOA5D5Pc9G0XT9GsI7Gwj9OFNyTuzMerOe5OdHixRxx4Yu4x4xAUEdljN2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVzKGBVgCpFCDu CDiRasS178u9LvuU1hSyuTvxUfumPuo+z/sfuzR6zsPHk3h6JfZ+z4NE8APLZh9r+WGs3usLb34+ rWMG81wpDcweixe5p3G3fwzD0PZWSJMZ7C+f6nE/KylLfk9V07TrLTrOKzsohDbwiiIv6z4k9znS wgIChydhGIiKCIybJ2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K uxV2KuxV2KuxV2KpKnnbye/mM+WV1mzbzAo5HSxPH9Y2XmR6deXLh8XHrx36YqnWKuxV2KuxV2Kv FPz1/Oe98uz/AOGvLsgj1VkD397QMYFcVWNART1GU8uX7IpTc7b7snswZR4k/p6DvcHVakx9MebC vL35I/mb5rsU1zVtZaza8USQi8lmluHRt1ZgPsgg1AJr7Zn5u1dPhPBGN13VTjw0uSYsl7P+UvkP WfJmi3mnapqC6g01z60EiFyFQoq8aP0+IE7Zou0dXDPMSiOHZztPiMBRNsf/AD7/ADSvvKOn2ula M4j1nUlZ2uKAtBAvw8lB25O2yntQ96Zk9kaAZpGU/pj9pa9XnMBQ5l5l5Y/Jz8wfOnlw+Z5tdZJ7 sO9lFdSTSSTBSVq8lTwDMDTr45ts/aWHBPwxHYc6rZxcemnOPFaJ/Jr81vMui+bIfKvmO5mubC5n +pBLli8trc8uCgO1Tx5/Cy1oOo6bw7T7PxzxnJjFEC9uoTptRKMuGXJ9O5ybtXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FWH/m95yufJn5ba75ktFVryxgVbXkKqJp5EgiZh3CvKGI74q+W/wAnfyhv/wA7 Bq3mjzl5kvZFtrj6sgVhJO0pVZGNZeSxxgMAqqvypTFX0d+UH5LaZ+WTaumm6rdaha6p9W4w3QSs Jt/VqVKcQefrb/COnfFUZ5+/Oz8uPIlytn5g1QJqLqHGn26PPOFPRnVAQgPbmRXtirfkD86vy68+ XElp5e1P1NQiUyPYTxvBPwBoWVXADgd+BNO+Kphr/wCZvk7QPNeleVdUvGg1nWgp0+H03KP6jmNa yAcFq603OKpBJ/zkP+U36fbQrfWfrl7GkzyvawyywqLaJ5pP3oXg1EjP2CcVeV+UZP8AnHjzH+ed r5n0bXNSuPMeoXL3NrpbwyR2xuvSYs5dolYLQFgpf7Xt8OKvofzP5q8veVtHl1jzBfR6fpsNA88t d2PRUVQzux7KoJxV5zpP/OU/5MalqKWI1eS0aRuEdxdW8sUJJNBWShCA+L0Hjir1S71Cxs7GW/u7 iO3sYIzNNdSMFiSNRyLs5NAoG9cVeS3n/OWH5LW161sup3Fwqtxa5htZjF1oSCwViB4hflXFXpvl 3zPonmPQLXX9IufrGk3iNJBclXjqqsVYlZArCjKRuMVfGK65p+r/AJgDW9fY/o661H63frxLkwer zaMKP8j4Bnf+FKGHgh9QjQ97oeISncuVvbpf+crNAW54Q6DdNaVoJWljSSn/ABjAZf8Ah80I9n51 vIW5358dz1LyP598u+c9LOoaNKx9IhLq1lAWaFiKgOoJ69iCQfoOajVaSeCXDP8AtcvFljMWHzR/ zkZfvc/mjews1RY29tAg8A0Qmp98xOdV2LCtOD3k/q/Q6vWm8hfTnkKBLfyP5ehT7Mem2i1pSv7h Knbxzk9WbzTP9I/e7XEPQPc+R/zSrYfmlr8lseDx6g86HbZ2YSE7U/aOdpoPVp4X/NdNn2yH3vtK CVZoI5VBCyKHAPWjCucIRRp3oX4FdirsVdirsVdirsVdirsVdirsVdiqReevKVl5v8oar5avWMcG pwGL1QKmNwQ0cgHfhIqtT2xV8UCH85v+cffMzzKhjsblwjS0M2mXypUqCfhowBNPsyD5Yq+pPyq/ Pny/5+8r6hqUUDWer6PA0+p6UW5EKqlg8T0HNG406VB2PYlV8yfkZ5m8nal+bOp+bfzMvrarwzXU DXw5xNeSyIq0Uhh+7jLcFpttTpiq7z95i8laL/zkBo/mP8vri3GlLNZ3M5sQUgEjSFLmMKoFBJH9 oAftHFWQ/wDOazvH+YWgSRsUdNLVkdTQgi5lIIIxV7l+Wv8Azj5+WnlvS9Hv/wBErda9HbK1zqE8 krl5ZoeM37ov6XAh2XjxpTxO+KvBdAs7Oy/5zIFpZwR21rDqlwsUEKLHGi/VH2VVAAHyxVd/zlx5 mm1b81dO8r3NwbfRtJigEm/wrJdkPLMflEUH0e+Kpr/zkNqP5C6h+XVpD5Mn0w61pc0EdmtigSY2 1GV0duKl135HkSa7+OKq93eeZfNH/OGtstn6tzNpU4g1BUBZmsrKdiuw/ZiT0ifZa4ql/wDzjJ56 /Jiw0OXy15tsbODWry6ZhqWo28UsE8bhQkRmdW9ILx+y9E71qcVfV8Ol6Vpfl57HSbaGz06GCT6v bWyLHCiuGc8FSigEsTtkofUES5Pi38vNAt/MHnbRtHuQTbXdyouFU0JiSryAHtVVIrnfazMceKUh zAdDhhxTAfUn5nfl75WvPy91WG30u2tptPs5bmwkgiSN43t0LqqsoXZuHEjOR0GsyRzxJkTxGj8X bZ8MTA7cniH/ADjXqt1afmMtlGx9DUbWaOdK7ViX1UaniClPpOb/ALcxg4L6xI/U4GilU670t/5y BjdPzZ1pmG0i2rL8vqkS/rXLexz/AINH4/eWOr/vD+Oj6p8lkHydoJBqDp1oQR/xgTOQ1X97L+sf vdvi+ke58h/nD/5M7zF/zFt/xEZ2vZv+Lw9zpdT/AHhfZ1grLY26sCrLEgZTsQQo2OcLPmXeDkr5 FLsVdirsVdirsVdirsVdirsVdirsVQer6xpOjafJqOrXkOn6fCUE13cyLFEnqOI05u5CrV2A3OKs W86ec/ypl8pah/iLVtMvNCmgcXEHrwzeqACeMSKxLSVHwcd+XTFXy5/zh95fv9U84+Y3QvHpx0Se yu5lFRzu5IxEu/ekbsP9XFUj/Ie28laL+aN95e/MuwtBE0U1iP0mqGGC9ilUjmZPhTkEZQx9vHFX 1M3k/wD5xztru0iOn+Wo7u5mjhsoh9V9WSd2CxpEoPJmLEUAxV4H/wA5tf8AKf6F/wBsof8AUTLi r7A0n/jlWX/GCL/iAxV8f6Z/62k//bVuP+oN8VQn/OW+hz6P+b9l5gubf6xpmqW9vMoYfBI1oRFN Ca/5CoT7Nir3rR9A/wCcZdW0aDWLTT/LYsZ4xIGlW1iZARUrIrkFGXowPTFWY6LqH5Z+X/LNpJpF 3pWmeWr6Zo7GWGWGGzmmflyWN6iN2b0m6HehxV81/wDOVnkT8p9K0uy8weWpLWy169uljl06wkjM M0LRszTeihpHxKr8SAA13FTXFXs//OL17q17+SuiPqTNJ6bXEFo77k20U7pGN+y0KD2AxV4PYxf4 B/NyCPUFKW+j6kBISCT9WL7SDuawsHGd1M/mNMeHnKP2/wBrox+7yb9C+kPzR8+eW7P8udWuINTt rh9RtJbXTxBMkhledDEDHwJrw5cie1M5fQaTJLPEGJHCbO3c7TPliIHfm8X/AOcZdAurzz1Lq4Qi 00u2fnL29WcemifMrzP0Zve3cwjh4esj9zg6GFzvuRH/ADlB5fuLXzfZa2qH6pqNqsRkA29a3JDA n/UZafTkOwcwOIw6xP2FOuhUge961+U3nzy7c/lnpk9xqEFu2j2iWt+krqjRfVl4AsCejIoIPf55 pu0dJMaiQAJ4jY+LmafLE4xvyfOMcL+e/wA12FqjNDrOqPIBQkrbNKXZmr/JCKnOoJ/L6bf+GP2/ 2usrxMnvL7TzhHeOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KpP5v8p6J5u8u3nl7XImn0u+CC4jR2jY +lIsqEOhBFHjU4q8nT/nDv8AJ9bgSn9JMla+gbpeFPCojD0/2WKvVvKPkvyv5Q0hdJ8uafHp9ip5 skdSzvQAvI7FndqDqxJxVjH5gfkR+Wvnu8/SGt6cyaoVCNqNpI0EzKBQc6VR6AUBdSR06Yqkflb/ AJxa/Kfy7rNnrFvBe3d9p88d1Ztc3LFUmhYPG/GIRcuLKDRqjxriqffmJ+R/kP8AMDVLbU/MUVxJ dWkH1aEwTGJfT5s+4ANTVzirPIIUggjhj+xEoRa7miigxVgcP5H+Q4fzCPn5Irj/ABCZ3uTIZj6X qPGYz+7pSnFsVZJ5v8leV/OGkNpHmTT49QsWYOqPyVkcbB45EKujb0qpG23TFXlY/wCcPPyfFx6p GpGOpP1c3Q4fKoj5/wDDYqzbWfyW/L7V/I9h5JubKRfL+lyiexgjnlDxygSDl6hZmb+/fZqjf5Yq w3Tv+cQvydtLtLiWC/vkU1+rXF0fTPz9JYn/AOGxV7JY2NlYWUFjYwJbWdsixW9vEoRERBRVVRsA BirD/wAw/wAo/K3nfhPfK9rqcS8ItQt6B+PULIpBV1B8d/AjM/R9o5NPsN49xaM2njk583n9p/zi jpC3Aa78w3E1vXeOK3SJ6U6c2eUf8Lmyl7QSraAv3uMOzx1L1/yr5T0LytpEelaLbC3tUPJyTyeR yADJIx3ZjT+A2zS6jUTzS4pmy5uPGICgu80eVtE80aPLpOs24ntJaEdnjcfZkjbqrDx+jpg0+oni lxQNFcmMTFF47c/84o6U1wWtvMM8VvU0jlt0kenb41eMf8Lm8j7QSreAv3uEezx3vQvy9/KTyt5I Dz2AkutSmXhLqFwQZOBIJRAoCopI+fic1ms7RyajaW0e4OTh08cfLmzbMBvdirsVdirsVdirsVdi rsVdirsVdirsVUrq6t7WBp7hxHElOTn3NB+OU6jUQwwM5mohnjxynLhiLLH5/OaCcCG35wDqzGjH 5daZxOf22iMlY8d4/M0T7u78cnaQ7KPDud010vXdP1JpI7dz60QDSxMN1DVpWm29M6jsvtfFrY8U LBHMEfgFwtRpJ4qMuR6phm0cVid954vYdQ1a2tdHe8h0bg15MkyKQjoX5BGFTQKdhirI9M1G31LT re/tiTBcxrJHXYgMK0PuOhxVL4tbuH83T6KY0+rxWS3Qk35lmk4U60pTFU3lmihiaWZ1jiQFnkch VUDqSTsMVQ1jrGk37Mthe292yCriCVJCoPSvAmmKq15eW1nay3V1IsNvCpeWRjQADFUBoHmTSddt BcWEysdy8BZTKg5FVLoCSvLjUVxVC+cfNMXl7TkmHpvd3EgitoZXCAkkcnPfilfixVMtHnvLjT4p rt7eSWQFhJZszwMpPwlGbc1GKuvNZ0iylWG9vre2lcVSOaVI2YVpUBiCcVRgIIqNwehxVDXeqaZZ 1F3dw23FQ7erIiUUniGPIjYnbFUSCGAINQdwR0IxVAya7occqwyajbJKzmNY2mjDF1biygE1qG2I 8cVX22saTdXL2tte289zHX1II5Ud14mhqqkkUOKovFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FUn83 wNP5cvo1BZiisANySrq3b5Zqe3MfHo8g8vuILn9mT4dRE/jk8pvZdQsbJv3pVjQcevEH3zzKOlHE OIbvZREMkuTJPygWQz6pKwYqViHM1oWqxpXxztvZmO8+7b9LpvaIioD3/oelZ1ry7zeKw13UPNXn Cy0ye3t4rk20V5NMru4R4XX90FIFaE9cVZ7pGmQ6Xpdrp8BLRWsaxqzdTxG5NPHriqQW/wD5M27/ AO2VH/yfxVNvM+pwaXoF7fz24uooY/ityKh+RChW2barb7dMVYdpDXJ/MDTXuEsoZ5tOkd4rAMFC MeSiQnZjirOdYiWXSbxGQOGgk+EitTxNNvniqRflnFbr5N06SNEEro/qOoHJqSuPiI3NMVQ35oxR Po+nsyKzDUbdQSATRq1H00xVmKIkaBI1CIooqqKADwAGKvOI4NHudR87HWVhe7jJ9Mz8eaQCI+mY +W4/Z+z3p7YqynyC1y3k7STcV9T0ABy68ASI/wDhKYqlWsaZYaj+ZNhDfQJcwx6a8gilAZCwlKgl Tsftd8VZoAFAAFANgB0AxV5PJp1jNoPnu6lgR7lNRuRHMyguoSQMOLdRucVTmPS7DT/Mvkj6nCsJ ltrpJigCl+FqrAvSnI8mJqcVZ/irsVdirsVdirsVdirsVdirsVdirsVdiriARQ7g9RirHdY8jaLq bKzB4ByDSLEQFYA1Ioa8fozSansDT5ZiQuPfXI/q+DtNN2tlxCufvTuxsbOxtktbOJYYIxRI1FB/ afc5t8WGOOIjAVEOvy5ZZJcUjZKvljWhrfTbG2urm7ghWO5vCpuZR1coCFr8gcVROKoddPslvmvx CovHjELT/tGMHkF+VcVVZ4ILiF4J41lhkBWSNwGVlPUEHYjFUv0/yzoGnSrNY2ENvKvLjJGoDfGA G369sVTPFUBpug6Npbyvp9nFatPT1TEvHlStP14qrX+m2N/EkV5Cs8cbrKit0Dr9lvoxVE4qlmo+ WfL+pXC3N/YQ3M6AASOoJoOgPiPniqZKqqoVQFVRRVGwAHYYqoNp9k18t+YVN4kZhWf9oRk8ivyr iqIxVAfoLR/QvLf6qno37tLeJvSR3NWZvniqq2l6e09pO0CmaxDLZv3jDqEYL81FMVRWKuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2 KuxV2KuxV2KuxV2Kv//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim27.svg --- a/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim27.svg Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,419 +0,0 @@ - - - - - -]> - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-04T09:32:40Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA -AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK -DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER -AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA -AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB -UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE -1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ -qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy -obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp -0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo -+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 -FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F -XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX -Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY -q7FXYq7FXYq7FXYq7FXYq0XQMFLAM32VJ3NPDImcQQCdymjzbySHYq7FXMyqCzEBRuSdhgJAFlBN -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 -V2KuxV2KuxV2Kv8A/9k= - - - - - - - image/svg+xml - - - - - - - - - - - - - - 2005-04-04T07:58:17Z - 2005-04-20T12:01:04Z - Illustrator - - - - JPEG - 256 - 256 - /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7 FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY q7FXYq7FXYq7FXYq7FXYq0XQMFLAM32VJ3NPDImcQQCdymjzbySHYq7FXMyqCzEBRuSdhgJAFlBN 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 KuxV2KuxV2KuxV2Kv//Z - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10000.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10000.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10001.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10001.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10002.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10002.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10003.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10003.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10004.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10004.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10005.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10005.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10006.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10006.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10007.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10007.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10008.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10008.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10009.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10009.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10010.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10010.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10011.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10011.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10012.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10012.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10013.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10013.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10014.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10014.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10015.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10015.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10016.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10016.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10017.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10017.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10018.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10018.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10019.bmp Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10019.bmp has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/cenrep/1020744E.txt Binary file scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/cenrep/1020744E.txt has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/cenrep/keys_screensaveranimplugin.xls Binary file scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/cenrep/keys_screensaveranimplugin.xls has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/conf/screensaveranimplugin.confml Binary file scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/conf/screensaveranimplugin.confml has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/conf/screensaveranimplugin_1020744E.crml Binary file scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/conf/screensaveranimplugin_1020744E.crml has changed diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/data/10207447.rss --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/data/10207447.rss Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/* -* Copyright (c) 2005 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: ECOM Resource file for ScreenSaverAnimPlugin -* -*/ - - - - - -// INCLUDES -#include - -#include "ScreensaverpluginIntDef.hrh" -#include "ScreenSaverAnimPluginImplementationUid.hrh" -#include "screensaveranimplugin.loc" - -// RESOURCE DEFINITIONS -// ----------------------------------------------------------------------------- -// -// theInfo -// ECOM DLL interface & implementation description resource. -// -// ----------------------------------------------------------------------------- -// -RESOURCE REGISTRY_INFO theInfo - { - dll_uid = 0x10207447; - interfaces = - { - INTERFACE_INFO - { - interface_uid = KCScreensaverPluginInterfaceDefinitionUid; - implementations = - { - IMPLEMENTATION_INFO - { - implementation_uid =KScreenSaverAnimPluginImplementationUID; - version_no = 1; - display_name = qtn_sanim_screensaver_name; - default_data = ""; - opaque_data = "07"; - } - }; - } - }; - } -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/data/ScreenSaverAnimPlugin.rss --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/data/ScreenSaverAnimPlugin.rss Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,378 +0,0 @@ -/* -* Copyright (c) 2005 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: Resource file for ScreenSaverAnimPlugin -* -*/ - - - - - -// RESOURCE IDENTIFIER - -NAME ANSS - -#include -#include -#include -#include -#include -#include -#include -#include -#include "ScreenSaverAnimCustControl.rh" -#include -#include "ScreenSaverAnimPlugin.hrh" - -// --------------------------------------------------------- -// -// Define the resource file signature -// This resource should be empty. -// -// --------------------------------------------------------- -// -RESOURCE RSS_SIGNATURE - { - } - -RESOURCE TBUF - { - buf = "AnimScreenSaver"; - } - -STRUCT MIMETYPE_SPECIFIC_PLUGIN_ARRAY - { - STRUCT pairs[]; // array of mimetype and implementation uid pair - } -// ----------------------------------------------------------------------------- -// SCREENSAVER_MIMETYPE_PLUGIN_PAIR -// One mapping between file name extension and MIME type. -// ----------------------------------------------------------------------------- -// -STRUCT SCREENSAVER_MIMETYPE_PLUGIN_PAIR - { - LTEXT mimetype; - LONG implementation_uid; - } - -RESOURCE MIMETYPE_SPECIFIC_PLUGIN_ARRAY r_mimetype_specific_plugin_array - { - pairs = - { - SCREENSAVER_MIMETYPE_PLUGIN_PAIR - { - mimetype = "image/svg+xml"; - implementation_uid = 0x102071E6; - }, - SCREENSAVER_MIMETYPE_PLUGIN_PAIR - { - mimetype = "image/gif"; - implementation_uid = 0x102750B4; - }, - SCREENSAVER_MIMETYPE_PLUGIN_PAIR - { - mimetype = "application/m3g"; - implementation_uid = 0x102750B3; - } -#ifdef RD_FLASHLITE_SCREENSAVER - , - SCREENSAVER_MIMETYPE_PLUGIN_PAIR - { - mimetype = "application/x-shockwave-flash"; - implementation_uid = 0x101f4e5d; - } -#endif - - }; - } - -//---------------------------------------------------- -// -// r_anim_timeout_slider -// Duration slider. -// -//---------------------------------------------------- -// -RESOURCE SLIDER r_anim_timeout_slider - { - layout = EAknSettingsItemSliderLayout; - minvalue = 1; - maxvalue = 60; - step = 1; - valuetype = EAknSliderValueBareFigure; - singular_valuelabel = qtn_sanim_duration_slider_ykcur; - minlabel = qtn_sanim_duration_slider_min; - maxlabel = qtn_sanim_duration_slider_max; - valuelabel = qtn_sanim_duration_slider_cur; - } - -//---------------------------------------------------- -// -// r_light_timeout_slider -// Backlight slider. -// -//---------------------------------------------------- -// -RESOURCE SLIDER r_light_timeout_slider - { - layout = EAknSettingsItemSliderLayout; - minvalue = 0; - maxvalue = 30; - step = 1; - valuetype = EAknSliderValueBareFigure; - singular_valuelabel = qtn_sanim_duration_slider_ykcur; - minlabel = qtn_sanim_slider_off; - maxlabel = qtn_sanim_slider_max_secs; - valuelabel = qtn_sanim_slider_context_value_secs; - } - -// ----------------------------------------------------------------------------- -// -// r_anim_timeout_setting_page -// Screen saver setting page. -// -// ----------------------------------------------------------------------------- -// -RESOURCE AVKON_SETTING_PAGE r_anim_timeout_setting_page - { - number = EAknSettingPageNoOrdinalDisplayed; - label = qtn_sanim_list_anim_timeout; - softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; - type = EAknCtSlider;//0xffff; - editor_resource_id = r_anim_timeout_slider; - } - -// ----------------------------------------------------------------------------- -// -// r_light_timeout_setting_page -// Screen saver setting page. -// -// ----------------------------------------------------------------------------- -// -RESOURCE AVKON_SETTING_PAGE r_light_timeout_setting_page - { - number = EAknSettingPageNoOrdinalDisplayed; - label = qtn_sanim_list_light_timeout; - softkey_resource = R_AVKON_SOFTKEYS_OK_CANCEL__OK; - type = EAknCtSlider;//0xffff; - editor_resource_id = r_light_timeout_slider; - } - - -// ----------------------------------------------------------------------------- -// -// r_sanim_setting_lbx -// -// ----------------------------------------------------------------------------- -// -RESOURCE LISTBOX r_sanim_setting_lbx - { - array_id = r_sanim_setting_lbx_items; - flags = EEikListBoxMultipleSelection; - } - -// ----------------------------------------------------------------------------- -// -// r_sanim_setting_lbx_items -// -// ----------------------------------------------------------------------------- -// -RESOURCE ARRAY r_sanim_setting_lbx_items - { - items = - { - LBUF - { - txt = "\t"qtn_sanim_list_anim_file"\t\t"; - }, - LBUF - { - txt = "\t"qtn_sanim_list_anim_timeout"\t\t"; - }, - LBUF - { - txt = "\t"qtn_sanim_list_light_timeout"\t\t"; - } - - }; - } - -// --------------------------------------------------------- -// -// r_sanim_setting_dialog -// SVG-T Dialog -// -// --------------------------------------------------------- -// - -RESOURCE DIALOG r_sanim_setting_dialog - { - flags = EAknDialogSelectionList; - title = "SANIM Dialog"; - buttons = R_AVKON_SOFTKEYS_SELECTION_LIST; - items = - { - DLG_LINE - { - type = ESanimCustControl; - id = ESanimDialogCustControlIdData; - control = SANIM_CUST_CONTROL - { - }; - } - }; - } -// ----------------------------------------------------------------------------- -// -// r_sanim_dialog_menubar -// Resource for Dialog "Options" Menu Bar -// -// ----------------------------------------------------------------------------- -// -RESOURCE MENU_BAR r_sanim_dialog_menubar - { - titles = - { - MENU_TITLE - { - menu_pane = r_sanim_dialog_menu; - } - }; - } - -// ----------------------------------------------------------------------------- -// -// r_sanim_dialog_menu -// Resource for Screen saver setting Dialog "Options" Menu Pane -// -// ----------------------------------------------------------------------------- -// -RESOURCE MENU_PANE r_sanim_dialog_menu - { - items = - { - MENU_ITEM - { - command = ESanimDlgChangeCommand; - txt = qtn_sanim_option_change; - flags = EEikMenuItemAction; // add this line to list item action commands - }, -#ifdef __SERIES60_HELP - MENU_ITEM - { - command = ESanimDlgHelpCommand; - txt = qtn_options_help; - }, -#endif // __SERIES60_HELP - MENU_ITEM - { - command = EAknCmdExit; - txt = qtn_options_exit; - } - }; - } - -// --------------------------------------------------- -// -// r_sanim_title_settings -// -// --------------------------------------------------- -// -RESOURCE TBUF r_sanim_title_settings - { - buf = qtn_sanim_title_settings; - } - -// --------------------------------------------------- -// -// r_sanim_title_settings -// -// --------------------------------------------------- -// -RESOURCE TBUF r_sanim_not_supported - { - buf = qtn_err_not_supp; - } - -// --------------------------------------------------- -// -// r_sanim_title_settings -// -// --------------------------------------------------- -// -RESOURCE TBUF r_sanim_error_wrong_format - { - buf = qtn_sanim_error_wrong_format; - } - - -// --------------------------------------------------- -// -// r_sanim_err_failure -// -// --------------------------------------------------- -// -RESOURCE TBUF r_sanim_err_failure - { - buf = qtn_err_failure; - } - -// --------------------------------------------------- -// -// r_sanim_slider_off -// -// --------------------------------------------------- -// -RESOURCE TBUF r_sanim_slider_off - { - buf = qtn_sanim_slider_off; - } - -// --------------------------------------------------- -// -// r_drm_prev_rights_set -// -// --------------------------------------------------- -// -RESOURCE TBUF r_drm_prev_rights_set - { - buf = qtn_drm_prev_rights_set; - } - - -// --------------------------------------------------- -// -// r_sanim_screensaver_name -// -// --------------------------------------------------- -// -RESOURCE TBUF r_sanim_screensaver_name - { - buf = qtn_sanim_screensaver_name; - } - - -// ----------------------------------------------------------------------------- -// -// r_sanim_msk_change -// Middle softkey label: change. From Avkon resources (avkon.loc) -// ----------------------------------------------------------------------------- -// -RESOURCE TBUF r_sanim_msk_change - { - buf = qtn_msk_change; - } - - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/group/ScreenSaverAnimPlugin.mmp --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/group/ScreenSaverAnimPlugin.mmp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -/* -* Copyright (c) 2005 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: This is the .mmp for building the Screen Saver Anim Plugin -* -*/ - - - - - -#include -#include -#include - -TARGET ScreenSaverAnimPlugin.dll - - -TARGETTYPE PLUGIN - -UID 0x10009D8D 0x10207447 - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT - -START RESOURCE ../data/10207447.rss -TARGET ScreenSaverAnimPlugin.rsc -END - -START RESOURCE ../data/ScreenSaverAnimPlugin.rss -HEADER -TARGETPATH RESOURCE_FILES_DIR -LANGUAGE_IDS -END // RESOURCE - - -/* exportunfrozen */ - -SOURCEPATH ../src -SOURCE ScreenSaverAnimPlugin.cpp -SOURCE ScreenSaverAnimPluginProxy.cpp -SOURCE NpnImplementation.cpp -SOURCE ScreenSaverAnimPluginContainer.cpp -SOURCE ScreenSaverAnimSettingDialog.cpp -SOURCE ScreenSaverAnimPluginHelper.cpp - - - -USERINCLUDE ../inc - -// This is a SYSTEMINCLUDE macro containing the middleware -// layer specific include directories -APP_LAYER_SYSTEMINCLUDE - - -LIBRARY ecom.lib -LIBRARY euser.lib -LIBRARY eikcore.lib -LIBRARY cone.lib -LIBRARY efsrv.lib -LIBRARY bafl.lib -LIBRARY CentralRepository.lib -LIBRARY CenRepNotifHandler.lib -LIBRARY drmhelper.lib -LIBRARY aknicon.lib // AknIconUtils -LIBRARY AknLayout2.lib // Scalable UI -LIBRARY AknLayout2Scalable.lib // Scalable UI -LIBRARY AknSkins.lib -LIBRARY CdlEngine.lib // Scalable UI -LIBRARY avkon.lib -LIBRARY apgrfx.lib -LIBRARY apmime.lib -LIBRARY MGFetch.lib -LIBRARY eikcoctl.lib -LIBRARY CommonEngine.lib -LIBRARY eikdlg.lib -LIBRARY flogger.lib -LIBRARY caf.lib -LIBRARY cafutils.lib -#ifdef __SERIES60_HELP -LIBRARY hlplch.lib // for "Help" options menu -#endif // __SERIES60_HELP - - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/group/bld.inf --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/group/bld.inf Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/* -* Copyright (c) 2005 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: Build information file for ScreenSaverAnimPlugin -* -*/ - - - - - -#include - -PRJ_PLATFORMS -// Defaults - - - -PRJ_MMPFILES - -ScreenSaverAnimPlugin.mmp -PRJ_EXPORTS -//../inc/NPNExtensions.h MW_LAYER_PLATFORM_EXPORT_PATH(NPNExtensions.h) -../loc/screensaveranimplugin.loc MW_LAYER_LOC_EXPORT_PATH(screensaveranimplugin.loc) - -../rom/ScreenSaverAnimPlugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(ScreenSaverAnimPlugin.iby) -../rom/ScreenSaverAnimPluginResources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(ScreenSaverAnimPluginResources.iby) - -// Generic configuration interface for component cenrep settings -../conf/screensaveranimplugin.confml APP_LAYER_CONFML(screensaveranimplugin.confml) -../conf/screensaveranimplugin_1020744E.crml APP_LAYER_CRML(screensaveranimplugin_1020744E.crml) - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/NpnImplementation.h --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/NpnImplementation.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -/* -* Copyright (c) 2005 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: Thin wrapper around plugin's function table. -* -*/ - - - - - -#ifndef NPNIMPLEMENTATION_H -#define NPNIMPLEMENTATION_H - - // INCLUDE FILES -#include -#include -#include -#include -#include - - -NPError NpnGetUrl( NPP aInstance, const TDesC& aUrl, - const TDesC* aWindowType ); - - -NPError NpnPostUrl( NPP aInstance, const TDesC& aUrl, - const TDesC* aWindowType, const TDesC& aBuf, NPBool aFile ); - - -NPError NpnRequestRead( NPStream* /*aStream*/, - NPByteRange* /*aRangeList*/ ); - - -NPError NpnNewStream( NPP /*aInstance*/, NPMIMEType /*aType*/, - const TDesC* /*aWindowType*/, NPStream** /*aStream*/ ); - - -TInt32 NpnWrite( NPP /*aInstance*/, NPStream* /*aStream*/, - TInt32 /*aLen*/, void* /*aBuffer*/ ); - - -NPError NpnDestroyStream( NPP /*aInstance*/, - NPStream* /*aStream*/, NPReason /*aReason*/ ); - - -void NpnStatus( NPP /*aInstance*/, const TDesC& aMessage ); - - -const TDesC* NpnUAgent( NPP /*aInstance*/ ); - - -void* NpnMemAlloc( uint32 aSize ); - - -void NpnMemFree( void* aPtr ); - - -uint32 NpnMemFlush( uint32 /*aSize*/ ); - - -void NpnReloadPlugins( NPBool aReloadPages ); - - -JRIEnv* NpnGetJavaEnv(); - - -jref NpnGetJavaPeer( NPP /*aInstance*/ ); - - -NPError NpnGetUrlNotify( NPP aInstance, const TDesC& aUrl, - const TDesC* aWindowType, void* aNotifyData ); - - -NPError NpnPostUrlNotify( NPP aInstance, const TDesC& aUrl, - const TDesC* aWindowType, const TDesC& aBuf, NPBool aFile, void* aNotifyData ); - - -NPError NpnGetValue( NPP aInstance, NPNVariable aVariable, void *aRetValue ); - - -NPError NpnSetValue( NPP aInstance, NPPVariable aVariable, void *aSetValue ); - - -void NpnInvalidateRect( NPP /*aInstance*/, NPRect * /*aRect*/ ); - - -void NpnInvalidateRegion( NPP /*aInstance*/, NPRegion /*aRegion*/ ); - - -void NpnForceRedraw( NPP /*aInstance*/ ); - - - -// ----------------------------------------------------------------------------- -// PluginNpnFuncs -// -// A const global variable used to hold the browser callback functions. -// ----------------------------------------------------------------------------- -// -const NPNetscapeFuncs NpnImplementationFuncs = - { - sizeof( NPNetscapeFuncs ), - 1, // Version - NpnGetUrl, - NpnPostUrl, - NpnRequestRead, - NpnNewStream, - NpnWrite, - NpnDestroyStream, - NpnStatus, - NpnUAgent, - NpnMemAlloc, - NpnMemFree, - NpnMemFlush, - NpnReloadPlugins, - NpnGetJavaEnv, - NpnGetJavaPeer, - NpnGetUrlNotify, - NpnPostUrlNotify, - NpnGetValue, - NpnSetValue, - NpnInvalidateRect, - NpnInvalidateRegion, - NpnForceRedraw - }; - - -#endif // NPNIMPLEMENTATION_H -// End Of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimCustControl.rh --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimCustControl.rh Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* -* Copyright (c) 2004,2005 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: Resource Header for SVGT Custom Control Structure -* -*/ - - - - - -#ifndef SCREENSAVERANIMCUSTCONTROL_RH -#define SCREENSAVERANIMCUSTCONTROL_RH -// INCLUDES - -// MACROS - -// STRUCTURE DEFINITIONS - -// ----------------------------------------------------------------------------- -// SANIM_CUST_CONTROL -// Defines the resource structure for SVGT Custom Control. -// ----------------------------------------------------------------------------- -// - -STRUCT SANIM_CUST_CONTROL - { - } -#endif // SCREENSAVERANIMCUSTCONTROL_RH - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPlugin.h --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPlugin.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,576 +0,0 @@ -/* -* Copyright (c) 2005 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: ScreenSaverAnimPlugin provides an implementation of -* MScreensaverPlugin for animation files. -* -*/ - - - -#ifndef C_SCREENSAVERANIMPLUGIN_H -#define C_SCREENSAVERANIMPLUGIN_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - -class CEikonEnv; -class CDRMHelper; -class CScreensaverRepositoryWatcher; -class CRepository; - - -_LIT( KFileLoggingDir, "ScreenSaver" ); -_LIT( KFileLog, "SaveLog.txt" ); -_LIT( KEmptyString, "" ); - -#ifdef SCREENSAVER_LOG_ENABLED - -inline void PrintDebugMsg( const TDesC& aMsg ) - { - RDebug::Print( aMsg ); -#if 0 - RFileLogger::Write( KFileLoggingDir, - KFileLog, EFileLoggingModeAppend, aMsg ); -#endif - } -#else - -inline void PrintDebugMsg( const TDesC& /*aMsg*/ ) - { - } - -#endif - -/** -* Encapsulates the Settings that are written into the central repository -* @lib ScreenSaverAnimPlugin.lib -* @since 3.1 -*/ -class CScreenSaverAnimSettingObject : public CBase - { - - public: - CScreenSaverAnimSettingObject(); - - public: - - // Name of the file to be set as screensaver - TFileName iFileName; - - // Animation Timeout - TInt iAnimationTimeout; - - // Lights Timeout - TInt iLightsTimeout; - }; - -/** -* Provides the Animated ScreenSaverPlugin functionality which implements -* ScreenSaver Interface and gives a Netscape Browser Plugin Interface -* to the format specific plugins like SVG, Flash, M3G etc. -* @lib ScreenSaverAnimPlugin.lib -* @since 3.1 -*/ - -class CScreenSaverAnimPlugin: public CScreensaverPluginInterfaceDefinition, - public MPluginAdapter, - public MCoeControlObserver - { - - public: - - /** - * Two-phased constructor. - * @since 3.1 - */ - static CScreenSaverAnimPlugin* NewL(); - - /** - * Destructor. - */ - virtual ~CScreenSaverAnimPlugin(); - - public: // Functions From CScreensaverPluginInterfaceDefinition - - /** - * From MScreensaverPlugin, Method called by ScreenSaver Application - * when an animation file is configured as a Screen Saver. - * @param aHost Screen saver plugin host. - * @since 3.1 - */ - virtual TInt InitializeL( MScreensaverPluginHost *aHost ); - - /** - * From MScreensaverPlugin, Method called by ScreenSaver Application - * when Screen Saver is activated. - * @since 3.1 - */ - virtual TInt Draw( CWindowGc& aGc ); - - /** - * From MScreensaverPlugin, Method called by ScreenSaver Application - * before the InitializeL. - * @since 3.1 - */ - virtual const TDesC16& Name() const; - - /** - * From MScreensaverPlugin, Method called by ScreenSaver Application - * to get the capabilities of Screensaver plugin. - * @since 3.1 - */ - virtual TInt Capabilities(); - - /** - * From MScreensaverPlugin, Method called by Psln Application - * when the user selects Animated ScreenSaver - * @since 3.1 - */ - virtual TInt PluginFunction( - TScPluginCaps /*aFunction*/, - TAny* /*aParam*/ ); - - /** - * From MScreensaverPlugin, Method called by ScreenSaver Application - * when there are Screen Saver events. - * @since 3.1 - */ - virtual TInt HandleScreensaverEventL( - TScreensaverEvent aEvent, - TAny* aData ); - - public: // New Functions - - /** - * Reads the animation settings from the central repository - * @since 3.1 - * @return System wide Error value - */ - TInt GetAnimSettings(); - - /** - * Writes the animation settings to the central repository - * @since 3.1 - * @return System wide Error value - */ - TInt SetAnimSettings() const; - - /** - * This method registers for expiry of drm content - * @since 3.1 - * @return System wide Error value - */ - TInt RegisterForDrmExpiry(); - - /** - * This method unregisters for expiry of drm content - * @since 3.1 - * @return System wide Error value - */ - TInt UnregisterForDrmExpiry(); - - /** - * This method reads and parses the central repository key - * for drm expiry - * @since 3.1 - * @return System wide Error value - */ - TInt ReadDrmNotification( TDes8& aString ); - - /** - * Called when there is a drm expiry notification - * @since 3.1 - */ - void ProcessDrmNotificationL(); - - /** - * This method pops the settings dialog - * @since 3.1 - */ - void PopSettingsDialogL(); - - /** - * This method checks whether the set file exists currently - * if not, it updates the filename string - * This also checks if the rights are valid if the content is drm - * if not, it updates the filename with the empty file name - * returns True, if the Filename is updated - * False, otherwise - * @since 3.1 - */ - TBool UpdateFileName(); - - /** - * Called when HandleScreenSaverEventL is called with EDisplayChanged - * Used to set the parent control for the animation plugins - * returns KErrGeneral when SetWindow does not go through - * @since 3.1 - */ - TInt SetWindow( CCoeControl* aParent ); - - /** - * Called to set the filename for the animation plugins - * @since 3.1 - */ - void AsFile(); - - /** - * Called when there is a central repository settings change - * @since 3.1 - */ - void HandleSettingsChange( TAny* aPtr ); - - /** - * Called by the repository watcher when there is a central - * repository settings change - * @since 3.1 - */ - static TInt HandleRepositoryCallBack( TAny* aPtr ); - - /** - * Called by the repository watcher when there is a - * drm expiry notification - * @since 3.1 - */ - static TInt HandleDrmNotification( TAny* aPtr ); - - /** - * Sends an event to the plugins to check for the file's validity - * repository settings change - * returns KErrNone if the file is valid - * @since 3.1 - */ - TInt CheckFileValidityL( const TDesC& aFileName ); - - /** - * Parses the mime description and checks whether the given mime type - * is present in the mime description - * @since 3.1 - * @param aMIMEDescription mime Description which has mimetype, - * extension and description - * @param aDataType mimetype to be searched - * @return TBool ETrue if aDataType is present in aMIMEDescription - * EFalse otherwise - */ - static TBool ParseMimeStringL( const TDesC& aMIMEDescription, - const TDesC& aDataType ); - - /** - * Given the mimetype searches and returns the browser plugin which - * handles the given mimetype - * @since 3.1 - * @param aDataType - * @return TUid uid of the plugin which handles the mimetype - */ - TUid FindAnimPluginL( const TDesC& aDataType ); - - - public: // From MPluginAdapter - - /** - * Gets the pointer to the minor version number of the plug-in version - * number of the Browser Plug-in API. - * @since 3.1 - * @return Series 60 returns 1. Series 80 and - * the Nokia 7710 smartphone return 101. - */ - virtual TUint16 GetVersion(); - - /** - * Called when the plug-in has completed its creation. - * This function is called from the constructL function of the plug-in. - * @since 3.1 - * @param aPluginControl A pointer to the plug-in control window - */ - virtual void PluginConstructedL( CCoeControl* aPluginControl ); - - /** - * Called after the plug-in has been deleted. - * This function is called from the destructor of the plug-in. - * @since 3.1 - */ - virtual void PluginFinishedL(); - -#ifndef __SERIES60_30__ - - /** - * Called by the plug-in to open a URL in the parent frame. - * This function is not implemented in Series 60. - * It is supported in Series 80 and in the Nokia 7710 smartphone. - * @since 3.1 - * @param aUrl Name of the URL to open - */ - virtual void OpenUrlL( const TDesC& aUrl ); - - /** - * Called by the plug-in to open a URL in a named window or frame. - * This function is not implemented in Series 60. - * It is supported in Series 80 and in the Nokia 7710 smartphone. - * @since 3.1 - * @param aUrl Name of the URL to open - * @param aNewTargetWindowName The name of the target window or frame - */ - virtual void OpenUrlInTargetWindowL( const TDesC& aUrl, - const TDesC& aNewTargetWindowName ); - - /** - * Specifies whether or not the frame has a previous navigation - * history item. - * This function is not implemented in Series 60. - * It is supported in Series 80 and in the Nokia 7710 smartphone. - * @since 3.1 - * @return true if the frame has a previous navigation - * history item false otherwise - */ - virtual TBool HasNavigationHistoryPrevious() const; - - /** - * Informs the browser to load the next navigation history URL - * in its parent frame. - * This function is not implemented in Series 60. - * It is supported in Series 80 and in the Nokia 7710 smartphone. - * @since 3.1 - */ - virtual void LoadNavigationHistoryPreviousL(); - - /** - * Returns whether the frame has a next navigation history item. - * This function is not implemented in Series 60. - * It is supported in Series 80 and in the Nokia 7710 smartphone. - * @since 3.1 - * @return Returns whether the frame has a next navigation history item. - */ - virtual TBool HasNavigationHistoryNext() const; - - /** - * Informs the browser to load the next navigation history URL - * in its parent frame. - * This function is not implemented in Series 60. It is supported in - * Series 80 and in the Nokia 7710 smartphone. - * @since 3.1 - */ - virtual void LoadNavigationHistoryNextL(); - -#endif - /** - * Returns the window system level control object for the plug-in. - * @since 3.1 - * @return A pointer to the parent control window. - */ - virtual CCoeControl* GetParentControl(); - - /** - * Returns the observer for the plug-in control. - * @since 3.1 - * @return Observer that the plug-in can use to send events - * to the browser. - */ - virtual MCoeControlObserver* GetParentControlObserver(); - - /** - * Sets the plug-in notifier allowing the plug-in to control - * portions of the browser. - * @since 3.1 - * @param aNotifier Pointer to an interface that the browser can - * use to send events to the plug-in. - */ - virtual void SetPluginNotifier( MPluginNotifier *aNotifier ); - - /** - * Tells the plugin adapter if plugin content can accept user interaction. This function - * is called from the plugin. - * @since Series 60 3nd Edition - * @param None - * @return None - */ - virtual void SetContentInteractive( TBool /*aInteractive*/ ); - - public: //MCoeControlObserver - /** - * Handles an event from an observed control. - * This function is called when a control for which this control - * is the observer calls CCoeControl::ReportEventL(). It should be - * implemented by the observer control, and should handle all events - * sent by controls it observes. - * @param aControl The control that sent the event. - * @param aEventType The event type. - */ - virtual void HandleControlEventL( CCoeControl* aControl, - TCoeEvent aEventType ); - - private: // New functions - - /** - * Finds the mime type of the file, searches the corresponding - * browser plugin which handles the mime type and starts the same. - * @since 3.1 - */ - void FindAndStartPluginL( const TDesC& aFileName, - TBool aCheckFileMode = EFalse ); - - /** - * Makes use of ecom api to find out whether an implementation with uid - * aImpUid is present which implements the interface aInterfaceUid. - * @since 3.1 - */ - TBool CheckIfPluginPresentL( TUid aInterfaceUid, - TUid aImpUid ); - - /** - * Finds the mime type of the file, searches the corresponding - * browser plugin which handles the mime type - * @since 3.1 - */ - void FindPluginL( const TDesC& aFileName ); - - /** - * Creates the format specific plugin - * @since 3.1 - */ - void CreatePluginL( TBool aCheckFileMode = EFalse ); - - /** - * Deletes the browser plugin. - * @since 3.1 - */ - void DeletePlugin(); - - /** - * Deletes and Sets the browser plugin members to NULL - * @since 3.1 - */ - void SetPluginDeleted(); - - /** - * Connects the central repository session - * @since 3.1 - */ - void InitializeCenRepL(); - - /** - * Registers for central repository key changes - * @since 3.1 - */ - void NotifyCenrepChangeL(); - - /** - * Cancels registration for central repository key changes - * @since 3.1 - */ - void NotifyCenrepChangeCancel(); - - /** - * Disconnects the central repository session - * @since 3.1 - */ - void UnInitializeCenRep(); - - /** - * Sends an animation end event to the plugins - * @since 3.1 - */ - TInt SendEndEvent(); - - /** - * Checks whether the given content id matches the content id of the - * file name given - * @return ETrue if the content id matches - * EFalse if not - * @since 3.1 - */ - TBool CheckContentIdL( const TDesC& aFileName, TDesC8& aContentUri ); - - private: - - /** - * Default Constructor - * @since 3.1 - */ - CScreenSaverAnimPlugin(); - - /** - * 2nd phase constructor - * @since 3.1 - */ - void ConstructL(); - - public: - - // Pointer to the screen saver host - MScreensaverPluginHost* iScreenSaverHost; - - private: - - // Resource file offset - TInt iResourceOffset; - - // Handle to the central repository session - CRepository* iAnimPluginSession; - - // Handle to the central repository session - CRepository* iDrmSession; - - // Environment pointer - CEikonEnv* iEikEnv; - - // Format specific Netscape plugin UID - TUid iPluginUID; - - // Netscape plugin functions. - NPPluginFuncs* iPluginFuncs; - - // Netscape ECOM plugin interface. - CEcomBrowserPluginInterface* iPluginInterface; - - // Netscape plugin instance. - NPP iNPPinstance; - - // Plugin Type - HBufC8* iPluginType; - - // Parent control given by the screen saver application - CCoeControl* iParentControl; - - // Pointer to the Settings object - CScreenSaverAnimSettingObject* iSettingObject; - - // Pointer to Drm Helper - CDRMHelper* iDrmHelper; - - // Cenrep Watcher for settings change - CScreensaverRepositoryWatcher* iScreensaverRepositoryWatcher; - - // Cenrep Watcher for drm expiry - CScreensaverRepositoryWatcher* iDrmExpiryWatcher; - - // To save the error encountered by the plugin - TInt iPluginError; - - // Screensaver plugin name - HBufC* iScreensaverName; - }; - - -#endif // C_SCREENSAVERANIMPLUGIN_H -// End Of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPlugin.hrh --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPlugin.hrh Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -/* -* Copyright (c) 2005 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: The enumeration will be used in the animation plugin -* -*/ - - - -#ifndef SCREENSAVERANIMPLUGIN_HRH -#define SCREENSAVERANIMPLUGIN_HRH - -#include - - -// Screen Animation Plugin's Setting List Items. -enum TSanimSettingListItemIds - { - ESanimAnimFileNameId, - ESanimAnimTimeoutId, - ESanimLightsTimeoutId - }; - -enum TSAnimDialogMenuCommands - { - ESanimDlgChangeCommand = 1, // Must not start with 0 - dialog ignores it - ESanimDlgHelpCommand - }; - -enum { ESanimDialogCustControlIdData = 1 }; -enum { ESanimCustControl = 1020 }; - - -#endif - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginConst.h --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginConst.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/* -* Copyright (c) 2008 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: Constant definitions for Screen Saver Anim Plugin -* -*/ - - - - - -#ifndef SCREENSAVERANIMPLUGINCONST_H -#define SCREENSAVERANIMPLUGINCONST_H - -// Feature IDs. -enum - { - // Remove Back Light Setting - EAnimPluginBacklightRemoved, - - /*Insert new item here*/ - - // last feature should be max value - KAnimPluginMaxFeatureID - }; - -/** -******************************************************************************* -* Following constants are shared between PLSN. The three constants need to be -* sychronized in both PLSN and Screensaver Animation plugin projects when each -* has changes. -******************************************************************************* -*/ -// Same definition as in PslnVariationPrivateCRKeys.h -const TUid KCRUidThemesVariation = { 0x102818EB }; - - -/** -* Specifies the bitmask for Themes applications locally variated features. -* -* Possible values are defined in PslnVariant.hrh. -*/ -const TUint32 KThemesLocalVariation = 0x00000001; - - -// Same definition as in pslnvariant.hrh -// Removes screensaver animation plugin's timeout setting. -// Bitmask value in decimals: 256. -#define KScreenSaverRemoveAnimPluginTimeout 0x00000100 - - -#endif // SCREENSAVERANIMPLUGINCONST_H -// End Of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginContainer.h --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginContainer.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,160 +0,0 @@ -/* -* Copyright (c) 2005 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: This header defines the container for the settings list -* -*/ - - - -#ifndef C_SCREENSAVERANIMPLUGINCONTAINER_H -#define C_SCREENSAVERANIMPLUGINCONTAINER_H - -// INCLUDES -#include -#include -#include - -// CLASS DECLARATION - -/** -* CScreenSaverAnimPluginContainer container class -* -*/ -class CScreenSaverAnimPluginContainer : public CCoeControl, - public MEikListBoxObserver - { - public: // Constructors and destructor - - static CScreenSaverAnimPluginContainer* NewLC( - CScreenSaverAnimPlugin* aCaller, - const CCoeControl* aParent, - CScreenSaverAnimSettingObject* aSettingObject ); - - static CScreenSaverAnimPluginContainer* NewL( - CScreenSaverAnimPlugin* aCaller, - const CCoeControl* aParent, - CScreenSaverAnimSettingObject* aSettingObject ); - - CScreenSaverAnimPluginContainer( - CScreenSaverAnimPlugin* aCaller, - CScreenSaverAnimSettingObject* aSettingObject ); - - virtual void ConstructL( const CCoeControl* aParent, - const TRect& aRect ); - - /** - * Constructs all common parts of the container. - * @param aRect Listbox control's rect. - * @param aResTitleId Resource id for title. - * @param aResLbxId Resource id for listbox. - * @return void - */ - void BaseConstructL( const TRect& aRect, TInt aResTitleId, - TInt aResLbxId = 0 ); - - /** - * Destructor. - */ - ~CScreenSaverAnimPluginContainer(); - - public: //new - - /** - * Updates listbox's item's value. - * @param aItemId An item which is updated. - * @return void. - */ - void UpdateListBoxL( TInt aItemId ); - - void HandleListBoxSelectionL(); - - /** - * Sets feature support - see screensaveranimpluginconst.h for feature list. - * @param aFeatureBitFlags feature support bitflags. - */ - void GetFeatureSupportL( TBitFlags& aFeatureBitFlags ) const; - - /** - * Checks if feature is supported. - * @param aFeatureID feature ID. - * @return ETrue if feature is supported, EFalse otherwise. - */ - TBool IsFeatureSupported( TInt aFeatureID ); - - public: //MEikListBoxObserver - - virtual void HandleListBoxEventL( CEikListBox* aListBox, - TListBoxEvent aEventType ); - - public: //From CCoeControl - - virtual void HandleResourceChange( TInt aType ); - - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ); // this processes key events - - virtual void SetContainerWindowL( const CCoeControl& aContainer ); - - // Focus change handler - void FocusChanged( TDrawNow aDrawNow ); - - protected: // New methods - - /** - * Constructs listbox. - * @param aResLbxId Resource id for listbox. - * @return void - */ - virtual void ConstructListBoxL( TInt aResLbxId ); - - private: // new - void CreateListBoxItemsL(); - void MakeAnimTimeOutItemL(); - void MakeLightsTimeOutItemL(); - void MakeFileNameItem(); - void ShowFileNameItemL(); - void ShowAnimTimeOutItemL(); - void ShowLightsTimeOutItemL(); - - private: // from CCoeControl - - void SizeChanged(); - - TInt CountComponentControls() const; - - CCoeControl* ComponentControl( TInt /*aIndex*/ ) const; - - void GetNormalScreenLayoutRect( TRect& aRect ) const; - - protected: // Data - CEikTextListBox* iListBox; - - private: // new - CDesCArrayFlat* iItems; - CDesCArray* iItemArray; - TBuf<128> iItem; - CScreenSaverAnimSettingObject* iSettingObject; - CScreenSaverAnimPlugin* iCaller; - TBool iInShowFileItem; - - /** - * Defines which features are supported. - */ - TBitFlags iFeaturesSupport; - - }; - -#endif // C_SCREENSAVERANIMPLUGINCONTAINER_H - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginHelper.h --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginHelper.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,144 +0,0 @@ -/* -* Copyright (c) 2005 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: This file declares all helper classes -* for ScreenSaverAnimPlugin -* -*/ - - - -#ifndef C_SCREENSAVERANIMPLUGINHELPER_H -#define C_SCREENSAVERANIMPLUGINHELPER_H - -// INCLUDES -#include -#include -#include - -// FORWARD DECLARATIONS -class CDRMHelper; -class CCoeEnv; -class CScreenSaverAnimPlugin; -class CRepository; - -// CLASS DECLARATION - -/** -* Implementation for File Validity Check. -* @since 3.1 -* @internal -*/ -class CScreenSaverAnimPluginVerifier : public CBase, public MMGFetchVerifier - { - public: // Constructors and destructor - - /** - * Two-phased constructor. - */ - static CScreenSaverAnimPluginVerifier* NewL( - CScreenSaverAnimPlugin* aFileVerify ); - - /** - * Destructor. - */ - ~CScreenSaverAnimPluginVerifier(); - - public: // Functions from base classes - - /** - * From MFLDFileObserver. - */ - TBool VerifySelectionL( const MDesCArray* aSelectedFiles ); - - private: - - /** - * C++ default constructor. - */ - CScreenSaverAnimPluginVerifier( CScreenSaverAnimPlugin* aFileVerify ); - - /** - * By default Symbian 2nd phase constructor is private. - */ - void ConstructL(); - void ShowErrorNoteL( TInt aResourceId ) const; - - private: // Data - // Own: DRM helper - CDRMHelper* iDRMHelper; - - // Environment pointer - CCoeEnv* iCoeEnv; - - CScreenSaverAnimPlugin* iFileVerify; - - }; - - -// CLASS DECLARATION - -/** -* Helper Class to watch Central Repository Changes. -* @since 3.1 -* @internal -*/ -class CScreensaverRepositoryWatcher : public CBase, public MCenRepNotifyHandlerCallback - { -public: - static CScreensaverRepositoryWatcher* NewL( - const TUid aUid, - const TUint32 aKey, - CCenRepNotifyHandler::TCenRepKeyType aKeyType, - TCallBack aCallBack, - CRepository* aRepository ); - - static CScreensaverRepositoryWatcher* NewL( - const TUid aUid, - TCallBack aCallBack, - CRepository* aRepository ); - - ~CScreensaverRepositoryWatcher(); - - TUint32 ChangedKey(); - -public: // from MCenRepNotifyHandlerCallback - void HandleNotifyInt ( TUint32 aKey, TInt aNewValue ); - void HandleNotifyString ( TUint32 aKey, const TDesC16& aNewValue ); - void HandleNotifyGeneric( TUint32 aKey ); - void HandleNotifyError ( TUint32 aKey, TInt aError, CCenRepNotifyHandler* aHandler ); - -private: - CScreensaverRepositoryWatcher( - const TUid aUid, - const TUint32 aKey, - TCallBack aCallBack, - CRepository* aRepository ); - - void ConstructL( CCenRepNotifyHandler::TCenRepKeyType aKeyType ); - - void ConstructL(); - -private: - TUid iUid; - TUint32 iKey; - TUint32 iChangedKey; - TCallBack iCallBack; - CRepository* iRepository; - CCenRepNotifyHandler* iNotifyHandler; - - }; - -#endif // C_SCREENSAVERANIMPLUGINHELPER_H - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginImplementationUid.hrh --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginImplementationUid.hrh Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2005 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: Defines the ECOM Implementation UIDs. -* -*/ - - - - - -#ifndef SCREENSAVERANIMPLUGINIMPLEMENTATIONUID_HRH -#define SCREENSAVERANIMPLUGINIMPLEMENTATIONUID_HRH - -#define KScreenSaverAnimPluginImplementationUID 0x1020744D - -#endif // SCREENSAVERANIMPLUGINIMPLEMENTATIONUID_HRH -// End of File - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginInternalCRKeys.h --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginInternalCRKeys.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* -* Copyright (c) 2005 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: This header file gives the central repository key -* enumerations -* -*/ - - - - -#ifndef SCREENSAVERANIMPLUGININTERNALCRKEYS_H -#define SCREENSAVERANIMPLUGININTERNALCRKEYS_H - -const TUid KCRUidScreenSaverAnimPlugin = { 0x1020744E }; - -const TUint32 KScreenSaverAnimatedFileName = 0x00000001; - -const TUint32 KScreenSaverAnimationTimeOut = 0x00000002; - -const TUint32 KScreenSaverLightsTimeOut = 0x00000003; - -#endif // SCREENSAVERANIMPLUGININTERNALCRKEYS_H -// End of File - - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimSettingDialog.h --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimSettingDialog.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,192 +0,0 @@ -/* -* Copyright (c) 2005 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: ScreenSaverAnimPlugin Settings Dialog -* -*/ - - - -#ifndef C_SCREENSAVERANIMSETTINGDIALOH_H -#define C_SCREENSAVERANIMSETTINGDIALOH_H - - -// FORWARD DECLARATIONS -class CAknDialog; -class CScreenSaverAnimPluginContainer; -class CScreenSaverAnimSettingObject; - -/** -* Provides the dialog functionality for viewing Settings. -* @lib ScreenSaverAnimPlugin.dll -* @since 3.1 -*/ - -class CScreenSaverAnimSettingDialog : public CAknDialog - { - public: // Constructors and destructor - /** - * Two-phased constructor. - */ - static CScreenSaverAnimSettingDialog* NewL( - CScreenSaverAnimPlugin* aCaller, - CScreenSaverAnimSettingObject* aSettingObject ); - - /** - * Two-phased constructor. - */ - static CScreenSaverAnimSettingDialog* NewLC( - CScreenSaverAnimPlugin* aCaller, - CScreenSaverAnimSettingObject* aSettingObject ); - - // Destructor - virtual ~CScreenSaverAnimSettingDialog(); - - public: // New functions - public: // Functions from base classes - - /** - * From CAknDialog Executes the dialog and deletes the dialog on exit. - * @since 3.1 - * @param aFileHandle File handle to the SVGT content. - * @param aAppObs Implementation Class provided by application that - * uses this dialog - * Note: The ownership of the file handle is not transferred. - * It is the responsibility of the caller to close this file - * after deleting this dialog. - * @return Integer - Indicates Exit Reason. - */ - virtual TInt ExecuteLD(); - /** - * From CAknDialog - Called by framework to process commands invoked by - * the user. - */ - virtual void ProcessCommandL( TInt aCommandId ); - -#ifdef __SERIES60_HELP - /** - * From CCoeControl Context Sensitive Help ID retrieving function. - * @since 3.0 - * @see CCoeControl - */ - void GetHelpContext( TCoeHelpContext& aContext ) const; -#endif - - public: - - /** - * Function used by the application to handle background/foreground - * events. When the application goes to background the presentation - * needs to be paused. When application comes back to foreground, - * the user would need to start the paused presentation. - * @param aForeground: ETrue: Foreground event, - * EFalse: Background event. - * @since 3.1 - */ - virtual void HandleApplicationForegroundEvent( TBool aForeground ); - - protected: // Functions from base classes - // From CEikDialog - // From CAknDialog - - /** - * From CAknDialog - Called by framework to dynamically manipulate - * the menu for the dialog. - */ - void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane ); - - /** - * From CEikDialog. Prelayouts the dialog. - */ - void PreLayoutDynInitL(); - - /** - * From CAknDialog - Framework method to determine if it OK - * to exit the dialog. - */ - TBool OkToExitL( TInt aButtonId ); - - /** - * From CAknDialog - Called by framework to add custom control to the - * dialog when specified in resource. - */ - SEikControlInfo CreateCustomControlL( TInt aControlType ); - - /** - * From CAknDialog - Called by framework to notify resize of dialog. - */ - void SizeChanged(); - - /** - * From CCoeControl Key Handling Method for control. - * @since 3.1 - * @param aKeyEvent Key Event. - * @param aType Type of Key Event. - * @return TKeyResponse - EKeyWasConsumed/EKeyWasNotConsumed. - */ - TKeyResponse OfferKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ); - - /** - * From CCoeControl - * @see CCoeControl::HandleResourceChange - */ - void HandleResourceChange( TInt aType ); - - /** - * From CCoeControl - * @see CCoeControl::FocusChanged - */ - void FocusChanged( TDrawNow aDrawNow ); - - /** - * Sets middle softkey label. - * @param aResourceId resource ID of label text to use. - * @param aCommandId command to place to middle softkey. - */ - void SetMiddleSoftKeyLabelL( const TInt aResourceId, - const TInt aCommandId ); - - private: - /** - * C++ default constructor. - */ - CScreenSaverAnimSettingDialog( - CScreenSaverAnimPlugin* aCaller, - CScreenSaverAnimSettingObject* aSettingObject ); - /** - * Second Phase constructor. - */ - void ConstructL(); - - private: // Data - - // Pointer to Custom CCoeControl. - CScreenSaverAnimPluginContainer* iCustControl; - - // Application Title Text - HBufC* iAppTitleText; - - // Text to be displayed in the title pane - HBufC* iTitlePaneString; - - // Setting Object - CScreenSaverAnimSettingObject* iSettingObject ; - - // Caller's reference - CScreenSaverAnimPlugin* iCaller; - - }; - -#endif // C_SCREENSAVERANIMSETTINGDIALOH_H -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/screensaver.hlp.hrh --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/screensaver.hlp.hrh Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* -* Copyright (c) 2009 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: The string to be used in the animation plugin -* -*/ - - - -// -// screensaver.hlp.hrh -// - -// -// File generated by cshlpcmp Version 011 -// - -#ifndef SCREENSAVER_HLP_HRH -#define SCREENSAVER_HLP_HRH - - -_LIT( KSCREENSAVER_HLP_ANIM_SETTINGS, "SCREENSAVER_HLP_ANIM_SETTINGS" ); //ScreenSaver animation settings -_LIT( KSCREENSAVER_HLP_SLIDE_SET, "SCREENSAVER_HLP_SLIDE_SET" ); //Slide set screen saver settings - -#endif diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/loc/screensaveranimplugin.loc --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/loc/screensaveranimplugin.loc Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,141 +0,0 @@ -/* -* Copyright (c) 2005 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: Localization strings for ScreenSaverAnimPlugin -* -*/ - - - - - -//d: Screensaver name -//d: Displayed in Themes application screensaver list -//l: list_set_graphic_pane_t1 -//w: -//r:3.1 -#define qtn_sanim_screensaver_name "Animation" - -//d: Title Pane String -//d: Displayed in the title Pane when settings dialog is displayed. -//l: title_pane_1 -//w: -//r:3.1 -#define qtn_sanim_title_settings "Settings" - -//d: Text in the setting list item. -//d: Displayed in the setting page to select backlight timer value -//l: list_setting_pane_1 -//w: -//r:3.1 -#define qtn_sanim_list_light_timeout "BackLight" - -//d: Text in the setting list item -//d: Displayed in the setting page to select animation duration -//l: list_setting_pane_t1 -//w: -//r:3.1 -#define qtn_sanim_list_anim_timeout "Duration" - -//d: Text in the setting list item -//d: Displayed in the setting page to select animation file -//l: list_setting_pane_t1 -//w: -//r:3.1 -#define qtn_sanim_list_anim_file "Animation file" - -//d:Text in slider control -//d:Screen saver animation duration setting page -//d:Minimum value -//l:setting_slider_pane_t2 -//r:3.1 -#define qtn_sanim_duration_slider_min "1 sec." - -//d:Text in slider control -//d:Screen saver animation duration setting page -//d:Maximum value -//l:setting_slider_pane_t3 -//r:3.1 -#define qtn_sanim_duration_slider_max "60 sec." - -//d:Text in slider control / setting list item value -//d:Screen saver animation duration setting page -//d:Context specific text -//l:setting_slider_pane_t1 / list_set_graphic_pane_t1 -//r:3.1 -#define qtn_sanim_duration_slider_cur "%U seconds" - -//d:Text in slider control / setting list item value -//d:Screen saver animation duration / backlight timeout setting page -//d:Context specific text for singular value -//l:setting_slider_pane_t1 / list_set_graphic_pane_t1 -//r:3.1 -#define qtn_sanim_duration_slider_ykcur "%U second" - -//d:Text in slider control -//d:Screen saver backlight time-out setting page -//d:Minimum value -//l:slider_set_pane_2 -//r:3.1 -#define qtn_sanim_slider_off "Off" - -//d:Text in slider control -//d:Screen saver backlight time-out setting page -//d:Maximum value -//l:slider_set_pane_2 -//r:3.1 -#define qtn_sanim_slider_max_secs "30 secs." - -//d:Text in slider control / setting list item value -//d:Screen saver backlight time-out setting page -//d:Context specific text -//l:setting_slider_pane_t1 / list_set_graphic_pane_t1 -//r:3.1 -#define qtn_sanim_slider_context_value_secs "%U seconds" - -//d: Option in the Options menu. -//d: Option used to change the settings -//l: list_single_popup_menu_pane_1 -//w: -//r:3.1 -#define qtn_sanim_option_change "Change" - -// Taken from errorres.loc -// d: Generic error note to be displayed when user tries to -// d: use some feature which is not supported -// l: popup_note_window_1_four_rows -// w: Errorres -// -#define qtn_err_not_supp "Feature is not supported" - -// d: error note to be displayed when user tries to -// d: select some file which is corrupted -// l: popup_note_window/opt2 -// w: -// r:3.1 -#define qtn_sanim_error_wrong_format "File is corrupted or wrong format" - -// d: error note to be displayed when animation couldnot -// d: be played as a screensaver -// l: popup_note_window_1_four_rows -// w: -// r:3.1 -#define qtn_err_failure "Unable to perform operation" - -// d: error note to be displayed when animation couldnot -// d: be set as a screensaver -// l: popup_note_window_1_four_rows -// w: -// r:3.1 -#define qtn_drm_prev_rights_set "Unable to select.Object can only be viewed" - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/rom/ScreenSaverAnimPlugin.iby --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/rom/ScreenSaverAnimPlugin.iby Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2005 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: IBY file for ScreenSaverAnimPlugin -* -*/ - - - - -#ifndef __SCREENSAVERANIMPLUGIN_IBY -#define __SCREENSAVERANIMPLUGIN_IBY - -// File empty on 3.0, or if S60 native browser is not used -#ifndef __SERIES60_30__ -#ifdef __SERIES60_NATIVE_BROWSER -ECOM_PLUGIN(ScreenSaverAnimPlugin.dll,10207447.rsc) -#endif -#endif - -#endif // __SCREENSAVERANIMPLUGIN_IBY -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/rom/ScreenSaverAnimPluginResources.iby --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/rom/ScreenSaverAnimPluginResources.iby Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2005 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: IBY file for ScreenSaverAnimPlugin -* -*/ - - - - -#ifndef __SCREENSAVERANIMPLUGINRESOURCES_IBY -#define __SCREENSAVERANIMPLUGINRESOURCES_IBY - -// File empty on 3.0, also if S60 browser is not used (media plugins not present) -#ifndef __SERIES60_30__ -#ifdef __SERIES60_NATIVE_BROWSER -data=DATAZ_\RESOURCE_FILES_DIR\ScreenSaverAnimPlugin.rsc RESOURCE_FILES_DIR\ScreenSaverAnimPlugin.rsc -#endif -#endif - -#endif // __SCREENSAVERANIMPLUGINRESOURCES_IBY -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/NpnImplementation.cpp --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/NpnImplementation.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,286 +0,0 @@ -/* -* Copyright (c) 2005 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: This file defines the functions -* _NPNetscapeFuncs of Browser's Netscape API -* -*/ - - - - - -#include "NpnImplementation.h" - - -// ----------------------------------------------------------------------------- -// NpnGetUrl -// -// Requests the associated pluginInst to load the given url. -// ----------------------------------------------------------------------------- -// - NPError NpnGetUrl( NPP /*aInstance*/, const TDesC& /*aUrl*/, - const TDesC* /*aWindowType*/ ) - { - return NPERR_GENERIC_ERROR; - } - -// ----------------------------------------------------------------------------- -// NpnPostUrl -// -// Requests the associated pluginInst to POST to the given url. -// ----------------------------------------------------------------------------- -// - NPError NpnPostUrl( NPP /*aInstance*/, const TDesC& /*aUrl*/, - const TDesC* /*aWindowType*/, - const TDesC& /*aBuf*/, NPBool /*aFile*/ ) - { - return NPERR_GENERIC_ERROR; - } - -// ----------------------------------------------------------------------------- -// NpnRequestRead -// -// Unsupported. -// ----------------------------------------------------------------------------- -// - NPError NpnRequestRead( NPStream* /*aStream*/, NPByteRange* /*aRangeList*/ ) - { - // This function is not supported - return NPERR_GENERIC_ERROR; - } - -// ----------------------------------------------------------------------------- -// NpnNewStream -// -// Unsupported. -// ----------------------------------------------------------------------------- -// - NPError NpnNewStream( NPP /*aInstance*/, NPMIMEType /*aType*/, - const TDesC* /*aWindowType*/, NPStream** /*aStream*/ ) - { - // This function is not supported. - // It is specifically intended to create a new Browser window - return NPERR_GENERIC_ERROR; - } - -// ----------------------------------------------------------------------------- -// NpnWrite -// -// Unsupported. -// ----------------------------------------------------------------------------- -// - TInt32 NpnWrite( NPP /*aInstance*/, NPStream* /*aStream*/, - TInt32 /*aLen*/, void* /*aBuffer*/ ) - { - // This function is not supported. - // It is specifically intended to create a new Browser window - return NPERR_GENERIC_ERROR; - } - -// ----------------------------------------------------------------------------- -// NpnDestroyStream -// -// Unsupported. -// ----------------------------------------------------------------------------- -// - NPError NpnDestroyStream( NPP /*aInstance*/, NPStream* /*aStream*/, - NPReason /*aReason*/ ) - { - // This function is not supported. - // It is specifically intended to create a new Browser window - return NPERR_GENERIC_ERROR; - } - -// ----------------------------------------------------------------------------- -// NpnStatus -// -// Allows a plugin to report its current status to the associated PluginInst. -// ----------------------------------------------------------------------------- -// - void NpnStatus( NPP /*aInstance*/, const TDesC& /*aMessage*/ ) - { - } - -// ----------------------------------------------------------------------------- -// NpnUAgent -// -// Returns the user agent of the Series 60 Browser. -// ----------------------------------------------------------------------------- -// - const TDesC* NpnUAgent( NPP /*aInstance*/ ) - { - return NULL; - } - -// ----------------------------------------------------------------------------- -// NpnMemAlloc -// -// Allocates a chunk of memory on the behalf of the plugin. -// ----------------------------------------------------------------------------- -// - void* NpnMemAlloc( uint32 aSize ) - { - if ( aSize ) - { - return User::Alloc( aSize ); - } - return NULL; - } - -// ----------------------------------------------------------------------------- -// NpnMemFree -// -// Deallocates a chunk of memory on the behalf of the plugin. -// ----------------------------------------------------------------------------- -// - void NpnMemFree( void* aPtr ) - { - User::Free( aPtr ); - } - -// ----------------------------------------------------------------------------- -// NpnMemFlush -// -// Unsupported. -// ----------------------------------------------------------------------------- -// - uint32 NpnMemFlush( uint32 /*aSize*/ ) - { - // This function is not supported - return NPERR_GENERIC_ERROR; - } - -// ----------------------------------------------------------------------------- -// NpnReloadPlugins -// -// Causes the PluginHandler to scan for new plugins and reloads the current -// page if aReloadPages is true. -// ----------------------------------------------------------------------------- -// - void NpnReloadPlugins( NPBool /*aReloadPages*/ ) - { - //This is currently not supported since CPluginHandler is non static - } - -// ----------------------------------------------------------------------------- -// NpnGetJavaEnv -// -// Unsupported. -// ----------------------------------------------------------------------------- -// - JRIEnv* NpnGetJavaEnv() - { - // This function is not supported - return NULL; - } - -// ----------------------------------------------------------------------------- -// NpnGetJavaPeer -// -// Unsupported. -// ----------------------------------------------------------------------------- -// - jref NpnGetJavaPeer( NPP /*aInstance*/ ) - { - // This function is not supported - return NULL; - } - -// ----------------------------------------------------------------------------- -// NpnGetUrlNotify -// -// Requests the associated PluginInst to load the given url. The plugin is -// notified when the request completes. -// ----------------------------------------------------------------------------- -// - NPError NpnGetUrlNotify( NPP /*aInstance*/, const TDesC& /*aUrl*/, - const TDesC* /*aWindowType*/, void* /*aNotifyData*/ ) - { - return NPERR_GENERIC_ERROR; - } - -// ----------------------------------------------------------------------------- -// NpnPostUrlNotify -// -// Requests the associated PluginInst to POST to the given url. The plugin is -// notified when the request completes. -// ----------------------------------------------------------------------------- -// - NPError NpnPostUrlNotify( NPP /*aInstance*/, const TDesC& /*aUrl*/, - const TDesC* /*aWindowType*/, const TDesC& /*aBuf*/, - NPBool /*aFile*/, void* /*aNotifyData*/ ) - { - return NPERR_GENERIC_ERROR; - } - -// ----------------------------------------------------------------------------- -// NpnGetValue -// -// Query the associated PluginInst for information. -// ----------------------------------------------------------------------------- -// - NPError NpnGetValue( NPP /*aInstance*/, NPNVariable /*aVariable*/, - void* /*aRetValue*/ ) - { - return NPERR_GENERIC_ERROR; - } - -// ----------------------------------------------------------------------------- -// NpnSetValue -// -// Set a value on the associated PluginInst -// ----------------------------------------------------------------------------- -// - NPError NpnSetValue( NPP /*aInstance*/, NPPVariable /*aVariable*/, - void* /*aSetValue*/ ) - { - return NPERR_GENERIC_ERROR; - } - -// ----------------------------------------------------------------------------- -// NpnInvalidateRect -// -// Unsupported. -// ----------------------------------------------------------------------------- -// - void NpnInvalidateRect( NPP /*aInstance*/, NPRect * /*aRect*/ ) - { - // This function is not supported - } - -// ----------------------------------------------------------------------------- -// NpnInvalidateRegion -// -// Unsupported. -// ----------------------------------------------------------------------------- -// - void NpnInvalidateRegion( NPP /*aInstance*/, NPRegion /*aRegion*/ ) - { - // This function is not supported - } - -// ----------------------------------------------------------------------------- -// NpnForceRedraw -// -// Unsupported. -// ----------------------------------------------------------------------------- -// - void NpnForceRedraw( NPP /*aInstance*/ ) - { - // This function is not supported - } - - -// End Of File - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPlugin.cpp --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPlugin.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1571 +0,0 @@ -/* -* Copyright (c) 2005 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: This file implements the Screen Saver Animation Plugin which -* is used by Screen Saver application to load animation -* screen savers. -* -*/ - - - - - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "ScreenSaverAnimPluginInternalCRKeys.h" -#include "ScreenSaverAnimPlugin.h" -#include "ScreenSaverAnimPluginContainer.h" -#include "ScreenSaverAnimSettingDialog.h" -#include "NpnImplementation.h" -#include "ScreenSaverAnimPluginHelper.h" - -// Constants -#ifdef SCREENSAVER_LOG_ENABLED -const TInt KMaxBufLen = 64; -#endif -const TInt KSixteenBytes = 128; -const TInt KUrlMaxLen = 1024; - -// Animation Timeout values -const TInt KMinDurationValue = 1; -const TInt KMaxDurationValue = 60; -const TInt KDefaultDurationValue = 5; - -// Backlight Values -const TInt KMinBackLightValue = 0; -const TInt KMaxBackLightValue = 30; -const TInt KDefaultBackLightValue = 0; - -const TInt KScreensaverAnimPluginInterfaceUid = 0x102750CB; - - -_LIT( KResourceFileName, "Z:ScreenSaverAnimPlugin.rsc" ); - - -CScreenSaverAnimSettingObject::CScreenSaverAnimSettingObject() - { - iAnimationTimeout = KDefaultDurationValue; - iLightsTimeout = KDefaultBackLightValue; - } -// ============================ MEMBER FUNCTIONS ============================= - - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::NewL -// --------------------------------------------------------------------------- -// -CScreenSaverAnimPlugin* CScreenSaverAnimPlugin::NewL() - { - CScreenSaverAnimPlugin* self = new ( ELeave ) CScreenSaverAnimPlugin; - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ---------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::~CScreenSaverAnimPlugin -// ---------------------------------------------------------------------------- -// -CScreenSaverAnimPlugin::~CScreenSaverAnimPlugin() - { - if ( iResourceOffset != 0 ) - { - iEikEnv->DeleteResourceFile( iResourceOffset ); - } - UnregisterForDrmExpiry(); - NotifyCenrepChangeCancel(); - UnInitializeCenRep(); - - // Final place to delete plug-in. Plug-in is deleted here - // if plug-in notices runtime error. - SetPluginDeleted(); - - delete iDrmHelper; - delete iSettingObject; - delete iScreensaverName; - } - - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::InitializeL -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::InitializeL( MScreensaverPluginHost *aHost ) - { - - if ( !aHost ) - { - return KErrCancel; - } -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg, "InitializeL called " ); - PrintDebugMsg( msg ); -#endif - - iScreenSaverHost = aHost; - iScreenSaverHost->UseRefreshTimer( EFalse ); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( cenrepmsg, "before NotifyCenrepChangeL" ); - PrintDebugMsg( cenrepmsg ); -#endif - - NotifyCenrepChangeL(); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( cenrepmsg1, "After NotifyCenrepChangeL" ); - PrintDebugMsg( cenrepmsg1 ); -#endif - - iScreenSaverHost->OverrideStandardIndicators(); - - iScreenSaverHost->ExitPartialMode(); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( FindPluginLmsg, "before FindPluginL" ); - PrintDebugMsg( FindPluginLmsg ); -#endif - - TRAPD( err, FindPluginL( iSettingObject->iFileName ) ) - - if ( err != KErrNone ) - { - iScreenSaverHost->RevertToDefaultSaver(); - return err; - } - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( FindPluginLmsg1, "After FindPluginL" ); - PrintDebugMsg( FindPluginLmsg1 ); -#endif - - return KErrNone; - - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::Draw -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::Draw(CWindowGc& /*aGc*/) - { - return KErrNone; - } -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::SetWindow -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::SetWindow( CCoeControl* aParent ) - { - - iParentControl = aParent; - NPWindow window; - TInt ret = KErrNone; - - window.window = STATIC_CAST( MPluginAdapter*, this ); - iNPPinstance->ndata = STATIC_CAST( MPluginAdapter*, this ); - window.x = 0; /* Position of top left corner relative */ - window.y = 0; /* to a netscape page.*/ - - if ( aParent ) - { - window.width = aParent->Rect().Width(); /* Max window size */ - window.height = aParent->Rect().Height(); - window.type = NPWindowTypeDrawable; - } - - if ( iPluginFuncs && !iPluginFuncs->setwindow( iNPPinstance, &window ) ) - { - ret = KErrNone; - } - else - { - ret = KErrGeneral; - } - return ret; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::Name -// ----------------------------------------------------------------------------- -// -const TDesC16& CScreenSaverAnimPlugin::Name() const - { - if ( iScreensaverName ) - { - return *iScreensaverName; - } - else - { - return KNullDesC; - } - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::Capabilities -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::Capabilities() - { - return EScpCapsConfigure; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::PluginFunction -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::PluginFunction( - TScPluginCaps aFunction, - TAny* /*aParam*/) - { - if ( aFunction == EScpCapsSelectionNotification - || aFunction == EScpCapsPreviewNotification ) - { - _LIT( msg, "Plugin function called Sel Notify" ); - PrintDebugMsg( msg ); - - if ( iSettingObject->iFileName.Length() == 0 || UpdateFileName() ) - { - // File is not configured yet or deleted/renamed, - // pop the settings dialog - TInt err = KErrNone; - TRAP( err, PopSettingsDialogL() ); - return err; - } - else - { - return KErrNone; - } - } - if ( aFunction == EScpCapsConfigure ) - { - _LIT( msg, "Plugin function called Configure" ); - PrintDebugMsg( msg ); - UpdateFileName(); - TInt err = KErrNone; - TRAP( err, PopSettingsDialogL() ); - return err; - } - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::HandleScreensaverEventL -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::HandleScreensaverEventL( - TScreensaverEvent aEvent, - TAny* /*aData*/ ) - { - - if ( aEvent == EScreensaverEventDisplayChanged ) - { - // Display Changed is called when there is a change in the size - // of the window and when the parent control is set for the - // first time. - TScreensaverDisplayInfo* displayInfo = new( ELeave ) - TScreensaverDisplayInfo; - displayInfo->iSize = sizeof( TScreensaverDisplayInfo ); - iScreenSaverHost->DisplayInfo( displayInfo ); - iParentControl = displayInfo->iParent; - delete displayInfo; - } - - if ( aEvent == EScreensaverEventStopping ) - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( KStopEventMsg, "Stop Event" ); - PrintDebugMsg( KStopEventMsg ); -#endif - - // Delete the Plugin - SendEndEvent(); - DeletePlugin(); - } - - if ( aEvent == EScreensaverEventStarting ) - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( KStartEventMsg, "Start Event" ); - PrintDebugMsg( KStartEventMsg ); -#endif - // Check for drm rights - // If the file is not valid, suspend and return - if ( iDrmHelper ) - { - TBool yes = EFalse; - iDrmHelper->CanSetAutomated( - iSettingObject->iFileName, yes ); - if ( !yes ) - { - iScreenSaverHost->RevertToDefaultSaver(); - return KErrNotFound; - } - } - - if ( iScreenSaverHost ) - { - iScreenSaverHost->RequestTimeout( - iSettingObject->iAnimationTimeout ); - } - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( KStartMsg, "Starting" ); - PrintDebugMsg( KStartMsg ); -#endif - - // Reset plugin creation error - // The plugin cannot leave or return error - // The plugin sets the error using pluginFinishedL - iPluginError = KErrNone; - // Create the plugin - TRAPD( err,CreatePluginL() ); - if ( err != KErrNone ) - { - DeletePlugin(); - return err; - } - - // Check whether the plugin has - // reported any error using PluginFinishedL - if ( iPluginError ) - { - SetPluginDeleted(); - return iPluginError; - } - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( KStartedMsg, "Started" ); - PrintDebugMsg( KStartedMsg ); -#endif - - // send an event to plugins - if ( iPluginFuncs ) - { - NPAnimationEvent event; - event = NPStartAnimation; - iPluginFuncs->setvalue( iNPPinstance, - ( NPNVariable )NPNScreenSaverAnimationEvent, - &event ); - } - - // Request lights only if set - otherwise it will turn off lights - // (e.g. in preview). Not nice. - TInt nLights = iSettingObject->iLightsTimeout; - - if ( nLights > 0 ) - { - iScreenSaverHost->RequestLights( nLights ); - } - } - - if ( aEvent == EScreensaverEventTimeout ) - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( KTimeoutEventMsg, "Timeout Event" ); - PrintDebugMsg( KTimeoutEventMsg ); -#endif - // Delete the Plugin - SendEndEvent(); - DeletePlugin(); - iScreenSaverHost->Suspend( -1) ; - } - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::GetAnimSettings -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::GetAnimSettings() - { - // Read the file last, since if it is missing the reading will be - // stopped and settings all wrong - TInt err = iAnimPluginSession->Get( KScreenSaverAnimationTimeOut, - iSettingObject->iAnimationTimeout ); - - if ( iSettingObject->iAnimationTimeout < KMinDurationValue || - iSettingObject->iAnimationTimeout > KMaxDurationValue ) - { - // Out of range set it to default - iSettingObject->iAnimationTimeout = KDefaultDurationValue; - } - - if ( err != KErrNone ) - { - return err; - } - - err = iAnimPluginSession->Get( KScreenSaverLightsTimeOut, - iSettingObject->iLightsTimeout ); - - if ( iSettingObject->iLightsTimeout < KMinBackLightValue || - iSettingObject->iLightsTimeout > KMaxBackLightValue ) - { - // Out of range set it to default - iSettingObject->iLightsTimeout = KDefaultBackLightValue; - } - - if ( err != KErrNone ) - { - return err; - } - - // read the file from central repository and return - err = iAnimPluginSession->Get( KScreenSaverAnimatedFileName, - iSettingObject->iFileName ); - - if ( err != KErrNone ) - { - return err; - } - - if ( !BaflUtils::FileExists( iEikEnv->FsSession(), - iSettingObject->iFileName ) ) - { - return KErrNotFound; - } - - TBool yes = EFalse; - if ( iDrmHelper ) - { - TInt err = iDrmHelper->CanSetAutomated( - iSettingObject->iFileName, yes ); - if ( !yes ) - { - return KErrNotFound; - } - } - - return err; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::SetAnimSettings -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::SetAnimSettings() const - { - - TInt err = KErrNone; - err = iAnimPluginSession->Set( KScreenSaverAnimatedFileName, - iSettingObject->iFileName ); - if ( err != KErrNone ) - { - return err; - } - err = iAnimPluginSession->Set( KScreenSaverAnimationTimeOut, - iSettingObject->iAnimationTimeout ); - - if ( err != KErrNone ) - { - return err; - } - - err = iAnimPluginSession->Set( KScreenSaverLightsTimeOut, - iSettingObject->iLightsTimeout ); - - return err; - - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::RegisterForDrmExpiry -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::RegisterForDrmExpiry() - { - TInt err = iDrmHelper->SetAutomatedType( - CDRMHelper::EAutomatedTypeScreenSaver ); - if ( err == KErrNone ) - { - return iDrmHelper->SetAutomatedSilent( iSettingObject->iFileName, - ETrue ); - } - else - { - return err; - } - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::UnregisterForDrmExpiry -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::UnregisterForDrmExpiry() - { - if ( iDrmHelper ) - { - iDrmHelper->SetAutomatedType( - CDRMHelper::EAutomatedTypeScreenSaver ); - return iDrmHelper->RemoveAutomated( iSettingObject->iFileName ); - } - else - { - return KErrNone; - } - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::ReadDrmNotification -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::ReadDrmNotification( TDes8& aString ) - { - return iDrmSession->Get( KDRMHelperServerNotification, aString ); - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::ProcessDrmNotificationL -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::ProcessDrmNotificationL() - { - - TInt size = KSixteenBytes; - HBufC8* buf = HBufC8::NewLC( size ); - TPtr8 bufPtr = buf->Des(); - - TInt error = ReadDrmNotification( bufPtr ); - while ( error == KErrTooBig ) - { - size += KSixteenBytes; - CleanupStack::PopAndDestroy( buf ); // buf - buf = HBufC8::NewLC( size ); - bufPtr = buf->Des(); - error = ReadDrmNotification( bufPtr ); - } - - TUint8 count = ( TUint8 )( *( buf->Ptr() ) ); - TChar type = ( TUint8 )( *( buf->Ptr() + 1 ) ); - - TUint8 permType = ( TUint8 )( *( buf->Ptr() + 2 ) ); - TUint8 autoType = ( TUint8 )( *( buf->Ptr() + 3 ) ); - - TPtr8 ptr( ( TUint8* ) ( buf->Ptr() + 4 ) , buf->Length() - 5 , buf->Length() - 5 ); - HBufC8* content = HBufC8::NewLC( ptr.Length() ); - *content = ptr; - - TBool matched = CheckContentIdL( iSettingObject->iFileName, *content ); - - CleanupStack::PopAndDestroy( content ); - CleanupStack::PopAndDestroy( buf ); - - if ( !matched ) - { - return; - } - - if ( type == 'E') - { - if ( count == 0 ) - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg, "First Notification" ); - PrintDebugMsg( msg ); -#endif - - // Expire screen saver here..., no note - if ( iScreenSaverHost ) - { - SendEndEvent(); - // Delete the Plugin - DeletePlugin(); - iScreenSaverHost->Suspend(-1); - } - } - else - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg, "Second Notification" ); - PrintDebugMsg( msg ); -#endif - - // Show expiration notes... - iDrmHelper->SetAutomatedType( - CDRMHelper::EAutomatedTypeScreenSaver ); - iDrmHelper->CheckRightsAmountL( iSettingObject->iFileName ); - UnregisterForDrmExpiry(); - } - } - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::FindAndStartPluginL -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::FindAndStartPluginL( const TDesC& aFileName, - TBool aCheckFileMode ) - { - FindPluginL( aFileName ); - CreatePluginL( aCheckFileMode ); - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::FindPluginL -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::FindPluginL( const TDesC& aFileName ) - { - - RApaLsSession ls; - CleanupClosePushL( ls ); - TUid dummyUid( KNullUid ); - TDataType dataType; - User::LeaveIfError( ls.Connect() ); - User::LeaveIfError( ls.AppForDocument( aFileName, - dummyUid, dataType ) ); - CleanupStack::PopAndDestroy( &ls ); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg, "before FindAnimPluginL" ); - PrintDebugMsg( msg ); -#endif - - iPluginUID = FindAnimPluginL( dataType.Des() ); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg1, "After FindAnimPluginL" ); - PrintDebugMsg( msg1 ); -#endif - - if ( iPluginUID == KNullUid ) - { - User::Leave( KErrNotFound ); - } - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( registermsg, "Before RegisterForDrmExpiry" ); - PrintDebugMsg( registermsg ); -#endif - - RegisterForDrmExpiry(); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( registermsg1, "After RegisterForDrmExpiry" ); - PrintDebugMsg( registermsg1 ); -#endif - - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::CreatePluginL -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::CreatePluginL( TBool aCheckFileMode ) - { - - /* Create the Netscape plugin for the animation format. - * Allocate memory for the plugin functions array. This - * would be filled by the netscape plugin. - * Initialize the plugin. - */ - - iPluginFuncs = - ( NPPluginFuncs* ) User::AllocL( sizeof( NPPluginFuncs ) ); - Mem::FillZ( ( void* )iPluginFuncs, sizeof( NPPluginFuncs ) ); - - iNPPinstance = ( NPP ) User::AllocL( sizeof( NPP_t ) ); - Mem::FillZ( ( void* )iNPPinstance, sizeof( NPP_t ) ); - - iPluginType = ( HBufC8* )User::AllocL( sizeof( NPMIMEType ) ); - Mem::FillZ( ( void* )iPluginType, sizeof( NPMIMEType ) ); - - TRAPD( err, iPluginInterface = - CEcomBrowserPluginInterface::CreatePluginL( iPluginUID, - ( NPNetscapeFuncs* ) ( &NpnImplementationFuncs ), - iPluginFuncs ) ); - - if ( err != KErrNone ) - { - SetPluginDeleted(); - User::Leave( err ); - } - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( newpmsg, "Before newp" ); - PrintDebugMsg( newpmsg ); -#endif - - // Create an instance. - // Flash Plugin needs the NPInteractionMode in the newp - - CDesCArrayFlat* attributeNames = new( ELeave ) CDesCArrayFlat( 1 ); - CDesCArrayFlat* attributeValues = new( ELeave ) CDesCArrayFlat( 1 ); - attributeNames->AppendL( KAttributeInteractionMode ); - attributeValues->AppendL( KValueScreensaver ); - - User::LeaveIfError( iPluginFuncs->newp( *iPluginType, iNPPinstance, - 0 /*mode*/, - attributeNames /*argn*/, - attributeValues /*argv*/, - NULL /*saved*/ ) ); - - delete attributeNames; - delete attributeValues; - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( newpmsg1, "After newp" ); - PrintDebugMsg( newpmsg1 ); -#endif - - // Set ScreenSaver Mode - if ( iPluginFuncs ) - { - NPInteractionMode mode; - mode = NPScreenSaverMode; - iPluginFuncs->setvalue( iNPPinstance, - ( NPNVariable )NPNInteractionMode, - &mode ); - } - - if ( !aCheckFileMode ) - { - SetWindow( iParentControl ); - AsFile(); - } - - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::FindAnimPluginL -// ----------------------------------------------------------------------------- -// -TUid CScreenSaverAnimPlugin::FindAnimPluginL( const TDesC& aDataType ) - { - - TUid impUid = KNullUid; - - TResourceReader reader; - iEikEnv->CreateResourceReaderLC( reader, R_MIMETYPE_SPECIFIC_PLUGIN_ARRAY ); - TInt countResource = reader.ReadInt16(); - - for ( TInt i = 0; i < countResource; i++ ) - { - HBufC* newMimeTypeEntry = reader.ReadHBufCL(); - TPtr mimePtr( newMimeTypeEntry->Des() ); - impUid.iUid = reader.ReadInt32(); - if ( newMimeTypeEntry->Compare( aDataType ) == 0 ) - { - delete newMimeTypeEntry; - break; - } - else - { - delete newMimeTypeEntry; - } - } - CleanupStack::PopAndDestroy(); // reader - - if ( CheckIfPluginPresentL( KBrowserPluginInterfaceUid, impUid ) || - CheckIfPluginPresentL( TUid::Uid( KScreensaverAnimPluginInterfaceUid ),impUid ) ) - { - return impUid; - } - - return KNullUid; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::CheckIfPluginPresentL -// ----------------------------------------------------------------------------- -// -TBool CScreenSaverAnimPlugin::CheckIfPluginPresentL( TUid aInterfaceUid , - TUid aImpUid ) - { - TBool ret( EFalse ); - RImplInfoPtrArray animPluginList; - - REComSession::ListImplementationsL( aInterfaceUid, animPluginList ); - - const TInt count = animPluginList.Count(); - - for ( TInt i = 0; i < count; i++ ) - { - CImplementationInformation* implInfo = animPluginList[i]; - if ( aImpUid == implInfo->ImplementationUid() ) - { - ret = ETrue; - break; - } - } - animPluginList.ResetAndDestroy(); - return ret; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::ParseMimeStringL -// ----------------------------------------------------------------------------- -// -TBool CScreenSaverAnimPlugin::ParseMimeStringL( const TDesC& aMIMEDescription, - const TDesC& aDataType ) - { - - if ( aMIMEDescription.Length() == 0 || - aDataType.Length() == 0 ) - { - return EFalse; - } - - _LIT( KPattern1Ptr, ",;|" ); - _LIT( KPattern2Ptr, ";|" ); - - TUint end( aMIMEDescription.Length() ); - TUint i( 0 ); - TUint marker( 0 ); - TUint16 mimeSeparator( '|' ); - TUint fieldSeparator( ';' ); - HBufC* newMimeTypeEntry = NULL; - - // Parse the aMIMEDescription string to populate the mimeTypes - for ( ; i < end; ) // outer for loop - { - // Search until end of buffer or match one of the delimiters ';' or '|'. - // We are looking for the mimeType, ie "text/html", - // "application/pdf", etc. - for ( ; ( i < end ) && ( KPattern2Ptr().Locate( ( aMIMEDescription )[i] ) == - KErrNotFound ); i++ ) - { - // Walking the aMIMEDescription string - } - - if ( i > marker ) - { - // Create new mimeType entry, the first entry is mimeType - newMimeTypeEntry = HBufC::NewLC( i - marker ); - TPtr mimePtr( newMimeTypeEntry->Des() ); - mimePtr.Copy( aMIMEDescription.Mid( marker, i - marker ) ); - if ( newMimeTypeEntry->Compare( aDataType ) == 0 ) - { - CleanupStack::PopAndDestroy( newMimeTypeEntry ); //newMimeTypeEntry - return ETrue; - } - CleanupStack::PopAndDestroy( newMimeTypeEntry ); //newMimeTypeEntry - } - - // Are we at the end of the supported mime string - if ( i == end ) - { - // This break with i=end means we leave outer for loop - break; - } - - marker = ++i; - if ( ( aMIMEDescription )[i - 1] == mimeSeparator ) - { - // Found a mime separator '|', get next supported mime - continue; - } - - // There can be multiple mimeFileExtentions per mimeType - for ( ; ( i < end ); ) // inner for loop - { - // Search until end of buffer or match one of the delimiters - // ';' or ',' or '|'. - for ( ; (i < end) && ( KPattern1Ptr().Locate( ( aMIMEDescription )[i] ) == - KErrNotFound ); i++ ) - { - // Walking the aMIMEDescription string - } - - // Are we at the end of the supported mime string - if ( i == end ) - { - // This break means we leave the inner loop, - // and with i=end means - // we leave the outer loop - break; - } - - marker = ++i; - if ( ( aMIMEDescription )[i - 1] == mimeSeparator ) - { - // Found a mime separator '|', get next supported mime - break; - } - - if ( ( aMIMEDescription )[i - 1] == fieldSeparator ) - { - // Found a field separator ';', get the mimeDescription. - // Search until end of buffer or match one of the - // delimiters ';' or '|'. - for ( ; (i < end) && - ( KPattern2Ptr().Locate( ( aMIMEDescription )[i] ) == - KErrNotFound ); i++ ) - { - // Walking the aMIMEDescription string - } - - - // Are we at the end of the supported mime string - if ( i == end ) - { - // This break means we leave the inner loop, - // and with i=end means - // we leave the outer loop - break; - } - - marker = ++i; - // Make sure we start at the next mime, - // after we found the mimeDescription. - // We are handling a mime string with an extra semi-colon(s), - // ie "...mimeDescription1;|mimeType2 - for (; (i < end) && - ((aMIMEDescription)[i-1] != mimeSeparator); i++) - { - // Walking the aMIMEDescription string - } - - // Leave the inner loop and look for the next mime - break; - } // end of if fieldSeparator aka get mimeDescription - - // If we get here, we have another mimeFileExtension. - // Continue on the - // inner loop to find additional mimeFileExtensions. - - } // end of inner for (;idestroy( iNPPinstance, NULL ); - } - SetPluginDeleted(); - } -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::SetPluginDeleted -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::SetPluginDeleted() - { - - delete iPluginType; - iPluginType = NULL; - - delete iPluginFuncs; - iPluginFuncs = NULL; - - delete iNPPinstance; - iNPPinstance = NULL; - - delete iPluginInterface; - iPluginInterface = NULL; - - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::AsFile -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::AsFile() - { - - // Set the File-name to the plugin. - // Note that the SVG-T plugin atleast wants setwindow - // to be called first - iPluginFuncs->asfile( iNPPinstance, NULL, iSettingObject->iFileName ); - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::UpdateFileName -// ----------------------------------------------------------------------------- -// -TBool CScreenSaverAnimPlugin::UpdateFileName() - { - if ( !BaflUtils::FileExists( iEikEnv->FsSession(), - iSettingObject->iFileName ) ) - { - // File is deleted now, Show empty string - iSettingObject->iFileName.Copy( KEmptyString ); - return ETrue; - } - - TBool canbeautomated( EFalse ); - - TInt res = 0; - iDrmHelper->SetAutomatedType( - CDRMHelper::EAutomatedTypeScreenSaver ); - res = iDrmHelper->CanSetAutomated( iSettingObject->iFileName, - canbeautomated ); - - if ( res || !canbeautomated ) - { - iSettingObject->iFileName.Copy( KEmptyString ); - return ETrue; - } - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::PopSettingsDialogL -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::PopSettingsDialogL() - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg, "Pop Settings Dialog" ); - PrintDebugMsg( msg ); -#endif - - // Get the Status Pane Control - CEikStatusPane* sp = iEikEnv->AppUiFactory()->StatusPane(); - - // Fetch pointer to the default navi pane control - CAknNavigationControlContainer* NaviPane = - ( CAknNavigationControlContainer* )sp->ControlL( - TUid::Uid( EEikStatusPaneUidNavi ) ); - - NaviPane->PushDefaultL( ETrue ); - - CScreenSaverAnimSettingDialog* dlg = - CScreenSaverAnimSettingDialog::NewL( this, iSettingObject ); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg1, "dlg created Call executeld" ); - PrintDebugMsg( msg1 ); -#endif - - dlg->ExecuteLD(); - - NaviPane->Pop(); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg2, "Executed dlg, write to cenrep" ); - PrintDebugMsg( msg2 ); -#endif - - User::LeaveIfError( SetAnimSettings() ); - - // Check if a file is selected - if ( iSettingObject->iFileName.Length() == 0 ) - { - // Don't Pop an error note - // Just leave - User::Leave( KErrCancel ) ; - } - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::HandleRepositoryCallBack -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::HandleRepositoryCallBack( TAny* aPtr ) - { - STATIC_CAST( CScreenSaverAnimPlugin*, aPtr )->HandleSettingsChange( aPtr ); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::HandleRepositoryCallBack -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::HandleDrmNotification( TAny* aPtr ) - { - TRAPD( err, STATIC_CAST( CScreenSaverAnimPlugin*, aPtr ) - ->ProcessDrmNotificationL() ); - return err; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::HandleSettingsChange -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::HandleSettingsChange( TAny* /*aPtr*/ ) - { - if ( iScreensaverRepositoryWatcher ) - { - if ( iScreensaverRepositoryWatcher->ChangedKey() == - KScreenSaverAnimationTimeOut ) - { - // Update the iSettingObject - iAnimPluginSession->Get( KScreenSaverAnimationTimeOut, - iSettingObject->iAnimationTimeout ); - } - if ( iScreensaverRepositoryWatcher->ChangedKey() == - KScreenSaverLightsTimeOut ) - { - // Update the iSettingObject - iAnimPluginSession->Get( KScreenSaverLightsTimeOut, - iSettingObject->iLightsTimeout ); - } - - if ( iScreensaverRepositoryWatcher->ChangedKey() == - KScreenSaverAnimatedFileName ) - { - UnregisterForDrmExpiry(); - iAnimPluginSession->Get( KScreenSaverAnimatedFileName, - iSettingObject->iFileName ); - // Find the Plugin for the new file - TInt err; - TRAP( err, FindPluginL( iSettingObject->iFileName ) ); - if ( err != KErrNone ) - { - NotifyCenrepChangeCancel(); - iScreenSaverHost->RevertToDefaultSaver(); - return; - } - } - } - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::InitializeCenRepL -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::InitializeCenRepL() - { - - TRAPD( err, iAnimPluginSession = - CRepository::NewL( KCRUidScreenSaverAnimPlugin ) ); -#ifdef SCREENSAVER_LOG_ENABLED - TBuf buffer; - _LIT( msg, "After SS Cenrep Init : %d" ); - buffer.Format( msg, err ); - PrintDebugMsg( buffer ); -#endif - User::LeaveIfError( err ); - - TRAPD( err1, iDrmSession = CRepository::NewL( KCRUidDRMHelperServer ) ); -#ifdef SCREENSAVER_LOG_ENABLED - TBuf buffer1; - _LIT( msg1, "After DRM Cenrep Init : %d" ); - buffer1.Format( msg1, err1 ); - PrintDebugMsg( buffer1 ); -#endif - User::LeaveIfError( err1 ); - - } -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::NotifyCenrepChangeL -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::NotifyCenrepChangeL() - { - - iScreensaverRepositoryWatcher = CScreensaverRepositoryWatcher::NewL( - KCRUidScreenSaverAnimPlugin, - TCallBack( HandleRepositoryCallBack, this ), - iAnimPluginSession ); - - iDrmExpiryWatcher = CScreensaverRepositoryWatcher::NewL( - KCRUidDRMHelperServer, - KDRMHelperServerNotification, - CCenRepNotifyHandler::EIntKey, - TCallBack( HandleDrmNotification, this ), - iDrmSession ); - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::NotifyCenrepChangeCancel -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::NotifyCenrepChangeCancel() - { - - delete iScreensaverRepositoryWatcher; - iScreensaverRepositoryWatcher = NULL; - - delete iDrmExpiryWatcher; - iDrmExpiryWatcher = NULL; - - } -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::UnInitializeCenRep -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::UnInitializeCenRep() - { - if ( iAnimPluginSession ) - { - delete iAnimPluginSession; - iAnimPluginSession = NULL; - } - if ( iDrmSession ) - { - delete iDrmSession; - iDrmSession = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::CScreenSaverAnimPlugin -// ----------------------------------------------------------------------------- -// -CScreenSaverAnimPlugin::CScreenSaverAnimPlugin(): - iParentControl( NULL ),iPluginError( KErrNone ) - { - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::ConstructL() - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg, "ConstructL of ScreenSaverAnimPlugin" ); - PrintDebugMsg( msg ); -#endif - - // Find which drive this DLL is installed. - TFileName fileName; - - // Get the full resource file - TParse lParse; - - // Add the resource dir - lParse.Set( KResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL ); - - // Get the filename with full path - fileName = lParse.FullName(); - - iEikEnv = CEikonEnv::Static(); - - BaflUtils::NearestLanguageFile( iEikEnv->FsSession(), fileName ); //for - // localization - - iDrmHelper = CDRMHelper::NewL( *iEikEnv ); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg1, "Before Cenrep Init " ); - PrintDebugMsg( msg1 ); -#endif - - InitializeCenRepL(); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg2, "After Cenrep Init " ); - PrintDebugMsg( msg2 ); -#endif - - iSettingObject = new( ELeave ) CScreenSaverAnimSettingObject; - - GetAnimSettings(); - - iResourceOffset = iEikEnv->AddResourceFileL( fileName ); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg3, "ConstructL end " ); - PrintDebugMsg( msg3 ); -#endif - - // Load localised name of screensaver to be returned for - // Themes app in Name() query - iScreensaverName = iEikEnv->AllocReadResourceL( R_SANIM_SCREENSAVER_NAME ); - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::SendEndEvent -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::SendEndEvent() - { - NPAnimationEvent event; - event = NPEndAnimation; - if ( iPluginFuncs ) - { - return iPluginFuncs->setvalue( iNPPinstance, - ( NPNVariable )NPNScreenSaverAnimationEvent, - &event ); - } - return KErrNone; - - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::CheckFileValidity -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimPlugin::CheckFileValidityL( const TDesC& aFileName ) - { - FindAndStartPluginL( aFileName , ETrue /* Check File Mode */); - NPCheckFile checkFile; - checkFile.fileValidityCheckError = KErrNone; - checkFile.fileName = HBufC::NewL( aFileName.Length() ); - checkFile.fileName->Des().Copy( aFileName ); - - if ( iPluginFuncs ) - { - iPluginFuncs->getvalue( iNPPinstance, - ( NPPVariable )NPPCheckFileIsValid, - &checkFile ); - } - delete checkFile.fileName; - DeletePlugin(); - return checkFile.fileValidityCheckError; - - } - -/* MPluginAdapter Interface functions, The plugins call - * these back - */ -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::GetVersion -// ----------------------------------------------------------------------------- -// -TUint16 CScreenSaverAnimPlugin::GetVersion() - { - return 0; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::PluginConstructedL -// Called when the plug-in has completed its creation. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::PluginConstructedL( CCoeControl* - /*aPluginControl*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::PluginFinishedL -// Called when the plug-in has completed its creation. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::PluginFinishedL() - { - TInt error; - iPluginFuncs->getvalue( iNPPinstance, - ( NPPVariable )NPPScreenSaverGetLastError, - &error ); - -#ifdef SCREENSAVER_LOG_ENABLED - TBuf buffer1; - _LIT( msg, "Plugin finishedL Error: %d" ); - buffer1.Format( msg, error ); - PrintDebugMsg( buffer1 ); -#endif - - if ( iScreenSaverHost ) - { - if ( error != KErrNone ) - { - iPluginError = error; - // Plugin has encountered an error - iScreenSaverHost->RevertToDefaultSaver(); - } - } - } - -#ifndef __SERIES60_30__ -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::OpenUrlL -// Called by the plug-in to open a URL in the parent frame. -// This function is not implemented in Series 60. It is supported -// in Series 80 and in the Nokia 7710 smartphone -// ----------------------------------------------------------------------------- -// - -void CScreenSaverAnimPlugin::OpenUrlL( const TDesC& /* aUrl */ ) - { - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::OpenUrlInTargetWindowL -// Called by the plug-in to open a URL in a named window or frame. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::OpenUrlInTargetWindowL( const TDesC& /* aUrl */, - const TDesC& /* aNewTargetWindowName */ ) - { - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::HasNavigationHistoryPrevious -// Specifies whether or not the frame has a previous navigation history item. -// ----------------------------------------------------------------------------- -// -TBool CScreenSaverAnimPlugin::HasNavigationHistoryPrevious() const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::LoadNavigationHistoryPreviousL -// Informs the browser to load the next navigation history URL in its parent -// frame. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::LoadNavigationHistoryPreviousL() - { - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::HasNavigationHistoryNext -// Returns whether the frame has a next navigation history item. -// ----------------------------------------------------------------------------- -// -TBool CScreenSaverAnimPlugin::HasNavigationHistoryNext() const - { - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::LoadNavigationHistoryNextL -// Informs the browser to load the next navigation history URL in its parent -// frame. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::LoadNavigationHistoryNextL() - { - } - -#endif - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::GetParentControl -// Returns the window system level control object for the plug-in. -// ----------------------------------------------------------------------------- -// -CCoeControl* CScreenSaverAnimPlugin::GetParentControl() - { - return iParentControl; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::GetParentControlObserver -// Returns the observer for the plug-in control. -// ----------------------------------------------------------------------------- -// -MCoeControlObserver* CScreenSaverAnimPlugin::GetParentControlObserver() - { - return this; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::GetParentControlObserver -// Sets the plug-in notifier allowing the plug-in to control -// portions of the browser. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::SetPluginNotifier( MPluginNotifier* /*aNotifier*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::SetContentInteractive -// Tells the plugin adapter if plugin content can accept user interaction. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::SetContentInteractive( TBool /*aInteractive*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::HandleControlEventL -// Handles an event from an observed control.This function is called -// when a control for which this control is the observer calls -// CCoeControl::ReportEventL(). It should be implemented by the observer -// control, and should handle all events sent by controls it observes. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPlugin::HandleControlEventL( CCoeControl* /*aControl*/, - TCoeEvent /*aEventType*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPlugin::CheckContentIdL -// ----------------------------------------------------------------------------- -// -TBool CScreenSaverAnimPlugin::CheckContentIdL( const TDesC& aFileName, - TDesC8& aContentUri ) - { - - TBool matched = EFalse; - HBufC* contentURI = NULL; - HBufC8* contentURI8 = NULL; - - RFile fileHandle; - - TInt error = fileHandle.Open( iEikEnv->FsSession(), - aFileName, - EFileRead | EFileShareReadersOnly ); - if ( error != KErrNone ) - { - return matched; - } - - CleanupClosePushL( fileHandle ); - CData* content = CData::NewL( fileHandle, KDefaultContentObject, EPeek ); - CleanupStack::PopAndDestroy( &fileHandle ); - - CleanupStack::PushL( content ); - - contentURI = HBufC::NewLC( KUrlMaxLen ); - - // create attribute set - RStringAttributeSet stringAttributeSet; - CleanupClosePushL( stringAttributeSet ); - // add the attributes we are interested in - stringAttributeSet.AddL( EContentID ); - - User::LeaveIfError( content->GetStringAttributeSet( stringAttributeSet ) ); - - // pass on values of string attributes - TPtr ptr = contentURI->Des(); - error = stringAttributeSet.GetValue( EContentID, ptr ); - if ( error == KErrNone ) - { - contentURI8 = HBufC8::NewLC( contentURI->Length() ); - contentURI8->Des().Copy( contentURI->Des() ); - if ( contentURI8->Compare( aContentUri ) == 0 ) - { - matched = ETrue; - } - CleanupStack::PopAndDestroy( contentURI8 ); - } - - CleanupStack::PopAndDestroy( 2, contentURI ); // stringAttributeSet.Close() - CleanupStack::PopAndDestroy( content ); - - return matched; - } - -// End Of file. - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPluginContainer.cpp --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPluginContainer.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,614 +0,0 @@ -/* -* Copyright (c) 2005 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 ScreenSaverAnimPlugin edit list view container methods. -* -* -*/ - - - -// INCLUDE FILES - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "ScreenSaverAnimPlugin.h" -#include "ScreenSaverAnimPluginConst.h" -#include "ScreenSaverAnimPluginHelper.h" -#include "ScreenSaverAnimPluginContainer.h" -#include "ScreenSaverAnimPlugin.hrh" - -// ========================= MEMBER FUNCTIONS ================================ - CScreenSaverAnimPluginContainer* CScreenSaverAnimPluginContainer::NewLC( - CScreenSaverAnimPlugin* aCaller, - const CCoeControl* aParent, - CScreenSaverAnimSettingObject* aSettingObject ) - { - CScreenSaverAnimPluginContainer* self = - new ( ELeave ) CScreenSaverAnimPluginContainer( aCaller, - aSettingObject ); - CleanupStack::PushL( self ); - TRect rect; - self->GetNormalScreenLayoutRect( rect ); - self->ConstructL(aParent, rect ); - return self; - - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::NewL -// --------------------------------------------------------------------------- -// - -CScreenSaverAnimPluginContainer* CScreenSaverAnimPluginContainer::NewL( - CScreenSaverAnimPlugin* aCaller, - const CCoeControl* aParent, - CScreenSaverAnimSettingObject* aSettingObject ) - { - CScreenSaverAnimPluginContainer* self = - CScreenSaverAnimPluginContainer::NewLC( aCaller, - aParent, - aSettingObject ); - CleanupStack::Pop( self ); - return self; - - } - -// --------------------------------------------------------------------------- -// Constructor -// -// --------------------------------------------------------------------------- -// -CScreenSaverAnimPluginContainer::CScreenSaverAnimPluginContainer( - CScreenSaverAnimPlugin* aCaller, - CScreenSaverAnimSettingObject* aSettingObject ) - : - iSettingObject( aSettingObject ), - iCaller( aCaller ) - { - } - - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::ConstructL(const TRect& aRect) -// EPOC two phased constructor -// -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::ConstructL( const CCoeControl* aParent, - const TRect& aRect ) - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg, "In ConstructL of container" ); - PrintDebugMsg( msg ); -#endif - - CreateWindowL( aParent ); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg1, "Window Created" ); - PrintDebugMsg( msg1 ); -#endif - - BaseConstructL( aRect, NULL, R_SANIM_SETTING_LBX_ITEMS ); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg2, "Base ConstructL called" ); - PrintDebugMsg( msg2 ); -#endif - - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::BaseConstructL - -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::BaseConstructL( - const TRect& aRect, TInt /* aTitleId */, TInt aResLbxId ) - { - // Feature support should only be read once. It should not change run-time. - GetFeatureSupportL( iFeaturesSupport ); - CEikStatusPane* sp = static_cast< CAknAppUi* >( - CEikonEnv::Static()->EikAppUi() )->StatusPane(); - CAknTitlePane* title = static_cast( - sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle) ) ); - - iListBox = new( ELeave ) CAknSettingStyleListBox; - - ConstructListBoxL( aResLbxId ); - iListBox->SetContainerWindowL( *this ); - iListBox->SetRect( aRect ); - - iListBox->CreateScrollBarFrameL( ETrue ); - iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( - CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); - - SetRect( aRect ); - ActivateL(); - - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::~CScreenSaverAnimPluginContainer() -// Destructor -// --------------------------------------------------------------------------- -// -CScreenSaverAnimPluginContainer::~CScreenSaverAnimPluginContainer() - { - delete iItems; - delete iListBox; - // delete iItemArray; - } - -// --------------------------------------------------------------------------- -// Sets feature support - see screensaveranimpluginconst.h for feature list. -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::GetFeatureSupportL( - TBitFlags& aFeatureBitFlags ) const - { - CRepository* featureRep = CRepository::NewLC( KCRUidThemesVariation ); - TInt value = KErrNone; - featureRep->Get( KThemesLocalVariation, value ); - - aFeatureBitFlags.ClearAll(); - - //map value to feature flags - if ( value & KScreenSaverRemoveAnimPluginTimeout ) - { - aFeatureBitFlags.Set( EAnimPluginBacklightRemoved ); - } - - CleanupStack::PopAndDestroy( featureRep ); - } - -// --------------------------------------------------------------------------- -// Checks if feature is supported. -// --------------------------------------------------------------------------- -// -TBool CScreenSaverAnimPluginContainer::IsFeatureSupported( TInt aFeatureID ) - { - if ( ( aFeatureID >= 0 ) && ( aFeatureID < KAnimPluginMaxFeatureID ) ) - { - return iFeaturesSupport.IsSet( aFeatureID ); - } - else - { - // invalid feature value. - return EFalse; - } - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::HandleListBoxEventL -// (other items were commented in a header). -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::HandleListBoxEventL( - CEikListBox* /*aListBox*/, TListBoxEvent aEventType ) - { - switch ( aEventType ) - { - case EEventEnterKeyPressed: - case EEventItemDoubleClicked: - case EEventItemSingleClicked: - HandleListBoxSelectionL(); - break; - default: - break; - } - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::HandleListBoxSelectionL() -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::HandleListBoxSelectionL() - { - TInt index = iListBox->CurrentItemIndex(); - - switch ( index ) - { - case ESanimAnimFileNameId: - if ( !iInShowFileItem ) - { - iInShowFileItem = ETrue; - TRAPD( err,ShowFileNameItemL() ); - iInShowFileItem = EFalse; - User::LeaveIfError( err ); - } - break; - case ESanimAnimTimeoutId: - ShowAnimTimeOutItemL(); - break; - case ESanimLightsTimeoutId: - ShowLightsTimeOutItemL(); - break; - default: - break; - } - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::ConstructListBoxL( TInt aResLbxId ) -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::ConstructListBoxL( TInt aResLbxId ) - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg, "In Construct ListBoxL" ); - PrintDebugMsg( msg ); -#endif - - iListBox->ConstructL( this, EAknListBoxSelectionList ); - iItems = iCoeEnv->ReadDesC16ArrayResourceL( aResLbxId ); - iItemArray = static_cast< CDesCArray* >( iListBox->Model()->ItemTextArray() ); - iListBox->SetListBoxObserver( this ); - CreateListBoxItemsL(); - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::CreateListBoxItemsL() -// -// -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::CreateListBoxItemsL() - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg, "Make FileName" ); - PrintDebugMsg( msg ); -#endif - - MakeFileNameItem(); - iItemArray->InsertL( ESanimAnimFileNameId, iItem ); - -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg1, "Make Duration" ); - PrintDebugMsg( msg1 ); -#endif - - MakeAnimTimeOutItemL(); - iItemArray->InsertL( ESanimAnimTimeoutId, iItem ); - - if ( !IsFeatureSupported( EAnimPluginBacklightRemoved ) ) - { - #ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg2, "Make Backlight" ); - PrintDebugMsg( msg2 ); - #endif - - MakeLightsTimeOutItemL(); - iItemArray->InsertL( ESanimLightsTimeoutId, iItem ); - } - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::UpdateListBoxL( TInt aItemId ) -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::UpdateListBoxL( TInt aItemId ) - { - switch ( aItemId ) - { - case ESanimAnimFileNameId: - MakeFileNameItem(); - break; - case ESanimAnimTimeoutId: - MakeAnimTimeOutItemL(); - break; - case ESanimLightsTimeoutId: - MakeLightsTimeOutItemL(); - break; - default: - break; - } - - iItemArray->Delete( aItemId ); - iItemArray->InsertL( aItemId, iItem ); - iListBox->HandleItemAdditionL(); - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::HandleResourceChange( TInt aType ) -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::HandleResourceChange( TInt aType ) - { - CCoeControl::HandleResourceChange( aType ); - if( aType == KEikDynamicLayoutVariantSwitch ) - { - TRect mainPaneRect; - GetNormalScreenLayoutRect( mainPaneRect ); - SetRect(mainPaneRect); - - DrawNow(); - } - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::MakeFileNameItem() -// -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::MakeFileNameItem() - { - iItem = ( *iItems )[ESanimAnimFileNameId]; - TParsePtrC fileParser( iSettingObject->iFileName ); - TPtrC ptr( fileParser.NameAndExt() ); - - // Filename may be quite long - copy only the amount there's space left - iItem += ptr.Left( iItem.MaxLength() - iItem.Length() - 1 ); - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::MakeAnimTimeOutItemL() -// -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::MakeAnimTimeOutItemL() - { - iItem = ( *iItems )[ESanimAnimTimeoutId]; - - HBufC* animText = CAknSlider::CreateValueTextInHBufCL( - iSettingObject->iAnimationTimeout, - R_ANIM_TIMEOUT_SLIDER ); - - // for A&H number conversion - TPtr bufPtr = animText->Des(); - if( AknTextUtils::DigitModeQuery( AknTextUtils::EDigitModeShownToUser ) ) - { - AknTextUtils::LanguageSpecificNumberConversion( bufPtr ); - } - iItem += bufPtr; - delete animText; - - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::MakeLightTimeOutItemL() -// -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::MakeLightsTimeOutItemL() - { - iItem = ( *iItems )[ESanimLightsTimeoutId]; - - HBufC* animText = NULL; - - if ( iSettingObject->iLightsTimeout == 0 ) - { - animText = iCoeEnv->AllocReadResourceL( R_SANIM_SLIDER_OFF ); - } - else - { - animText = CAknSlider::CreateValueTextInHBufCL( - iSettingObject->iLightsTimeout, - R_LIGHT_TIMEOUT_SLIDER ); - } - - // for A&H number conversion - TPtr bufPtr = animText->Des(); - if( AknTextUtils::DigitModeQuery( AknTextUtils::EDigitModeShownToUser ) ) - { - AknTextUtils::LanguageSpecificNumberConversion( bufPtr ); - } - iItem += bufPtr; - delete animText; - - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::ShowFileNameItemL() -// -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::ShowFileNameItemL() - { - - CDesCArrayFlat* selectedFile = new( ELeave )CDesCArrayFlat( 1 ); - CleanupStack::PushL( selectedFile ); - - TResourceReader reader; - iCoeEnv->CreateResourceReaderLC( reader, - R_MIMETYPE_SPECIFIC_PLUGIN_ARRAY ); - TInt countResource = reader.ReadInt16(); - - CDesCArrayFlat* mimetypesList = new( ELeave ) - CDesCArrayFlat( countResource ); - - CleanupStack::PushL( mimetypesList ); - - for ( TInt i = 0; i < countResource; i++ ) - { - HBufC* mimeType = reader.ReadHBufCL(); - - // Check plugin availability before appending mimetype - TUid uid = iCaller->FindAnimPluginL( *mimeType ); - if ( uid != KNullUid ) - { - mimetypesList->AppendL( *mimeType ); - } - delete mimeType; - reader.ReadInt32(); - } - - CScreenSaverAnimPluginVerifier* verifier = - CScreenSaverAnimPluginVerifier::NewL( iCaller ); - CleanupStack::PushL( verifier ); - TBool fileSelected = MGFetch::RunL( *selectedFile, - EAnyMediaFile, - EFalse, - KNullDesC, - KNullDesC, - mimetypesList, - verifier ); - - CleanupStack::PopAndDestroy( verifier ); - CleanupStack::PopAndDestroy( mimetypesList ); - CleanupStack::PopAndDestroy(); // reader - - if ( fileSelected ) - { - TPtrC fileNamePtr = selectedFile->MdcaPoint( 0 ); - TFileName tempFileName; - tempFileName.Copy( fileNamePtr ); - iSettingObject->iFileName.Copy( tempFileName ); - // Write the new setting into the central repository - iCaller->SetAnimSettings(); - UpdateListBoxL( ESanimAnimFileNameId ); - } - - CleanupStack::PopAndDestroy( selectedFile ); - - } - -// ---------------------------------------------------- -// CScreenSaverAnimPluginContainer::ShowAnimTimeOutItemL() -// Display the animation time-out setting page. -// ---------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::ShowAnimTimeOutItemL() - { - - CAknSettingPage* dlg = new( ELeave ) CAknSliderSettingPage( - R_ANIM_TIMEOUT_SETTING_PAGE, - iSettingObject->iAnimationTimeout ); - if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) - { - // Write the new setting into the central repository - iCaller->SetAnimSettings(); - UpdateListBoxL( ESanimAnimTimeoutId ); - } - } - -// ---------------------------------------------------- -// CScreenSaverAnimPluginContainer::ShowLightsTimeOutItemL() -// Display the animation time-out setting page. -// ---------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::ShowLightsTimeOutItemL() - { - CAknSettingPage* dlg = - new( ELeave ) CAknSliderSettingPage( R_LIGHT_TIMEOUT_SETTING_PAGE, - iSettingObject->iLightsTimeout ); - if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) ) - { - // Write the new setting into the central repository - iCaller->SetAnimSettings(); - UpdateListBoxL( ESanimLightsTimeoutId ); - } - } - -void CScreenSaverAnimPluginContainer::SizeChanged() - { - if (iListBox) - { - // Get size from main pane, place from this rect - TRect mainPaneRect; - AknLayoutUtils::LayoutMetricsRect( - AknLayoutUtils::EMainPane, - mainPaneRect ); - - iListBox->SetExtent( Rect().iTl, mainPaneRect.Size() ); - } - } - -TInt CScreenSaverAnimPluginContainer::CountComponentControls() const - { - if ( iListBox ) - { - return 1; - } - else - { - return 0; - } - } - -CCoeControl* CScreenSaverAnimPluginContainer:: - ComponentControl( TInt /*aIndex*/ ) const - { - if ( iListBox ) - { - return iListBox; - } - else - { - return NULL; - } - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::OfferKeyEventL -// Called when a key is pressed. -// -// --------------------------------------------------------------------------- -TKeyResponse CScreenSaverAnimPluginContainer::OfferKeyEventL( - const TKeyEvent& aKeyEvent, TEventCode aType ) - { - switch (aKeyEvent.iCode) - { - case EKeyLeftArrow: - case EKeyRightArrow: - // Listbox takes all event even if it doesn't use them - return EKeyWasNotConsumed; - default: - break; - } - return iListBox->OfferKeyEventL( aKeyEvent, aType ); - } - -void CScreenSaverAnimPluginContainer::SetContainerWindowL( const CCoeControl& - /* aContainer*/ ) - { - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimPluginContainer::FocusChanged -// --------------------------------------------------------------------------- -void CScreenSaverAnimPluginContainer::FocusChanged( TDrawNow aDrawNow ) - { - // Pass focus changed event to listbox. - if ( iListBox ) - { - iListBox->SetFocus( IsFocused(), aDrawNow ); - } - } - -// ----------------------------------------------------------------------------- -// CSvgRenderFrameControl::GetNormalScreenLayoutRect -// Gets the normal screen layout rectangle for control from LAF. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginContainer::GetNormalScreenLayoutRect( - TRect& aRect ) const // Rectangle specifying extent of control - { - AknLayoutUtils::LayoutMetricsRect( - AknLayoutUtils::EApplicationWindow, - aRect ); - } - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPluginHelper.cpp --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPluginHelper.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,355 +0,0 @@ -/* -* Copyright (c) 2005 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: This file implements all helper classes -* for ScreenSaverAnimPlugin -* -*/ - - - -// INCLUDE FILES - -#include -#include -#include -#include -#include -#include - -#include - -#include "ScreenSaverAnimPluginHelper.h" -#include "ScreenSaverAnimPlugin.h" - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPluginVerifier::CScreenSaverAnimPluginVerifier -// C++ default constructor can NOT contain any code, that might leave. -// ----------------------------------------------------------------------------- -// -CScreenSaverAnimPluginVerifier::CScreenSaverAnimPluginVerifier( - CScreenSaverAnimPlugin* aFileVerify ) : - iFileVerify( aFileVerify ) - { - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPluginVerifier::ConstructL -// Symbian 2nd phase constructor can leave. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginVerifier::ConstructL() - { - iCoeEnv = CCoeEnv::Static(); - iDRMHelper = CDRMHelper::NewL( *iCoeEnv ); - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPluginVerifier::NewL -// Two-phased constructor. -// ----------------------------------------------------------------------------- -// -CScreenSaverAnimPluginVerifier* CScreenSaverAnimPluginVerifier::NewL( - CScreenSaverAnimPlugin* aFileVerify ) - { - CScreenSaverAnimPluginVerifier* self = new( ELeave ) - CScreenSaverAnimPluginVerifier( aFileVerify ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPluginVerifier::~CScreenSaverAnimPluginVerifier -// Destructor. -// ----------------------------------------------------------------------------- -// -CScreenSaverAnimPluginVerifier::~CScreenSaverAnimPluginVerifier() - { - delete iDRMHelper; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPluginVerifier::IsFileValidL -// Empty implementation. -// ----------------------------------------------------------------------------- -// -TBool CScreenSaverAnimPluginVerifier::VerifySelectionL( const MDesCArray* - aSelectedFiles ) - { - - TBool canbeautomated( EFalse ); - - if( aSelectedFiles->MdcaCount()<1 ) - { - // Download item - return ETrue; - } - - // 1. Check whether the drm rights are ok - TInt res = 0; - iDRMHelper->SetAutomatedType( - CDRMHelper::EAutomatedTypeScreenSaver ); - res = iDRMHelper->CanSetAutomated( aSelectedFiles->MdcaPoint( 0 ), canbeautomated ); - - if ( res ) - { - iDRMHelper->HandleErrorL( res, aSelectedFiles->MdcaPoint( 0 ) ); - return canbeautomated; - } - else if ( !canbeautomated ) - { - ShowErrorNoteL( R_DRM_PREV_RIGHTS_SET ); - return canbeautomated; - } - - // 2. Check whether the file is supported - RApaLsSession ls; - CleanupClosePushL( ls ); - TUid dummyUid( KNullUid ); - TDataType dataType; - User::LeaveIfError( ls.Connect() ); - // find the mimetype - User::LeaveIfError( ls.AppForDocument( aSelectedFiles->MdcaPoint( 0 ), - dummyUid, dataType ) ); - - CleanupStack::PopAndDestroy( &ls ); - - TResourceReader reader; - TBool valid( EFalse ); - iCoeEnv->CreateResourceReaderLC( reader, - R_MIMETYPE_SPECIFIC_PLUGIN_ARRAY ); - TInt countResource = reader.ReadInt16(); - - for ( TInt i = 0; i < countResource; i++ ) - { - HBufC* newMimeTypeEntry = reader.ReadHBufCL(); - TPtr mimePtr( newMimeTypeEntry->Des() ); - reader.ReadInt32(); - if ( newMimeTypeEntry->Compare( dataType.Des() ) == 0 ) - { - valid = ETrue; - } - delete newMimeTypeEntry; - } - CleanupStack::PopAndDestroy(); // reader - - if ( !valid ) - { - // Pop a not supported error message - ShowErrorNoteL( R_SANIM_NOT_SUPPORTED ); - return EFalse; - } - - //3. Check file for Validity - - //Display the confirmation query when setting - //a DRM protected image as screensaver in General settings. - TInt isCancel; - isCancel = iDRMHelper->ShowAutomatedNote( aSelectedFiles->MdcaPoint( 0 ) ); - if ( KErrCancel == isCancel ) - { - return EFalse; - } - - - TInt validity = KErrNone; - TRAPD( err, - validity = iFileVerify->CheckFileValidityL( aSelectedFiles->MdcaPoint( 0 ) )); - - if ( err ) - { - // Dll may not be present - ShowErrorNoteL( R_SANIM_NOT_SUPPORTED ); - return EFalse; - } - - if ( validity == KErrNoMemory ) - { - // Pop up a Corrupted File message - CEikonEnv::Static()->HandleError( validity ); - return EFalse; - } - else if ( validity != KErrNone ) - { - TInt resourceId = R_SANIM_ERROR_WRONG_FORMAT; - // Show information note - ShowErrorNoteL( resourceId ); - return EFalse; - } - - return valid; - - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimPluginVerifier::ShowErrorNoteL -// Displays the error note -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimPluginVerifier::ShowErrorNoteL( TInt aResourceId ) const - { - HBufC* errorText = - iCoeEnv->AllocReadResourceLC( aResourceId ); - CAknInformationNote* note = new( ELeave ) CAknInformationNote( EFalse ); - note->ExecuteLD( *errorText ); - CleanupStack::PopAndDestroy( errorText ); // errorText - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::NewL -// ----------------------------------------------------------------------------- -// -CScreensaverRepositoryWatcher* CScreensaverRepositoryWatcher::NewL( - const TUid aUid, - const TUint32 aKey, - CCenRepNotifyHandler::TCenRepKeyType aKeyType, - TCallBack aCallBack, - CRepository* aRepository ) - { - CScreensaverRepositoryWatcher* self = new( ELeave ) - CScreensaverRepositoryWatcher( aUid, aKey, aCallBack, aRepository ); - - CleanupStack::PushL( self ); - self->ConstructL( aKeyType ); - CleanupStack::Pop( self ); - - return self; - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::NewL -// ----------------------------------------------------------------------------- -// -CScreensaverRepositoryWatcher* CScreensaverRepositoryWatcher::NewL( - const TUid aUid, - TCallBack aCallBack, - CRepository* aRepository ) - { - CScreensaverRepositoryWatcher* self = new( ELeave ) CScreensaverRepositoryWatcher( - aUid, NCentralRepositoryConstants::KInvalidNotificationId, aCallBack, aRepository ); - - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - - return self; - } - - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::~CScreensaverRepositoryWatcher -// ----------------------------------------------------------------------------- -// -CScreensaverRepositoryWatcher::~CScreensaverRepositoryWatcher() - { - if ( iNotifyHandler ) - { - iNotifyHandler->StopListening(); - delete iNotifyHandler; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::CScreensaverRepositoryWatcher -// ----------------------------------------------------------------------------- -// -CScreensaverRepositoryWatcher::CScreensaverRepositoryWatcher( - const TUid aUid, - const TUint32 aKey, - TCallBack aCallBack, - CRepository* aRepository ) - : - iUid( aUid ), iKey( aKey ), iCallBack( aCallBack ), iRepository( aRepository ) - { - } - - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::ConstructL(CCenRepNotifyHandler::TCenRepKeyType aKeyType) - { - iNotifyHandler = CCenRepNotifyHandler::NewL( *this, *iRepository, aKeyType, iKey ); - iNotifyHandler->StartListeningL(); - } - - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::ConstructL() - { - iNotifyHandler = CCenRepNotifyHandler::NewL( *this, *iRepository ); - iNotifyHandler->StartListeningL(); - } - - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::ChangedKey -// ----------------------------------------------------------------------------- -// -TUint32 CScreensaverRepositoryWatcher::ChangedKey() - { - return iChangedKey; - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::HandleNotifyInt -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::HandleNotifyInt( - TUint32 aKey, TInt /*aNewValue*/ ) - { - iChangedKey = aKey; - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::HandleNotifyString -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::HandleNotifyString( TUint32 aKey, - const TDesC16& /*aNewValue*/ ) - { - iChangedKey = aKey; - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::HandleNotifyGeneric -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::HandleNotifyGeneric(TUint32 aKey) - { - iChangedKey = aKey; - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::HandleNotifyError -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::HandleNotifyError(TUint32 /*aKey*/, TInt /*aError*/, CCenRepNotifyHandler* /*aHandler*/) - { - } - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPluginProxy.cpp --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPluginProxy.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* -* Copyright (c) 2005 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: ECOM Implementation Array. -* -*/ - - - - - -// INCLUDE FILES -#include -#include -#include -#include "ScreenSaverAnimPluginImplementationUid.hrh" -#include "ScreenSaverAnimPlugin.h" - -// CONSTANTS -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY( KScreenSaverAnimPluginImplementationUID, - CScreenSaverAnimPlugin::NewL ) - }; - -// ========================== OTHER EXPORTED FUNCTIONS ========================= - -// ----------------------------------------------------------------------------- -// ImplementationProxy -// ECOM implementation table entry. -// ----------------------------------------------------------------------------- -// -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( TInt& aTableCount ) - { - aTableCount = sizeof( ImplementationTable ) / sizeof( TImplementationProxy ); - - return ImplementationTable; - } - -// End of File - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimSettingDialog.cpp --- a/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimSettingDialog.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,470 +0,0 @@ -/* -* Copyright (c) 2005 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: This file implements the Setting Dialog which -* is used to display Settings container -* -*/ - - - - - -#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -#ifdef __SERIES60_HELP -#include -#endif // __SERIES60_HELP - -#ifdef __SERIES60_HELP -// Help Context UID = DLL UID3 -const TUid KScreenSaverAnimPluginHelpContextUid = { 0x10207447 }; -#endif // __SERIES60_HELP - -#include -#include -#include -#include -#include -#include -#include -//----------- -// USER INCLUDES -#include "ScreenSaverAnimPlugin.h" -#include "ScreenSaverAnimPlugin.hrh" -#include "ScreenSaverAnimSettingDialog.h" -#include "ScreenSaverAnimPluginContainer.h" -#include "screensaver.hlp.hrh" - -// Middle softkey control ID -const TInt KSanimMSKControlID = 3; - -// ============================ MEMBER FUNCTIONS =============================== - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::CScreenSaverAnimSettingDialog -// Default Constructor. Initialises Dialog State Variables. -// ----------------------------------------------------------------------------- -// -CScreenSaverAnimSettingDialog::CScreenSaverAnimSettingDialog( - CScreenSaverAnimPlugin* aCaller, - CScreenSaverAnimSettingObject* aSettingObject ) - :iSettingObject( aSettingObject ), - iCaller( aCaller ) - { - iCustControl = NULL; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::ConstructL -// Second Phase Constructor for CScreenSaverAnimSettingDialog. Opens resource file, reads the -// dialog menu resource and calls CAknDialog::ConstructL with the resource as -// param. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimSettingDialog::ConstructL() - { - CAknDialog::ConstructL( R_SANIM_DIALOG_MENUBAR ); - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::NewL -// Factory function for creating CScreenSaverAnimSettingDialog objects. -// Returns: CScreenSaverAnimSettingDialog* ; Pointer to the created object. -// Leaves if error occurs during creation. -// ----------------------------------------------------------------------------- -// -CScreenSaverAnimSettingDialog* CScreenSaverAnimSettingDialog::NewL( - CScreenSaverAnimPlugin* aCaller, - CScreenSaverAnimSettingObject* aSettingObject ) - { - CScreenSaverAnimSettingDialog* self = CScreenSaverAnimSettingDialog::NewLC( - aCaller, - aSettingObject ); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::NewLC -// Factory function for creating CScreenSaverAnimSettingDialog objects. -// It also pushes the created dialog object onto the cleanup stack. -// Returns: CScreenSaverAnimSettingDialog* ; Pointer to the created object. -// Leaves if error occurs during creation. -// ----------------------------------------------------------------------------- -// -CScreenSaverAnimSettingDialog* CScreenSaverAnimSettingDialog::NewLC( - CScreenSaverAnimPlugin* aCaller, - CScreenSaverAnimSettingObject* aSettingObject ) - { - CScreenSaverAnimSettingDialog* self = new ( ELeave ) - CScreenSaverAnimSettingDialog( aCaller, aSettingObject ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// Destructor -CScreenSaverAnimSettingDialog::~CScreenSaverAnimSettingDialog() - { - if (this->IsFocused()) - { - CEikDialog::ButtonGroupContainer().RemoveCommandObserver( - KSanimMSKControlID ); - } - - // Custom Control will be automatically destroyed by dialog framework - iCustControl = NULL; - - // Set the text in status pane to the stored one - if (iAppTitleText) - { - // Get the Status Pane Control - CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane(); - // Get the title pane - CAknTitlePane* tp = NULL; - TRAPD( errGetControl, - tp = static_cast< CAknTitlePane* >( sp->ControlL( - TUid::Uid( EEikStatusPaneUidTitle ) ) ) ); - if ( errGetControl == KErrNone && tp ) - { - //set application name in the title pane - TRAPD( errSetText, - tp->SetTextL( *iAppTitleText ) ); - if ( errSetText != KErrNone ) - { - // No error handling here - } - } - - delete iAppTitleText; - iAppTitleText = NULL; - } - - delete iTitlePaneString; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::ExecuteLD -// Reimplements CAknDialog::ExecuteLD. It initialises the member variables of -// the class and calls CAknDialog::ExecuteLD() with the dialog resource. -// ----------------------------------------------------------------------------- -// -TInt CScreenSaverAnimSettingDialog::ExecuteLD() - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg, "In Executeld dlg" ); - PrintDebugMsg( msg ); -#endif - - // Save this pointer since there are leaving functions in the flow - CleanupStack::PushL( this ); - - // Get the Status Pane Control - CEikStatusPane* sp = iEikonEnv->AppUiFactory()->StatusPane(); - - // Get the Title Pane Control - CAknTitlePane* tp = static_cast< CAknTitlePane* >( sp->ControlL( - TUid::Uid( EEikStatusPaneUidTitle ) ) ); - - // Store the Application's title text - iAppTitleText = HBufC::NewL( tp->Text()->Length() ); - *iAppTitleText = *tp->Text(); - - // Display Settings in the title pane of application - iTitlePaneString = NULL; - iTitlePaneString = StringLoader::LoadL( R_SANIM_TITLE_SETTINGS, - iEikonEnv ); - // SetTextL also ensures that if the length exceeds the layout space - // available the text is truncated from the end. - tp->SetTextL( iTitlePaneString->Des() ); - - // ExecuteLD will delete this, so we have to Pop it... - CleanupStack::Pop( this ); // this - - return CAknDialog::ExecuteLD( R_SANIM_SETTING_DIALOG ); - - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::DynInitMenuPaneL -// Reimplements CAknDialog::DynInitMenuPaneL inorder to support dynamic hiding -// of menu items based on current state of the viewer. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimSettingDialog::DynInitMenuPaneL( - TInt aResourceId, // Resource Id for which this func is called - CEikMenuPane* aMenuPane ) // Menupane object pointer for manipulation - { - if ( ( aResourceId == R_SANIM_DIALOG_MENU ) && ( aMenuPane ) ) - { - } - } - - -// ----------------------------------------------------------------------------- -// Layouts dialog before showing it. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimSettingDialog::PreLayoutDynInitL() - { - // Set middle softkey as Change. - SetMiddleSoftKeyLabelL( R_SANIM_MSK_CHANGE, ESanimDlgChangeCommand ); - - CAknDialog::PreLayoutDynInitL(); - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::OkToExitL -// Reimplements CAknDialog::OkToExitL inorder to display custom menu and -// trap the back softkey to provide restore view functionality/exit. -// ----------------------------------------------------------------------------- -// -TBool CScreenSaverAnimSettingDialog::OkToExitL( TInt aButtonId ) // ButtonId of button pressed - { - if ( aButtonId == EAknSoftkeyOptions ) - { - DisplayMenuL(); - return EFalse; - } - else - { - if ( aButtonId == EAknSoftkeyBack ) - { - } - else - { - // Especially handle Select Key - if ( ( aButtonId == EAknSoftkeySelect ) || - ( aButtonId == EEikBidOk ) || - ( aButtonId == ESanimDlgChangeCommand ) ) - { - // Select button pressed, handle, do not leave dialog - ProcessCommandL( ESanimDlgChangeCommand ); - return EFalse; - } - if ( aButtonId == EEikCmdExit ) - { - } - } - } - - return ETrue; - } - - -// --------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::HandleApplicationForegroundEvent -// This API is used by the application to give background/foreground events -// to the Dialog. The dialog inturn passes the events to custom control. -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimSettingDialog::HandleApplicationForegroundEvent( TBool - /*aForeground*/ ) - { - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::ProcessCommandL -// Reimplements CAknDialog::ProcessCommandL inorder to handle dialog menu -// commands. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimSettingDialog::ProcessCommandL( TInt aCommandId ) // Command Id - { - // The Commands are handled by the custom CCoe Control and - // a boolean varialble is used inorder to keep track whether - // the control command processing needs to be invoked or not. - CAknDialog::ProcessCommandL( aCommandId ); - switch ( aCommandId ) - { - case ESanimDlgChangeCommand: - if ( iCustControl ) - { - iCustControl->HandleListBoxSelectionL(); - } - break; - case ESanimDlgHelpCommand: - { -#ifdef __SERIES60_HELP - HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), - iEikonEnv->EikAppUi()->AppHelpContextL() ); -#endif - } - break; - case EAknSoftkeyBack: // Fall Through - case EEikCmdExit: - case EAknCmdExit: - // Close this dialog - TryExitL( aCommandId ); - iAvkonAppUi->ProcessCommandL( aCommandId ); - break; - default: - break; - } - } - -#ifdef __SERIES60_HELP -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::OfferKeyEventL -// Handles Key events by reimplementing CCoeControl::OfferKeyEventL. -// Returns: -// EKeyWasConsumed: If this control uses this key. -// EKeyWasNotConsumed: Otherwise. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimSettingDialog::GetHelpContext( TCoeHelpContext& - aContext ) const - { - aContext.iMajor = KScreenSaverAnimPluginHelpContextUid; - aContext.iContext = KSCREENSAVER_HLP_ANIM_SETTINGS; - } -#endif // __SERIES60_HELP - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::CreateCustomControlL -// Reimplements CAknDialog::CreateCustomControlL inorder to add the -// custom control as part of the dialog in the UI framework. -// Returns: SEikControlInfo which contains the Cust Control, if -// aControlType == ESanimCustControl -// else, -// the structure does not contain any control. -// ----------------------------------------------------------------------------- -// -SEikControlInfo CScreenSaverAnimSettingDialog::CreateCustomControlL( - TInt aControlType ) // Control Type - { -#ifdef SCREENSAVER_LOG_ENABLED - _LIT( msg, "In Create Custom Control" ); - PrintDebugMsg( msg ); -#endif - - SEikControlInfo controlInfo; - controlInfo.iControl = NULL; - controlInfo.iTrailerTextId = 0; - controlInfo.iFlags = EEikControlIsNonFocusing; - - switch ( aControlType ) - { - case ESanimCustControl: - iCustControl = CScreenSaverAnimPluginContainer::NewL( - iCaller, - this, - iSettingObject ); - controlInfo.iControl = iCustControl; - break; - default: - break; - } - return controlInfo; - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::SizeChanged -// Reimplements CAknDialog::SizeChanged inorder to support the resize of the -// dialog when functions such as SetRect, SetExtent are called on the dialog. -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimSettingDialog::SizeChanged() - { - CAknDialog::SizeChanged(); - iCustControl->SetExtent( Rect().iTl, Rect().Size() ); - DrawNow(); - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::OfferKeyEventL -// Handles Key events by reimplementing CCoeControl::OfferKeyEventL. -// Returns: -// EKeyWasConsumed: If this control uses this key. -// EKeyWasNotConsumed: Otherwise. -// ----------------------------------------------------------------------------- -// -TKeyResponse CScreenSaverAnimSettingDialog::OfferKeyEventL( - const TKeyEvent& aKeyEvent, // Key Event - TEventCode aType ) // Event Code - { - if ( iCustControl ) - { - TKeyResponse lCcRetVal = iCustControl->OfferKeyEventL( aKeyEvent, aType ); - if ( lCcRetVal == EKeyWasConsumed ) - { - // Key was consumed, UNLESS it was the End key, which should be - // passed to base class. For some reason listboxes like to eat - // end keys - if ( aKeyEvent.iCode != EKeyEscape ) - { - return EKeyWasConsumed; - } - } - } - return CAknDialog::OfferKeyEventL( aKeyEvent, aType ); - } - -// ----------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::HandleResourceChange -// Handles change of skin/Layout -// ----------------------------------------------------------------------------- -// -void CScreenSaverAnimSettingDialog::HandleResourceChange( TInt aType ) - { - if ( iCustControl ) - { - iCustControl->HandleResourceChange( aType ); - } - CAknDialog::HandleResourceChange( aType ); - } - -// --------------------------------------------------------------------------- -// CScreenSaverAnimSettingDialog::FocusChanged -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimSettingDialog::FocusChanged( TDrawNow aDrawNow ) - { - // Pass focus changed event to listbox. - if ( iCustControl ) - { - iCustControl->SetFocus( IsFocused(), aDrawNow ); - } - } - -// --------------------------------------------------------------------------- -// Sets middle softkey label. -// --------------------------------------------------------------------------- -// -void CScreenSaverAnimSettingDialog::SetMiddleSoftKeyLabelL( - const TInt aResourceId, const TInt aCommandId ) - { - HBufC* middleSKText = StringLoader::LoadLC( aResourceId ); - TPtr mskPtr = middleSKText->Des(); - CEikDialog::ButtonGroupContainer().AddCommandToStackL( - KSanimMSKControlID, - aCommandId, - mskPtr ); - CEikDialog::ButtonGroupContainer().UpdateCommandObserverL( - KSanimMSKControlID, - *this ); - CleanupStack::PopAndDestroy( middleSKText ); - } - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/BWINSCW/ScreenSaverGifAnimPluginU.def --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/BWINSCW/ScreenSaverGifAnimPluginU.def Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXPORTS - ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &) - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/EABI/ScreenSaverGifAnimPluginU.def --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/EABI/ScreenSaverGifAnimPluginU.def Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -EXPORTS - _Z24ImplementationGroupProxyRi @ 1 NONAME - _ZTI19CGifAnimationPlugin @ 2 NONAME ; ## - _ZTI26CGifAnimationPluginControl @ 3 NONAME ; ## - _ZTI27CGifAnimationPluginEcomMain @ 4 NONAME ; ## - _ZTV19CGifAnimationPlugin @ 5 NONAME ; ## - _ZTV26CGifAnimationPluginControl @ 6 NONAME ; ## - _ZTV27CGifAnimationPluginEcomMain @ 7 NONAME ; ## - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/group/ScreenSaverGifAnimPluginEcom.mmp --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/group/ScreenSaverGifAnimPluginEcom.mmp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/* -* Copyright (c) 2005 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: Project definition file for project GifAnimation plug-in -* -*/ - - - - - -#include - -TARGET ScreenSaverGifAnimPlugin.dll -TARGETTYPE PLUGIN -UID 0x10009D8D 0x102750B5 - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT - -SOURCEPATH ../src -SOURCE GifAnimationPluginMain.cpp -SOURCE GifAnimationPlugin.cpp -SOURCE GifAnimationPluginDllApi.cpp -SOURCE GifAnimationPluginControl.cpp - - -USERINCLUDE ../inc -USERINCLUDE ../../ScreenSaverAnimPlugin/inc - -// This is a SYSTEMINCLUDE macro containing the middleware -// layer specific include directories -APP_LAYER_SYSTEMINCLUDE - -SOURCEPATH ../resource -START RESOURCE 102750B5.rss -TARGET ScreenSaverGifAnimPlugin.rsc -END // RESOURCE - - -//deffile generation -#if defined( ARMCC ) -DEFFILE ../EABI/ScreenSaverGifAnimPlugin.def -#else -DEFFILE ../BWINSCW/ScreenSaverGifAnimPlugin.def -#endif - -LIBRARY euser.lib cone.lib -LIBRARY eikcore.lib fbscli.lib gdi.lib -LIBRARY bitgdi.lib // CFbsBitmapDevice -LIBRARY ecom.lib -LIBRARY IHL.LIB // MIHLFileImage -LIBRARY efsrv.lib // RFs -LIBRARY bafl.lib // baflutils diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/group/bld.inf --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/group/bld.inf Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/* -* 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: This is a build file that builds ScreenSaverGifAnimPlugin alone -* -*/ - - - - - -#ifdef RD_SCREENSAVER_GIFANIMATION - -//Platforms listed are not built by ScreenSaver GifAnimPlugin -PRJ_PLATFORMS -DEFAULT -ARMI -ARM4 - -PRJ_EXPORTS -../rom/ScreenSaverGifAnimPlugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(ScreenSaverGifAnimPlugin.iby) - -PRJ_MMPFILES -ScreenSaverGifAnimPluginEcom.mmp - -#endif // RD_SCREENSAVER_GIFANIMATION diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/inc/GifAnimationPlugin.h --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/inc/GifAnimationPlugin.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,430 +0,0 @@ -/* -* Copyright (c) 2005 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: Screensaver GifAnimation plug-in implementation header file -* -*/ - - - -#ifndef C_GIFANIMATIONPLUGIN_H -#define C_GIFANIMATIONPLUGIN_H - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - - -// FORWARD DECLARATIONS -class MIHLFileImage; -class MIHLBitmap; -class MIHLImageViewer; - -class CCoeControl; -class CGifAnimationPlugin; - -// CONSTANTS -/** implementation id GifAnim Ecom Plugin */ -const TInt KGifAnimationPluginImplementationValue = 0x102750B4; - -/****************************************** -* This class is specific to ECom Style Plugin. -* This is used for passing plugin specific initialization information -* to and from browser. -*******************************************/ - -class CGifAnimationPluginEcomMain : public CEcomBrowserPluginInterface - { - public: // Functions from base classes - - /** - * Instance factory - * @param aInitParam an optional parameter - */ - static CGifAnimationPluginEcomMain* NewL(TAny* aInitParam); - - /** - * Destructor. - */ - virtual ~CGifAnimationPluginEcomMain(); - - /** - * @return pointer to functions struct. - */ - NPNetscapeFuncs* Funcs() { return iNpf; } - - private: // Constructors - CGifAnimationPluginEcomMain( NPNetscapeFuncs* aNpf ); - void Construct( NPPluginFuncs* aPluginFuncs ); - private: // new functions - /** - * Sets pointers to interface functions - * @param aPpf structure to fill - */ - NPError InitializeFuncs( NPPluginFuncs* aPpf ); - - private: // Data - // pointer to plug-in function pointers struct - NPNetscapeFuncs* iNpf; - }; - -/**************************************** -Class CGifAnimationPluginControl -Class to Handle UI related actions -****************************************/ -class CGifAnimationPluginControl : public CCoeControl, - public MIHLViewerObserver - - { -public: // Constructor and Destructor - - /** - * Function: NewL - * - * Description: Get instance of a CGifAnimationPluginControl object. - * @param aParentControl a parent class to register to - * @param aPluginAdapter pointer to plugin adapter - */ - static CGifAnimationPluginControl* NewL( CCoeControl* aParentControl, - MPluginAdapter* aPluginAdapter); - - /** - * Destructor. - */ - ~CGifAnimationPluginControl(); - -public: // From MIHLViewerObserver - /** - * From MIHLViewerObserver Notifies client - * when viewer bitmap content is changed. - * Leave situation is handled in ViewerError() callback. - */ - void ViewerBitmapChangedL(); - - /** - * From MIHLViewerObserver Notifies client if error occurs in viewer. - * @param aError IN System wide error code. - */ - void ViewerError( TInt aError ); - -public: // new methods - /** - * Loads the image into display. - * @param aImageFileName image file name - expected to be valid image - */ - void LoadImageL( const TDesC& aImageFileName ); - - /** - * @return last error, if any - */ - TInt GetLastError() const; - - /** - * Start animation. - */ - void StartAnimationL(); - - /** - * Stop animation. - */ - void StopAnimation(); - - /** - * Checks that the file is a valid image file. - * Will leave otherwise - * - * @param aImageFileName image file name - expected to be valid image - */ - static void CheckFileIsValidL( const TDesC& aImageFileName ); - - -private: // new methods - - /** - * @return ETrue if loaded image is animation. - */ - TBool IsAnimation() const; - - /** - * Cancel animation. - */ - void CancelAnimation(); - - /** - * Performs image loading steps. - * Uses file name stored in LoadImageL() - */ - void DoImageLoadingL(); - - /** - * Frees resources allocated with LoadImageL() - */ - void DeleteAnimation(); - - /** - * If loading content fails, non-leaving HandleCallback - * must be call always that parent can update its state - * properly. - */ - void HandleCallback( TInt aError ); - - /** - * Informes that the plug-in wants to terminate - */ - void InformPluginFinished(); - - /** - * Informs that DRM rights should not be consumed - */ - void SetPreviewMode(); - -private: // from CCoeControl - void Draw(const TRect& aRect) const; - void SizeChanged(); - -private: // Constructor - /** - * Constructor. - */ - CGifAnimationPluginControl(); - - /** - * ConstructL - * - * 2nd phase constructor. - * @param aParentControl a parent class to register to - * @param aPluginAdapter pointer to plugin adapter - */ - void ConstructL( CCoeControl *aParentControl, - MPluginAdapter* aPluginAdapter ); - -private: // Data - - /** - * Possible animation states - */ - enum TAnimationState - { - EAnimationNotReady=1, // the file was not loaded yet or corrupt - EAnimationLoading=2, - EAnimationPlaying=3 - }; - - // Source image - MIHLFileImage* iSourceImage; - - // Destination bitmap - MIHLBitmap* iDrawingBitmap; - - // the bitmap is used for scaling our way, IHL will not do scaling - CFbsBitmap* iScalingBitmap; - - // the mask for scaled bitmap - CFbsBitmap* iScalingBitmapMask; - - // size of target bitmap - TSize iTargetSize; - - // new size of target bitmap - TSize iTargetNewSize; - - // Image viewer used as engine - MIHLImageViewer* iEngine; - - // Internal animation state. - TAnimationState iAnimationState; - - // path and name of file being loaded - TFileName iFileName; - - // code of last loading error occured - TInt iLastError; - - // pointer to adapter, we do not own the instance - MPluginAdapter* iPluginAdapter; - - // if true, no DRM rights are consumed - TBool isPreviewMode; - }; - - -/******************************************************* -Class CGifAnimationPlugin -********************************************************/ - -class CGifAnimationPlugin : public CBase - { -public: // Constructor and Destructor - /** - * Instance factory - */ - static CGifAnimationPlugin* NewL( NPP anInstance ); - /** - * Destructor - */ - ~CGifAnimationPlugin(); - - /** - * Notifies host that plug-in has finished. - */ - void PrepareToExitL(); - - /** - * @return ref of CGifAnimationPluginControl - */ - CGifAnimationPluginControl* Control(); - - /** - * @return pointer on NPP instance - */ - NPP Instance(); - - /** - * Sets the parent window to plug-in. If already set, only updates size. - * @param aWindow a parent window - * @param aRect a parent window rectangle - */ - void SetWindowL( const NPWindow *aWindow, const TRect& aRect ); - -private: - /** - * Construct. - * - * 2nd phase constructor. - * @param anInstance NPP structure - */ - void Construct( NPP anInstance ); - -private: - // pointer to adapter - MPluginAdapter* iPluginAdapter; - - // pointer to Container - CGifAnimationPluginControl* iControl; - - // structure with pointers - NPP iInstance; - }; - -/**************************************************************************** -* -* Plugin API methods -* -*/ - -/** - * Create a plugin. - */ -NPError GifAnimationPluginNewp( NPMIMEType pluginType, - NPP instance, - uint16 mode, - CDesCArray* argn, - CDesCArray* argv, - NPSavedData* saved ); - -/** - * Destroy a plugin. - */ -NPError GifAnimationPluginDestroy(NPP instance, NPSavedData** save); - -/** - * This is the parent window of a plugin. - */ -NPError GifAnimationPluginSetWindow(NPP instance, NPWindow* window); - -/** - * A new data stream has been created for sending data to the plugin. - */ -NPError GifAnimationPluginNewStream( NPP instance, - NPMIMEType type, - NPStream* stream, - NPBool seekable, - uint16* stype ); - -/** - * A data stream has been terminated. - */ -NPError GifAnimationPluginDestroyStream( NPP instance, - NPStream* stream, - NPReason reason ); - -/** - * A data stream has been fully saved to a file. - */ -void GifAnimationPluginAsFile( NPP instance, - NPStream* stream, - const TDesC& fname ); - -/** - * Return the maximum number of bytes this plugin can accept from the stream. - * @param instance - the plug-in instance - * @param stream - the stream to use - */ -int32 GifAnimationPluginWriteReady( NPP instance, NPStream* stream ); - -/** - * Receive more data - return number of bytes processed. - * - * @param instance - the plug-in instance - * @param stream - the stream to read from - * @param buffer - contains the data. - * @param len - the number of bytes in buffer. - * @param offset - the number of bytes already sent/processed. - * @return TInt number of bytes processed. - */ -int32 GifAnimationPluginWrite( NPP instance, - NPStream* stream, - int32 offset, - int32 len, - void* buffer ); - -/** - * Generic hook to retrieve values/attributes from the plugin. - */ -NPError GifAnimationPluginGetValue( NPP instance, - NPPVariable variable, - void *ret_value ); - -/** - * Generic hook to set values/attributes within the plugin. - */ -NPError GifAnimationPluginSetValue( NPP instance, - NPNVariable variable, - void *ret_value ); - -/** - * Event - */ -int16 GifAnimationPluginEvent( NPP instance, void* event ); - -/** - * Notify - */ -void GifAnimationPluginURLNotify( NPP instance, - const TDesC& url, - NPReason reason, - void* notifyData ); - -/** - * Print - */ -void GifAnimationPluginPrint( NPP instance, NPPrint* platformPrint ); - -#endif // C_GIFANIMATIONPLUGIN_H diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/inc/GifAnimationUtils.h --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/inc/GifAnimationUtils.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* -* Copyright (c) 2005 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: Screensaver GifAnimation plug-in utility file header -* -*/ - - - - - -#ifndef GIFANIMPLUGINUTIL_H -#define GIFANIMPLUGINUTIL_H - -// INCLUDES -#include -#include - -#ifdef _DEBUG - -// MACROS -#define DBG_TRACE( str ) \ - RDebug::Printf( "GifAnimation plug-in: %s:%s:%d %s", \ - __FILE__, __FUNCTION__, __LINE__, (str) ); -#define DBG_TRACE_FN_BEGIN \ - RDebug::Printf("GifAnimation plug-in: %s:%s begin", \ - __FILE__, __FUNCTION__); -#define DBG_TRACE_FN_END \ - RDebug::Printf("GifAnimation plug-in: %s:%s end", \ - __FILE__, __FUNCTION__); - -#define DBG_ERR_DLG( strDesC, code ) \ - CAknErrorNote* informationNote = \ - new ( ELeave ) CAknErrorNote(ETrue); \ - TBuf<256> message; \ - _LIT(KErrorFormat, "Error: %S, code: %d"); \ - message.Format(KErrorFormat, &strDesC, code); \ - informationNote->ExecuteLD( message ); -#else - -#define DBG_TRACE( str ) -#define DBG_TRACE_FN_BEGIN -#define DBG_TRACE_FN_END -#define DBG_ERR_DLG( strDesC, code ) - -#endif // _DEBUG - -#endif // GIFANIMPLUGINUTIL_H diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/resource/102750B5.rss --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/resource/102750B5.rss Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/* -* Copyright (c) 2005 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: Registry file for Ecom style Screensaver GifAnimation plug-in -* -*/ - - - - - -#include - - - -// RESOURCE DEFINITIONS -// ----------------------------------------------------------------------------- -// -// Registry info -// The UIDs for the filters implemented in this DLL -// -// ----------------------------------------------------------------------------- -// - -RESOURCE REGISTRY_INFO theInfo - { - dll_uid = 0x102750B5; // should match the name of the file. - // 3-d Uid of associeted plugin dll (declared in the dll mmp file) - - interfaces= - { - INTERFACE_INFO - { - interface_uid = 0x102750CB; // KScreenSaverPluginInterfaceUid, identifies plugin type (used by ECom) - implementations = - { - IMPLEMENTATION_INFO - { - implementation_uid = 0x102750B4; // specify specific implementation (must - // match an implementation entry in the dll - version_no = 1; - display_name = "ScreenSaverGifAnimPlugin.dll;Gif Animation Plugin"; // file name; plugin's name - default_data = "image/gif"; - // suppored mime types - // mime Extensions - // and mime descriptions - opaque_data = "Gif Animation Plugin"; // plugin's description - } - }; - } - }; - } - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/rom/ScreenSaverGifAnimPlugin.iby --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/rom/ScreenSaverGifAnimPlugin.iby Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/* -* Copyright (c) 2005 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: IBY file for ScreenSaverAnimPlugin -* -*/ - - - - -#ifndef __SCREENSAVERGIFANIMPLUGIN_IBY -#define __SCREENSAVERGIFANIMPLUGIN_IBY - -// Not on ROM in 3.0, and only if S60 browser is used -#ifdef RD_SCREENSAVER_GIFANIMATION -#ifdef __SERIES60_NATIVE_BROWSER -ECOM_PLUGIN(ScreenSaverGifAnimPlugin.dll,102750B5.rss) -#endif -#endif // RD_SCREENSAVER_GIFANIMATION - -#endif // __SCREENSAVERGIFANIMPLUGIN_IBY -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPlugin.cpp --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPlugin.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/* -* Copyright (c) 2005 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: Screensaver GifAnimation plug-in implementation source file -* -*/ - - - - - -#include -#include -#include -#include -#include -#include -#include - -#include "GifAnimationPlugin.h" -#include "GifAnimationUtils.h" - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Instance factory. -// --------------------------------------------------------------------------- -// -CGifAnimationPlugin* CGifAnimationPlugin::NewL( NPP anInstance ) - { - DBG_TRACE_FN_BEGIN; - CGifAnimationPlugin *self = new (ELeave) CGifAnimationPlugin; - CleanupStack::PushL( self ); - self->Construct( anInstance ); - - CleanupStack::Pop(); - DBG_TRACE_FN_END; - return self; - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CGifAnimationPlugin::~CGifAnimationPlugin() - { - DBG_TRACE_FN_BEGIN; - if ( iControl ) - { - delete iControl; - iControl=NULL; - } - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------------------------- -// Notifies host that plug-in has finished. -// --------------------------------------------------------------------------- -// -void CGifAnimationPlugin::PrepareToExitL() - { - DBG_TRACE_FN_BEGIN; - - if ( iPluginAdapter ) - { - CCoeControl* aParentControl = iPluginAdapter->GetParentControl(); - if ( iControl != NULL ) - { - // will free resources, if file was loaded but was not stopped - iControl->StopAnimation(); - } - iPluginAdapter->PluginFinishedL(); - } - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------------------------- -// 2nd phase constructor. -// --------------------------------------------------------------------------- -// -void CGifAnimationPlugin::Construct( NPP anInstance ) - { - DBG_TRACE_FN_BEGIN; - iInstance=anInstance; - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------------------------- -// Sets the parent window to plug-in. If already set, only updates size. -// --------------------------------------------------------------------------- -// -void CGifAnimationPlugin::SetWindowL( const NPWindow *aWindow, - const TRect& aRect ) - { - DBG_TRACE_FN_BEGIN; - iPluginAdapter = static_cast( aWindow->window ); - CCoeControl* aParentControl = iPluginAdapter->GetParentControl(); - if ( iControl == NULL ) - { - iControl = CGifAnimationPluginControl::NewL( aParentControl, - iPluginAdapter ); - iPluginAdapter->PluginConstructedL( iControl ); - } - - if ( iControl != NULL ) - { - iControl->SetRect( aRect ); - } - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------------------------- -// Returns pointer on instance of CGifAnimationPluginControl -// --------------------------------------------------------------------------- -// -CGifAnimationPluginControl* CGifAnimationPlugin::Control() - { - DBG_TRACE_FN_BEGIN; - ASSERT( iControl ); - DBG_TRACE_FN_END; - return iControl; - } - -// --------------------------------------------------------------------------- -// Returns pointer on NPP instance -// --------------------------------------------------------------------------- -// -NPP CGifAnimationPlugin::Instance() - { - DBG_TRACE_FN_BEGIN; - ASSERT( iInstance ); - DBG_TRACE_FN_END; - return iInstance; - } diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPluginControl.cpp --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPluginControl.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,600 +0,0 @@ -/* -* Copyright (c) 2005 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: Screensaver GifAnimation plug-in container source file -* -*/ - - - - - -#include -#include -#include -#include - -#include // IHLImageFactory -#include // IHLViewerFactory -#include // MIHLImageViewer -#include // MIHLFileImage -#include // MIHLBitmap -#include // MIHLImageViewer -#include -#include - -#include "GifAnimationPlugin.h" -#include "GifAnimationUtils.h" - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Instance factory -// --------------------------------------------------------------------------- -// -CGifAnimationPluginControl* CGifAnimationPluginControl::NewL( - CCoeControl *aParentControl, - MPluginAdapter* aPluginAdapter ) - { - ASSERT( aPluginAdapter ); - DBG_TRACE_FN_BEGIN; - CGifAnimationPluginControl* tmp = - new ( ELeave )CGifAnimationPluginControl(); - CleanupStack::PushL( tmp ); - tmp->ConstructL( aParentControl, aPluginAdapter ); - CleanupStack::Pop(); - DBG_TRACE_FN_END; - return tmp; - } - -// --------------------------------------------------------------------------- -// 2nd phase constructor -// --------------------------------------------------------------------------- -// -void CGifAnimationPluginControl::ConstructL( CCoeControl* aParentControl, - MPluginAdapter* aPluginAdapter ) - { - DBG_TRACE_FN_BEGIN; - - iPluginAdapter = aPluginAdapter; - - if ( aParentControl != NULL ) - { - CreateWindowL( aParentControl ); - } - else - { - CreateWindowL(); - } - ActivateL(); - - MakeVisible( ETrue ); // make it invisible for now - - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------------------------- -// Constructor -// --------------------------------------------------------------------------- -// -CGifAnimationPluginControl::CGifAnimationPluginControl() - : iSourceImage( NULL ), - iDrawingBitmap( NULL ), - iScalingBitmap( NULL ), - iScalingBitmapMask( NULL ), - iEngine( NULL ), - iAnimationState( EAnimationNotReady ), - iLastError( KErrNone ) - { - DBG_TRACE_FN_BEGIN; - // nothing goes here - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------------------------- -// Destructor. -// --------------------------------------------------------------------------- -// -CGifAnimationPluginControl::~CGifAnimationPluginControl() - { - DBG_TRACE_FN_BEGIN; - - DeleteAnimation(); - - iPluginAdapter = NULL; - - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------- -// Loads the image into display. -// Param aImageFileName image file name - expected to be valid image -// --------------------------------------------------------- -// -void CGifAnimationPluginControl::LoadImageL( const TDesC& aImageFileName ) - { - DBG_TRACE_FN_BEGIN; - iFileName.Copy( aImageFileName ); - - iLastError = KErrNotReady; // if asked before loading is complete+Draw() - TRAPD( error, DoImageLoadingL() ); - if ( error ) - { - iLastError = error; - DeleteAnimation(); - DBG_TRACE_FN_END; - User::Leave( error ); // re-throw it - } - else - { - DBG_TRACE( "Animation loaded" ); - iAnimationState = EAnimationLoading; - iLastError = KErrNone; - } - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------- -// Return ETrue if loaded image is animation. -// --------------------------------------------------------- -// -TBool CGifAnimationPluginControl::IsAnimation() const - { - DBG_TRACE_FN_BEGIN; - if ( iSourceImage - && iLastError == KErrNone ) // we did not have any error loading picture - { - DBG_TRACE_FN_END; - return iSourceImage->IsAnimation(); - } - DBG_TRACE_FN_END; - return EFalse; - } - - -// --------------------------------------------------------- -// Return TInt with image loading error. -// --------------------------------------------------------- -// -TBool CGifAnimationPluginControl::GetLastError() const - { - DBG_TRACE_FN_BEGIN; - // - DBG_TRACE_FN_END; - return iLastError; - } - -// --------------------------------------------------------- -// Start animation. -// --------------------------------------------------------- -// -void CGifAnimationPluginControl::StartAnimationL() - { - DBG_TRACE_FN_BEGIN; - - if ( iEngine == NULL ) // animation was stopped, - { // need to re-load animation file - DoImageLoadingL(); - } - - // start animation - if ( iEngine && IsAnimation() ) - { - iEngine->Play(); - iAnimationState = EAnimationPlaying; - } - - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------- -// Stop animation. -// --------------------------------------------------------- -// -void CGifAnimationPluginControl::StopAnimation() - { - DBG_TRACE_FN_BEGIN; - - // bugfix for JPYO-6KXHRW - MakeVisible( EFalse ); - - - // instead of just stopping player, we delete it. - // This is because of stability issues with the start-stop-destroy cycle - DeleteAnimation(); - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------- -// Called when size is changed. -// --------------------------------------------------------- -// -void CGifAnimationPluginControl::SizeChanged() - { - DBG_TRACE_FN_BEGIN; - if ( iEngine ) - { - iEngine->SetViewerSize( Size() ); - } - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------------------------- -// Overriden CCoeControl::Draw() -// --------------------------------------------------------------------------- -// -void CGifAnimationPluginControl::Draw( const TRect& /*aRect*/ ) const - { - //DBG_TRACE_FN_BEGIN; - CWindowGc& gc = SystemGc(); - TRect rect( Rect() ); - - DBG_TRACE( "Draw: Clearing background" ); - gc.Clear( Rect() ); - gc.SetBrushColor( KRgbBlack ); - gc.SetBrushStyle( CGraphicsContext::ESolidBrush); - gc.DrawRect( rect ); - - if ( iDrawingBitmap - && iEngine - && iLastError == KErrNone ) // loading was successful - { - TSize screenSize( rect.Size() ); - TPoint destinationPoint( - ( screenSize.iWidth-iTargetNewSize.iWidth ) / 2, - ( screenSize.iHeight-iTargetNewSize.iHeight ) / 2 ); - - TSize drawingBitmapSize( iDrawingBitmap->Bitmap().SizeInPixels() ); - if ( drawingBitmapSize.iHeight == iTargetNewSize.iHeight - && drawingBitmapSize.iWidth == iTargetNewSize.iWidth ) - { - // we use unscaled version as size is Ok - iDrawingBitmap->Draw( gc, - destinationPoint, - iTargetNewSize ); - } - else - { - // we use scaled version - if ( iDrawingBitmap->HasMask() ) - { - gc.BitBltMasked( destinationPoint, - iScalingBitmap, - iTargetNewSize, - iScalingBitmapMask, - EFalse ); - } - else - { - gc.BitBlt( destinationPoint, - iScalingBitmap ); - } - } - } - else // image is not ready or broken - { - DBG_TRACE( "image is not ready or broken" ); - } - //DBG_TRACE_FN_END; - } - -// --------------------------------------------------------- -// CGifAnimationPluginControl::DoImageLoadingL -// --------------------------------------------------------- -// -void CGifAnimationPluginControl::DoImageLoadingL() - { - DBG_TRACE_FN_BEGIN; - - RFs& fs = CEikonEnv::Static()->FsSession(); - TBool fileExists = BaflUtils::FileExists( fs, iFileName ); - if ( !fileExists ) - { - DBG_TRACE_FN_END; - User::Leave( KErrPathNotFound ); - } - - - RFile fileHandle; - CleanupClosePushL( fileHandle ); - iLastError = fileHandle.Open( fs, iFileName, EFileRead | EFileShareReadersOnly ); - User::LeaveIfError(iLastError); - - // delete old instances, if any - DeleteAnimation(); - - // create new objects - if ( iDrawingBitmap == NULL ) - { - iDrawingBitmap = IHLBitmap::CreateL(); - } - - TInt drmOption( 0 ); - if ( isPreviewMode ) - { - drmOption = MIHLFileImage::EOptionNoDRMConsume; - } - iSourceImage = IHLImageFactory::OpenFileImageL( fileHandle, - 0, // image index - drmOption ); - - // calculate target size so that picture fits the screen and centered - TSize sourceSize( iSourceImage->Size() ); - TSize maxSize = Size(); - - iTargetSize = TSize( Min( sourceSize.iWidth, maxSize.iWidth ), - Min( sourceSize.iHeight, maxSize.iHeight ) ); - - if ( sourceSize.iWidth < maxSize.iWidth - && sourceSize.iHeight < maxSize.iHeight ) - { - // scale up N-times - TInt upScale = Min( maxSize.iWidth / sourceSize.iWidth, - maxSize.iHeight / sourceSize.iHeight ); - iTargetSize = TSize( sourceSize.iWidth * upScale, - sourceSize.iHeight * upScale ); - const TUint32 options( 0 ); // no flags set - // we do not want IHL do scaling, so targetSize= sourceSize - iEngine = IHLViewerFactory::CreateImageViewerL( sourceSize, - *iSourceImage, - *iDrawingBitmap, - *this, - options ); - iTargetNewSize = iTargetSize; - } - else - { - //The image needs to be scaled down. We pass the target size to - //IHL so that it doesn't come back with an OOM situation in case - //the resolution is too high. - // scale up N-times - TReal downScale = Min( TReal(maxSize.iWidth) / TReal(sourceSize.iWidth), - TReal(maxSize.iHeight) / TReal(sourceSize.iHeight) ); - iTargetSize = TSize( sourceSize.iWidth * downScale, - sourceSize.iHeight * downScale ); - const TUint32 options( 0 ); // no flags set - TReal widthRatio( TReal( iTargetSize.iWidth ) / TReal( sourceSize.iWidth ) ); - TReal heightRatio( TReal( iTargetSize.iHeight ) / TReal( sourceSize.iHeight ) ); - if( options & MIHLImageViewer::EOptionIgnoreAspectRatio ) - { - downScale = ( widthRatio > heightRatio ) ? widthRatio : heightRatio; - } - else - { - downScale = ( widthRatio < heightRatio ) ? widthRatio : heightRatio; - } - TReal widthZoomRatio( downScale ); - TReal heightZoomRatio( downScale ); - if( options & MIHLImageViewer::EOptionIgnoreAspectRatio ) - { - TReal widthRatio( TReal( iTargetSize.iWidth ) / TReal( sourceSize.iWidth ) ); - TReal heightRatio( TReal( iTargetSize.iHeight ) / TReal( sourceSize.iHeight ) ); - if( widthRatio < heightRatio ) - { - widthZoomRatio = widthZoomRatio * widthRatio / heightRatio; - } - else - { - heightZoomRatio = heightZoomRatio * heightRatio / widthRatio; - } - } - iTargetNewSize = TSize( sourceSize.iWidth * widthZoomRatio, - sourceSize.iHeight * heightZoomRatio ); - // we do not want IHL do scaling, so targetSize= sourceSize - iEngine = IHLViewerFactory::CreateImageViewerL( iTargetSize, - *iSourceImage, - *iDrawingBitmap, - *this, - options ); - } - - // create bitmaps needed for manual scaling - TDisplayMode dMode = CEikonEnv::Static()->DefaultDisplayMode(); - if ( iScalingBitmap == NULL ) - { - iScalingBitmap = new( ELeave ) CFbsBitmap; - iScalingBitmap->Create( iTargetSize, dMode ); - } - - if ( iScalingBitmapMask == NULL ) - { - iScalingBitmapMask = new( ELeave ) CFbsBitmap; - iScalingBitmapMask->Create( iTargetSize, dMode ); - } - - CleanupStack::PopAndDestroy( &fileHandle ); - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------- -// CGifAnimationPluginControl::CheckFileIsValidL -// --------------------------------------------------------- -// -void CGifAnimationPluginControl::CheckFileIsValidL( - const TDesC& aImageFileName ) - { - DBG_TRACE_FN_BEGIN; - - ASSERT( aImageFileName.Size() ); - CGifAnimationPluginControl* temp = - new ( ELeave )CGifAnimationPluginControl(); - CleanupStack::PushL( temp ); - temp->SetSize( TSize( 100, 100 ) ); - temp->SetPreviewMode(); - temp->LoadImageL( aImageFileName ); - temp->DeleteAnimation(); - CleanupStack::PopAndDestroy( temp ); - - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------- -// CGifAnimationPluginControl::DeleteAnimation -// --------------------------------------------------------- -// -void CGifAnimationPluginControl::DeleteAnimation() - { - DBG_TRACE_FN_BEGIN; - if ( iEngine ) - { - iAnimationState = EAnimationNotReady; - iEngine->Stop(); - delete iEngine; - iEngine = NULL; - } - - if ( iSourceImage ) - { - delete iSourceImage; - iSourceImage = NULL; - } - - if ( iDrawingBitmap ) - { - delete iDrawingBitmap; - iDrawingBitmap = NULL; - } - - if ( iScalingBitmap ) - { - delete iScalingBitmap; - iScalingBitmap = NULL; - } - - if ( iScalingBitmapMask ) - { - delete iScalingBitmapMask; - iScalingBitmapMask = NULL; - } - - - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------- -// Handle bitmap change notifications. State is changed accordingly -// if this is the first frame. -// --------------------------------------------------------- -// -void CGifAnimationPluginControl::ViewerBitmapChangedL() - { - switch ( iAnimationState ) - { - case EAnimationLoading: - { - iAnimationState = EAnimationPlaying; - break; - } - case EAnimationPlaying: - { - // do nothing - break; - } - case EAnimationNotReady: - default: - { - break; - } - } - - if( iAnimationState == EAnimationPlaying ) - { - if ( iDrawingBitmap - && iEngine - && iLastError == KErrNone ) // loading was successful - { - TSize drawingBitmapSize( iDrawingBitmap->Bitmap().SizeInPixels() ); - if ( drawingBitmapSize.iHeight == iTargetNewSize.iHeight - && drawingBitmapSize.iWidth == iTargetNewSize.iWidth ) - { - // we do not need to do scaling - } - else - { - // we need to do scaling - CFbsBitmapDevice* bitmapDevice = CFbsBitmapDevice::NewL( iScalingBitmap ); - CleanupStack::PushL(bitmapDevice); - CFbsBitGc* graphicsContext = NULL; - User::LeaveIfError( bitmapDevice->CreateContext( graphicsContext ) ); - CleanupStack::PushL( graphicsContext ); - TRect srcRect( iSourceImage->Size() ); - graphicsContext->DrawBitmap( iTargetSize, &iDrawingBitmap->Bitmap(), srcRect ); - CleanupStack::PopAndDestroy( 2 );//graphicsContext,bitmapDevice - - if ( iDrawingBitmap->HasMask() ) - { - CFbsBitmapDevice* bitmapMaskDevice = CFbsBitmapDevice::NewL( iScalingBitmapMask ); - CleanupStack::PushL(bitmapMaskDevice); - CFbsBitGc* graphicsMaskContext = NULL; - User::LeaveIfError( bitmapMaskDevice->CreateContext( graphicsMaskContext ) ); - CleanupStack::PushL( graphicsMaskContext ); - graphicsContext->DrawBitmap( iTargetSize, &iDrawingBitmap->Mask(), srcRect ); - CleanupStack::PopAndDestroy( 2 );//graphicsContext,bitmapDevice - } - } - } - - MakeVisible( ETrue ); - DrawNow(); - } - } - -// --------------------------------------------------------- -// Handles engine errors. -// --------------------------------------------------------- -// -void CGifAnimationPluginControl::ViewerError( TInt aError ) - { - DBG_TRACE_FN_BEGIN; - iLastError = aError; - HandleCallback( aError ); - DBG_TRACE_FN_END; - } - - -// --------------------------------------------------------- -// Handles error codes; stores the error -// --------------------------------------------------------- -// -void CGifAnimationPluginControl::HandleCallback( TInt aError ) - { - DBG_TRACE_FN_BEGIN; - - if ( aError ) - { - InformPluginFinished(); - } - - DBG_TRACE_FN_END; - } - - -// --------------------------------------------------------- -// Informs that plug-in wants to terminate -// --------------------------------------------------------- -// -void CGifAnimationPluginControl::InformPluginFinished() - { - - ASSERT( iPluginAdapter ); - - StopAnimation(); - - TRAP_IGNORE(iPluginAdapter->PluginFinishedL()); - } - -void CGifAnimationPluginControl::SetPreviewMode() - { - isPreviewMode = ETrue; - } diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPluginDllApi.cpp --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPluginDllApi.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,278 +0,0 @@ -/* -* Copyright (c) 2005 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: Screensaver GifAnimation plug-in API file -* -*/ - - - - - -#include // IHLImageFactory - -#include "GifAnimationPlugin.h" -#include "NPNExtensions.h" -#include "GifAnimationUtils.h" - -// ======== Ecom interface functions implementation ======== - -NPError GifAnimationPluginNewp( NPMIMEType /*pluginType*/, - NPP instance, - uint16 /*mode*/, - CDesCArray* /*argn*/, - CDesCArray* /*argv*/, - NPSavedData* /*saved*/ ) - { - DBG_TRACE_FN_BEGIN; - CGifAnimationPlugin* lGifAnimationPlugin=NULL; - TRAPD(err,lGifAnimationPlugin=CGifAnimationPlugin::NewL( instance ) ); - - if ( err == KErrNoMemory ) - { - DBG_TRACE_FN_END; - return NPERR_OUT_OF_MEMORY_ERROR; - } - if ( err != KErrNone ) - { - DBG_TRACE_FN_END; - return NPERR_MODULE_LOAD_FAILED_ERROR; - } - instance->pdata = (void *) lGifAnimationPlugin; - DBG_TRACE_FN_END; - return NPERR_NO_ERROR; - } - -NPError GifAnimationPluginDestroy( NPP instance, NPSavedData** /*save*/ ) - { - DBG_TRACE_FN_BEGIN; - CGifAnimationPlugin* lGifAnimationPlugin = - ( CGifAnimationPlugin * )instance->pdata; - if ( lGifAnimationPlugin ) - { - TRAPD( err, lGifAnimationPlugin->PrepareToExitL() ); - if ( err != KErrNone ) - { - DBG_TRACE( - "GifAnimationPluginDestroy Error when PrepareToExitL()" ); - } - /**Ignoring the error*/ - delete lGifAnimationPlugin; - lGifAnimationPlugin = NULL; - } - DBG_TRACE_FN_END; - return NPERR_NO_ERROR; - } - -NPError GifAnimationPluginSetWindow( NPP instance, NPWindow *window ) - { - DBG_TRACE_FN_BEGIN; - CGifAnimationPlugin* lGifAnimationPlugin = - (CGifAnimationPlugin *) instance->pdata; - TUint lWidth = window->width; - TUint lHeight = window->height; - TRAPD( err, - lGifAnimationPlugin->SetWindowL( window, - TRect( TSize( lWidth, lHeight ) ) ) ); - - if ( err == KErrNoMemory ) - { - DBG_TRACE_FN_END; - return NPERR_OUT_OF_MEMORY_ERROR; - } - if ( err != KErrNone ) - { - DBG_TRACE_FN_END; - return NPERR_GENERIC_ERROR; - } - DBG_TRACE_FN_END; - return NPERR_NO_ERROR; - } - -NPError GifAnimationPluginNewStream( NPP /*instance*/, - NPMIMEType /*type*/, - NPStream* /*stream*/, - NPBool /*seekable*/, - uint16* stype ) - { - DBG_TRACE_FN_BEGIN; - *stype = NP_ASFILEONLY; - DBG_TRACE_FN_END; - return NPERR_NO_ERROR; - } - -NPError GifAnimationPluginDestroyStream( NPP /*instance*/, - NPStream* /*stream*/, - NPReason /*reason*/ ) - { - DBG_TRACE_FN_BEGIN; - // - DBG_TRACE_FN_END; - return NPERR_NO_ERROR; - } - -void GifAnimationPluginAsFile( NPP instance, - NPStream* /*stream*/, - const TDesC& fname ) - { - DBG_TRACE_FN_BEGIN; - CGifAnimationPlugin* lGifAnimationPlugin = - ( CGifAnimationPlugin* )instance->pdata; - TRAP_IGNORE( lGifAnimationPlugin->Control()->LoadImageL( fname ) ); - DBG_TRACE_FN_END; - } - -int32 GifAnimationPluginWriteReady( NPP /*instance*/, NPStream* /*stream*/ ) - { - DBG_TRACE_FN_BEGIN; - // - DBG_TRACE_FN_END; - return 65536; - } - -int32 GifAnimationPluginWrite( NPP /*instance*/, - NPStream* /*stream*/, - int32 /*offset*/, - int32 len, - void* /*buffer*/ ) - { - DBG_TRACE_FN_BEGIN; - // - DBG_TRACE_FN_END; - return len; - } - -int16 GifAnimationPluginEvent( NPP /*instance*/, void* /*event*/ ) - { - DBG_TRACE_FN_BEGIN; - // - DBG_TRACE_FN_END; - return 0; - } - - -NPError GifAnimationPluginGetValue( NPP instance, - NPPVariable variable, - void* ret_value ) - { - DBG_TRACE_FN_BEGIN; - if ( variable == NPPCheckFileIsValid ) - { - NPCheckFile* checkFile = (NPCheckFile*)ret_value; - TRAPD( err, - CGifAnimationPluginControl::CheckFileIsValidL( - checkFile->fileName->Des() ) ); - - checkFile->fileValidityCheckError = err; - DBG_TRACE_FN_END; - return NPERR_NO_ERROR; - } - - if ( variable == NPPScreenSaverGetLastError ) - { - DBG_TRACE( "GetLastError" ); - TInt* retValue = (TInt*)ret_value; - CGifAnimationPlugin* lGifAnimationPlugin = - ( CGifAnimationPlugin* )instance->pdata; - *retValue = lGifAnimationPlugin->Control()->GetLastError(); - DBG_TRACE_FN_END; - return NPERR_NO_ERROR; - } - - // new command, panic - _LIT( KErrGetMsg, - "CGifAnimationPluginDllApi::GifAnimationPluginGetValue" ); - User::Panic( KErrGetMsg, KErrNotSupported ); - return NPERR_GENERIC_ERROR; - } - -NPError GifAnimationPluginSetValue( NPP instance, - NPNVariable variable, - void* value ) - { - DBG_TRACE_FN_BEGIN; - CGifAnimationPlugin* lGifAnimationPlugin = - ( CGifAnimationPlugin* )instance->pdata; - - if ( variable == NPNScreenSaverAnimationEvent ) - { - NPAnimationEvent* event = (NPAnimationEvent*)value; - switch ( *event ) - { - case NPStartAnimation: - DBG_TRACE( "StartAnimationL" ); - TRAPD( errStart, - lGifAnimationPlugin->Control()->StartAnimationL() ); - if ( errStart != KErrNone ) - { - DBG_TRACE( "StartAnimation failed!" ); - return NPERR_GENERIC_ERROR; - } - return NPERR_NO_ERROR; - case NPEndAnimation: - DBG_TRACE( "StopAnimation" ); - TRAPD( errEnd, - lGifAnimationPlugin->Control()->StopAnimation() ); - if (errEnd != KErrNone) - { - DBG_TRACE( "StopAnimation failed!" ); - return NPERR_GENERIC_ERROR; - } - DBG_TRACE_FN_END; - return NPERR_NO_ERROR; - default: - // new command, panic - _LIT( KErrSet1Msg, - "CGifAnimationPluginDllApi::GifAnimationPluginSetValue1" ); - User::Panic( KErrSet1Msg, KErrNotSupported ); - return NPERR_GENERIC_ERROR; - } - } - - if ( variable == NPScreenSaverMode ) - { - // we do not need the event - DBG_TRACE_FN_END; - return NPERR_NO_ERROR; - } - - if ( variable == NPNInteractionMode ) - { - // we do not need the event - DBG_TRACE_FN_END; - return NPERR_NO_ERROR; - } - - // new command, panic - _LIT( KErrSet2Msg, - "CGifAnimationPluginDllApi::GifAnimationPluginSetValue2" ); - User::Panic( KErrSet2Msg, KErrNotSupported ); - return NPERR_GENERIC_ERROR; - } - -void GifAnimationPluginURLNotify( NPP /*instance*/, - const TDesC& /*url*/, - NPReason /*reason*/, - void* /*notifyData*/ ) - { - DBG_TRACE_FN_BEGIN; - // - DBG_TRACE_FN_END; - } - -void GifAnimationPluginPrint( NPP /*instance*/, NPPrint* /*platformPrint*/ ) - { - DBG_TRACE_FN_BEGIN; - // - DBG_TRACE_FN_END; - } diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPluginMain.cpp --- a/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPluginMain.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/* -* Copyright (c) 2005 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: Screensaver GifAnimation plug-in API file -* -*/ - - - - - -#include -#include - - -#include "GifAnimationPlugin.h" -#include "GifAnimationUtils.h" - -// --------------------------------------------------------------------------- -// Table of implementation UID / implementation class factory -// --------------------------------------------------------------------------- -// -const TImplementationProxy KImplementationTable[] = - { - { { KGifAnimationPluginImplementationValue }, - (TProxyNewLPtr) CGifAnimationPluginEcomMain::NewL - } - }; - - -/************************************************************************/ -/**********ECOM STYLE Screensaver GifAnimation plug-in ENTRY POINTS******/ -/************************************************************************/ - -// --------------------------------------------------------------------------- -// Instance factory. -// --------------------------------------------------------------------------- -// -CGifAnimationPluginEcomMain* CGifAnimationPluginEcomMain::NewL( - TAny* aInitParam ) - { - DBG_TRACE_FN_BEGIN; - TFuncs* funcs = REINTERPRET_CAST( TFuncs*, aInitParam); - CGifAnimationPluginEcomMain* self = - new( ELeave )CGifAnimationPluginEcomMain( funcs->iNetscapeFuncs ); - CleanupStack::PushL(self); - self->Construct( funcs->iPluginFuncs ); - CleanupStack::Pop(); - DBG_TRACE_FN_END; - return self; - } - -// --------------------------------------------------------------------------- -// Destructor. -// --------------------------------------------------------------------------- -// -CGifAnimationPluginEcomMain::~CGifAnimationPluginEcomMain() - { - DBG_TRACE_FN_BEGIN; - // nothing here - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------------------------- -// 2nd phase constructor. -// --------------------------------------------------------------------------- -// -void CGifAnimationPluginEcomMain::Construct( NPPluginFuncs* aPluginFuncs ) - { - DBG_TRACE_FN_BEGIN; - InitializeFuncs( aPluginFuncs ); - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------------------------- -// Initializes NPP with pointers to implementing functions. -// --------------------------------------------------------------------------- -// -NPError CGifAnimationPluginEcomMain::InitializeFuncs( NPPluginFuncs* aPpf ) - { - DBG_TRACE_FN_BEGIN; - aPpf->size = sizeof(NPPluginFuncs); - aPpf->version = 1; - aPpf->newp = NewNPP_NewProc( GifAnimationPluginNewp ); - aPpf->destroy = NewNPP_DestroyProc( GifAnimationPluginDestroy ); - aPpf->setwindow = NewNPP_SetWindowProc( GifAnimationPluginSetWindow ); - aPpf->newstream = NewNPP_NewStreamProc( GifAnimationPluginNewStream ); - aPpf->destroystream = NewNPP_DestroyStreamProc( - GifAnimationPluginDestroyStream ); - aPpf->asfile = NewNPP_StreamAsFileProc( GifAnimationPluginAsFile ); - aPpf->writeready = NewNPP_WriteReadyProc( - GifAnimationPluginWriteReady ); - aPpf->write = NewNPP_WriteProc( GifAnimationPluginWrite ); - aPpf->print = NewNPP_PrintProc( GifAnimationPluginPrint ); - aPpf->event = NewNPP_HandleEventProc( GifAnimationPluginEvent ); - aPpf->urlnotify = NewNPP_URLNotifyProc( GifAnimationPluginURLNotify ); - aPpf->javaClass = NULL; - aPpf->getvalue = NewNPP_GetValueProc( GifAnimationPluginGetValue ); - aPpf->setvalue = NewNPP_SetValueProc( GifAnimationPluginSetValue ); - - DBG_TRACE_FN_END; - return NPERR_NO_ERROR; - } - -// --------------------------------------------------------------------------- -// Constructor. -// --------------------------------------------------------------------------- -// -CGifAnimationPluginEcomMain::CGifAnimationPluginEcomMain( - NPNetscapeFuncs* aNpf ) - : CEcomBrowserPluginInterface(), iNpf( aNpf ) - { - DBG_TRACE_FN_BEGIN; - // - DBG_TRACE_FN_END; - } - -// --------------------------------------------------------------------------- -// Returns the filters implemented in this DLL -// Returns: The filters implemented in this DLL -// --------------------------------------------------------------------------- -// -EXPORT_C const TImplementationProxy* ImplementationGroupProxy( - TInt& aTableCount ) - { - DBG_TRACE_FN_BEGIN; - aTableCount = sizeof( KImplementationTable ) - / sizeof( TImplementationProxy ); - DBG_TRACE_FN_END; - return KImplementationTable; - } - -#ifndef EKA2 -// --------------------------------------------------------------------------- -// The E32Dll() entry point function. Deprecated. -// --------------------------------------------------------------------------- -// -GLDEF_C TInt E32Dll(TDllReason /*aReason*/) - { - DBG_TRACE_FN_BEGIN; - // - DBG_TRACE_FN_END; - return KErrNone; - } -#endif // EKA2 diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/data/102823EC.rss --- a/scrsaver/scrsaverplugins/SlideshowPlugin/data/102823EC.rss Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/* -* Copyright (c) 2006 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: ECOM Resource file for slideshowplugin -* -*/ - - - - - -// INCLUDES -#include - -#include "ScreensaverpluginIntDef.hrh" -#include "SlideshowPluginImpUID.hrh" - -// RESOURCE DEFINITIONS -// ----------------------------------------------------------------------------- -// -// theInfo -// ECOM DLL interface & implementation description resource. -// -// ----------------------------------------------------------------------------- -// -RESOURCE REGISTRY_INFO theInfo - { - dll_uid = 0x102823EC; - interfaces = - { - INTERFACE_INFO - { - interface_uid = KCScreensaverPluginInterfaceDefinitionUid; - implementations = - { - IMPLEMENTATION_INFO - { - implementation_uid = KSlideshowPluginImpUID; - version_no = 1; - display_name = "Slideshow"; - default_data = ""; - opaque_data = "07"; // Conf, sel notif, preview notif - } - }; - } - }; - } -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/data/SlideshowPlugin.rss --- a/scrsaver/scrsaverplugins/SlideshowPlugin/data/SlideshowPlugin.rss Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ -/* -* Copyright (c) 2006 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: Localisable resources of SlideshowPlugin -* -*/ - - - - - -// RESOURCE IDENTIFIER - -NAME SSSS - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// --------------------------------------------------------- -// -// Define the resource file signature -// This resource should be empty. -// -// --------------------------------------------------------- -// -RESOURCE RSS_SIGNATURE - { - } - - -RESOURCE TBUF - { - buf = "SlideshowScreensaver"; - } - - -// --------------------------------------------------- -// -// r_slideshow_screensaver_name -// -// --------------------------------------------------- -// -RESOURCE TBUF r_slideshow_screensaver_name - { - buf = qtn_slideshow_screensaver_name; - } - - -// --------------------------------------------------- -// -// r_sanim_title_settings -// -// --------------------------------------------------- -// -RESOURCE TBUF r_sanim_not_supported - { - buf = qtn_err_not_supp; - } - - -// --------------------------------------------------- -// -// r_sanim_title_settings -// -// --------------------------------------------------- -// -RESOURCE TBUF r_sanim_error_wrong_format - { - buf = qtn_sanim_error_wrong_format; - } - - -// --------------------------------------------------- -// -// r_sanim_file_not_selected -// -// --------------------------------------------------- -// -RESOURCE TBUF r_sanim_file_not_selected - { - buf = qtn_sanim_file_not_selected; - } - - -// --------------------------------------------------- -// -// r_sanim_err_failure -// -// --------------------------------------------------- -// -RESOURCE TBUF r_sanim_err_failure - { - buf = qtn_err_failure; - } - - -// --------------------------------------------------- -// -// r_drm_prev_rights_set -// -// --------------------------------------------------- -// -RESOURCE TBUF r_drm_prev_rights_set - { - buf = qtn_drm_prev_rights_set; - } - - -// End of File - - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/group/ABLD.BAT --- a/scrsaver/scrsaverplugins/SlideshowPlugin/group/ABLD.BAT Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -@ECHO OFF - -REM Bldmake-generated batch file - ABLD.BAT -REM ** DO NOT EDIT ** - -perl -S ABLD.PL "\S60\screensaver\plugins\SlideshowPlugin\group\\" %1 %2 %3 %4 %5 %6 %7 %8 %9 -if errorlevel==1 goto CheckPerl -goto End - -:CheckPerl -perl -v >NUL -if errorlevel==1 echo Is Perl, version 5.003_07 or later, installed? -goto End - -:End diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/group/SlideshowPlugin.mmp --- a/scrsaver/scrsaverplugins/SlideshowPlugin/group/SlideshowPlugin.mmp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -/* -* Copyright (c) 2006 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: Makefile for Screensaver Slideshow plugin -* -*/ - - - - - -#include -#include -#include - -TARGET slideshowplugin.dll -TARGETTYPE PLUGIN -UID 0x10009D8D 0x102823EC - -CAPABILITY CAP_ECOM_PLUGIN -VENDORID VID_DEFAULT - -START RESOURCE ../data/102823EC.rss -TARGET slideshowplugin.rsc -END - -START RESOURCE ../data/SlideshowPlugin.rss -HEADER -TARGETPATH RESOURCE_FILES_DIR -LANGUAGE_IDS -END // RESOURCE - - -/* exportunfrozen */ - -SOURCEPATH ../src -SOURCE SlideshowPlugin.cpp -SOURCE SlideshowModel.cpp -SOURCE SlideshowSlide.cpp -SOURCE SlideshowSlideLoader.cpp -SOURCE SlideshowPluginUtils.cpp -SOURCE SlideshowPluginProxy.cpp - -USERINCLUDE ../inc - -// This is a SYSTEMINCLUDE macro containing the middleware -// layer specific include directories -APP_LAYER_SYSTEMINCLUDE - - -LIBRARY ecom.lib -LIBRARY euser.lib -LIBRARY fbscli.lib -LIBRARY bitgdi.lib -LIBRARY cone.lib -LIBRARY efsrv.lib -LIBRARY bafl.lib -LIBRARY ws32.lib -LIBRARY imageconversion.lib -LIBRARY CentralRepository.lib -LIBRARY CenRepNotifHandler.lib -LIBRARY drmhelper.lib -LIBRARY platformenv.lib -LIBRARY AknSkinSrv.lib -LIBRARY ContentListingFramework.lib -LIBRARY avkon.lib -LIBRARY eikdlg.lib -LIBRARY eikcore.lib -LIBRARY eikcoctl.lib - -// LIBRARY AknLayout2.lib // Scalable UI -// LIBRARY AknLayout2Scalable.lib // Scalable UI -// LIBRARY CdlEngine.lib // Scalable UI -// LIBRARY apgrfx.lib -// LIBRARY apmime.lib -// LIBRARY MGFetch.lib -// LIBRARY CommonEngine.lib -// LIBRARY flogger.lib -// LIBRARY caf.lib -// LIBRARY cafutils.lib -#ifdef __SERIES60_HELP -// LIBRARY hlplch.lib // for "Help" options menu -#endif // __SERIES60_HELP - - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/group/bld.inf --- a/scrsaver/scrsaverplugins/SlideshowPlugin/group/bld.inf Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/* -* Copyright (c) 2006 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: Build information file for slideshowplugin -* -*/ - - - - -PRJ_PLATFORMS -// Defaults - -PRJ_MMPFILES -#ifdef __SLIDESHOW_SCREENSAVER -SlideshowPlugin.mmp -#endif - -PRJ_EXPORTS -../loc/slideshowplugin.loc MW_LAYER_LOC_EXPORT_PATH(slideshowplugin.loc) - -../rom/SlideshowPlugin.iby CORE_MW_LAYER_IBY_EXPORT_PATH(SlideshowPlugin.iby) -../rom/SlideshowPluginResources.iby LANGUAGE_MW_LAYER_IBY_EXPORT_PATH(SlideshowPluginResources.iby) - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowModel.h --- a/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowModel.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,258 +0,0 @@ -/* -* Copyright (c) 2006 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: Takes care of storing and serving the slides -* to Slideshow plugin -* -*/ - - - -#ifndef C_SLIDESHOWMODEL_H -#define C_SLIDESHOWMODEL_H - -#include - -class CSlideshowSlide; - -// Slide Array's size. 5 seems like a reasonable granularity -const TInt KSlideshowSlideArrayGranularity = 5; - -//Slide status -//this is only called in startplugin, Dont call it anywhere -//Get next slide status -const TInt KStatusNoSlide = 0; //no side -const TInt KStatusSlideDecoded = 1; //already decoded -const TInt KStatusDecodingInProgress =2; //decoding in progress -const TInt KStatusSlideNotDecoding = 3; //slide is there but not decoded -const TInt KStatusSlideDecodeingFailed = 4; //could not decode the file - -// Slideshow model. -// Contains slideshow slides, serves the slides to Slideshow plugin -class CSlideshowModel : public CBase - { - -public: - /** - * Return a new CSlideshowModel object - */ - static CSlideshowModel* NewL(); - - /** - * Desconstructor - */ - virtual ~CSlideshowModel(); - -private: - /** - * Default constructor - */ - CSlideshowModel(); - - /* - * Two-phase constructor, initialises member arrays and stuff - */ - virtual void ConstructL(); - -public: // Access functions - /* - * Number of slides query. - */ - TInt NumberOfSlides() const; - - /* - * Add a slide to the end of the array. - * - * @param aSlide The new slide which will be added to the silde array. - */ - void AppendSlideL(CSlideshowSlide* aSlide); - - /* - * Insert a slide at . Space must be reserved. - * - * @param aIndex The postion index which the new slide will be insert to. - * @param aSilde The new slide which will be insert. - */ - void InsertSlideL(TInt aIndex, CSlideshowSlide* aSlide); - - /* - * Delete slide at . - * - * @param aIndex The slide at will be delete. - */ - void DeleteSlide(TInt aIndex); - - /* - * Delete all slides. - */ - void DeleteAll(); - - /* - * Get slide at position . - * - * @return a slide at position . - */ - CSlideshowSlide* SlideAt(TInt aIndex) const; - - /* - * Get current slide index. - * - * @return the current slide index. - */ - inline TInt CurrentSlideIndex() const; - - /* - * Set current slide index. - * - * @param aIndex The slide index, which will be show. - */ - inline void SetCurrentSlideIndex(TInt aIndex); - - /* - * Get next slide in sequence - * - * @param aRandom No used now. - * @return the next slide. - */ - CSlideshowSlide* NextSlide(TBool aRandom); - - /* - * Get slide status: decoded, decoding ,not started,decoding failed,no slide. - * - * @param aSlide the slide which status will be detected. - * @return status of aSlide. - */ - TInt SlideStatus(CSlideshowSlide* aSlide); - - /* - * Prepare next slide. - * @param aRandom Whether select next slide random.( ETrue is random, EFalse is sequential) - * @param aTargetSize The slide Size. - */ - void PrepareNextSlide(TBool aRandom, const TSize& aTargetSize); - - /* - * Release next slide. - */ - void ReleaseNextSlide(); - - /* - * Release Current slide. - */ - void ReleaseCurrentSlide(); - - /* - * Get next slide index. - * - * @return the position index which slide will be on. - */ - inline TInt NextSlideIndex() const; - - /* - * Reserve space for slides. - * - * @param aCount The slide number. - */ - void SetReserveL(TInt aCount); - - /* - * Query if model is busy (decoding a slide). - * - * @return status whether the model is ready.(ETrue is ready, EFalse is not) - */ - TBool Busy(); - - /* - * Reset slide sequence, note that this will not release current image - */ - inline void ResetSlideSequence(); - -private: // Utility functions - /* - * Get a random number in the range aMin - aMax (inclusive) - * - * @param aMax The upper limited. - * @param aMin The lower limited. - * @return an random number which is between aMax and aMin. - */ - TInt Random(TInt aMax, TInt aMin = 0); - -private: - /* - * Slide array - */ - CArrayPtrFlat* iSlides; - - /* - * Current slide index - */ - TInt iCurrentSlide; - - /* - * Next slide index - */ - TInt iNextSlide; - - /* - * Random seed - */ - TInt64 iRandSeed; - - /* - * Busy flag - */ - TBool iBusy; - }; - -//------------------------------------------------------------------------------ -// CSlideshowModel::CurrentSlideIndex -//------------------------------------------------------------------------------ -// -TInt CSlideshowModel::CurrentSlideIndex() const - { - return iCurrentSlide; - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::SetCurrentSlideIndex -//------------------------------------------------------------------------------ -// -void CSlideshowModel::SetCurrentSlideIndex(TInt aIndex) - { - iCurrentSlide = aIndex; - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::NextSlideIndex -//------------------------------------------------------------------------------ -// -TInt CSlideshowModel::NextSlideIndex() const - { - return iNextSlide; - } - -//------------------------------------------------------------------------------ -// CSlideshowModel::ResetSlideSequence -//------------------------------------------------------------------------------ -// -void CSlideshowModel::ResetSlideSequence() - { - iCurrentSlide = 0; - iNextSlide = -1; - } - -#endif // C_CSLIDESHOWMODEL_H - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowPlugin.h --- a/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowPlugin.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,327 +0,0 @@ -/* -* Copyright (c) 2006 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: Implements the Slideshow plugin beef, especially -* MScreensaverPlugin interface -* -*/ - - - -#ifndef C_SLIDESHOWPLUGIN_H -#define C_SLIDESHOWPLUGIN_H - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "SlideshowModel.h" -#include "SlideshowSlide.h" -#include "SlideshowPluginUtils.h" - -class CEikonEnv; -class CDRMHelper; -class CRepositoryWatcher; -class CRepository; - - -/** -* Encapsulates the Settings that are written into the central repository -* @lib ScreenSaverAnimPlugin.lib -* @since 3.1 -*/ -class CSlideshowSettings : public CBase - { -public: - CSlideshowSettings(); - -public: - // Slideshow time - TInt iSlideshowTime; - - // Lights time - TInt iLightsTime; - - // Time a slide is displayed - TInt iSlideTime; - - // Slideshow type - TInt iSlideshowType; - }; - - -/** -* Provides the Animated ScreenSaverPlugin functionality which implements -* ScreenSaver Interface and gives a Netscape Browser Plugin Interface -* to the format specific plugins like SVG, Flash, M3G etc. -* @lib ScreenSaverAnimPlugin.lib -* @since 3.1 -*/ -class CSlideshowPlugin: public CScreensaverPluginInterfaceDefinition, - public MCLFOperationObserver - { - enum TPluginState - { - EPluginStateLoading = 0, - EPluginStateInitializing, - EPluginStateRunning, - EPluginStateStopping - }; - -public: - - /** - * Creator - * @since 3.1 - */ - static CSlideshowPlugin* NewL(); - - /** - * Destructor - */ - virtual ~CSlideshowPlugin(); - -private: - /** - * 2nd phase constructor - * @since 3.1 - */ - void ConstructL(); - - /** - * Default Constructor - * @since 3.1 - */ - CSlideshowPlugin(); - -public: // Functions From CScreensaverPluginInterfaceDefinition - - /** - * From MScreensaverPlugin, Method called by Screensaver - * when plugin is being loaded into use - * @param aHost Plugin host (Screensaver). - * @since 3.1 - */ - virtual TInt InitializeL(MScreensaverPluginHost *aHost); - - /** - * From MScreensaverPlugin, Method called by Screensaver - * when plugin is allowed to draw - * @since 3.1 - */ - virtual TInt Draw( CWindowGc& aGc ); - - /** - * From MScreensaverPlugin, Method called by Themes application - * to get localised name - * @since 3.1 - */ - virtual const TDesC16& Name() const; - - /** - * From MScreensaverPlugin, Method called by Screensaver - * to get the capabilities of screensaver plugin - * @since 3.1 - */ - virtual TInt Capabilities(); - - /** - * From MScreensaverPlugin, Method called by Themes application - * to configure the plugin or to pass e.g. selection notifications - * to plugin - * @since 3.1 - */ - virtual TInt PluginFunction( - TScPluginCaps /* aFunction */, - TAny* /* aParam */ ); - - /** - * From MScreensaverPlugin, Method called by Screensaver - * when there are screensaver events, such as starting and stopping - * @since 3.1 - */ - virtual TInt HandleScreensaverEventL( - TScreensaverEvent aEvent, - TAny* aData ); - - -public: // From MCLFOperationObserver - - /** - * From MCLFOperationObserver. Called by CLF when e.g. a content listing - * operation is finished. - * @since S60 3.1 - * @param aOperationEvent Operation event code of the event - * @param aError System wide error code if the operation did not - * succeed. - */ - virtual void HandleOperationEventL(TCLFOperationEvent aOperationEvent, - TInt aError); - - -public: // New Functions - - /** - * Reads the settings from the central repository - * @since 3.1 - * @return System wide Error value - */ - TInt ReadSettings(); - -#if 0 - /** - * This method checks whether the set file exists currently - * if not, it updates the filename string - * This also checks if the rights are valid if the content is drm - * if not, it updates the filename with the empty file name - * returns True, if the Filename is updated - * False, otherwise - * @since 3.2 - */ - TBool UpdateFileName(); -#endif - - /** - * Called when there is a central repository settings change - * @since 3.2 - */ - void HandleCRSettingsChange(TAny* aPtr); - - /** - * Called by the repository watcher when there is a central - * repository settings change - * @since 3.2 - */ - static TInt HandleRepositoryCallBack(TAny* aPtr); - - /** - * Called by the P & S subscriber when the subscribed key value changes - * @since 3.2 - */ - static TInt HandleSettingsChanged(TAny* aPtr); - -private: // New functions - - /** - * Connects the central repository session - * @since 3.1 - */ - void InitializeCenRepL(); - - /** - * Registers for central repository key changes - * @since 3.1 - */ - void NotifyCenrepChangeL(); - - /** - * Cancels registration for central repository key changes - * @since 3.1 - */ - void NotifyCenrepChangeCancel(); - - /** - * Disconnects the central repository session - * @since 3.1 - */ - void UnInitializeCenRep(); - - void StartPlugin(); - void StopPlugin(); - void DrawCentered(CWindowGc& aGc, CSlideshowSlide* aSlide); - void LoadSlidesL(); - void LoadSlideSetL(); - void LoadRandomSlidesL(); - void SetDisplayMode(); - void Lights(TInt aSecs); - void ConfigureL(TAny* aParam); - void UpdateDisplayInfo(); - void FlushDrawBuffer(); - - TInt SettingsChanged(); - - void ConnectToCLFL(); - void WaitForCLF(); - void EndWaitForCLF(); - -private: - // Pointer to the screensaver host - MScreensaverPluginHost* iHost; - - // Display info - TScreensaverDisplayInfo iDi; - - // Plugin state tracking - TInt iState; - - // Resource file offset - TInt iResourceOffset; - - // Handle to the central repository session - CRepository* iSlideshowRepository; - - // Environment pointer - CEikonEnv* iEikEnv; - - // Pointer to settings - CSlideshowSettings* iSettings; - - // Slideshow model - CSlideshowModel* iModel; - - // Pointer to Drm Helper - CDRMHelper* iDrmHelper; - - // Cenrep watcher for settings change - CRepositoryWatcher* iSlideshowCRWatcher; - - RProperty iSettingsChangedProperty; - CPSSubscriber* iSettingsChangedSubscriber; - - // Localised name - HBufC* iScreensaverName; - - // Gallery content listing engine - MCLFContentListingEngine* iCLFEngine; - - // Gallery content listing model - MCLFItemListModel* iCLFModel; - - // CLF status - TInt iCLFError; - - // CLF model state - TBool iCLFModelUpToDate; - - - // Waiter - CActiveSchedulerWait iWaiter; - TBool iWaitActive; - - // Draw count - TInt iDrawCount; - TBool iTimerUpdated; - }; - - -#endif // C_SLIDESHOWPLUGIN_H -// End Of file diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowPluginImpUID.hrh --- a/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowPluginImpUID.hrh Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -/* -* Copyright (c) 2006 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: Defines the ECOM Implementation UIDs. -* -*/ - - - - - -#ifndef SLIDESHOWPLUGINIMPUID_HRH -#define SLIDESHOWPLUGINIMPUID_HRH - -#define KSlideshowPluginImpUID 0x102823ED - -#endif // SLIDESHOWPLUGINIMPUID_HRH -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowPluginUtils.h --- a/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowPluginUtils.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,283 +0,0 @@ -/* -* Copyright (c) 2006 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: SlideshowPlugin utilities collection -* -*/ - - - -#ifndef C_SLIDESHOWPLUGINUTILS_H -#define C_SLIDESHOWPLUGINUTILS_H - -// INCLUDES -#include -#include -#include - -#include "SlideshowSlide.h" - -// FORWARD DECLARATIONS -class CDRMHelper; -class CCoeEnv; -class CRepository; - -// CLASS DECLARATION - -/** -* Central Repository Change watcher -* @since 3.2 -* @internal -*/ -class CRepositoryWatcher : public CBase, public MCenRepNotifyHandlerCallback - { -public: - static CRepositoryWatcher* NewL( - const TUid aUid, - const TUint32 aKey, - CCenRepNotifyHandler::TCenRepKeyType aKeyType, - TCallBack aCallBack, - CRepository* aRepository); - - static CRepositoryWatcher* NewL( - const TUid aUid, - TCallBack aCallBack, - CRepository* aRepository); - - ~CRepositoryWatcher(); - - TUint32 ChangedKey(); - -public: // from MCenRepNotifyHandlerCallback - void HandleNotifyInt(TUint32 aKey, TInt aNewValue); - void HandleNotifyString(TUint32 aKey, const TDesC16& aNewValue); - void HandleNotifyGeneric(TUint32 aKey); - void HandleNotifyError( - TUint32 aKey, TInt aError, CCenRepNotifyHandler* aHandler); - -private: - CRepositoryWatcher( - const TUid aUid, - const TUint32 aKey, - TCallBack aCallBack, - CRepository* aRepository); - - void ConstructL(CCenRepNotifyHandler::TCenRepKeyType aKeyType); - - void ConstructL(); - -private: - TUid iUid; - TUint32 iKey; - TUint32 iChangedKey; - TCallBack iCallBack; - CRepository* iRepository; - CCenRepNotifyHandler* iNotifyHandler; -}; - - -/** -* Publish & Subscribe change subscriber -* @since 3.2 -* @internal -*/ -class CPSSubscriber : public CActive - { -public: - CPSSubscriber(TCallBack aCallBack, RProperty& aProperty); - ~CPSSubscriber(); - -public: // New functions - void SubscribeL(); - void StopSubscribe(); - -private: // from CActive - void RunL(); - void DoCancel(); - -private: - TCallBack iCallBack; - RProperty& iProperty; -}; - - -// ========== UTILITIES CLASS ============================= - -class SlideshowUtil - { -public: - // Checks if memory card is present - static TBool IsMCPresent(); - - // Checks if the given file is on memory card - static TBool IsOnMC(TFileName aFile); - - // Checks that the file has enough DRM rights to be displayed - static TBool DRMCheck(CDRMHelper *aDRMHelper, TDesC& aFileName); - - // Checks that the slide has enough DRM rights to be displayed - static TBool DRMCheck(CDRMHelper *aDRMHelper, CSlideshowSlide* aSlide); - - // Consumes the slide's DRM rights - static void DRMConsume(CDRMHelper* aDRMHelper, CSlideshowSlide* aSlide); - -private: - /** - * Static class can not be instantiated. - */ - SlideshowUtil(); - //lint -esym(1526, SlideshowUtil::SlideshowUtil) Intentionally undefined - - /** - * Static class can not be instantiated. - */ - ~SlideshowUtil(); - }; - - -// ========== LOGGING MACROS =============================== - -#ifdef USE_LOGGER - -#include -#include -#include -#include - - -/* logging macros usage: - -// set logging on in mmp file... -MACRO USE_LOGGER -#ifdef WINS -MACRO USE_RDEBUG -#endif - - -void CTestAppUi::ConstructL() -{ -// creates log directory and log file on app startup. -// prints starting banner... -SCRLOGGER_CREATE; - -// entering to function... -SCRLOGGER_ENTERFN("ConstructL()"); - -TInt number = 42; -TFileName file; -file = "something" .... - -// print variable number of parameters... -// Note: use _L macro for format string! -SCRLOGGER_WRITEF(_L("SCR: number = %d, file = %S"), number, &file); - -// print just a string (no _L macro here!) -SCRLOGGER_WRITE("Hello world!"); - -// leave from function... -SCRLOGGER_LEAVEFN("ConstructL()"); -} - -CTestAppUi::~CTestAppUi() -{ -// print app exit banner when application exits. -SCRLOGGER_DELETE; -} - -*/ - -#ifdef USE_RDEBUG - -_LIT(KSSPLogBanner, "SlideshowPlugin log start"); -_LIT(KSSPLogEnterFn, "SSP: enter --> %S"); -_LIT(KSSPLogLeaveFn, "SSP: leave <-- %S"); -_LIT(KSSPLogWrite, "SSP: %S"); -_LIT(KSSPLogTag, "SSP: "); -_LIT(KSSPLogExit, "SlideshowPlugin log end"); -_LIT(KSSPLogTimeFormatString, "%H:%T:%S:%*C2"); - -#define SSPLOGGER_CREATE {RDebug::Print(KSSPLogBanner);} -#define SSPLOGGER_DELETE {RDebug::Print(KSSPLogExit);} -#define SSPLOGGER_ENTERFN(a) {_LIT(temp, a); RDebug::Print(KSSPLogEnterFn, &temp);} -#define SSPLOGGER_LEAVEFN(a) {_LIT(temp, a); RDebug::Print(KSSPLogLeaveFn, &temp);} -#define SSPLOGGER_WRITE(a) {_LIT(temp, a); RDebug::Print(KSSPLogWrite, &temp);} -#define SSPLOGGER_WRITE_TIMESTAMP(a) {_LIT(temp, a); TTime time; time.HomeTime(); TBuf<256> buffer; time.FormatL(buffer, KSSPLogTimeFormatString); buffer.Insert(0, temp); buffer.Insert(0, KSSPLogTag); RDebug::Print(buffer); } -#define SSPLOGGER_WRITEF RDebug::Print - -#else - -_LIT(KSSPLogDir, "SSP"); -_LIT(KSSPLogFile, "SSP.txt"); -_LIT8(KSSPLogBanner, "SlideshowPlugin log start"); -_LIT8(KSSPLogEnterFn, "SSP: -> %S"); -_LIT8(KSSPLogLeaveFn, "SSP: <- %S"); -_LIT8(KSSPLogExit, "SlideshowPlugin log end"); -_LIT(KSSPLogTimeFormatString, "%H:%T:%S:%*C2"); - -#define SSPLOGGER_CREATE {FCreate();} -#define SSPLOGGER_DELETE {RFileLogger::Write(KSSPLogDir, KSSPLogFile, EFileLoggingModeAppend, KSSPLogExit);} -#define SSPLOGGER_ENTERFN(a) {_LIT8(temp, a); RFileLogger::WriteFormat(KSSPLogDir, KSSPLogFile, EFileLoggingModeAppend, KSSPLogEnterFn, &temp);} -#define SSPLOGGER_LEAVEFN(a) {_LIT8(temp, a); RFileLogger::WriteFormat(KSSPLogDir, KSSPLogFile, EFileLoggingModeAppend, KSSPLogLeaveFn, &temp);} -#define SSPLOGGER_WRITE(a) {_LIT(temp, a); RFileLogger::Write(KSSPLogDir, KSSPLogFile, EFileLoggingModeAppend, temp);} -#define SSPLOGGER_WRITE_TIMESTAMP(a) {_LIT(temp, a); TTime time; time.HomeTime(); TBuf<256> buffer; time.FormatL(buffer, KSSPLogTimeFormatString); buffer.Insert(0, temp); RFileLogger::Write(KSSPLogDir, KSSPLogFile, EFileLoggingModeAppend, buffer); } -#define SSPLOGGER_WRITEF FPrint - -inline void FPrint(const TRefByValue aFmt, ...) - { - VA_LIST list; - VA_START(list, aFmt); - RFileLogger::WriteFormat(KSSPLogDir, KSSPLogFile, EFileLoggingModeAppend, aFmt, list); - } - -inline void FPrint(const TDesC& aDes) - { - RFileLogger::WriteFormat(KSSPLogDir, KSSPLogFile, EFileLoggingModeAppend, aDes); - } - -inline void FHex(const TUint8* aPtr, TInt aLen) - { - RFileLogger::HexDump(KSSPLogDir, KSSPLogFile, EFileLoggingModeAppend, 0, 0, aPtr, aLen); - } - -inline void FHex(const TDesC8& aDes) - { - FHex(aDes.Ptr(), aDes.Length()); - } - -inline void FCreate() - { - TFileName path(_L("c:\\logs\\")); - path.Append(KSSPLogDir); - path.Append(_L("\\")); - RFs& fs = CEikonEnv::Static()->FsSession(); - fs.MkDirAll(path); - RFileLogger::WriteFormat(KSSPLogDir, KSSPLogFile, EFileLoggingModeOverwrite, KSSPLogBanner); - } - -#endif // USE_RDEBUG - -#else // USE_LOGGER - -inline void FPrint(const TRefByValue /*aFmt*/, ...) { }; - -#define SSPLOGGER_CREATE -#define SSPLOGGER_DELETE -#define SSPLOGGER_ENTERFN(a) -#define SSPLOGGER_LEAVEFN(a) -#define SSPLOGGER_WRITE(a) -#define SSPLOGGER_WRITEF 1 ? ((void)0) : FPrint -#define SSPLOGGER_WRITE_TIMESTAMP(a) - -#endif // USE_LOGGER - -#endif // C_SLIDESHOWPLUGINUTILS_H diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowSlide.h --- a/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowSlide.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* -* Copyright (c) 2006 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: Stores a single slide -* -*/ - - - -#ifndef C_SLIDESHOWSLIDE_H -#define C_SLIDESHOWSLIDE_H - -// INCLUDES -#include // e32def, e32std -#include -#include - -#include "SlideshowSlideLoader.h" - -// CONSTANTS - -// Leave code when a slide is on memory card and the card is not present -const TInt KSSTryLater = (-100); - -// MACROS - -// Item flags -#define SSS_NONE 0x00 -#define SSS_IMAGELOADED 0x01 -#define SSS_ISONMC 0x02 -#define SSS_DECODEFAILED 0x04 - - -// DATA TYPES - -// EXTERNAL DATA STRUCTURES - -// FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// CLASS DEFINITIONS -class CSlideshowSlide : public CBase - { -public: - // Creator - static CSlideshowSlide* NewL(TDesC& aFileName, TBool aIsOnMC = EFalse); - - // Destructor - virtual ~CSlideshowSlide(); - - // Is decoding is in progress - TBool IsDecodingInProgress(); - - // Could not decode the file - TBool CouldNotDecodeFile(); - - // - friend class CSlideshowSlideLoader; -private: - - // Default constructor - CSlideshowSlide(TBool aIsOnMC); - - // 2-phase - void ConstructL(TDesC& aFileName); - -public: - - // Prepares slide (loads image) - void PrepareSlideL(const TSize& aTargetSize); - - // Get image - CFbsBitmap* Image() const { return iImage; } - - // Get filename - HBufC* FileName() const { return iFileName; } - - // Release image - void ReleaseImage(); - - // Get flags - TInt Flags() const { return iFlags; } - - // Is slide decoded completely - TBool IsSlideDecoded(); - -protected: - //Empty -private: - // Type flags - TInt iFlags; - - // Image - CFbsBitmap* iImage; - - // Filename - HBufC* iFileName; - CSlideshowSlideLoader *iSlideLoader; - }; - -#endif // C_SLIDESHOWSLIDE_H diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowSlideLoader.h --- a/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowSlideLoader.h Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* -* Copyright (c) 2006 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: Loads a slide from file -* -*/ - - - -#ifndef C_SLIDESHOWSLIDELOADER_H -#define C_SLIDESHOWSLIDELOADER_H - -#include -#include -#include -#include -#include -#include -#include -#include - -class CSlideshowSlide; -class CSlideshowSlideLoader : public CActive - { -public: - // Creator - static CSlideshowSlideLoader* NewL(CSlideshowSlide *aSlide); - - // Called when image decoding done - void RunL(); - - // Called if user calls Cancel() on active object - void DoCancel(); - - //virtual distructor - virtual ~CSlideshowSlideLoader(); - - //start decoding the slide - void LoadSlideL(const TDesC& aFilename, const TSize& aTargetSize); - -private: - - // Default constructor - CSlideshowSlideLoader(CSlideshowSlide *aSlide); - - //Two Phase constructor - void ConstructL(); - - //Delete the Decoder object - void DeleteDecoder(); - - //From CActive - TInt RunError(TInt aError); - -private: - - // Target size (Phone screen size) - TSize iTargetSize; - //Bitmap size - TSize iBitmapsize; - //Decoder - CImageDecoder * iDecoder; - //Slide - CSlideshowSlide * iSlide; - - }; - -#endif // C_SLIDESHOWSLIDELOADER_H diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/loc/slideshowplugin.loc --- a/scrsaver/scrsaverplugins/SlideshowPlugin/loc/slideshowplugin.loc Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -/* -* Copyright (c) 2006 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: Localization strings for Slideshow screensaver -* -*/ - - - - - -//d: Screensaver name -//d: Displayed in Themes application screensaver list -//l: list_set_graphic_pane_t1 -//w: -//r:3.2 -#define qtn_slideshow_screensaver_name "Slideshow" - -//d: Title Pane String -//d: Displayed in the title Pane when settings dialog is displayed. -//l: title_pane_1 -//w: -//r:3.2 -#define qtn_sanim_title_settings "Settings" - -// Taken from errorres.loc -// d: Generic error note to be displayed when user tries to -// d: use some feature which is not supported -// l: popup_note_window_1_four_rows -// w: Errorres -// r: 3.2 -#define qtn_err_not_supp "Feature is not supported" - -// d: error note to be displayed when user tries to -// d: select some file which is corrupted -// l: popup_note_window/opt2 -// w: -// r:3.2 -#define qtn_sanim_error_wrong_format "File is corrupted or wrong format" - -// d: error note to be displayed when user hasnt -// d: selected a file -// l: popup_note_window/opt2 -// w: -// r:3.2 -#define qtn_sanim_file_not_selected "File not Selected" - -// d: error note to be displayed when animation couldnot -// d: be played as a screensaver -// l: popup_note_window_1_four_rows -// w: -// r:3.2 -#define qtn_err_failure "Unable to perform operation" - -// d: error note to be displayed when animation couldnot -// d: be set as a screensaver -// l: popup_note_window_1_four_rows -// w: -// r:3.2 -#define qtn_drm_prev_rights_set "Unable to select.Object can only be viewed" - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/rom/SlideshowPlugin.iby --- a/scrsaver/scrsaverplugins/SlideshowPlugin/rom/SlideshowPlugin.iby Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2006 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: IBY file for Slideshowplugin.dll -* -*/ - - - - -#ifndef SLIDESHOWPLUGIN_IBY -#define SLIDESHOWPLUGIN_IBY - -#ifdef __SLIDESHOW_SCREENSAVER -ECOM_PLUGIN(SlideshowPlugin.dll, 102823EC.rsc) -#endif - -#endif // SLIDESHOWPLUGIN_IBY -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/rom/SlideshowPluginResources.iby --- a/scrsaver/scrsaverplugins/SlideshowPlugin/rom/SlideshowPluginResources.iby Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* -* Copyright (c) 2006 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: IBY file for SlideshowPlugin resources -* -*/ - - - - -#ifndef SLIDESHOWPLUGINRESOURCES_IBY -#define SLIDESHOWPLUGINRESOURCES_IBY - -#ifdef __SLIDESHOW_SCREENSAVER -data=DATAZ_\RESOURCE_FILES_DIR\SlideshowPlugin.rsc RESOURCE_FILES_DIR\SlideshowPlugin.rsc -#endif - -#endif // SLIDESHOWPLUGINRESOURCES_IBY -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowModel.cpp --- a/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowModel.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,441 +0,0 @@ -/* -* Copyright (c) 2006 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: Takes care of storing and serving the slides -* to Slideshow plugin -* -*/ - - -#include -#include -#include - -#include "SlideshowModel.h" -#include "SlideshowPluginUtils.h" - -//------------------------------------------------------------------------------ -// CSlideshowModel::NewL -//------------------------------------------------------------------------------ -// -CSlideshowModel* CSlideshowModel::NewL() - { - CSlideshowModel* self = new (ELeave) CSlideshowModel(); - - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - return self; - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::~CSlideshowModel -//------------------------------------------------------------------------------ -// -CSlideshowModel::~CSlideshowModel() - { - // Delete slide array - if (iSlides) - { - iSlides->ResetAndDestroy(); - } - delete iSlides; - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::CSlideshowModel -//------------------------------------------------------------------------------ -// -CSlideshowModel::CSlideshowModel() - : iNextSlide(-1) - { - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::ConstructL -//------------------------------------------------------------------------------ -// -void CSlideshowModel::ConstructL() - { - // Create slide array - iSlides = new(ELeave) CArrayPtrFlat( - KSlideshowSlideArrayGranularity); - - //Get random seed - TTime time; - time.HomeTime(); - iRandSeed = time.Int64(); - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::NumberOfSlides -//------------------------------------------------------------------------------ -// -TInt CSlideshowModel::NumberOfSlides() const - { - //if the slide array is not NULL, return it's size - return iSlides ? iSlides->Count() : 0; - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::AppendSlideL -//------------------------------------------------------------------------------ -// -void CSlideshowModel::AppendSlideL(CSlideshowSlide* aSlide) - { - // Sanity check - if (!iSlides) - { - ASSERT(EFalse); - return; - } - - // Stash it in - iSlides->AppendL(aSlide); - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::InsertSlideL -//------------------------------------------------------------------------------ -// -void CSlideshowModel::InsertSlideL(TInt aIndex, CSlideshowSlide* aSlide) - { - if ((iSlides) && (aIndex >= 0) && (aIndex <= NumberOfSlides())) - { - // Squeeze it in - iSlides->InsertL(aIndex, aSlide); - } - else - { - ASSERT(EFalse); - } - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::DeleteSlide -//------------------------------------------------------------------------------ -// -void CSlideshowModel::DeleteSlide(TInt aIndex) - { - //Sanity check - if ((iSlides) && (aIndex >= 0) && (aIndex <= NumberOfSlides())) - { - // Grab hold of the slide for deletion, remove from array - // and compress the array - CSlideshowSlide* ptr = iSlides->At(aIndex); - - iSlides->Delete(aIndex); - delete ptr; - iSlides->Compress(); - - } - else - { - ASSERT(EFalse); - } - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::DeleteAll -//------------------------------------------------------------------------------ -// -void CSlideshowModel::DeleteAll() - { - //Sanity check - if (iSlides) - { - iSlides->ResetAndDestroy(); - } - - iCurrentSlide = 0; - iNextSlide = -1; - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::SlideAt -//------------------------------------------------------------------------------ -// -CSlideshowSlide* CSlideshowModel::SlideAt(TInt aIndex) const - { - if ((iSlides) && (aIndex >= 0) && (aIndex < NumberOfSlides())) - { - //return the postion object - return iSlides->At(aIndex); - } - else - { - return NULL; - } - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::NextSlide -//------------------------------------------------------------------------------ -// -CSlideshowSlide* CSlideshowModel::NextSlide(TBool /*aRandom */) - { - if (iNextSlide < 0) - { - // Next slide could not be prepared, or preparenextslide not called - return NULL; - } - - CSlideshowSlide* pSlide = SlideAt(iNextSlide); - - if (!pSlide) - { - // Apparently there are no more slides - wrap around - iCurrentSlide = -1; - iNextSlide = 0; - pSlide = SlideAt(iNextSlide); - } - - iCurrentSlide = iNextSlide; - return pSlide; - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::PrepareNextSlide -//------------------------------------------------------------------------------ -// -void CSlideshowModel::PrepareNextSlide(TBool aRandom, const TSize& aTargetSize) - { - SSPLOGGER_WRITE("Model::PrepareNextSlide(), model busy"); - - SSPLOGGER_WRITEF(_L("SPP: iCurrentSlide %d, iNextSlide %d"), - iCurrentSlide, iNextSlide); - - TBool slideOK = EFalse; - while (!slideOK) - { - TInt nSlides = NumberOfSlides(); - // Any point in continuing? - if (nSlides == 0) - { - iNextSlide = -1; - break; - } - - // Special cases, 1 or 2 slides only - if (nSlides == 1) - { - iNextSlide = 0; - SSPLOGGER_WRITEF(_L("SPP: One slide, next slide %d"), iNextSlide); - } - else if (nSlides == 2) - { - // Switch between slides even if random - iNextSlide = (iNextSlide == 0 ? 1 : 0); - SSPLOGGER_WRITEF(_L("SPP: 2 slides, next slide %d"), iNextSlide); - } - else - { - // We got at least 3 slides, and can also do random - if (aRandom) - { - // Make sure we won't pick the same slide - do - { - iNextSlide = Random(nSlides - 1); - } - while (iNextSlide == iCurrentSlide); - - SSPLOGGER_WRITEF(_L("SPP: Random, next slide %d"), iNextSlide); - } - else - { - iNextSlide++; - - // Wrap? - if (iNextSlide >= nSlides) - { - SSPLOGGER_WRITE("Wrapping..."); - iNextSlide = 0; - } - SSPLOGGER_WRITEF(_L("SPP: Continuous, next slide %d"), - iNextSlide); - } - } - - // Get the slide - CSlideshowSlide* pSlide = SlideAt(iNextSlide); - - if (!pSlide) - { - // Should not have happened - start from beginning - iNextSlide = 0; - SSPLOGGER_WRITEF(_L("SPP: Wrapping, next slide %d"), - iNextSlide); - pSlide = SlideAt(iNextSlide); - } - - if (pSlide) - { - // Try loading the image, if image does not already exist - if (!pSlide->IsSlideDecoded()) - { - SSPLOGGER_WRITE("Preparing next slide"); - if(iCurrentSlide != iNextSlide) - { - // relese currently deleted image from RAM.( We dont have caching) - ReleaseCurrentSlide(); - } - if ((TInt)ETrue == pSlide->CouldNotDecodeFile()) - { - // could not decode this file last time. so delete this slide from the - // list of slide and go to the next one. - DeleteSlide(iNextSlide); - iNextSlide--; - continue; - } - TRAPD(err, pSlide->PrepareSlideL(aTargetSize)); - if (err == KErrNone) - { - //wait for slide to load. - iCurrentSlide = iNextSlide; - SSPLOGGER_WRITE("Started Decoding Wait"); - break; - } - else - { - // Apparently the file was not a loadable image - - // remove from slideset and try again - SSPLOGGER_WRITEF(_L("SSP: Deleting slide %d"), iNextSlide); - DeleteSlide(iNextSlide); - iNextSlide--; - continue; // can not load this image, go to the next one. - } - } - else - { - // Slide is already decoded. This is cool, if the file is - // still there. Otherwise lose image and go on. - // should not come here as we dont any caching - SSPLOGGER_WRITEF(_L("Slide %d already has image"), iNextSlide); - - if (!BaflUtils::FileExists(CEikonEnv::Static()->FsSession(), - *(pSlide->FileName()))) - { - SSPLOGGER_WRITE("Slide image file gone, dropping image"); - pSlide->ReleaseImage(); - continue; // continue with next image - } - else - { - if(iCurrentSlide != iNextSlide) - { - ReleaseCurrentSlide(); - } - break; - } - } - } - } - SSPLOGGER_WRITE("Model::PrepareNextSlide() end, model no longer busy"); - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::ReleaseCurrentSlide -//------------------------------------------------------------------------------ -// -void CSlideshowModel::ReleaseCurrentSlide() - { - CSlideshowSlide* pSlide = SlideAt(iCurrentSlide); - if(pSlide) - { - pSlide->ReleaseImage(); - } - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::ReleaseNextSlide -//------------------------------------------------------------------------------ -// -void CSlideshowModel::ReleaseNextSlide() - { - CSlideshowSlide* pSlide = SlideAt(iNextSlide); - if(pSlide) - { - pSlide->ReleaseImage(); - } - iNextSlide --; - } - - -//------------------------------------------------------------------------------ -// CSlideshowModel::SetReserveL -//------------------------------------------------------------------------------ -// -void CSlideshowModel::SetReserveL(TInt aCount) - { - if ((iSlides) && (aCount >= NumberOfSlides())) - { - iSlides->SetReserveL(aCount); - } - } - -//------------------------------------------------------------------------------ -// CSlideshowModel::SlideStatus -//------------------------------------------------------------------------------ -// -TInt CSlideshowModel::SlideStatus(CSlideshowSlide* aSlide) - { - if(!aSlide) - { - return KStatusNoSlide; - } - else if(aSlide->IsSlideDecoded()) - { - return KStatusSlideDecoded; - } - else if(aSlide->IsDecodingInProgress()) - { - return KStatusDecodingInProgress; - } - else if (aSlide->CouldNotDecodeFile()) - { - return KStatusSlideDecodeingFailed; - } - - return KStatusSlideNotDecoding; - } - - - -//------------------------------------------------------------------------------ -// CSlideshowModel::Random -//------------------------------------------------------------------------------ -// -TInt CSlideshowModel::Random(TInt aMax, TInt aMin /* = 0 */) - { - TInt range = aMax - aMin; - TInt rand = Math::Rand(iRandSeed); - return (rand % range); - } - - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPlugin.cpp --- a/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPlugin.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1083 +0,0 @@ -/* -* Copyright (c) 2006 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: This file implements the Slideshow Screensaver plugin. -* -*/ - - - -#include -#include -#include -#include -#include - -// #include AppendSlideL -// #include -// #include -// #include -#include -#include // For CleanupResetAndDestroyPushL -#include -#include - -// #include -#include -#include - -#include -#include - -#include - -#include "SlideshowPlugin.h" -#include "SlideshowSlide.h" -#include "SlideshowPluginUtils.h" - -// Constants -const TInt KSecsToMicros = 1000000; - -// Slideshow duration times (secs) -const TInt KMinSlideshowTime = 1; -const TInt KMaxSlideshowTime = 60; -const TInt KDefaultSlideshowTime = 5; - -// Backlight times (secs) -const TInt KMinLightsTime = 0; -const TInt KMaxLightsTime = 30; -const TInt KDefaultLightsTime = 0; - -// Slide times -// const TInt KMinSlideTime = 1; -// const TInt KMaxSlideTime = 30; -const TInt KDefaultSlideTime = 5; - -// Refresh interval (Draw() call frequency) in secs. -// For better resolution kept smaller than slide time -const TInt KRefreshInterval = 1; - -// Slideshow type -const TInt KSlideshowTypeContinuous = 0; -const TInt KSlideshowTypeRandom = 1; - -// const TInt KScreensaverAnimPluginInterfaceUid = 0x102750CB; - -_LIT(KResourceFileName, "Z:SlideshowPlugin.rsc"); - - -CSlideshowSettings::CSlideshowSettings() - { - iSlideshowTime = KDefaultSlideshowTime; - iLightsTime = KDefaultLightsTime; - iSlideTime = KDefaultSlideTime; - iSlideshowType = KSlideshowTypeContinuous; - } - -// ============================ MEMBER FUNCTIONS ============================= - - -// --------------------------------------------------------------------------- -// CSlideshowPlugin::NewL -// --------------------------------------------------------------------------- -// -CSlideshowPlugin* CSlideshowPlugin::NewL() - { - CSlideshowPlugin* self = new (ELeave) CSlideshowPlugin; - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - - -// ---------------------------------------------------------------------------- -// CSlideshowPlugin::~CSlideshowPlugin -// ---------------------------------------------------------------------------- -// -CSlideshowPlugin::~CSlideshowPlugin() - { - if (iResourceOffset != 0) - { - iEikEnv->DeleteResourceFile(iResourceOffset); - } - - // Close and delete CR handlers - NotifyCenrepChangeCancel(); - UnInitializeCenRep(); - - // Close and delete P&S handlers - if (iSettingsChangedSubscriber) - { - iSettingsChangedSubscriber->StopSubscribe(); - } - iSettingsChangedProperty.Close(); - delete iSettingsChangedSubscriber; - - delete iScreensaverName; - delete iSettings; - delete iDrmHelper; - delete iModel; - - // First model, then engine, otherwise bad things happen - delete iCLFModel; - delete iCLFEngine; - - // Logging done - SSPLOGGER_DELETE; - } - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::ConstructL -// ----------------------------------------------------------------------------- -// -void CSlideshowPlugin::ConstructL() - { - // Start logging - SSPLOGGER_CREATE; - - iModel = CSlideshowModel::NewL(); - iSettings = new (ELeave) CSlideshowSettings(); - - // Get nearest language resource file and add it to the - // eikon environment for the duration of the plugin life - TFileName fileName; - TParse lParse; - - // Add the resource dir - lParse.Set(KResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL); - - // Get the filename with full path - fileName = lParse.FullName(); - - iEikEnv = CEikonEnv::Static(); - - BaflUtils::NearestLanguageFile(iEikEnv->FsSession(), fileName); - - iResourceOffset = iEikEnv->AddResourceFileL(fileName); - - // Load localised name of screensaver to be returned - // to Themes app in Name() query - iScreensaverName = iEikEnv->AllocReadResourceL(R_SLIDESHOW_SCREENSAVER_NAME); - - InitializeCenRepL(); - - // Read settings - ReadSettings(); - - // Make sure random slides are loaded - iCLFModelUpToDate = EFalse; - - iTimerUpdated = EFalse; - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::CSlideshowPlugin -// ----------------------------------------------------------------------------- -CSlideshowPlugin::CSlideshowPlugin() - { - } - - -// --- MScreensaverPlugin --- - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::InitializeL -// ----------------------------------------------------------------------------- -TInt CSlideshowPlugin::InitializeL(MScreensaverPluginHost *aHost) - { - SSPLOGGER_ENTERFN("InitializeL()"); - - iWaitActive = EFalse; - iDrawCount = 0; - - if (!aHost) - { - return KErrArgument; - } - - iHost = aHost; - // iHost->UseRefreshTimer( EFalse ); - - NotifyCenrepChangeL(); - - // No indicators while plugin running - iHost->OverrideStandardIndicators(); - - // Get display info - UpdateDisplayInfo(); - - // Attach and start watching settings changed key - User::LeaveIfError(iSettingsChangedProperty.Attach( - KPSUidScreenSaver, KScreenSaverPluginSettingsChanged)); - - iSettingsChangedSubscriber = new (ELeave) CPSSubscriber( - TCallBack(HandleSettingsChanged, this), iSettingsChangedProperty); - iSettingsChangedSubscriber->SubscribeL(); - - iDrmHelper = CDRMHelper::NewL(*iEikEnv); - - // Load slides on start rather than here - // LoadSlidesL(); - - // Make sure random slides are loaded - iCLFModelUpToDate = EFalse; - - SSPLOGGER_LEAVEFN("InitializeL()"); - - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::Draw -// ----------------------------------------------------------------------------- -TInt CSlideshowPlugin::Draw(CWindowGc& aGc) - { - SSPLOGGER_ENTERFN("Draw()"); - - // Clear the screen on the very first draw call after starting - if (iDrawCount < 0) - { - iDrawCount = 0; - aGc.SetBrushColor(KRgbBlack); - aGc.Clear(); - } - - // If still waiting for CLF, bail out - if (iWaitActive) - { - SSPLOGGER_WRITE("Draw(): Waiting for CLF, bail out"); - SSPLOGGER_LEAVEFN("Draw()"); - return KErrNone; - } - // Make sure we have something to display - if (iModel->NumberOfSlides() == 0) - { - SSPLOGGER_WRITE("Draw(): Nothing to display, suspending"); - SSPLOGGER_LEAVEFN("Draw()"); -// iHost->Suspend( -1 ); // This place will be crashed when transform to default type - return KErrNotFound; - } - - CSlideshowSlide* pSlide = iModel->NextSlide(EFalse); - // get the status of the slide - TInt status = iModel->SlideStatus(pSlide); // TInt decoded(1), decoding(2), not decoding(3),no slide (0) - // 4 could not decode the slide - if(KStatusDecodingInProgress == status) - { - // decoding in progress... return - // when ever decoding is going on.. call draw method every 1 second to check the status of the decoding - // and draw the image as soon as it is available ( otherwise Draw is called every 5 secods, very bad user responce) - if(iTimerUpdated) - { - iHost->SetRefreshTimerValue(KSecsToMicros); - iTimerUpdated = EFalse; - } - return KErrNone; - } - else if (KStatusSlideDecoded == status) - { - // File was decoded properly and available - SSPLOGGER_WRITEF(_L("SSP: Draw(): Got slide (%x), drawing"), pSlide); - - // Consume slide's DRM rights - SlideshowUtil::DRMConsume(iDrmHelper, pSlide); - - // Make sure the window is empty in case the bitmap doesn't - // fill the whole screen. Draw background black - aGc.SetBrushColor(KRgbBlack); - // aGc.SetBrushStyle(CGraphicsContext::ESolidBrush); - aGc.Clear(); - // Draw image centered - DrawCentered(aGc, pSlide); - if(iHost && !iTimerUpdated) - { - iHost->SetRefreshTimerValue(iSettings->iSlideTime * KSecsToMicros); - iTimerUpdated = ETrue; - } - // Flush draw buffer so that the new image is displayed immediately - FlushDrawBuffer(); - SSPLOGGER_WRITE("Draw(): Prepare next slide"); - - SSPLOGGER_LEAVEFN("Draw()"); - } - - // Prefetch image for the next slide - iModel->PrepareNextSlide( - (iSettings->iSlideshowType == KSlideshowTypeRandom), iDi.iRect.Size()); - - SSPLOGGER_LEAVEFN("Draw()"); - - return KErrNone; - - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::Name -// ----------------------------------------------------------------------------- -const TDesC16& CSlideshowPlugin::Name() const - { - if (iScreensaverName) - { - return *iScreensaverName; - } - else - { - return KNullDesC; - } - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::Capabilities -// ----------------------------------------------------------------------------- -TInt CSlideshowPlugin::Capabilities() - { - return (EScpCapsConfigure | EScpCapsSelectionNotification); - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::PluginFunction -// ----------------------------------------------------------------------------- -TInt CSlideshowPlugin::PluginFunction( - TScPluginCaps aFunction, - TAny* aParam) - { - TInt ret = KErrNone; - - switch (aFunction) - { - case EScpCapsSelectionNotification: - case EScpCapsPreviewNotification: - // Peek into the slideset - TRAP(ret, LoadSlidesL()); - if (ret!=KErrNone || iModel->NumberOfSlides() == 0) - { - SSPLOGGER_WRITE("No slides selected - launching settings"); - TRAP(ret, ConfigureL(aParam)); - // Check if at least one file is selected - TRAP(ret, LoadSlidesL()); - if ( ret == KErrNone && iModel->NumberOfSlides() == 0) - { - // Don't Pop an error note, just return error - return KErrCancel; - } - } - break; - case EScpCapsConfigure: - // Configure command - TRAP(ret, ConfigureL(aParam)); - break; - default: - break; - } - - return ret; - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::HandleScreensaverEventL -// ----------------------------------------------------------------------------- -TInt CSlideshowPlugin::HandleScreensaverEventL( - TScreensaverEvent aEvent, - TAny* /*aData*/ ) - { - switch (aEvent) - { - case EScreensaverEventStopping: - StopPlugin(); - break; - - case EScreensaverEventStarting: - StartPlugin(); - break; - - case EScreensaverEventDisplayChanged: - UpdateDisplayInfo(); - break; - - case EScreensaverEventTimeout: - StopPlugin(); - iHost->Suspend(-1); - break; - - default: - break; - } - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// From MCLFOperationObserver. Called by CLF when e.g. a content listing -// operation is finished. -// ----------------------------------------------------------------------------- -void CSlideshowPlugin::HandleOperationEventL(TCLFOperationEvent aOperationEvent, - TInt aError) - { - if (aOperationEvent == ECLFRefreshComplete) - { - iCLFError = aError; - EndWaitForCLF(); - } - - if (aOperationEvent == ECLFModelOutdated) - { - // Need to update random list on next start - iCLFModelUpToDate = EFalse; - } - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::ReadSettings -// ----------------------------------------------------------------------------- -TInt CSlideshowPlugin::ReadSettings() - { - TInt err = KErrNone; - - err = iSlideshowRepository->Get( - KThemesScreenSaverSlideSetDuration, - iSettings->iSlideshowTime); - - if ((iSettings->iSlideshowTime < KMinSlideshowTime) || - (iSettings->iSlideshowTime > KMaxSlideshowTime)) - { - // Out of range, set to default - iSettings->iSlideshowTime = KDefaultSlideshowTime; - } - - err = iSlideshowRepository->Get( - KThemesScreenSaverSlideSetBacklight, - iSettings->iLightsTime); - - if ((iSettings->iLightsTime < KMinLightsTime) || - (iSettings->iLightsTime > KMaxLightsTime)) - { - // Out of range, set to default - iSettings->iLightsTime = KDefaultLightsTime; - } - - err = iSlideshowRepository->Get( - KThemesScreenSaverSlideSetType, - iSettings->iSlideshowType); - - // No setting for slide timing - iSettings->iSlideTime = KDefaultSlideTime; - - return err; - } - -#if 0 - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::UpdateFileName -// ----------------------------------------------------------------------------- -// -TBool CSlideshowPlugin::UpdateFileName() - { - if ( !BaflUtils::FileExists( iEikEnv->FsSession(), - iSettings->iFileName ) ) - { - // File is deleted now, Show empty string - iSettings->iFileName.Copy( KEmptyString ); - return ETrue; - } - - TBool canbeautomated(EFalse); - - TInt res = 0; - iDrmHelper->SetAutomatedType( - CDRMHelper::EAutomatedTypeScreenSaver ); - res = iDrmHelper->CanSetAutomated( iSettings->iFileName, - canbeautomated ); - - if ( res || !canbeautomated) - { - iSettings->iFileName.Copy( KEmptyString ); - return ETrue; - } - return EFalse; - } - -#endif - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::HandleRepositoryCallBack -// ----------------------------------------------------------------------------- -// -TInt CSlideshowPlugin::HandleRepositoryCallBack(TAny* aPtr) - { - STATIC_CAST(CSlideshowPlugin*, aPtr)->HandleCRSettingsChange(aPtr); - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::HandleCRSettingsChange -// ----------------------------------------------------------------------------- -// -void CSlideshowPlugin::HandleCRSettingsChange(TAny* /*aPtr*/) - { - if (iSlideshowCRWatcher) - { - TInt changedKey = iSlideshowCRWatcher->ChangedKey(); - - switch (changedKey) - { - case KThemesScreenSaverSlideSetType: - case KThemesScreenSaverSlideSetBacklight: - case KThemesScreenSaverSlideSetDuration: - // Update settings - ReadSettings(); - break; - - default: - // Not interested in other keys - break; - } - } - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::HandleSettingsChanged -// ----------------------------------------------------------------------------- -// -TInt CSlideshowPlugin::HandleSettingsChanged(TAny* aPtr) - { - return (STATIC_CAST(CSlideshowPlugin*, aPtr)->SettingsChanged()); - } - - -// --- private functions --- - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::InitializeCenRepL -// Connect Central Repository sessions -// ----------------------------------------------------------------------------- -void CSlideshowPlugin::InitializeCenRepL() - { - - TRAPD(err, iSlideshowRepository = CRepository::NewL(KCRUidThemes)); - User::LeaveIfError(err); - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::NotifyCenrepChangeL -// ----------------------------------------------------------------------------- -// -void CSlideshowPlugin::NotifyCenrepChangeL() - { - iSlideshowCRWatcher = CRepositoryWatcher::NewL( - KCRUidThemes, - TCallBack(HandleRepositoryCallBack, this), - iSlideshowRepository); - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::NotifyCenrepChangeCancel -// ----------------------------------------------------------------------------- -void CSlideshowPlugin::NotifyCenrepChangeCancel() - { - delete iSlideshowCRWatcher; - iSlideshowCRWatcher = NULL; - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::UnInitializeCenRep -// ----------------------------------------------------------------------------- -void CSlideshowPlugin::UnInitializeCenRep() - { - if (iSlideshowRepository) - { - delete iSlideshowRepository; - iSlideshowRepository = NULL; - } - } - - -// Starts the saver when screensaver starts -void CSlideshowPlugin::StartPlugin() - { - // Make sure we start from a clean slate - iDrawCount = -1; - - // (Re-)load slideset. When done on every start this avoids - // having to keep track of gallery changes and images on MMC. - TRAP_IGNORE(LoadSlidesL()); - - if (iModel->NumberOfSlides() == 0) - { - iHost->RevertToDefaultSaver(); - return; - } - - iModel->PrepareNextSlide( - (iSettings->iSlideshowType == KSlideshowTypeRandom), - iDi.iRect.Size()); - - if (iHost) - { - // Start animating as per settings - iHost->RequestTimeout(iSettings->iSlideshowTime); - Lights(iSettings->iLightsTime); - // let the draw method be called every 1 second till first image is available - iHost->SetRefreshTimerValue(KRefreshInterval * KSecsToMicros); - SetDisplayMode(); - } - } - - -// Stops the plugin -void CSlideshowPlugin::StopPlugin() - { - // Let go of pre-fetched images - iModel->ReleaseNextSlide(); - iTimerUpdated = EFalse; - } - - -// Draws centered slides -void CSlideshowPlugin::DrawCentered(CWindowGc& aGc, CSlideshowSlide* aSlide) - { - CFbsBitmap* bitmap = aSlide->Image(); - - if (!bitmap) - return; - - // Center the bitmap horizontally and vertically (crop off excess) - TPoint pos; - TRect rectToDraw; - TSize sizeBmp = bitmap->SizeInPixels(); - TInt screenWidth = iDi.iRect.Width(); - TInt screenHeight = iDi.iRect.Height(); - - // Horizontally - if (sizeBmp.iWidth <= screenWidth) - { - // Width fits on screen - center xpos - pos.iX = (screenWidth - sizeBmp.iWidth) / 2; - - // Whole width of bmp can be drawn - rectToDraw.SetWidth(sizeBmp.iWidth); - } - else - { - // Bmp wider than screen - xpos top left - pos.iX = 0; - - // Adjust draw rect position and width - rectToDraw.iTl.iX = (sizeBmp.iWidth - screenWidth) / 2; - rectToDraw.SetWidth(screenWidth); - } - - // Vertically - if (sizeBmp.iHeight <= screenHeight) - { - // Height fits on screen - center ypos - pos.iY = (screenHeight - sizeBmp.iHeight) / 2; - - // Whole height of bmp can be drawn - rectToDraw.SetHeight(sizeBmp.iHeight); - } - else - { - // Bmp higher than screen - ypos top left - pos.iY = 0; - - // Adjust draw rect position and height - rectToDraw.iTl.iY = (sizeBmp.iHeight - screenHeight) / 2; - rectToDraw.SetHeight(screenHeight); - } - - // Do the drawing - aGc.BitBlt(pos, bitmap, rectToDraw); - } - - -// Loads the slides into the model -void CSlideshowPlugin::LoadSlidesL() - { - SSPLOGGER_ENTERFN("LoadSlidesL()"); - - // Based on settings, load predefined set or random slides - if (iSettings->iSlideshowType == KSlideshowTypeRandom) - { - LoadRandomSlidesL(); - } - else - { - LoadSlideSetL(); - } - - SSPLOGGER_LEAVEFN("LoadSlidesL()"); - } - - -// Load filenames from settings file stored in skin server directory -void CSlideshowPlugin::LoadSlideSetL() - { - SSPLOGGER_ENTERFN("LoadSlideSetL()"); - - // Start by getting rid of possibly loaded slides - iModel->DeleteAll(); - - // Connect to skin server. - RAknsSrvSession skinSrv; - TInt error = skinSrv.Connect(); - User::LeaveIfError(error); - CleanupClosePushL(skinSrv); - - // Open images file - TInt fileSrvHandle; - TInt fileHandle; - fileSrvHandle = skinSrv.OpenImageInifile(EAknsSrvInifileSSSS, fileHandle); - - // Adopt the handle to our process - RFile imgFile; - error = imgFile.AdoptFromServer(fileSrvHandle, fileHandle); - User::LeaveIfError(error); - CleanupClosePushL(imgFile); - - // Read image filenames from file (as text) - TFileText textFile; - textFile.Set(imgFile); - textFile.Seek(ESeekStart); - - // Read until EOF - TInt count = 0; - TFileName fileName; - while (textFile.Read(fileName) == KErrNone) - { - // Check that the file exists. If not, it is still OK, if it is - // on the memory card - it may show up later. Omit files from other - // drives that do not exist at the time of loading - TBool exists = BaflUtils::FileExists(iEikEnv->FsSession(), fileName); - TBool isOnMC = SlideshowUtil::IsOnMC(fileName); - - if (!exists) // && (!isOnMC)) - { - // Do not add nonexisting files // from other than memory card - continue; - } -#if 0 - // Check that the file's DRM rights allow it to be displayed (if not - // missing because not on MMC - if (!SlideshowUtil::DRMCheck(fileName)) - { - // No point in adding files that cannot be displayed anyway - continue; - } -#endif - // Create a slide with the filename and store it in the model - CSlideshowSlide* pSlide = CSlideshowSlide::NewL(fileName, isOnMC); - CleanupStack::PushL(pSlide); - iModel->AppendSlideL(pSlide); - CleanupStack::Pop(pSlide); - - SSPLOGGER_WRITEF(_L("SSP: Slide %d added, file: %S"), count, &fileName); - count++; - } - - CleanupStack::PopAndDestroy(2); // imgFile, skinSrv - - SSPLOGGER_LEAVEFN("LoadSlideSetL()"); - } - - -// Load filenames from CLF -void CSlideshowPlugin::LoadRandomSlidesL() - { - SSPLOGGER_ENTERFN("LoadRandomSlidesL()"); - - // No need to do anything, if model hasn't become - // outdated since last loading - if (iCLFModelUpToDate) - { - return; - } - - // Start by getting rid of possibly loaded slides - iModel->DeleteAll(); - - // Make sure CLF is ready - ConnectToCLFL(); - - // Refresh CLF model - iCLFError = KErrNone; - iCLFModel->RefreshL(); - - // Wait for refresh to complete before continuing - WaitForCLF(); - - // On error bail out - if (iCLFError != KErrNone) - { - SSPLOGGER_WRITEF(_L("SSP: CLF refresh error %d"), iCLFError); - return; - } - - // Model is up to date - iCLFModelUpToDate = ETrue; - - // CLF model should now contain the image files in Gallery, proceed to - // load into our model - TInt nItems = iCLFModel->ItemCount(); - - // Loop through, add filenames - TInt count = 0; - for (TInt i = 0; i < nItems; i++) - { - // TFileName fileName; - TPtrC fileName; - TInt error = KErrNone; - - const MCLFItem& item = iCLFModel->Item(i); - - error = item.GetField(ECLFFieldIdFileNameAndPath, fileName); - - // If OK, add to model - if (error == KErrNone) - { - // Check that the file exists. If not, it is still OK, if it is - // on the memory card - it may show up later. Omit files from other - // drives that do not exist at the time of loading - // TODO: Can be removed, as slides are loaded on every start - TBool exists = BaflUtils::FileExists(iEikEnv->FsSession(), fileName); - TBool isOnMC = SlideshowUtil::IsOnMC(fileName); - - if (!exists) // && (!isOnMC)) - { - // Do not add nonexisting files from other than memory card - continue; - } -#if 0 - // Check that the file's DRM rights allow it to be displayed (if not - // missing because not on MMC - if (!SlideshowUtil::DRMCheck(fileName)) - { - // No point in adding files that cannot be displayed anyway - continue; - } -#endif - // Create a slide with the filename and store it in the model - CSlideshowSlide* pSlide = CSlideshowSlide::NewL(fileName, isOnMC); - CleanupStack::PushL(pSlide); - iModel->AppendSlideL(pSlide); - CleanupStack::Pop(pSlide); - - SSPLOGGER_WRITEF(_L("SSP: Slide %d added, file: %S"), count, &fileName); - count++; - } - } - - SSPLOGGER_LEAVEFN("LoadRandomSlidesL()"); - } - - -// Requests display mode from host -void CSlideshowPlugin::SetDisplayMode() - { - if (!iHost) - { - return; - } - - // Exit partial mode - iHost->ExitPartialMode(); - } - - -// Requests lights -void CSlideshowPlugin::Lights(TInt aSecs) - { - // Request nothing, if no time set (don't force lights off) - if ((iHost) && (aSecs > 0)) - { - SSPLOGGER_WRITEF(_L("SSP: Request lights for %d secs"), aSecs); - iHost->RequestLights(aSecs); - } - } - - -// Configure the plugin -void CSlideshowPlugin::ConfigureL(TAny* /* aParam */) - { - // Look for screensaver slideset setting interface - RImplInfoPtrArray array; - const TUid slidesetInterface = { 0x102823AD }; - const TUid slidesetImplUidScreensaver = { 0x102823AF }; - const TEComResolverParams emptyParams; - - REComSession::ListImplementationsL( - slidesetInterface, - emptyParams, - KRomOnlyResolverUid, - array); - CleanupResetAndDestroyPushL(array); - - // Loop through implementations and look for screensaver - // slideset implementation (this is not really completely - // necessary, because we already know the implementation UID, - // but we want to be sure it's there, and on ROM only - TInt nCount = array.Count(); - TUid implUid; - - for (TInt i = 0; i < nCount; i++) - { - CImplementationInformation* info = array[i]; - - if (info->ImplementationUid() == slidesetImplUidScreensaver) - { - // Found - implUid = info->ImplementationUid(); - break; - } - } - - // Did we get it? - if (implUid != slidesetImplUidScreensaver) - { - User::Leave(KErrNotFound); - } - - // Instantiate the interface - CPslnSlidesetDialogInterface* plugin = - CPslnSlidesetDialogInterface::NewL(implUid); - - TInt dlgRet = KErrNone; - if (plugin) - { - dlgRet = plugin->ExecuteDialogLD(); - } - - // Cleanup - array.ResetAndDestroy(); - CleanupStack::PopAndDestroy(); // array - - User::LeaveIfError(dlgRet); - } - - -// Updates the saved information about display -void CSlideshowPlugin::UpdateDisplayInfo() - { - iDi.iSize = sizeof(TScreensaverDisplayInfo); - iHost->DisplayInfo(&iDi); - } - - -// Flushes pending draws -void CSlideshowPlugin::FlushDrawBuffer() - { - iEikEnv->WsSession().Flush(); - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::SettingsChanged -// Called when Themes reports a settings change through P & S -// ----------------------------------------------------------------------------- -TInt CSlideshowPlugin::SettingsChanged() - { - // If current key value is nonzero, it means the settings - // have just changed, otherwise, no action necessary - TInt value = 0; - iSettingsChangedProperty.Get(value); - - if (value == EScreenSaverPluginSettingsChanged) - { -#if 0 - // Slide file has changed - re-load images - TRAP_IGNORE(LoadSlidesL()); - // Pre-fetch the fist image to be drawn - iModel->PrepareNextSlide( - (iSettings->iSlideshowType == KSlideshowTypeRandom), - iDi.iRect.Size()); -#endif - iSettingsChangedProperty.Set(EScreenSaverPluginSettingsNoChange); - } - - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// CSlideshowPlugin::ConnectToCLFL -// Connects to Content Listing Framework. Can be called many times, -// connects only once -// ----------------------------------------------------------------------------- -void CSlideshowPlugin::ConnectToCLFL() - { - if (!iCLFEngine) - { - iCLFEngine = ContentListingFactory::NewContentListingEngineLC(); - CleanupStack::Pop(); // LC - } - - if (!iCLFModel) - { - iCLFModel = iCLFEngine->CreateListModelLC(*this); - CleanupStack::Pop(); // LC - } - - // Set image types to model - RArray typeArray; - CleanupClosePushL(typeArray); - typeArray.AppendL(ECLFMediaTypeImage); - iCLFModel->SetWantedMediaTypesL(typeArray.Array()); - CleanupStack::PopAndDestroy(&typeArray); - } - - -// Begins wait for CLF -void CSlideshowPlugin::WaitForCLF() - { - if (iWaitActive) - { - return; - } - else - { - iWaitActive = ETrue; - iWaiter.Start(); - } - } - - -// Ends wait for CLF -void CSlideshowPlugin::EndWaitForCLF() - { - if (!iWaitActive) - { - return; - } - else - { - iWaiter.AsyncStop(); - iWaitActive = EFalse; - } - } - -// End Of file. diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPluginProxy.cpp --- a/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPluginProxy.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/* -* Copyright (c) 2006 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: ECOM implementation array. -* -*/ - - - - - - -// INCLUDE FILES -#include -#include -#include -#include -#include "SlideshowPluginImpUID.hrh" -#include "SlideshowPlugin.h" - -// CONSTANTS -const TImplementationProxy ImplementationTable[] = - { - IMPLEMENTATION_PROXY_ENTRY(KSlideshowPluginImpUID, - CSlideshowPlugin::NewL) - }; - -// ========================== OTHER EXPORTED FUNCTIONS ========================= - -// ----------------------------------------------------------------------------- -// ImplementationProxy -// ECOM implementation table entry. -// ----------------------------------------------------------------------------- -// -EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) - { - aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); - - return ImplementationTable; - } - -// End of File - diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPluginUtils.cpp --- a/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPluginUtils.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,327 +0,0 @@ -/* -* Copyright (c) 2006 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: SlideshowPlugin utility classes and functions -* -*/ - - - -// INCLUDE FILES -#include -#include -#include -#include -#include -#include - -#include "SlideshowPluginUtils.h" - -_LIT(KSSPDriveLetterMC, "E"); - -// ============================ MEMBER FUNCTIONS =============================== - -// Repository watcher - -// --------------------------------------------------------------------------- -// CRepositoryWatcher::NewL -// --------------------------------------------------------------------------- -// -CRepositoryWatcher* CRepositoryWatcher::NewL( - const TUid aUid, - const TUint32 aKey, - CCenRepNotifyHandler::TCenRepKeyType aKeyType, - TCallBack aCallBack, - CRepository* aRepository) - { - CRepositoryWatcher* self = new(ELeave) - CRepositoryWatcher(aUid, aKey, aCallBack, aRepository); - - CleanupStack::PushL(self); - self->ConstructL(aKeyType); - CleanupStack::Pop(self); - - return self; - } - -// --------------------------------------------------------------------------- -// CRepositoryWatcher::NewL -// --------------------------------------------------------------------------- -// -CRepositoryWatcher* CRepositoryWatcher::NewL( - const TUid aUid, - TCallBack aCallBack, - CRepository* aRepository) - { - CRepositoryWatcher* self = new(ELeave) CRepositoryWatcher( - aUid, NCentralRepositoryConstants::KInvalidNotificationId, aCallBack, aRepository); - - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - return self; - } - -// --------------------------------------------------------------------------- -// CRepositoryWatcher::~CRepositoryWatcher -// --------------------------------------------------------------------------- -// -CRepositoryWatcher::~CRepositoryWatcher() - { - if ( iNotifyHandler ) - { - iNotifyHandler->StopListening(); - delete iNotifyHandler; - } - } - -// --------------------------------------------------------------------------- -// CRepositoryWatcher::CRepositoryWatcher -// --------------------------------------------------------------------------- -// -CRepositoryWatcher::CRepositoryWatcher( - const TUid aUid, - const TUint32 aKey, - TCallBack aCallBack, - CRepository* aRepository) - : - iUid(aUid), iKey(aKey), iCallBack(aCallBack), iRepository(aRepository) - { - } - -// --------------------------------------------------------------------------- -// CRepositoryWatcher::ConstructL -// --------------------------------------------------------------------------- -// -void CRepositoryWatcher::ConstructL(CCenRepNotifyHandler::TCenRepKeyType aKeyType) - { - iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iRepository, aKeyType, iKey); - iNotifyHandler->StartListeningL(); - } - -// --------------------------------------------------------------------------- -// CRepositoryWatcher::ConstructL -// --------------------------------------------------------------------------- -// -void CRepositoryWatcher::ConstructL() - { - iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iRepository); - iNotifyHandler->StartListeningL(); - } - -// --------------------------------------------------------------------------- -// CRepositoryWatcher::ChangedKey -// --------------------------------------------------------------------------- -// -TUint32 CRepositoryWatcher::ChangedKey() - { - return iChangedKey; - } - -// --------------------------------------------------------------------------- -// CRepositoryWatcher::HandleNotifyInt -// --------------------------------------------------------------------------- -// -void CRepositoryWatcher::HandleNotifyInt( - TUint32 aKey, TInt /*aNewValue*/ ) - { - iChangedKey = aKey; - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } - -// --------------------------------------------------------------------------- -// CRepositoryWatcher::HandleNotifyString -// --------------------------------------------------------------------------- -// -void CRepositoryWatcher::HandleNotifyString( TUint32 aKey, - const TDesC16& /*aNewValue*/ ) - { - iChangedKey = aKey; - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } - -// --------------------------------------------------------------------------- -// CRepositoryWatcher::HandleNotifyGeneric -// --------------------------------------------------------------------------- -// -void CRepositoryWatcher::HandleNotifyGeneric(TUint32 aKey) - { - iChangedKey = aKey; - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } - -// --------------------------------------------------------------------------- -// CRepositoryWatcher::HandleNotifyError -// --------------------------------------------------------------------------- -// -void CRepositoryWatcher::HandleNotifyError(TUint32 /*aKey*/, TInt /*aError*/, CCenRepNotifyHandler* /*aHandler*/) - { - } - - -// P & S subscriber - -// --------------------------------------------------------------------------- -// CPSSubscriber::CPSSubscriber -// --------------------------------------------------------------------------- -// -CPSSubscriber::CPSSubscriber(TCallBack aCallBack, RProperty& aProperty) - : CActive(EPriorityNormal), iCallBack(aCallBack), iProperty(aProperty) - { - CActiveScheduler::Add(this); - } - -// --------------------------------------------------------------------------- -// CPSSubscriber::~CPSSubscriber -// --------------------------------------------------------------------------- -// -CPSSubscriber::~CPSSubscriber() - { - Cancel(); - } - -// --------------------------------------------------------------------------- -// CPSSubscriber::SubscribeL -// --------------------------------------------------------------------------- -// -void CPSSubscriber::SubscribeL() - { - if (!IsActive()) - { - iProperty.Subscribe(iStatus); - SetActive(); - } - } - -// --------------------------------------------------------------------------- -// CPSSubscriber::StopSubscribe -// --------------------------------------------------------------------------- -// -void CPSSubscriber::StopSubscribe() - { - Cancel(); - } - -// --------------------------------------------------------------------------- -// CPSSubscriber::RunL -// --------------------------------------------------------------------------- -// -void CPSSubscriber::RunL() - { - if (iStatus.Int() == KErrNone) - { - iCallBack.CallBack(); - SubscribeL(); - } - } - -// --------------------------------------------------------------------------- -// CPSSubscriber::DoCancel -// --------------------------------------------------------------------------- -// -void CPSSubscriber::DoCancel() - { - iProperty.Cancel(); - } - - - -// ========== UTILITIES CLASS =============================== - -// Checks if memory card is present -TBool SlideshowUtil::IsMCPresent() - { - RFs& fs = CCoeEnv::Static()->FsSession(); - - TInt error = KErrNone; - TDriveInfo driveInfo; - TInt res = 0; - TInt err = fs.CharToDrive(PathInfo::MemoryCardRootPath()[0], res); - error = fs.Drive(driveInfo, res ); - - // Not present, locked or unknown is bad - if ((error != KErrNone) || - (driveInfo.iMediaAtt & KMediaAttLocked) || - (driveInfo.iType == EMediaNotPresent) || - (driveInfo.iType == EMediaUnknown)) - { - return EFalse; - } - - // Read-only is fine - return ETrue; - } - - -// Checks if the given file is on memory card -TBool SlideshowUtil::IsOnMC(TFileName aFile) - { - // Grab drive letter from path and compare to memory card drive letter - TBuf<1> driveLetterBuf; - driveLetterBuf.CopyUC(aFile.Left(1)); - - if (driveLetterBuf.Compare(KSSPDriveLetterMC) == 0) - { - return ETrue; - } - - return EFalse; - } - - -// Checks that the file has enough DRM rights to be displayed -TBool SlideshowUtil::DRMCheck(CDRMHelper *aDRMHelper, TDesC& /* aFileName */) - { - if (!aDRMHelper) - { - return EFalse; - } - - return ETrue; - } - - -// Checks that the slide has enough DRM rights to be displayed -TBool SlideshowUtil::DRMCheck(CDRMHelper *aDRMHelper, CSlideshowSlide* aSlide) - { - if (!aDRMHelper || !aSlide) - { - return EFalse; - } - - return (DRMCheck(aDRMHelper, *(aSlide->FileName()))); - } - - -// Consumes the slide's DRM rights -void SlideshowUtil::DRMConsume(CDRMHelper* aDRMHelper, CSlideshowSlide* aSlide) - { - if (!aDRMHelper || !aSlide) - { - return; - } - - aDRMHelper->ConsumeFile2(*(aSlide->FileName()), - ContentAccess::EView, - CDRMHelper::EStart); - aDRMHelper->ConsumeFile2(*(aSlide->FileName()), - ContentAccess::EView, - CDRMHelper::EFinish); - } - - -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowSlide.cpp --- a/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowSlide.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* -* Copyright (c) 2006 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: Stores a single slide -* -*/ - - - - - -// INCLUDES -#include "SlideshowSlide.h" -#include "SlideshowSlideLoader.h" -#include "SlideshowPluginUtils.h" - -// Creator -CSlideshowSlide* CSlideshowSlide::NewL(TDesC& aFileName, TBool aIsOnMC) - { - CSlideshowSlide* self = new (ELeave) CSlideshowSlide(aIsOnMC); - CleanupStack::PushL(self); - self->ConstructL(aFileName); - CleanupStack::Pop(self); - return self; - } - -// Destructor -CSlideshowSlide::~CSlideshowSlide() - { - ReleaseImage(); - delete iSlideLoader; - delete iFileName; - } - - -// Default C'tor -CSlideshowSlide::CSlideshowSlide(TBool aIsOnMC) - : iFlags(SSS_NONE) - { - if (aIsOnMC) - { - iFlags |= SSS_ISONMC; - } - } - -// is decoding in progress -TBool CSlideshowSlide::IsDecodingInProgress() - { - if(iSlideLoader->IsActive()) - { - return ETrue; - } - return EFalse; - } -// Could not decode the file -TBool CSlideshowSlide::CouldNotDecodeFile() - { - if (iFlags & SSS_DECODEFAILED) - { - return ETrue; - } - return EFalse; - } -// Two-phase constructor -void CSlideshowSlide::ConstructL(TDesC& aFileName) - { - // Allocate space for the filename and save it - iFileName = HBufC::NewL(aFileName.Length()); - *iFileName = aFileName; - iSlideLoader = CSlideshowSlideLoader::NewL(this); - } -// Prepares the slide (loads image) -void CSlideshowSlide::PrepareSlideL(const TSize& aTargetSize) - { - if (iFlags & SSS_IMAGELOADED) - { - return; - } - if( iSlideLoader->IsActive()) - { - // slide is being decoded ... should wait .. dont call LoadSlideL here - // should not come here.. - return; - } - iSlideLoader->LoadSlideL(*iFileName, aTargetSize); - } - -// Is slide decoded completely -TBool CSlideshowSlide::IsSlideDecoded() - { - if (iFlags & SSS_IMAGELOADED) - { - return ETrue; - } - return EFalse; - } -// Releases the slide's image -void CSlideshowSlide::ReleaseImage() - { - // if decoding is in progress... at any cost dont delete the image before Canceling the decoding - if(IsDecodingInProgress()) - { - iSlideLoader->Cancel(); - } - else if(iImage ) - { - delete iImage; - iImage = NULL; - } - //image deleted, revert back to not decoded state - iFlags &= ~(SSS_IMAGELOADED); - } -// End of File diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowSlideLoader.cpp --- a/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowSlideLoader.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,286 +0,0 @@ -/* -* Copyright (c) 2006 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: Loads a slide from file -* -*/ - - - -// INCLUDES -#include "SlideshowPluginUtils.h" -#include "SlideshowSlideLoader.h" - -// --------------------------------------------------------------------------- -// DivAndRoundUp -// --------------------------------------------------------------------------- -// -TInt DivAndRoundUp(const TInt aNumber, const TInt aDivider) - { - TInt result = aNumber / aDivider; - - if (aNumber % aDivider) - { - result += 1; - } - - return result; - } - -// --------------------------------------------------------------------------- -// CSlideshowSlideLoader::NewL -// --------------------------------------------------------------------------- -// -CSlideshowSlideLoader* CSlideshowSlideLoader::NewL(CSlideshowSlide *aSlide) - { - CSlideshowSlideLoader * self = new (ELeave)CSlideshowSlideLoader(aSlide); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -// --------------------------------------------------------------------------- -// CSlideshowSlideLoader::ConstructL -// --------------------------------------------------------------------------- -// -void CSlideshowSlideLoader::ConstructL() - { - // Add this object to active scheduler - CActiveScheduler::Add(this); - } - -// --------------------------------------------------------------------------- -// CSlideshowSlideLoader::CSlideshowSlideLoader -// --------------------------------------------------------------------------- -// -CSlideshowSlideLoader::CSlideshowSlideLoader(CSlideshowSlide *aSlide) - : CActive(CActive::EPriorityStandard),iSlide(aSlide) - { - // Empty - } - -// --------------------------------------------------------------------------- -// CSlideshowSlideLoader::~CSlideshowSlideLoader -// --------------------------------------------------------------------------- -// -CSlideshowSlideLoader::~CSlideshowSlideLoader() - { - if(IsActive()) - { - Cancel(); - } - - } - -// --------------------------------------------------------------------------- -// CSlideshowSlideLoader::DeleteDecoder -// --------------------------------------------------------------------------- -// -void CSlideshowSlideLoader::DeleteDecoder() - { - if(iDecoder) - { - delete iDecoder; - iDecoder = NULL; - } - - } - -// --------------------------------------------------------------------------- -// CSlideshowSlideLoader::DoCancel -// --------------------------------------------------------------------------- -// -void CSlideshowSlideLoader::DoCancel() - { - iDecoder->Cancel(); - DeleteDecoder(); - // delete the image - if(iSlide->iImage) - { - delete iSlide->iImage; - iSlide->iImage = NULL; - } - } - -// --------------------------------------------------------------------------- -// CSlideshowSlideLoader::RunL -// --------------------------------------------------------------------------- -// -void CSlideshowSlideLoader::RunL() - { - // delete the decoder to save some memory. - DeleteDecoder(); - if(iStatus != KErrNone) - { - iSlide->ReleaseImage(); - // SSS_DECODEFAILED says that Image could not be decoded. Corrupted image. - (iSlide->iFlags) |= SSS_DECODEFAILED; - return; - } - - // Image loaded, size scaled down while loading. Find out, if the - // image still needs to be scaled smaller to fit the screen - - TReal aspectRatio = (TReal) iBitmapsize.iWidth / (TReal) iBitmapsize.iHeight; - - if ((iBitmapsize.iWidth <= iTargetSize.iWidth) && - (iBitmapsize.iHeight <= iTargetSize.iHeight)) - { - // Fits completely - finish - SSPLOGGER_WRITE("No resize needed"); - - // Compress the heap after imageconversion as - // imagedecoder seems to leave heap uncompressed - User::Heap().Compress(); - (iSlide->iFlags) |= SSS_IMAGELOADED; - return; - } - - // Figure out which dimension needs most scaling - TReal xFactor = (TReal) iTargetSize.iWidth / (TReal) iBitmapsize.iWidth; - TReal yFactor = (TReal) iTargetSize.iHeight / (TReal) iBitmapsize.iHeight; - - // Start with target (screen) size - TSize finalSize = iTargetSize; - - if (xFactor <= yFactor) - { - // X-dimension needs most scaling - fit to x, re-calc y - finalSize.iHeight = (TInt) ((TReal) finalSize.iWidth / aspectRatio); - } - else - { - // Y-dimension needs most scaling - fit to y, re-calc x - finalSize.iWidth = (TInt) ((TReal) finalSize.iHeight * aspectRatio); - } - - SSPLOGGER_WRITEF(_L("SSP: Final size (%d, %d)"), - finalSize.iWidth, finalSize.iHeight); - - // Create a final bitmap with the final size, and draw to it - CFbsBitmap* finalBmp = new (ELeave) CFbsBitmap; - CleanupStack::PushL(finalBmp); - User::LeaveIfError(finalBmp->Create(finalSize, (iSlide->iImage)->DisplayMode())); - - CFbsBitmapDevice* bmpDev = CFbsBitmapDevice::NewL(finalBmp); - CleanupStack::PushL(bmpDev); - - CFbsBitGc* bmpCxt; - User::LeaveIfError(bmpDev->CreateContext(bmpCxt)); - CleanupStack::PushL(bmpCxt); - bmpCxt->DrawBitmap(TRect(0, 0, finalSize.iWidth, finalSize.iHeight), - (iSlide->iImage), - TRect(0, 0, iBitmapsize.iWidth, iBitmapsize.iHeight)); - - CleanupStack::PopAndDestroy(2); // bmpDev, bmpCxt - // Return the result in the original bitmap parameter - (iSlide->iImage)->Reset(); - - User::LeaveIfError((iSlide->iImage)->Duplicate(finalBmp->Handle())); - CleanupStack::PopAndDestroy(finalBmp); - // Compress the heap after imageconversion as - // imagedecoder seems to leave heap uncompressed - User::Heap().Compress(); - (iSlide->iFlags) |= SSS_IMAGELOADED; - return; - } - -// --------------------------------------------------------------------------- -// CSlideshowSlideLoader::LoadSlideL -// --------------------------------------------------------------------------- -// -void CSlideshowSlideLoader::LoadSlideL( - const TDesC& aFilename, const TSize& aTargetSize) - { - - iTargetSize = aTargetSize; - RFs filesys; - User::LeaveIfError(filesys.Connect()); - CleanupClosePushL(filesys); - // this line can leave if decoder is not found..need to cacth this. - iDecoder = CImageDecoder::FileNewL(filesys, aFilename, ContentAccess::EView,CImageDecoder::EOptionAlwaysThread); - if (aTargetSize == TSize(-1,-1)) - { - CleanupStack::PopAndDestroy(&filesys); - iDecoder = NULL; - return; - } - - // Get image information - TFrameInfo frameinfo = iDecoder->FrameInfo(); - TDisplayMode mode; - - // Tone down colors if possible (saves memory) - if (frameinfo.iFlags & TFrameInfo::ECanDither) - { - mode = EColor64K; - } - else - { - mode = frameinfo.iFrameDisplayMode; - } - - // Find out if the image can be downscaled during loading - iBitmapsize = frameinfo.iOverallSizeInPixels; - - - if ((iBitmapsize.iWidth >= aTargetSize.iWidth * 2) && - (iBitmapsize.iHeight >= aTargetSize.iHeight * 2)) - { - // 1/2 size - iBitmapsize.iWidth = DivAndRoundUp(frameinfo.iOverallSizeInPixels.iWidth, 2); - iBitmapsize.iHeight = DivAndRoundUp(frameinfo.iOverallSizeInPixels.iHeight, 2); - - if ((iBitmapsize.iWidth >= aTargetSize.iWidth * 2) && - (iBitmapsize.iHeight >= aTargetSize.iHeight * 2)) - { - // 1/4 size - iBitmapsize.iWidth = DivAndRoundUp(frameinfo.iOverallSizeInPixels.iWidth, 4); - iBitmapsize.iHeight = DivAndRoundUp(frameinfo.iOverallSizeInPixels.iHeight, 4); - - if ((iBitmapsize.iWidth >= aTargetSize.iWidth * 2) && - (iBitmapsize.iHeight >= aTargetSize.iHeight * 2)) - { - // 1/8 size - iBitmapsize.iWidth = DivAndRoundUp(frameinfo.iOverallSizeInPixels.iWidth, 8); - iBitmapsize.iHeight = DivAndRoundUp(frameinfo.iOverallSizeInPixels.iHeight, 8); - } - } - } - - // Create a target bitmap - iSlide->iImage = new (ELeave) CFbsBitmap; - User::LeaveIfError((iSlide->iImage)->Create(iBitmapsize, mode)); - // for filesys - CleanupStack::PopAndDestroy(&filesys); - - //Start decoding the image ... - // RunL method is called when decoding is done. - iDecoder->Convert(&iStatus, *(iSlide->iImage),0); - SetActive(); - } - -// --------------------------------------------------------------------------- -// CSlideshowSlideLoader::RunError -// --------------------------------------------------------------------------- -// -TInt CSlideshowSlideLoader::RunError(TInt aError) - { - if (NULL != iSlide->iImage) - { - delete iSlide->iImage; - iSlide->iImage = NULL; - } - return aError; - } diff -r 058b1fc1663a -r 8a173132b0aa scrsaver/scrsaverplugins/group/bld.inf --- a/scrsaver/scrsaverplugins/group/bld.inf Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -/* -* Copyright (c) 2009 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: Build information file for all plugins -* -*/ - - - - -#include "../BmpAnimScrPlugin/group/bld.inf" -#include "../ScreenSaverAnimPlugin/group/bld.inf" -#include "../ScreenSaverGifAnimPlugin/group/bld.inf" -#include "../SlideshowPlugin/group/bld.inf" diff -r 058b1fc1663a -r 8a173132b0aa src/Screensaver.cpp --- a/src/Screensaver.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,105 +0,0 @@ -/* -* Copyright (c) 2004 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: Document and application class file for screensaver app. -* -*/ - - - -#include -#include "screensaver.hrh" -#include "screensaver.h" -#include "screensaverappui.h" - - - -// ----------------------------------------------------------------------------- -// CScreensaverDocument::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverDocument::ConstructL() - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverDocument::CScreensaverDocument -// ----------------------------------------------------------------------------- -// -CScreensaverDocument::CScreensaverDocument(CEikApplication& aApp): CAknDocument(aApp) - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverDocument::~CScreensaverDocument -// ----------------------------------------------------------------------------- -// -CScreensaverDocument::~CScreensaverDocument() - { - - } - -// -// CScreensaverEikDocument -// - -// ----------------------------------------------------------------------------- -// CScreensaverDocument::CreateAppUiL -// ----------------------------------------------------------------------------- -// -CEikAppUi* CScreensaverDocument::CreateAppUiL() - { - return ( new (ELeave) CScreensaverAppUi ); - } - - -// -// CScreensaverApplication -// -// ----------------------------------------------------------------------------- -// CScreensaverApplication::CreateDocumentL -// ----------------------------------------------------------------------------- -// -CApaDocument* CScreensaverApplication::CreateDocumentL() - { - CScreensaverDocument* document=new(ELeave) CScreensaverDocument(*this); - // No need to do ConstructL for document since it is empty. - return(document); - } - -// ----------------------------------------------------------------------------- -// CScreensaverApplication::AppDllUid -// ----------------------------------------------------------------------------- -// -TUid CScreensaverApplication::AppDllUid() const - { - return KUidScreensaverApp; - } - - -// -// EXPORTed functions -// -LOCAL_C CApaApplication* NewApplication() - { - return new CScreensaverApplication; - } - - -GLDEF_C TInt E32Main() - { - return EikStart::RunApplication(NewApplication); - } - - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa src/screensaver.rss --- a/src/screensaver.rss Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,405 +0,0 @@ -/* -* Copyright (c) 2003 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: Screensaver resource file. -* -*/ - - - - - -NAME SCRE - -#include -#include -#include -#include -#include -#include - -#include "screensaver.hrh" - -RESOURCE RSS_SIGNATURE { } - -RESOURCE TBUF - { - buf= ""; - } - -RESOURCE EIK_APP_INFO - { - status_pane = r_status_pane; - } - -RESOURCE STATUS_PANE_APP_MODEL r_status_pane - { - layout= R_AVKON_STATUS_PANE_LAYOUT_EMPTY; - } - - -STRUCT SCREENSAVER_COLOR_MODEL - { - LONG color_depth; // Highest color model supported in partial mode. - WORD colors[8]; // This array is for defining colors for 3-bit mode. - LONG dark_gradient[6]; // Darker shades for gradient effect (in high color mode). - LONG light_gradient[6]; // Lighter shades for gradient effect (in high color mode). - } - - -RESOURCE SCREENSAVER_COLOR_MODEL r_screensaver_color_model - { - color_depth = ESsColorModel3BitMode; - colors = - { - 210, - 35, - 23, - 185, - 105, - 95, - 159, - 221 - }; - dark_gradient = - { - 0x993300, - 0x990033, - 0x680069, - 0x003bce, - 0x225904, - 0x090273 - }; - light_gradient = - { - 0xfbb100, - 0xfd9597, - 0xfe00cb, - 0x00c8fe, - 0x33fa95, - 0xa843fd - }; - } - - -// -// This struct contains various rendering parameters for screensaver -// indicator bar. Do not change the order of fields in this struct. -// -STRUCT SCREENSAVER_PARAMETERS_ARRAY - { - WORD KIndicatorMargin; // Minimum indicator distance to left and right border. - WORD KIndicatorGap; // How many pixels between indicators. - WORD KIndicatorTopMargin; // Distance from top border of indicator bar to top border of indicator icon. - WORD KIndicatorTextLevel; - LONG KBackGroundColor; // Background color in TRgb format. - WORD KHeight; // Height of the indicator bar. - } - - -RESOURCE SCREENSAVER_PARAMETERS_ARRAY r_screensaver_parameters - { - KIndicatorMargin = 5; - KIndicatorGap = 4; - KIndicatorTopMargin = 2; - KIndicatorTextLevel = 17; - KBackGroundColor = 0x00c8c8c8; - KHeight = 14; - } - - -// -// Numeric indicator. Displays number over bitmap background. -// there can be separate background bitmap for each number of digits -// displayed. 'Icons' array has following format: -// icons = -// { -// // Backround bitmap for one digit case -// EMbmAvkonQgn_background_for_one_digit_case, -// // Mask for one digit case. -// EMbmAvkonQgn_mask_for_one_digit_case, -// // X position of numeric value inside of bitmap (value is an example). -// 23, -// // Y position of numeric value inside of bitmap. -// 17, -// // Two digit case starts here... -// EMbmAvkonQgn_background_for_two_digit_case, -// EMbmAvkonQgn_mask_for_two_digit_case, -// 22, -// 15 -// // ... and so on for each number of digits. -// }; -// This indicator type is not currently used in standard 2.x screensaver. -// -STRUCT SCRN_NUMERIC_INDICTOR - { - LONG type = ESsNumericIndicator; - WORD id; - WORD priority = ESsDrawTypeNotDrawn; - WORD align; - LONG icons[]; - } - - -// -// Icon indicator. Displays bitmap and mask (if specified). -// -STRUCT SCRN_ICON_INDICATOR - { - LONG type = ESsIconIndicator; - WORD id; - WORD priority = ESsDrawTypeNotDrawn; - WORD align; - LONG icon[4]; // Bmp id, mask id, skinned bmp id, skinned bmp mask id - } - - -// -// Text indicator. Displays text without background bitmap. -// -STRUCT SCRN_TEXT_INDICATOR - { - LONG type = ESsTextIndicator; - WORD id; - WORD priority = ESsDrawTypeNotDrawn; - WORD align; - LONG font_id = ELatinPlain12; - } - - -// -// Number & Icon indicator. Displays numeric information with -// icon. Number is displayed on left or right side of the -// icon (depending on icon_align), not over the icon like with -// numeric indicator. -// -STRUCT SCRN_NUMBER_AND_ICON_INDICATOR - { - LONG type = ESsNumberAndIconIndicator; - WORD id; - WORD priority = ESsDrawTypeNotDrawn; - WORD align; - LONG icon_align; - LONG font_id = ELatinPlain12; - LONG icon[4]; // Bmp id, mask id, skinned bmp id, skinned bmp mask id - } - - -// -// The screensaver indicator array. Defines indicators for -// indicator bar in default screensaver view. -// The order of indicators in this array specifies the order -// of indicators on screen. -// -RESOURCE ARRAY r_screensaver_indicator_array - { - items = - { - SCRN_ICON_INDICATOR // Voicemail indicator - { - id = ESsVoicemailInd; - align = ESsAlignRight; - priority = ESsDrawTypePrimary; - icon = - { - EMbmAvkonQgn_stat_vm0_uni, - EMbmAvkonQgn_stat_vm0_uni, - EAknsMinorGenericQgnStatVm0Uni, - EAknsMinorGenericQgnStatVm0Uni - }; - }, - SCRN_ICON_INDICATOR // E-mail indicator - { - id = ESsMailInd; - align = ESsAlignRight; - priority = ESsDrawTypePrimary; - icon = - { - EMbmAvkonQgn_stat_message_mail_uni, - EMbmAvkonQgn_stat_message_mail_uni, - EAknsMinorGenericQgnStatMessageMailUni, - EAknsMinorGenericQgnStatMessageMailUni - }; - }, - SCRN_ICON_INDICATOR // Instant messaging indicator. - { - id = ESsImInd; - align = ESsAlignRight; - priority = ESsDrawTypePrimary; - icon = - { - EMbmAvkonQgn_stat_im_uni, - EMbmAvkonQgn_stat_im_uni, - EAknsMinorGenericQgnStatImUni, - EAknsMinorGenericQgnStatImUni - }; - }, - SCRN_NUMBER_AND_ICON_INDICATOR // Unread messages indicator. - { - id = ESsNewMessagesInd; - align = ESsAlignRight; - priority = ESsDrawTypePrimary; - icon_align = ESsAlignRight; - icon = - { - EMbmAvkonQgn_stat_message_ps, - EMbmAvkonQgn_stat_message_ps, - EAknsMinorGenericQgnStatMessagePs, - EAknsMinorGenericQgnStatMessagePs - }; - }, - SCRN_NUMBER_AND_ICON_INDICATOR // Missed calls indicator. - { - id = ESsMissedCallsInd; - align = ESsAlignRight; - priority = ESsDrawTypePrimary; - icon_align = ESsAlignRight; - icon = - { - EMbmAvkonQgn_stat_missed_call_ps, - EMbmAvkonQgn_stat_missed_call_ps, - EAknsMinorGenericQgnStatMissedCallPs, - EAknsMinorGenericQgnStatMissedCallPs - }; - }, - SCRN_TEXT_INDICATOR // Profile name indicator. - { - id = ESsProfileInd; - align = ESsAlignLeft; - priority = ESsDrawTypeSecondary; - }, - SCRN_ICON_INDICATOR // Keyguard indicator. - { - id = ESsKeyLockInd; - align = ESsAlignLeft; - priority = ESsDrawTypeSecondary; - icon = - { - EMbmAvkonQgn_stat_keyguard, - EMbmAvkonQgn_stat_keyguard, - EAknsMinorGenericQgnStatKeyguard, - EAknsMinorGenericQgnStatKeyguard - }; - } - }; - } - - -// -// The screensaver indicator array. Defines indicators for -// indicator bar in default screensaver view. -// The order of indicators in this array specifies the order -// of indicators on screen. -RESOURCE ARRAY r_screensaver_indicator_array_new_layout - { - items = - { - SCRN_TEXT_INDICATOR // Am/Pm indicator. - { - id = ESsAmPmInd; - align = ESsAlignRight; - priority = ESsDrawTypePrimary; - }, - SCRN_TEXT_INDICATOR // Profile name indicator. - { - id = ESsProfileInd; - align = ESsAlignLeft; - priority = ESsDrawTypeSecondary; - }, - SCRN_ICON_INDICATOR // Voicemail indicator - { - id = ESsVoicemailInd; - align = ESsAlignLeft; - priority = ESsDrawTypeSecondary; - icon = - { - EMbmAvkonQgn_stat_vm0_uni, - EMbmAvkonQgn_stat_vm0_uni, - EAknsMinorGenericQgnStatVm0Uni, - EAknsMinorGenericQgnStatVm0Uni - }; - }, - SCRN_ICON_INDICATOR // E-mail indicator - { - id = ESsMailInd; - align = ESsAlignLeft; - priority = ESsDrawTypeSecondary; - icon = - { - EMbmAvkonQgn_stat_message_mail_uni, - EMbmAvkonQgn_stat_message_mail_uni, - EAknsMinorGenericQgnStatMessageMailUni, - EAknsMinorGenericQgnStatMessageMailUni - }; - }, - SCRN_ICON_INDICATOR // Instant messaging indicator. - { - id = ESsImInd; - align = ESsAlignLeft; - priority = ESsDrawTypeSecondary; - icon = - { - EMbmAvkonQgn_stat_im_uni, - EMbmAvkonQgn_stat_im_uni, - EAknsMinorGenericQgnStatImUni, - EAknsMinorGenericQgnStatImUni - }; - }, - SCRN_NUMBER_AND_ICON_INDICATOR // Unread messages indicator. - { - id = ESsNewMessagesInd; - align = ESsAlignLeft; - priority = ESsDrawTypePrimary; - icon_align = ESsAlignRight; - icon = - { - EMbmAvkonQgn_stat_message_uni, //ps, - EMbmAvkonQgn_stat_message_uni, //ps, - EAknsMinorGenericQgnStatMessageUni, - EAknsMinorGenericQgnStatMessageUni - }; - }, - SCRN_NUMBER_AND_ICON_INDICATOR // Missed calls indicator. - { - id = ESsMissedCallsInd; - align = ESsAlignLeft; - priority = ESsDrawTypePrimary; - icon_align = ESsAlignRight; - icon = - { - EMbmAvkonQgn_stat_missed_calls_uni, //_ps, - EMbmAvkonQgn_stat_missed_calls_uni, //_ps, - EAknsMinorGenericQgnStatMissedCallsUni, - EAknsMinorGenericQgnStatMissedCallsUni - }; - }, - SCRN_ICON_INDICATOR // Keyguard indicator. - { - id = ESsKeyLockInd; - align = ESsAlignLeft; - priority = ESsDrawTypePrimary; - icon = - { - EMbmAvkonQgn_stat_keyguard, - EMbmAvkonQgn_stat_keyguard, - EAknsMinorGenericQgnStatKeyguard, - EAknsMinorGenericQgnStatKeyguard - }; - } - }; - } - -// 01:20, 1:20, 13:05, 1:05 // separators are locale dependent -RESOURCE TBUF r_screensaver_time_usual_without_ampm { buf = "%J%:1%T"; } - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverappui.cpp --- a/src/screensaverappui.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,216 +0,0 @@ -/* -* Copyright (c) 2004 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: The AppUi file for screensaver application. -* -*/ - - - -#include - -#include "screensavershareddatai.h" -#include "screensaverappui.h" -#include "screensaverengine.h" - -// -// CScreensaverAppUi -// -// ----------------------------------------------------------------------------- -// CScreensaverAppUi::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverAppUi::ConstructL() - { - SCRLOGGER_WRITEF(_L("SCR:CScreensaverAppUi::ConstructL start") ); - SCRLOGGER_CREATE; - - // Choose orientation based on screensaverconfig -#if defined(SS_ALWAYSPORTRAIT) - BaseConstructL(EAppOrientationPortrait); - -#elif defined(SS_ALWAYSLANDSCAPE) - BaseConstructL(EAppOrientationLandscape); - -#else - - // Not specified - follows device setting - BaseConstructL(); -#endif - - SetKeyEventFlags( CAknAppUiBase::EDisableSendKeyShort | CAknAppUiBase::EDisableSendKeyLong ); - - iModel = CScreensaverEngine::NewL(); - - CreateViewL(); - - iEikonEnv->SetSystem( ETrue ); - HideApplicationFromFSW(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverAppUi::~CScreensaverAppUi -// ----------------------------------------------------------------------------- -// -CScreensaverAppUi::~CScreensaverAppUi() - { - - delete iModel; - iModel = NULL; - - SCRLOGGER_DELETE; - } - -// ----------------------------------------------------------------------------- -// CScreensaverAppUi::Model -// ----------------------------------------------------------------------------- -// -CScreensaverEngine& CScreensaverAppUi::Model() const - { - return *iModel; - } - -// ----------------------------------------------------------------------------- -// CScreensaverAppUi::HandleCommandL -// ----------------------------------------------------------------------------- -// -void CScreensaverAppUi::HandleCommandL( TInt aCommand ) - { - switch ( aCommand ) - { - case EEikCmdExit: - Exit(); - break; - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverAppUi::GetView -// ----------------------------------------------------------------------------- -// -CScreensaverView* CScreensaverAppUi::ScreensaverView() - { - return iView; - } - -// ----------------------------------------------------------------------------- -// CScreensaverAppUi::CreateViewL -// ----------------------------------------------------------------------------- -// -void CScreensaverAppUi::CreateViewL() - { - SCRLOGGER_WRITEF(_L("SCR:CScreensaverAppUi::CreateViewL start") ); - iView = CScreensaverView::NewL(); - - AddViewL( iView ); // transfer ownership to CAknViewAppUi - - SetDefaultViewL( *iView ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverAppUi::HandleKeyEventL -// ----------------------------------------------------------------------------- -// -TKeyResponse CScreensaverAppUi::HandleKeyEventL( const TKeyEvent& aKeyEvent, - TEventCode aType ) - { - SCRLOGGER_WRITEF(_L("SCR:CScreensaverAppUi::HandleKeyEventL start") ); - // Stop on keyup instead of keydown, otherwise the underlying - // app might get orphaned key up events and soil its pants. EXCEPT - // in preview mode stop on keydown, because the keup from starting - // the preview might be received here, and preview stopped before - // it even properly started - TBool stop = EFalse; - - if ( !iView ) - { - return EKeyWasConsumed; - } - - if ( aType == EEventKey && aKeyEvent.iCode == EKeyNo ) - { - stop = ETrue; - } - else - { - if ( iModel->ScreenSaverIsPreviewing() ) - { - if ( aType == EEventKeyDown ) - { - stop = ETrue; - } - } - else - { - if ( aType == EEventKeyUp ) - { - stop = ETrue; - } - } - } - - if ( stop ) - { - iModel->StopScreenSaver(); - } - - return EKeyWasConsumed; - } - -// ----------------------------------------------------------------------------- -// CScreensaverAppUi::HandleScreenDeviceChangedL -// Stops screensaver as soon as screen device changes. Resourcechange -// about e.g. resulting layout change comes annoyingly late -// ----------------------------------------------------------------------------- -// -void CScreensaverAppUi::HandleScreenDeviceChangedL() - { -#if defined(SS_FASTSTOPONSCREENDEVICECHANGE) - // Slightly faster stop when screendevice changes. Instead of - // letting the created user activity stop, do it here. - // NOTE that if forced orientation is not used and there is an - // application that changes screen orientation for itself (e.g. - // viewfinder), screensaver will die here when activated if fast - // stop is used. -#if !defined(SS_ALWAYSPORTRAIT) && !defined(SS_ALWAYSLANDSCAPE) - // Do not stop, if forced orientation is used! - // Screensaver may cause a screen device change when activated, - // and will promptly commit suicide here - iModel->StopScreenSaver(); -#endif -#endif - - CAknViewAppUi::HandleScreenDeviceChangedL(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverAppUi::HandleWsEventL -// ----------------------------------------------------------------------------- -// -void CScreensaverAppUi::HandleWsEventL( const TWsEvent& aEvent, - CCoeControl* aDestination ) - { - SCRLOGGER_WRITEF(_L("SCR:CScreensaverAppUi::HandleWsEventL start") ); - // First, let parent class handle the event - CAknViewAppUi::HandleWsEventL( aEvent, aDestination ); - - // In case of a pointer event, also stop screensaver - if ( aEvent.Type() == EEventPointer ) - { - iModel->StopScreenSaver(); - } - } - -//End of file diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverbase.cpp --- a/src/screensaverbase.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,336 +0,0 @@ -/* -* Copyright (c) 2009 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: The control base class of display object. -* -*/ - - - -#include -#include - -#include "screensaverbase.h" -#include "screensaverview.h" -#include "screensaverappui.h" -#include "ScreensaverUtils.h" -#include "screensavershareddatai.h" -#include "screensaverutility.h" - -const TInt KRefreshRate = 60000000; // 60 sec - - -// Time delayed before a wserv heartbeat stop request is issued. -// Delay is needed, because draw commands may still be handled, if -// stop request is issued right after screen refresh. -#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 -const TInt KCaptureDelay = 2000000; // 2.0 sec, used to delay the capturing operation -#else -const TInt KCaptureDelay = 100000; // 0.1 sec -#endif - -// ----------------------------------------------------------------------------- -// CScreensaverBase::CScreensaverBase -// ----------------------------------------------------------------------------- -// -CScreensaverBase::CScreensaverBase() - { - - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::~CScreensaverBase -// ----------------------------------------------------------------------------- -// -CScreensaverBase::~CScreensaverBase() - { - DeleteTimer( iCaptureScreenTimer ); - - delete iPowerSaveDisplayMode; - - delete iOffScrnBmp; - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::StartDrawObject -// ----------------------------------------------------------------------------- -// -void CScreensaverBase::StartDrawObject() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverBase::StartDrawObject start") ); - StartTimer(); - - DrawObject(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::StopDrawObject -// ----------------------------------------------------------------------------- -// -void CScreensaverBase::StopDrawObject() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverBase::StopDrawObject start") ); - if ( LcdPartialMode() && LcdPartialMode()->Status() ) - { - SCRLOGGER_WRITE("Model: StopScreenSaver(), exit power save"); - LcdPartialMode()->Exit(); - } - - CancelTimer(); - - ClearScreen(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::DrawObject -// ----------------------------------------------------------------------------- -// -void CScreensaverBase::DrawObject() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverBase::DrawObject start") ); - SetRect( Rect() ); - - DrawNow(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::View -// ----------------------------------------------------------------------------- -// -CScreensaverView* CScreensaverBase::View() const - { - return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() )->ScreensaverView(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::Model -// ----------------------------------------------------------------------------- -// -const CScreensaverEngine& CScreensaverBase::Model() const - { - return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() )->Model(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::Array -// ----------------------------------------------------------------------------- -// -CScreensaverIndicatorArray& CScreensaverBase::Array() const - { - return Model().IndicatorArray(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::SetPowerSaveDisplayActiveArea -// ----------------------------------------------------------------------------- -// -TInt CScreensaverBase::SetPowerSaveDisplayActiveArea( TRect& aRect ) - { - // Save the requested area - iPowerSaveDisplayActiveArea = aRect; - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::ActivatePowerSaveDisplay -// ----------------------------------------------------------------------------- -// -TInt CScreensaverBase::ActivatePowerSaveDisplay( TBool aFullColors ) const - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverBase::ActivatePowerSaveDisplay start") ); - TInt err = KErrNone; - - if ( ( Model().ScreenSaverIsOn() - && ( !iPowerSaveDisplayActiveArea.IsEmpty() ) ) ) - { - TInt startLine = 0; - TInt endLine = 0; - - // Normal mode - using saver bar height - startLine = iPowerSaveDisplayActiveArea.iTl.iY; - endLine = iPowerSaveDisplayActiveArea.iBr.iY; - - SCRLOGGER_WRITEF( _L("SCR: Powersave supports %d lines"), - LcdPartialMode()->MaxLines() ); - - // Check whether power save mode should be used - // When local variation added, PS will override if local says - // yes, but PS says no - if ( Model().SharedDataInterface()->IsUsePowerSaveMode() ) - { - SCRLOGGER_WRITEF( _L("SCR: Requesting powersave, lines: %d, %d"), - startLine, endLine ); - TUint16* addr = ( TUint16* )iOffScrnBmp->DataAddress(); - err = LcdPartialMode()->Set( startLine, endLine, addr, aFullColors ); - } - else - { - SCRLOGGER_WRITE("Power save mode not in use, not requested"); - err = KErrCancel; - } - } - else - { - // Screensaver not on - cannot set power save mode on - err = KErrNotReady; - } - - return err; - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::DrawPictographArea -// ----------------------------------------------------------------------------- -// -void CScreensaverBase::DrawPictographArea() - { - // Currently animation is not supported - do nothing - } - -// ---------------------------------------------------------------------------- -// CScreensaverBase::StartCaptureScreenTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverBase::StartCaptureScreenTimer() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverBase::StartCaptureScreenTimer start") ); - DeleteTimer( iCaptureScreenTimer ); - - TRAP_IGNORE( iCaptureScreenTimer = CPeriodic::NewL( CActive::EPriorityStandard ) ); - - iCaptureScreenTimer->Start( KCaptureDelay , KCaptureDelay , - TCallBack( HandleCaptureTimerExpiry, this ) ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::InitialRefreshRate -// ----------------------------------------------------------------------------- -// -TInt CScreensaverBase::InitialRefreshRate() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverBase::InitialRefreshRate start") ); - TTime homeTime, timeTmp; - TTimeIntervalSeconds interval; - TInt initialRefresh = KRefreshRate; - homeTime.HomeTime(); - timeTmp = homeTime; - timeTmp.RoundUpToNextMinute(); - if ( timeTmp.SecondsFrom( homeTime, interval ) == KErrNone ) - { - initialRefresh = interval.Int() * 1000000; - } - - return initialRefresh; - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::DeleteTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverBase::DeleteTimer( CPeriodic*& aTimer ) - { - if ( aTimer ) - { - aTimer->Cancel(); - delete aTimer; - aTimer = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::ConstructAndConnectLCDL -// ----------------------------------------------------------------------------- -// -void CScreensaverBase::ConstructAndConnectLCDL() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverBase::ConstructAndConnectLCD start") ); - // User side handle object is created - TRAPD( err, iPowerSaveDisplayMode = CPowerSaveDisplayMode::NewL() ); - if ( ( err != KErrNone ) || ( !iPowerSaveDisplayMode ) ) - { - SCRLOGGER_WRITEF( _L("SCR: Model: No power save mode (err = %d)"), err ); - } - - iOffScrnBmp = new ( ELeave ) CFbsBitmap; - User::LeaveIfError( iOffScrnBmp->Create( Size(), EColor64K ) ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::LcdPartialMode -// ----------------------------------------------------------------------------- -// -CPowerSaveDisplayMode* CScreensaverBase::LcdPartialMode() const - { - return iPowerSaveDisplayMode; - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::HandleRefreshTimerExpiry -// ----------------------------------------------------------------------------- -// -TInt CScreensaverBase::HandleRefreshTimerExpiry( TAny* aPtr ) - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverBase::HandleRefreshTimerExpiry start") ); - CScreensaverBase* control = STATIC_CAST(CScreensaverBase*, aPtr); - - SCRLOGGER_WRITEF( _L("SCR: Inside CScreensaverView::HandleRefreshTimerExpiry()") ); - - control->DrawObject(); - control->StartCaptureScreenTimer(); - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::HandleCaptureTimerExpiry -// Handles capture screen timer timeout -// ----------------------------------------------------------------------------- -// -TInt CScreensaverBase::HandleCaptureTimerExpiry( TAny* aPtr ) - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverBase::HandleCaptureTimerExpiry start") ); - CScreensaverBase *control= STATIC_CAST( CScreensaverBase*, aPtr ); - - SCRLOGGER_WRITEF( _L("SCR: Inside CScreensaverView::HandleWsHbStopTimerTimeout()") ); - - if ( control ) - { - TInt err = control->CaptureScreen(); - control->DeleteTimer( control->iCaptureScreenTimer ); - ScreensaverUtility::StopWServHeartBeat(); - -#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 - - if ( KErrNone == err ) - { - control->ActivatePowerSaveDisplay(); - } - -#endif - } - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverBase::CaptureScreen -// ----------------------------------------------------------------------------- -// -TInt CScreensaverBase::CaptureScreen() - { - CWsScreenDevice* device = iCoeEnv->ScreenDevice(); - TInt err = device->CopyScreenToBitmap( iOffScrnBmp, iPowerSaveDisplayActiveArea ); - return err; - } - -//End of file diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverctrlmovingtext.cpp --- a/src/screensaverctrlmovingtext.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,587 +0,0 @@ -/* -* Copyright (c) 2003 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: Implementation of screensaver moving text display class. -* -*/ - - - -#include -#include -#include -#include -#include -#include - -#include "screensaverappui.h" -#include "screensavershareddatai.h" -#include "ScreensaverUtils.h" -#include "screensaverutility.h" -#include "screensaverctrlmovingtext.h" - -const TInt KInvertedColors = 1; - -//The color for text and background -const TInt KInvertedBgColor = 215; -const TInt KInvertedTextColor = 0; -const TInt KInvertedTextBgColor = 215; - -const TInt KBgColor = 0; -const TInt KTextColor = 215; -const TInt KTextBgColor = 210; - -// the minimum top value -const TInt KMinTop = 4; - -const TInt KRefreshRate = 60000000; // 60 sec -// -// Class CScreensaverCtrlMovingText -// -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::NewL -// ----------------------------------------------------------------------------- -// -CScreensaverCtrlMovingText* CScreensaverCtrlMovingText::NewL( TDisplayObjectType aType ) - { - CScreensaverCtrlMovingText* obj = new( ELeave ) CScreensaverCtrlMovingText( aType ); - CleanupStack::PushL( obj ); - obj->ConstructL(); - CleanupStack::Pop(); - return obj; - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::~CScreensaverCtrlMovingText -// ----------------------------------------------------------------------------- -// -CScreensaverCtrlMovingText::~CScreensaverCtrlMovingText() - { - iEikonEnv->RemoveFromStack( this ); - - DeleteTimer( iBarRefreshTimer ); - DeleteTimer( iCaptureScreenTimer ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::HandleResourceChange -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::HandleResourceChange( TInt aType ) - { - if ( aType == KEikDynamicLayoutVariantSwitch )//&& iType != EDisplayNone) - { - // Screen layout has changed - resize - SetRect( iCoeEnv->ScreenDevice()->SizeInPixels() ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::SizeChanged -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::SizeChanged() - { - GenerateDisplayAttributesForScreensaverBar(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::Draw -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::Draw( const TRect& aRect ) const - { - if ( !Model().ScreenSaverIsOn() && !Model().ScreenSaverIsPreviewing() ) - { - return; - } - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::Draw, screensaver is on or previewing") ); - // Graphics context to draw on. - CWindowGc& gc = SystemGc(); - - // Fix for error ESMG-74Y4PE - S60 3.2 wk26, Power Saver: - // Flickering when power saver is deactivated. - // We now clear the screen with a black brush so the screensaver - // background is changed to black. There will no longer be a white - // intermediate screen and this will reduce the "flicker" effect. - gc.SetBrushColor( KRgbBlack ); - - // Start with a clear screen - gc.Clear( aRect ); - // If there is no plugin module, indicator view overrides plugin module or - // plugin drawing is suspended then the standard screensaver bar is shown, - // let's draw it. - - DrawNew( gc, aRect ); - - // Activate power save display mode after draw, so that - // the image is already in screen buffer - ScreensaverUtility::FlushDrawBuffer(); - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::Draw, draw finished") ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::SetMoving -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::SetMoving( TBool aMove ) - { - iMoveBar = aMove; - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::StartTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::StartTimer() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::StartTimer start") ); - StartCaptureScreenTimer(); - - StartBarRefreshTimer(); - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::StartTimer finish") ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::CancelTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::CancelTimer() - { - DeleteTimer( iBarRefreshTimer ); - DeleteTimer( iCaptureScreenTimer ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::ClearScreen -// Date & time saver -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::ClearScreen() - { - - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::Refresh -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::Refresh() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::Refresh start") ); - // Currently only keylock indicator is updated, because - // thats the only indicator whose state may change while screensaver - // is displaying. Other indicators' state changing also dismisses - // screensaver. Once redisplaying, the indicators are updated anyway. - // Key lock indicator depends on status of key guard. - Array().SetDependencyStatus( ESsKeyLockInd, !Model().SharedDataInterface()->IsKeyguardOn() ); - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::Refresh move") ); - // Don't move bar during this refresh - SetMoving( EFalse ); - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::Refresh DrawObject") ); - // Cause a redraw - DrawObject(); - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::Refresh move") ); - // Allow moving - SetMoving(); - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::Refresh finish") ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::CScreensaverCtrlMovingText -// Date & time saver -// ----------------------------------------------------------------------------- -// -CScreensaverCtrlMovingText::CScreensaverCtrlMovingText( TDisplayObjectType aType ) - :iType( aType ) - { - // No implementation required - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::ConstructL() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::ConstructL start") ); - - if ( iType == EDisplayText ) - { - iPictoI = CAknPictographInterface::NewL( *this, *this ); - } - - iTop = KMinTop; - iRandSeed = RandomSeed(); - iMoveBar = ETrue; - - GetTextAndBgColor(); - - CreateWindowL(); - - // Cannot do this earlier - it'll cause a SizeChanged() - SetRect( iCoeEnv->ScreenDevice()->SizeInPixels() ); - - iEikonEnv->EikAppUi()->AddToStackL( - this, ECoeStackPriorityEnvironmentFilter, ECoeStackFlagRefusesFocus ); - ConstructAndConnectLCDL(); - ActivateL(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::DrawNew -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::DrawNew( CWindowGc& aGc, const TRect& /* aRect */) const - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::DrawNew start") ); - // Draw bar background - iLayoutBar.DrawRect( aGc ); - - // Draw clock - iLayoutClock.DrawRect( aGc ); - iLayoutClockText.DrawText( aGc, iTextTime ); - - // Draw date / user text - iLayoutDate.DrawRect( aGc ); - - DrawText( aGc ); - - // Draw indicators - Array().Draw( aGc ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::DrawPictoText -// Draws text with pictographs -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::DrawPictoText( CWindowGc &aGc ) const - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::DrawPictoText start") ); - // Draw text and possible pictographs - MAknPictographDrawer* pictoDrawer = iPictoI->Interface(); - ASSERT( pictoDrawer ); - - if ( ( !pictoDrawer ) || ( !pictoDrawer->ContainsPictographs( iText ) ) ) - { - // Just draw normally - iLayoutDateText.DrawText( aGc, iText ); - return; - } - - // Else draw normal text with pictographs - aGc.UseFont( iLayoutDateText.Font() ); - aGc.SetPenColor( iLayoutDateText.Color() ); - - // Calculating the offset (unfortunately not public in TAknLayoutText) - // copied from AknUtils TAknLayoutText::LayoutText() - pictoDrawer->DrawText( aGc, *iLayoutDateText.Font(), iText, - iLayoutDateText.TextRect(), iLayoutDateText.Font()->AscentInPixels(), - iLayoutDateText.Align() ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::DrawText -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::DrawText( CWindowGc& aGc ) const - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::DrawText start") ); - if ( iPictoI ) - { - // Draw text and pictographs in the layout - DrawPictoText( aGc ); - } - else - { - // Draw just text - iLayoutDateText.DrawText( aGc, iText ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::UpdateCurrentTimeL -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::UpdateCurrentTimeL() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::UpdateCurrentTimeL start") ); - // AVKON does not have proper format string for just time, - // load from own resources - FormatTextFromResourceL( iTextTime, R_SCREENSAVER_TIME_USUAL_WITHOUT_AMPM ); - - if ( iType == EDisplayTime ) - { - FormatTextFromResourceL( iText, R_QTN_DATE_USUAL_WITH_ZERO ); - } - else - { - Model().SharedDataInterface()->GetDisplayObjectText( iText ); - } - - SetAmPmIndicatorPayloadL(); - // Convert numbers according to language - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::GenerateDisplayAttributesForScreensaverBar -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::GenerateDisplayAttributesForScreensaverBar( ) - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::GenerateDisplayAttributesForScreensaverBar start") ); - // Zero out power save area, it should then be set before power save - // mode can be activated (also by plugins) - iPowerSaveDisplayActiveArea.SetRect( 0, 0, 0, 0 ); - - // Cool! We got scalable layouts. Use them. - TAknWindowComponentLayout barLayoutComponent = - AknLayoutScalable_Avkon::power_save_pane(); - iLayoutBar.LayoutRect( Rect(), barLayoutComponent.LayoutLine() ); - - // Add bar height from layout to get total bar height - TInt barHeight = iLayoutBar.Rect().Height(); - - // Plain refresh, no move? - if ( iMoveBar ) - { - // Get random values for bar position and color. - GetRandomTopValue( iLayoutBar.Rect().Height() ); - } - - // Create a rect with the new top to be used as layout rect - TRect fakeScreen( Rect() ); - fakeScreen.iTl.iY = iTop; - - // Layout components - - // Bar itself - iLayoutBar.LayoutRect( fakeScreen, barLayoutComponent.LayoutLine() ); - TRect barRect = iLayoutBar.Rect(); - - // Clock (area + text) - GetClockLayout( barRect ); - - // Date (area + text) - GetDateLayout( barRect ); - - // Indicators (area + text) - GetIndicatorAreaLayout( barRect ); - - // Update current time - TRAP_IGNORE( UpdateCurrentTimeL() ); - - // Since it is known for sure at this point that screensaver - // bar will be drawn the partial mode can activated for bar area - // if it is supported by display hardware. - const TScreensaverColorModel& colorModel = Model().GetColorModel(); - - if ( colorModel.iNumberOfPartialModes > 0 ) - { - TRect psRect( iLayoutBar.Rect() ); - SetPowerSaveDisplayActiveArea( psRect ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::GetRandomTopValue -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::GetRandomTopValue( TInt aBarHight ) - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::GetRandomTopValue start") ); - TInt range( iCoeEnv->ScreenDevice()->SizeInPixels().iHeight - aBarHight - 1 - 4 ); - TInt rand = Math::Rand( iRandSeed ); - rand %= range; - iTop = ( rand > 3 ) ? ( rand/4 ) * 4 : 4; - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::RandomValue -// ----------------------------------------------------------------------------- -// -TInt CScreensaverCtrlMovingText::RandomSeed() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::RandomSeed start") ); - TTime time; - time.HomeTime(); - return time.DateTime().MicroSecond(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::GetTextAndBgColor -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::GetTextAndBgColor() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::GetTextAndBgColor start") ); - if( Model().SharedDataInterface()->IsInvertedColors() == KInvertedColors ) - { - iBgColor = KInvertedBgColor; - iTextColor = KInvertedTextColor; - iTextBgColor = KInvertedTextBgColor; - } - else - { - iBgColor = KBgColor; - iTextColor = KTextColor; - iTextBgColor = KTextBgColor; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::FormatTextL -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::FormatTextL( TDes& aText, const TDesC& aFormat ) - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::FormatTextL start") ); - TTime curTime; - curTime.HomeTime(); - // Since screensaver is updated on the minute, make sure it displays - // the time of the passing minute by adding a few seconds to the - // time at the moment of the update. - curTime += TTimeIntervalSeconds( 5 ); - - TRAPD( err, curTime.FormatL( aText, aFormat ) ); - if ( err != KErrNone ) - { - // If time can't be displayed then display an empty text - aText = KNullDesC; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::SetAmPmIndicatorPayload -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::SetAmPmIndicatorPayloadL() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::SetAmPmIndicatorPayloadL start") ); - _LIT(KAmPmFormat, "%*A"); - TBuf<10> textAmPm; - FormatTextL( textAmPm, KAmPmFormat ); - - TIndicatorPayload payload; - payload.iType = EPayloadTypeText; - payload.iText.Zero(); - payload.iText.Append( textAmPm ); - Array().SetIndicatorPayload( ESsAmPmInd, payload ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::FormatTextFromResourceL -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::FormatTextFromResourceL( TDes &aText, TInt aResourceId ) - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::FormatTextFromResourceL start") ); - TBuf<30> timeFormat; - iCoeEnv->ReadResourceL( timeFormat, aResourceId ); - FormatTextL( aText, timeFormat ); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( aText ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::GetClockLayout -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::GetClockLayout( const TRect& aRect ) - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::GetClockLayout start") ); - TAknWindowComponentLayout clockarea = - AknLayoutScalable_Avkon::aid_ps_clock_pane( 0 ); - TAknWindowLineLayout clockline = clockarea.LayoutLine(); - clockline.iC = iBgColor; - iLayoutClock.LayoutRect( aRect, clockarea.LayoutLine() ); - - TAknTextComponentLayout clocktext = - AknLayoutScalable_Avkon::power_save_t2( 0 ); - clocktext.SetC( iTextColor ); - iLayoutClockText.LayoutText( aRect, clocktext.LayoutLine() ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::GetClockLayout -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::GetDateLayout( const TRect& aRect ) - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::GetDateLayout start") ); - TAknWindowComponentLayout datearea = - AknLayoutScalable_Avkon::power_save_pane_g1( 0 ); - TAknWindowLineLayout dateline = datearea.LayoutLine(); - dateline.iC = iTextBgColor; - iLayoutDate.LayoutRect( aRect, dateline ); - - TAknTextComponentLayout datetext = - AknLayoutScalable_Avkon::power_save_pane_t1( 0 ); - TAknTextLineLayout datetextline = datetext.LayoutLine(); - iLayoutDateText.LayoutText( aRect, datetextline ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::GetClockLayout -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::GetIndicatorAreaLayout( const TRect& aRect ) - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::GetIndicatorAreaLayout start") ); - TAknWindowComponentLayout indicatorarea = - AknLayoutScalable_Avkon::aid_ps_indicator_pane( 0 ); - TAknWindowLineLayout indicatorline = indicatorarea.LayoutLine(); - indicatorline.iC = iBgColor; - TAknLayoutRect layoutIndicatorArea; - layoutIndicatorArea.LayoutRect( aRect, indicatorline ); - - // Indicator texts - TAknTextComponentLayout indtext = - AknLayoutScalable_Avkon::power_save_pane_t4( 0 ); - TAknTextLineLayout indline = indtext.LayoutLine(); - TAknLayoutText layoutIndicatorText; - layoutIndicatorText.LayoutText( aRect, indline ); - - // Indicator icons - TAknWindowComponentLayout inds = - AknLayoutScalable_Avkon::indicator_ps_pane( 0 ); - TAknWindowLineLayout indsline = inds.LayoutLine(); - TAknLayoutRect layoutInds; - layoutInds.LayoutRect( aRect, indsline ); - - // Tell indicator array where to draw (this should be moved to - // the array itself) - Array().Setup( layoutIndicatorArea, layoutIndicatorText, layoutInds ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlMovingText::StartBarRefreshTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlMovingText::StartBarRefreshTimer() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlMovingText::StartBarRefreshTimer start") ); - DeleteTimer( iBarRefreshTimer ); - - TRAP_IGNORE( iBarRefreshTimer = CPeriodic::NewL( CActive::EPriorityStandard ) ); - - TInt initialRefreshRate = InitialRefreshRate(); - - iBarRefreshTimer->Start( initialRefreshRate, KRefreshRate, TCallBack( - HandleRefreshTimerExpiry, this ) ); - - SCRLOGGER_WRITEF( _L("SCR: BarRefreshTimer->Start(%d, %d, HandleRefreshTimerExpiry)"), - initialRefreshRate, KRefreshRate ); - } - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverctrlnone.cpp --- a/src/screensaverctrlnone.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,172 +0,0 @@ -/* -* Copyright (c) 2009 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: Implementation of screensaver none display object class. -* -*/ - - - -#include -#include - -#include "screensaverctrlnone.h" -#include "ScreensaverUtils.h" -#include "screensaverappui.h" -#include "screensavershareddatai.h" - -//the param to set the display off/on -const TInt KDisplayOff = 0; -const TInt KDisplayOn = 1; - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::NewL -// ----------------------------------------------------------------------------- -// -CScreensaverCtrlNone* CScreensaverCtrlNone::NewL() - { - CScreensaverCtrlNone* self = new( ELeave ) CScreensaverCtrlNone(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::~CScreensaverCtrlNone -// ----------------------------------------------------------------------------- -// -CScreensaverCtrlNone::~CScreensaverCtrlNone() - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::StartTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlNone::StartTimer() - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::CancelTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlNone::CancelTimer() - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::ClearScreen -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlNone::ClearScreen() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlNone::ClearScreen start") ); - SwitchDisplayState( KDisplayOn ); - - SwitchLights( KMaxLightsOnTime ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::Refresh -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlNone::Refresh() - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::DrawObject -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlNone::DrawObject() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlNone::DrawObject start") ); - SwitchDisplayState( KDisplayOff ); - - SwitchLights( 0 ); - - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::HandleResourceChange -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlNone::HandleResourceChange(TInt /*aType*/) - { - // Nothing to be implemented - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::SizeChanged -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlNone::SizeChanged() - { - // Nothing to be implemented - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::CScreensaverCtrlNone -// ----------------------------------------------------------------------------- -// -CScreensaverCtrlNone::CScreensaverCtrlNone() - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlNone::ConstructL() - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::SwitchLights -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlNone::SwitchLights( TInt aSecs ) - { - Model().SharedDataInterface()->SetSSForcedLightsOn( aSecs ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlNone::SwitchDisplayState -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlNone::SwitchDisplayState( TInt aState ) - { - SCRLOGGER_WRITEF(_L("SCR:CScreensaverCtrlNone::SwitchDisplayState start") ); - TInt currentState ; - //Get the current display state - TInt result = KErrNone; - TRAP_IGNORE( result = HAL::Get( HALData::EDisplayState, currentState ) ); - - if( KErrNone != result ) - { - //if can't get the state, revert to default type - View()->SetDisplayObject( - Model().SharedDataInterface()->DefaultScreensaverType() ); - return; - } - - if ( aState != currentState ) //display already on/off; nothing to do - { - TRAP_IGNORE( HAL::Set( HALData::EDisplayState, aState ) ); - } - } - - -//End of file diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverctrlplugin.cpp --- a/src/screensaverctrlplugin.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,648 +0,0 @@ -/* -* Copyright (c) 2009 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: Implementation of screensaver plugin display object class. -* -*/ - - - -#include -#include - -#include "ScreensaverpluginIntDef.h" -#include "screensaverctrlplugin.h" -#include "screensaverview.h" -#include "screensaverappui.h" -#include "screensaverutility.h" -#include "ScreensaverUtils.h" -#include "screensavershareddatai.h" - -// If plugin refresh rate is lower than this threshold, wserv heartbeat -// is stopped between redraws -const TInt KStopWsHbPluginRefreshThreshold = 1000000; // 1 sec - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::NewL -// ----------------------------------------------------------------------------- -// -CScreensaverCtrlPlugin* CScreensaverCtrlPlugin::NewL() - { - CScreensaverCtrlPlugin* self = new( ELeave ) CScreensaverCtrlPlugin(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::~CScreensaverCtrlPlugin -// ----------------------------------------------------------------------------- -// -CScreensaverCtrlPlugin::~CScreensaverCtrlPlugin() - { - DeleteTimer( iPluginRefreshTimer ); - DeleteTimer( iPluginTimeoutTimer ); - DeletePlugin(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::StartTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::StartTimer() - { - // Notify plugin that screensaver is starting - SendPluginEvent( EScreensaverEventStarting ); - - - StartPluginRefreshTimer(); - - if ( RefreshTimerValue() >= KStopWsHbPluginRefreshThreshold ) - { - StartCaptureScreenTimer(); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::CancelTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::CancelTimer() - { - DeleteTimer( iPluginRefreshTimer ); - DeleteTimer( iPluginTimeoutTimer ); - - SendPluginEvent( EScreensaverEventStopping ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::DrawObject -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::DrawObject() - { - CScreensaverBase::DrawObject(); - - if( iPluginFlag.IsSet( EPluginFlagSuspend ) ) - { - Suspend( -1 ); - iPluginFlag.Clear( EPluginFlagSuspend ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::ClearScreen -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::ClearScreen() - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::Refresh -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::Refresh() - { - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlPlugin::Refresh start") ); - // Currently only keylock indicator is updated, because - // thats the only indicator whose state may change while screensaver - // is displaying. Other indicators' state changing also dismisses - // screensaver. Once redisplaying, the indicators are updated anyway. - // Key lock indicator depends on status of key guard. - Array().SetDependencyStatus( ESsKeyLockInd, !Model().SharedDataInterface()->IsKeyguardOn() ); - Array().SetVisibilityForIndicators(); - - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlPlugin::Refresh DrawObject") ); - // Cause a redraw - DrawObject(); - - SCRLOGGER_WRITEF( _L("SCR:CScreensaverCtrlPlugin::Refresh finish") ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::SendPluginEvent -// ----------------------------------------------------------------------------- -// -TInt CScreensaverCtrlPlugin::SendPluginEvent( TScreensaverEvent aEvent ) - { - if ( iPlugin ) - { - TRAPD( err, iPlugin->HandleScreensaverEventL( aEvent, NULL ) ); - return err; - } - - return KErrNone; - } - -// From MScreensaverPluginHost -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::UseStandardIndicators -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::UseStandardIndicators() - { - SCRLOGGER_WRITE("Host: UseStandardIndicators()"); - - iPluginFlag.Clear( EPluginFlagOverrideIndicators ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::OverrideStandardIndicators -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::OverrideStandardIndicators() - { - SCRLOGGER_WRITE("Host: OverrideStandardIndicators()"); - - iPluginFlag.Set( EPluginFlagOverrideIndicators ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::StandardIndicatorsUsed -// ----------------------------------------------------------------------------- -// -TBool CScreensaverCtrlPlugin::StandardIndicatorsUsed() const - { - SCRLOGGER_WRITE("Host: StandardIndicatorsUsed()"); - - return iPluginFlag.IsClear( EPluginFlagOverrideIndicators ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::SetRefreshTimerValue -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::SetRefreshTimerValue( TInt aValue ) - { - SCRLOGGER_WRITEF( _L("SCR: Host: SetRefreshTimerValue(%d)"), aValue ); - - iPluginRefreshRate = aValue; - iPluginFlag.Clear( EPluginFlagTimerNotUsed ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::RefreshTimerValue -// ----------------------------------------------------------------------------- -// -TInt CScreensaverCtrlPlugin::RefreshTimerValue() const - { - SCRLOGGER_WRITE("Host: RefreshTimerValue()"); - - return iPluginRefreshRate; - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::GetIndicatorPayload -// ----------------------------------------------------------------------------- -// -TInt CScreensaverCtrlPlugin::GetIndicatorPayload( - TScreensaverIndicatorIndex aIndex, TIndicatorPayload& aResult ) const - { - SCRLOGGER_WRITEF( _L("SCR: Host: GetIndicatorPayload(%d, %x)"), - aIndex, &aResult ); - - return Model().IndicatorArray().GetIndicatorPayload( ( TScreensaverIndicatorId ) aIndex, aResult ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::SetActiveDisplayArea -// ----------------------------------------------------------------------------- -// -TInt CScreensaverCtrlPlugin::SetActiveDisplayArea( - TRect& aRect, const TScreensaverPartialMode& aMode ) - { - SCRLOGGER_WRITEF( _L("SCR: Host: SetActiveDisplayArea(, %d)"), aMode ); - SCRLOGGER_WRITEF( _L(" -> rect: (%d, %d, %d, %d)"), - aRect.iTl.iX, aRect.iTl.iY, aRect.iBr.iX, aRect.iBr.iY ); - // Make sure everything is in display memory - ScreensaverUtility::FlushDrawBuffer(); - - // Save the active area - TInt err = SetPowerSaveDisplayActiveArea( aRect ); - if ( err == KErrNone ) - { - // And activate power save display. Full mode = full colors -// err = ActivatePowerSaveDisplay( aMode.iType -// == EPartialModeTypeFull ); - } - - return err; - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::SetActiveDisplayArea -// ----------------------------------------------------------------------------- -// -TInt CScreensaverCtrlPlugin::SetActiveDisplayArea( - TInt aStartRow, TInt aEndRow, const TScreensaverPartialMode& aMode ) - { - SCRLOGGER_WRITEF( _L("SCR: Host: SetActiveDisplayArea(%d, %d, %d)"), - aStartRow, aEndRow, aMode ); - - TRect psRect( 0, aStartRow, 1, aEndRow); - return SetActiveDisplayArea( psRect, aMode ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::ExitPartialMode -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::ExitPartialMode() - { - SCRLOGGER_WRITE("Host: ExitPartialMode()"); - - LcdPartialMode()->Exit(); - // Make sure the partial area is empty - // Make this less idiotic - TRect psRect( 0, 0, 0, 0); - SetPowerSaveDisplayActiveArea( psRect ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::GetColorModel -// ----------------------------------------------------------------------------- -// -const TScreensaverColorModel& CScreensaverCtrlPlugin::GetColorModel() const - { - SCRLOGGER_WRITE("Host / Own use: GetColorModel()"); - - return Model().GetColorModel(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::Suspend -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::Suspend( TInt aTime ) - { - SCRLOGGER_WRITEF( _L("SCR: Host: Suspend(%d)"), aTime ); - - View()->SetDisplayObject( Model().SharedDataInterface()->DefaultScreensaverType() ); - - View()->ShowDisplayObject(); - - if ( aTime >= 0 ) - { - CScreensaverEngine& model = MUTABLE_CAST( CScreensaverEngine&, Model() ); - - model.StartSuspendTimer( aTime ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::RequestLights -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::RequestLights( TInt aSecs ) - { - SCRLOGGER_WRITEF( _L("SCR: Host: RequestLights(%d)"), aSecs ); - - if ( aSecs <= 0 ) - { - // Turn lights off, kill lights timer - Model().SharedDataInterface()->SetSSForcedLightsOn( 0 ); - } - else - { - // Make sure nobody tries to overextend our hospitality - TInt secs = (aSecs > KMaxLightsOnTime) ? KMaxLightsOnTime : aSecs; - - // Turn lights on, start lights timer - Model().SharedDataInterface()->SetSSForcedLightsOn( secs ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::DisplayInfo -// ----------------------------------------------------------------------------- -// -TInt CScreensaverCtrlPlugin::DisplayInfo( TScreensaverDisplayInfo* aInfo ) - { - SCRLOGGER_WRITEF( _L("SCR: Host: DisplayInfo(%x)"), aInfo ); - - if ( !aInfo ) - { - return KErrArgument; - } - // Sanity check: the indicated size of the info struct should be - // same or less than the actual size (allows for extensibility) - if ( aInfo->iSize > sizeof( TScreensaverDisplayInfo ) ) - { - ASSERT( EFalse ); - return KErrArgument; - } - - // Fill our own perception of the info structure - TScreensaverDisplayInfo info; - - info.iSize = aInfo->iSize; - - // Currently whole screen - info.iRect = CCoeEnv::Static()->ScreenDevice()->SizeInPixels(); - info.iParent = this; - - // Copy only the size of the caller struct - Mem::Copy( aInfo, &info, aInfo->iSize ); - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::UseRefreshTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::UseRefreshTimer( TBool aOn ) - { - SCRLOGGER_WRITEF( _L("SCR: Host: UseRefreshTimer(%d)"), aOn ); - - if ( aOn ) - { - // Use normal timer, plugin timer allowed - iPluginFlag.Clear( EPluginFlagTimerNotUsed ); - } - else - { - // Plugin does not want Draw() calls, let timer tick the usual way - iPluginFlag.Set( EPluginFlagTimerNotUsed ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::RequestTimeout -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::RequestTimeout( TInt aSecs ) - { - StartPluginTimeoutTimer( aSecs ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::RevertToDefaultSaver -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::RevertToDefaultSaver() - { - SCRLOGGER_WRITE("Host: RevertToDefaultSaver()"); - - Model().SharedDataInterface()->SetDisplayObjectType( - Model().SharedDataInterface()->DefaultScreensaverType() ); - } - -// --- end MScreensaverPluginHost --- - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::CScreensaverCtrlPlugin -// ----------------------------------------------------------------------------- -// -CScreensaverCtrlPlugin::CScreensaverCtrlPlugin() - :iPluginFlag() - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::ConstructL() - { - iPluginFlag.ClearAll(); - - - CreateWindowL(); - - SetRect( iCoeEnv->ScreenDevice()->SizeInPixels() ); - ConstructAndConnectLCDL(); - LoadPluginL( this ); - ActivateL(); - - // Notify plugin that display control has changed - SendPluginEvent( EScreensaverEventDisplayChanged ); - - if( Model().ScreenSaverIsPreviewing() ) - { - SendPluginEvent( EScreensaverEventPreview ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::HandleResourceChange -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::HandleResourceChange( TInt aType ) - { - if ( aType == KEikDynamicLayoutVariantSwitch ) - { - // Screen layout has changed - resize - SetRect( iCoeEnv->ScreenDevice()->SizeInPixels() ); - // Notify plugin that the display has changed - SendPluginEvent( EScreensaverEventDisplayChanged ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::SizeChanged -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::SizeChanged() - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::Draw -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::Draw( const TRect& /*aRect*/ ) const - { - - if ( !Model().ScreenSaverIsOn() && !Model().ScreenSaverIsPreviewing() ) - { - return; - } - - // Graphics context to draw on. - CWindowGc& gc = SystemGc(); - - // Fix for error ESMG-74Y4PE - S60 3.2 wk26, Power Saver: - // Flickering when power saver is deactivated. - // We now clear the screen with a black brush so the screensaver - // background is changed to black. There will no longer be a white - // intermediate screen and this will reduce the "flicker" effect. - gc.SetBrushColor( KRgbBlack ); - - // Start with a clear screen - // If there is no plugin module, indicator view overrides plugin module or - // plugin drawing is suspended then the standard screensaver bar is shown, - // let's draw it. - - // Let plugin module handle the drawing, unless not requested - - TInt err = KErrNone; - if ( iPluginFlag.IsClear( EPluginFlagTimerNotUsed ) ) - { - err = iPlugin->Draw( gc ); - } - //Notice:add this code to shield the issue ELWG-7SF3R3. - //Prevent screensaver plugin from being called unexpected draw function, - //which would cause chosen images are not displayed. - //Check the err code return by iPlugin->Draw: - //If draw action is correct and iPluginFlag has already been set EPluginFlagSuspend, - //then clear this EPluginFlagSuspend - if ( KErrNone == err && iPluginFlag.IsSet( EPluginFlagSuspend ) ) - { - iPluginFlag.Clear( EPluginFlagSuspend ); - } - - if( err != KErrNone ) - { - iPluginFlag.Set( EPluginFlagSuspend ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::LoadPluginL -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::LoadPluginL( MScreensaverPluginHost* /*aPluginHost*/ ) - { - DeletePlugin(); - LoadPluginModuleL(); - User::LeaveIfNull( iPlugin ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::LoadPluginModule -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::LoadPluginModuleL() - { - TFileName pluginName; - - Model().SharedDataInterface()->GetPluginName( pluginName ); - - // Create plugin object in the DLL - // Convert the UID of the given screensaver plugin from text to integer - // The string format of the UID: [12345678] - // The number inside the brackets in hexadecimal format - TLex lex( pluginName ); - - // Skip the first character: '[' - lex.Get(); - - TUint screenSaverPluginImpUid; - - // Get the UID - TInt err = lex.Val( screenSaverPluginImpUid, EHex ); - - // Bail out, if the UID is not parseable - if ( err != KErrNone ) - { - iPlugin = NULL; - } - //codescanner will crib if leaving function inside trap is called - //after line break within the macro. Hence the following trap call - //is made in a single line - TRAP(err, iPlugin = STATIC_CAST( MScreensaverPlugin*, - CScreensaverPluginInterfaceDefinition::NewL( - TUid::Uid( screenSaverPluginImpUid ) ) ) ); - - if( err != KErrNone ) - return; - - TRAP( err, err = iPlugin->InitializeL( this ) ); - - if( err != KErrNone ) - { - // Loaded OK, but failed to initialize - cannot use plugin - delete iPlugin; - iPlugin = NULL; - } - - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::DeletePlugin -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::DeletePlugin() - { - if( iPlugin ) - { - delete iPlugin; - iPlugin = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::StartPluginRefreshTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::StartPluginRefreshTimer() - { - DeleteTimer( iPluginRefreshTimer ); - - if( ( iPluginRefreshRate != 0 ) ) - { - TRAP_IGNORE( iPluginRefreshTimer = CPeriodic::NewL( CActive::EPriorityStandard ) ); - - iPluginRefreshTimer->Start( iPluginRefreshRate, iPluginRefreshRate, - TCallBack( HandleRefreshTimerExpiry, this ) ); - SCRLOGGER_WRITEF( _L("SCR: iRefreshTimer->Start(%d, %d, HandleRefreshTimerExpiry)"), - iPluginRefreshRate,iPluginRefreshRate ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::StartPluginTimeoutTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverCtrlPlugin::StartPluginTimeoutTimer( TInt aSecs ) - { - // Cancel pending timeouts - DeleteTimer( iPluginTimeoutTimer ); - - TRAP_IGNORE( iPluginTimeoutTimer = CPeriodic::NewL( CActive::EPriorityStandard ) ); - - // Nothing more to do? - if( ( aSecs <= 0 ) || ( aSecs > ( 35 * 60 ) ) ) // 35 mins max - { - return; - } - - TInt timeOut = aSecs * 1000000; // uSecs - - iPluginTimeoutTimer->Start( timeOut, timeOut, TCallBack( - HandlePluginTimeoutTimerExpiry, this ) ); - SCRLOGGER_WRITEF( _L("SCR: iPluginTimeoutTimer->Start(%d, %d, HandlePluginTimeoutTimerTimeout)"), - timeOut, timeOut ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverCtrlPlugin::HandlePluginTimeoutTimerExpiry -// ----------------------------------------------------------------------------- -// -TInt CScreensaverCtrlPlugin::HandlePluginTimeoutTimerExpiry( TAny* aPtr ) - { - CScreensaverCtrlPlugin *plugin= STATIC_CAST( CScreensaverCtrlPlugin*, aPtr ); - SCRLOGGER_WRITEF( _L("SCR: Inside CScreensaverView::HandlePluginTimeoutTimerTimeout()") ); - if ( plugin ) - { - plugin->DeleteTimer( plugin->iPluginRefreshTimer ); - plugin->DeleteTimer( plugin->iPluginTimeoutTimer ); - plugin->SendPluginEvent( EScreensaverEventTimeout ); - } - - return KErrNone; - } -//End of file diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverengine.cpp --- a/src/screensaverengine.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,768 +0,0 @@ -/* -* Copyright (c) 2003 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: Screensaver engine class definition. -* -*/ - - - -#include -#include -#include -#include -#include -#include -#include - -#include "screensaverengine.h" -#include "screensaverctrlmovingtext.h" -#include "screensavershareddatai.h" -#include "screensavershareddatamonitor.h" -#include "screensaverappui.h" -#include "ScreensaverUtils.h" -#include "screensaverutility.h" - - -// Minimum plugin suspension time -const TInt KMinPluginSuspensionTime = 500000; // 0.5 sec - -// Inactivity timeout in seconds when keys locked -const TInt KTimeoutShort = 5; - -const TInt KNoPreview = 0; - -const TInt KPreviewTimeout = 10000000; // 10 sec - -const TText KSilentProfileInd= KPuaCodeSilentSymbol; -const TText KSilentVibraInd= KPuaCodeAprofSilentVibra; -const TText KSoundVibraInd= KPuaCodeAprofSoundVibra; -const TText KSoundInd= KPuaCodeAprofSound; - -// Class CScreensaverEngine - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::NewL -// ----------------------------------------------------------------------------- -// -CScreensaverEngine* CScreensaverEngine::NewL() - { - CScreensaverEngine* self = new (ELeave) CScreensaverEngine(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); //self - return self; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::~CScreensaverEngine -// ----------------------------------------------------------------------------- -// -CScreensaverEngine::~CScreensaverEngine( ) - { - StopActivityMonitoring( iActivityManagerScreensaver ); - StopActivityMonitoring( iActivityManagerScreensaverShort ); - DisableSharedDataAndMonitor(); - delete iIndicatorArray; - KillTimer( iPreviewTimer ); - iAknUiServer.Close(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::SharedDataInterface -// ----------------------------------------------------------------------------- -// -CScreensaverSharedDataI* CScreensaverEngine::SharedDataInterface( ) const - { - return iSharedDataI; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::ResetInactivityTimeout -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::ResetInactivityTimeout() - { - if ( iActivityManagerScreensaver ) - { - SCRLOGGER_WRITEF(_L("SCR: Model: Setting inac timeout to %d secs"), - Timeout()); - iActivityManagerScreensaver->SetInactivityTimeout( Timeout( ) ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::ScreenSaverIsOn -// ----------------------------------------------------------------------------- -// -TBool CScreensaverEngine::ScreenSaverIsOn( ) const - { - return iScreenSaverIsOn; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::ScreenSaverIsPreviewing -// ----------------------------------------------------------------------------- -// -TBool CScreensaverEngine::ScreenSaverIsPreviewing( ) const - { - return iScreenSaverIsPreviewing; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::StartScreenSaver -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::StartScreenSaver( ) - { - SCRLOGGER_WRITE("Model: StartScreenSaver()"); - - // Ignore start while in preview to avoid double-start lock - if ( iScreenSaverIsPreviewing ) - { - // Reset user activity so that screensaver is enabled after - // preview even if no user activity happens any more - // Note that this puts on backlight but it should be on at this - // time anyway (unless a plugin set it off, but what the hey) - User::ResetInactivityTime(); - return; - } - - // if (DisplayFlag() == 1) then screensaver can be activated - // else screensaver can't come during phone call. - // Also not OK to start until system startup has been completed - if ( ( !DisplayFlag() ) && ( iSharedDataI->IsSystemStartupComplete() ) ) - { - if ( !iScreenSaverIsOn ) - { - // connect in StartScreenSaver, intercept and capture application - // key event. It makes sure this event will not be received - // by other applictions when screensaver is activated. - iAknUiServer.ConnectAndSendAppsKeySuppress(ETrue); - iScreenSaverIsOn = ETrue; - - // Report whether started from Idle BEFORE bringing to foreground - iSharedDataI->SetSSStartedFromIdleStatus(); - - ScreensaverUtility::BringToForeground(); - - SCRLOGGER_WRITE("Model: SS is displaying (BringToForeground)"); - - // Compress heap while displaying. No longer possible to - // compress all heaps (User::CompressAllHeaps() is a no-op) - User::Heap().Compress(); - - DisplayObject(); - } - else - { - SCRLOGGER_WRITE("Model: StartScreenSaver(): already on, ignore"); - } - } - else - { - SCRLOGGER_WRITE("Model: SS not displaying, not allowed."); - ResetInactivityTimeout( ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::StopScreenSaver -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::StopScreenSaver() - { - SCRLOGGER_WRITE("Stopping Screensaver"); - - if( iScreenSaverIsOn ) - { - // disconnect in StopScreenSaver, It makes sure other applications could - // receive application key event when screensaver is disactivated. - iAknUiServer.ConnectAndSendAppsKeySuppress(EFalse); - // Indicate we've stopped - iSharedDataI->SetScreensaverStatus( EFalse ); - - iScreenSaverIsOn = EFalse ; - - View()->HideDisplayObject(); - } - - - if( iScreenSaverIsPreviewing ) - { - iSharedDataI->SetScreensaverPreviewMode( KNoPreview ); - - iScreenSaverIsPreviewing = EFalse; - - View()->HideDisplayObject(); - - // Update preview progress - iSharedDataI->SetScreensaverPreviewState( EScreenSaverPreviewEnd ); - iSharedDataI->SetScreensaverPreviewState( EScreenSaverPreviewNone ); - - KillTimer( iPreviewTimer ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::StartPreviewModeL -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::StartPreviewModeL( ) - { - SCRLOGGER_WRITEF(_L("SCR: Inside CScreensaverEngine::StartPreviewModeL()") ); - - iScreenSaverIsPreviewing = ETrue; - // Change the display object into what's being previewed - View()->CreatePreviewDisplayObjectL(); - - if( iSharedDataI->ScreensaverPreviewState() == EScreenSaverPreviewError ) - { - iScreenSaverIsPreviewing = EFalse; - return; - } - - StartPreviewTimer(); - - UpdateIndicatorAttributes(); - - View()->ShowDisplayObject(); - - iSharedDataI->SetScreensaverPreviewState( EScreenSaverPreviewStart ); - - ScreensaverUtility::BringToForeground(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::DisplayObject -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::DisplayObject() - { - SCRLOGGER_WRITEF(_L("SCR: Inside CScreensaverEngine::DisplayObject()") ); - //if the display object type is plugin, we should recreate the object - //cause when plugin is suspend status, it will be changed to the default - //type - if ( iSharedDataI->DisplayObjectType() == EDisplayPlugin ) - { - View()->SetDisplayObject( EDisplayPlugin ); - } - - UpdateIndicatorAttributes(); - - View()->ShowDisplayObject(); - - iSharedDataI->SetScreensaverStatus( ETrue ); - } - -// ---------------------------------------------------------------------------- -// CScreensaverEngine::StartSuspendTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::StartSuspendTimer( TInt aSec ) - { - KillTimer( iSuspendTimer ); - - // Let's keep this operation reasonable. - TInt realTime = ( aSec > KMinPluginSuspensionTime ) - ? aSec : KMinPluginSuspensionTime; - - TRAP_IGNORE( iSuspendTimer = CPeriodic::NewL( CActive::EPriorityStandard ) ); - - iSuspendTimer->Start( realTime, realTime, TCallBack( - HandleSuspendTimerExpiry, this ) ); - - SCRLOGGER_WRITEF(_L("SCR: iSuspendTimer->Start(%d, %d, HandleSuspensionTimerTimeout)"), - realTime, realTime); - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::IndicatorArray -// ----------------------------------------------------------------------------- -// -CScreensaverIndicatorArray& CScreensaverEngine::IndicatorArray() const - { - return *iIndicatorArray; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::GetColorModel -// ----------------------------------------------------------------------------- -// -const TScreensaverColorModel& CScreensaverEngine::GetColorModel() const - { - SCRLOGGER_WRITE("Host / Own use: GetColorModel()"); - - return iColorModel; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::AddPartialModeLevel -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::AddPartialModeLevel( TInt aBpp, - TScreensaverPartialModeType aType ) - { - TInt i; - for (i = 0; i < iColorModel.iNumberOfPartialModes; i++ ) - { - if ( (iColorModel.iPartialModes[i].iBpp == aBpp) - && (iColorModel.iPartialModes[i].iType == aType) ) - { - break; - } - } - if ( i >= iColorModel.iNumberOfPartialModes ) - { - iColorModel.iPartialModes[iColorModel.iNumberOfPartialModes].iBpp - = aBpp; - iColorModel.iPartialModes[iColorModel.iNumberOfPartialModes].iType - = aType; - iColorModel.iNumberOfPartialModes++; - } - } - - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::UpdateIndicatorAttributes -// This method is for updating screensaver indicator -// attributes (payloads and dependencies). This is where indicator -// payload values are connected to real values. -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::UpdateIndicatorAttributes() - { - SCRLOGGER_WRITEF(_L("SCR: Inside CScreensaverView::UpdateIndicatorAttributes()")); - - TIndicatorPayload payload; - - // First integer types. - payload.iType = EPayloadTypeInteger; - - // Missed calls. - payload.iInteger = iSharedDataI->NewMissedCalls(); - iIndicatorArray->SetIndicatorPayload( ESsMissedCallsInd, payload ); - // Missed calls indicator depends on status of new contacts note. - iIndicatorArray->SetDependencyStatus( ESsMissedCallsInd, - !iSharedDataI->IsNCNActive() ); - - // Unread messages - payload.iInteger = iSharedDataI->UnreadMessagesNumber(); - iIndicatorArray->SetIndicatorPayload( ESsNewMessagesInd, payload ); - iIndicatorArray->SetDependencyStatus( ESsNewMessagesInd, (payload.iInteger > 0 - ? EFalse : ETrue) ); - - // Then string types. - payload.iType = EPayloadTypeText; - - // Profile information - TBool nameDisplayed = (iSharedDataI->ActiveProfile() == EProfileGeneralId) ? EFalse : ETrue; - TBool isSilent = iSharedDataI->IsSilentMode(); - payload.iText.Zero( ); - - if ( nameDisplayed || isSilent || iShowExtendedProfileInd ) - { - // append alert type indicator - if ( iShowExtendedProfileInd ) - { - TBool isVibra = iSharedDataI->IsVibraMode( ); - if ( isSilent ) - { - payload.iText.Append( isVibra ? KSilentVibraInd - : KSilentProfileInd ); - } - else - { - payload.iText.Append( isVibra ? KSoundVibraInd : KSoundInd ); - } - } - else - { - // Check if this is silent mode and we have to add indicator - // character to string. - if ( isSilent ) - { - payload.iText.Append( KSilentProfileInd ); - } - } - - if ( nameDisplayed ) - { - const TDesC& profile = iSharedDataI->ProfileName( ); - // Don't panic if profile name is too long, 'less than' ensures - // the 1 free space used for silent/vibra - if ( profile.Length( ) < KMaxPayloadTextLength ) - { - // append profile name - payload.iText.Append( profile ); - } - } - - // Profile indicator shown - iIndicatorArray->SetDependencyStatus( ESsProfileInd, EFalse ); - } - else - { - // Profile indicator not shown - iIndicatorArray->SetDependencyStatus( ESsProfileInd, ETrue ); - } - - iIndicatorArray->SetIndicatorPayload( ESsProfileInd, payload ); - - // AM/PM indicator is text but it is updated with every draw - // in screensaver control, so that it changes properly even if - // time rolls over between draws. Note that Am/Pm information is - // maintained by screensaver display object, not shareddatainterface. - if ( AknLayoutUtils::ScalableLayoutInterfaceAvailable() ) - { - // Am/Pm indicator depends on 12-hour clock - iIndicatorArray->SetDependencyStatus( ESsAmPmInd, !ScreensaverUtility::Query12HourClock( ) ); - } - else - { - // Make sure it's not shown - iIndicatorArray->SetDependencyStatus( ESsAmPmInd, ETrue ); - } - - - // Key lock indicator depends on status of key guard. - iIndicatorArray->SetDependencyStatus( ESsKeyLockInd, !iSharedDataI->IsKeyguardOn() ); - - // Instant messaging indicator depends on existence of unseen IMs - iIndicatorArray->SetDependencyStatus( ESsImInd, !iSharedDataI->IsHaveNewInstantMessages() ); - - // Mail indicator depends on existence of unseen mails - iIndicatorArray->SetDependencyStatus( ESsMailInd, !iSharedDataI->IsHaveNewEmail() ); - - // Voicemail indicator depends on existence of unseen voicemail messages - iIndicatorArray->SetDependencyStatus( ESsVoicemailInd, !iSharedDataI->IsHaveNewVoicemail() ); - - //Set visibility for indicators if selected screensaver is a plugin - //which overides standard indicators - //TODO: Convert the iControlType to the iSettingType -// if ( (iSharedDataI->ScreensaverObjectType() == EDisplayPlugin ) && -// ( AppUi()->ScreensaverView()->PluginFlags() & CScreensaverView::EPluginFlagOverrideIndicators ) ) -// { - iIndicatorArray->SetVisibilityForIndicators(); -// } - } - - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::CScreensaverEngine -// ----------------------------------------------------------------------------- -// -CScreensaverEngine::CScreensaverEngine() - { - - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::ConstructL( ) - { - SetupColorModelL(); - - EnableSharedDataAndMonitorL(); - - iIndicatorArray = CScreensaverIndicatorArray::NewL( iSharedDataI->IsInvertedColors() ); - - StartActivityMonitoringL(); - - FeatureManager::InitializeLibL(); - iShowExtendedProfileInd - = FeatureManager::FeatureSupported( KFeatureIdProtocolCdma ); - FeatureManager::UnInitializeLib(); - - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::EnableSharedDataAndMonitorL -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::EnableSharedDataAndMonitorL() - { - iSharedDataI = CScreensaverSharedDataI::NewL(); - - iSharedDataMonitor = CScreensaverSharedDataMonitor::NewL( iSharedDataI ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::DisableSharedDataAndMonitor -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::DisableSharedDataAndMonitor( ) - { - delete iSharedDataMonitor; - iSharedDataMonitor = NULL; - - delete iSharedDataI; - iSharedDataI = NULL; - - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::StartActivityMonitoringL -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::StartActivityMonitoringL( ) - { - // Actually screensaver is the last exe to be launch at the startup, - // so when it is being launched the elapsed time(User::InactivityTime()) - // is greater than the interval (15 sec) which screensaver pass to start - // activitymanager for inactivitycallback. - // So it has to do to reset inactivitytime (User::ResetInactivityTime() ) - // once in the screensaver constructor so that the inactivity callback - // called after the interval time expired. - User::ResetInactivityTime(); - - // Start monitoring activity for screensaver - iActivityManagerScreensaver - = CUserActivityManager::NewL( CActive::EPriorityStandard ); - iActivityManagerScreensaver->Start( Timeout(), - TCallBack( HandleInactiveEventL,this ), - TCallBack( HandleActiveEventL, this ) ); - - // Start monitoring activity for screensaver, short timeout - iActivityManagerScreensaverShort - = CUserActivityManager::NewL( CActive::EPriorityStandard ); - - iActivityManagerScreensaverShort->Start( KTimeoutShort, - TCallBack( HandleInactiveEventShortL, this ), - TCallBack( HandleActiveEventShortL, this ) ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::StopActivityMonitoring -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::StopActivityMonitoring( CUserActivityManager*& aActivityManager ) - { - if ( aActivityManager ) - { - aActivityManager->Cancel(); - delete aActivityManager; - aActivityManager = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::SetupColorModelL -// THIS IS TEMPORARY VERSION OF SetupColorModelL function. It is used until -// new version of LcdPartialMode module is integrated. -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::SetupColorModelL() - { - SCRLOGGER_WRITEF(_L("SCR: Inside CScreensaverEngine::SetupColorModelL()") ); - TResourceReader reader; - TInt i, ctmp; - - TInt suggestedDrawingMode; - - CEikonEnv::Static()->CreateResourceReaderLC( reader, R_SCREENSAVER_COLOR_MODEL ); - suggestedDrawingMode = reader.ReadInt32( ); - - // - // Let's find out how many partial modes hardware - // actually supports. - // - AddPartialModeLevel( (TInt)3, - (TScreensaverPartialModeType)EPartialModeTypeMostPowerSaving ); - AddPartialModeLevel( (TInt)3, - (TScreensaverPartialModeType)EPartialModeTypeDefault ); - AddPartialModeLevel( (TInt)16, - (TScreensaverPartialModeType)EPartialModeTypeFull ); - - if ( suggestedDrawingMode == ESsColorModel3BitMode ) - { - // This can always be done, just set default partial mode to - // most power saving. First try 'most power saving' and if not supported - // then try default. if default isn't supported leave with error code. - iColorModel.iSystemPartialMode.iBpp = 3; - iColorModel.iSystemPartialMode.iType - = EPartialModeTypeMostPowerSaving; - } - - // Read color indices for 3-bit mode. - reader.Read( iColorModel.iColors, 8 * sizeof(TInt16) ); - - // Read rgb values for gradient effect. - for (i = 0; i < 6; i++ ) - { - ctmp = reader.ReadInt32( ); - iColorModel.iDarkGradient[i] = TRgb( ctmp ); - } - - for (i = 0; i < 6; i++ ) - { - ctmp = reader.ReadInt32( ); - iColorModel.iLightGradient[i] = TRgb( ctmp ); - } - - CleanupStack::PopAndDestroy( ); // reader - } - -// ---------------------------------------------------------------------------- -// CScreensaverEngine::StartPreviewTimer -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::StartPreviewTimer() - { - SCRLOGGER_WRITEF(_L("SCR: Inside CScreensaverEngine::StartPreviewTimer()") ); - - KillTimer( iPreviewTimer ); - - TRAP_IGNORE( iPreviewTimer = CPeriodic::NewL( CActive::EPriorityHigh ) ); - - iPreviewTimer->Start( KPreviewTimeout, KPreviewTimeout, TCallBack( - HandlePreviewTimerExpiry, this ) ); - - SCRLOGGER_WRITEF(_L("SCR: iPreviewTimer->Start(%d, %d, HandlePreviewTimerTimeout)"), - KPreviewTimeout,KPreviewTimeout); - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::KillTimer -// Stops and deletes a timer -// ----------------------------------------------------------------------------- -// -void CScreensaverEngine::KillTimer( CPeriodic*& aTimer ) - { - if ( aTimer ) - { - aTimer->Cancel( ); - delete aTimer; - aTimer = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::HandlePreviewTimerExpiry -// ----------------------------------------------------------------------------- -// -TInt CScreensaverEngine::HandlePreviewTimerExpiry( TAny* aPtr ) - { - CScreensaverEngine* Engine = STATIC_CAST(CScreensaverEngine*, aPtr); - SCRLOGGER_WRITEF(_L("SCR: Inside CScreensaverView::HandlePreviewTimerTimeout()")); - - Engine->KillTimer( Engine->iPreviewTimer ); - Engine->StopScreenSaver(); - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::HandleActiveEventL -// ----------------------------------------------------------------------------- -// -TInt CScreensaverEngine::HandleActiveEventL( TAny* /* aPtr */) - { - SCRLOGGER_WRITE("HandleActiveEventL(), do nothing"); - // We can be pretty sure the short timeout has passed and its - // active event handler stops the saver - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::HandleInactiveEventL -// ----------------------------------------------------------------------------- -// -TInt CScreensaverEngine::HandleInactiveEventL( TAny* aPtr ) - { - SCRLOGGER_WRITE("HandleInactiveEventL(), starting screensaver"); - - CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr); - - // Double-start is OK, it will be checked in StartScreenSaver() - _this->StartScreenSaver( ); - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::HandleActiveEventShortL -// ----------------------------------------------------------------------------- -// -TInt CScreensaverEngine::HandleActiveEventShortL( TAny* aPtr ) - { - SCRLOGGER_WRITE("HandleActiveEventShortL(), stopping saver"); - STATIC_CAST(CScreensaverEngine*, aPtr)->StopScreenSaver(); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::HandleInactiveEventShortL -// ----------------------------------------------------------------------------- -// -TInt CScreensaverEngine::HandleInactiveEventShortL( TAny* aPtr ) - { - SCRLOGGER_WRITE("HandleInactiveEventShortL()"); - // Start, if keys are locked and short timeout in use - CScreensaverEngine* _this= STATIC_CAST(CScreensaverEngine*, aPtr); - - if ( _this->iSharedDataI->IsKeyguardOn() ) - { - SCRLOGGER_WRITE("HandleInactiveEventShortL() starting saver"); - _this->StartScreenSaver( ); - } - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::HandleSuspendTimerExpiry -// ----------------------------------------------------------------------------- -// -TInt CScreensaverEngine::HandleSuspendTimerExpiry( TAny* aPtr ) - { - CScreensaverEngine* control= STATIC_CAST(CScreensaverEngine*, aPtr); - SCRLOGGER_WRITEF(_L("SCR: Inside CScreensaverEngine::HandleSuspendTimerExpiry()")); - - control->KillTimer( control->iSuspendTimer ); - - control->View()->SetDisplayObject( EDisplayPlugin ); - control->View()->ShowDisplayObject(); - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::View -// ----------------------------------------------------------------------------- -// -CScreensaverView* CScreensaverEngine::View() const - { - return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() )->ScreensaverView(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::Timeout -// ----------------------------------------------------------------------------- -// -TInt CScreensaverEngine::Timeout( ) - { - return iSharedDataI->ScreensaverTimeout( ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverEngine::DisplayFlag -// ----------------------------------------------------------------------------- -// -TInt CScreensaverEngine::DisplayFlag( ) - { - return iSharedDataI->IsScreenSaverAllowed(); - } -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverindicator.cpp --- a/src/screensaverindicator.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,220 +0,0 @@ -/* -* Copyright (c) 2003 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: Implementation screensaver indicator array. -* -*/ - - - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "screensaverplugin.h" -#include "screensaverindicator.h" -#include "ScreensaverUtils.h" - - - -// -// CSCreensaverIndicator -// - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::~CScreensaverIndicator -// ----------------------------------------------------------------------------- -// -CScreensaverIndicator::~CScreensaverIndicator() - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicator::ConstructL(TResourceReader &aReader, - TUint32 aBgColor, TUint aTextColor) - { - iId = (TScreensaverIndicatorId)aReader.ReadInt16(); - iDrawType = (TScreensaverDrawType)aReader.ReadInt16(); - iAlignment = (TScreensaverAlignment)aReader.ReadInt16(); - - // Switch left & right alignment of indicators, if layout mirrored - if (AknLayoutUtils::LayoutMirrored()) - { - if (iAlignment == ESsAlignLeft) - { - iAlignment = ESsAlignRight; - } - else - { - iAlignment = ESsAlignLeft; - } - } - iBgColor = TRgb(aBgColor); - iTextColor = TRgb(aTextColor); - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::SetId -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicator::SetId(TScreensaverIndicatorId aId) - { - iId = aId; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::Visible -// ----------------------------------------------------------------------------- -// -TBool CScreensaverIndicator::Visible() const - { - return iVisible; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::SetVisibility -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicator::SetVisibility(TBool aValue) - { - iVisible = aValue; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::Width() -// ----------------------------------------------------------------------------- -// -TInt CScreensaverIndicator::Width() const - { - return iRect.Width(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::Id -// ----------------------------------------------------------------------------- -// -TScreensaverIndicatorId CScreensaverIndicator::Id() const - { - return iId; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::Alignment -// ----------------------------------------------------------------------------- -// -TScreensaverAlignment CScreensaverIndicator::Alignment() const - { - return iAlignment; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::DrawType -// ----------------------------------------------------------------------------- -// -TScreensaverDrawType CScreensaverIndicator::DrawType() const - { - return iDrawType; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::MakeSkinItemId -// ----------------------------------------------------------------------------- -// -TAknsItemID CScreensaverIndicator::MakeSkinItemId(TInt aSkinBmpId) - { - TAknsItemID id; - // All are AVKON generic ids - id.Set(EAknsMajorGeneric, aSkinBmpId); - return id; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::SetType -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicator::SetType(TScreensaverIndicatorType aType) - { - iType = aType; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::Type -// ----------------------------------------------------------------------------- -// -TScreensaverIndicatorType CScreensaverIndicator::Type() - { - return iType; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::SetIconLayout -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicator::SetIconLayout(TAknLayoutRect&, TInt) - { - iVisible = ETrue; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::SetTextLayout -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicator::SetTextLayout(TAknLayoutText&, TInt) - { - iVisible = ETrue; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::PreferredWidth -// ----------------------------------------------------------------------------- -// -TInt CScreensaverIndicator::PreferredWidth() - { - return -1; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::MinimumWidth -// ----------------------------------------------------------------------------- -// -TInt CScreensaverIndicator::MinimumWidth() - { - return 0; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::SetWidth -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicator::SetWidth(TInt) - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicator::SetXPos -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicator::SetXPos(TInt) - { - } - - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverindicatorarray.cpp --- a/src/screensaverindicatorarray.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,498 +0,0 @@ -/* -* Copyright (c) 2003 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: CScreensaverIndicatorArray implementation. -* -*/ - - - -#include -#include -#include - -#include "screensaverindicatorarray.h" -#include "screensaverindicatornumberandicon.h" -#include "screensaverindicatortext.h" -#include "screensaverindicatoricon.h" -#include "screensaverutility.h" - -const TInt KInvertedColors = 1; - - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::NewL -// ----------------------------------------------------------------------------- -// -CScreensaverIndicatorArray* CScreensaverIndicatorArray::NewL( TBool aColorInversionUsed ) - { - CScreensaverIndicatorArray* array = new(ELeave) CScreensaverIndicatorArray(); - CleanupStack::PushL(array); - array->ConstructL( aColorInversionUsed ); - CleanupStack::Pop(); // array - - return array; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::~CScreensaverIndicatorArray -// ----------------------------------------------------------------------------- -// -CScreensaverIndicatorArray::~CScreensaverIndicatorArray() - { - if (iIndicators) - { - iIndicators->ResetAndDestroy(); - } - delete iIndicators; - delete iDependencyRecord; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::NewIndicatorLC -// ----------------------------------------------------------------------------- -// -CScreensaverIndicator *CScreensaverIndicatorArray::NewIndicatorLC( - TScreensaverIndicatorType aId) - { - CScreensaverIndicator *result= NULL; - - switch (aId) - { - case ESsIconIndicator: - result = new( ELeave ) CScreensaverIndicatorIcon(); - break; - case ESsTextIndicator: - result = new( ELeave ) CScreensaverIndicatorText(); - break; - case ESsNumberAndIconIndicator: - result = new( ELeave ) CScreensaverIndicatorNumberAndIcon(); - break; - default: - User::Leave(KErrCorrupt); - } - - CleanupStack::PushL( result ); - result->SetType(aId); - - return result; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorArray::ConstructL( TBool aColorInversionUsed ) - { - if (aColorInversionUsed == KInvertedColors) - { - iBgColor = TRgb(KRgbBlack).Value(); - iTextColor = TRgb(KRgbWhite).Value(); - } - else //aColorInversionUsed == KNormalColors - { - iBgColor = TRgb(KRgbWhite).Value(); - iTextColor = TRgb(KRgbBlack).Value(); - } - - ConstructFromResourceL(); - - } - - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::ConstructFromResourceL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorArray::ConstructFromResourceL() - { - ConstructParamFromResourceL(); - - ConstructIndArrayL(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::ConstructParamFromResourceL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorArray::ConstructParamFromResourceL() - { - TResourceReader reader; - - CEikonEnv::Static()->CreateResourceReaderLC( reader, R_SCREENSAVER_PARAMETERS ); - iMargin = reader.ReadInt16(); - iGap = reader.ReadInt16(); - iTopMargin = reader.ReadInt16(); - iTextLevel = reader.ReadInt16(); - iHeight = reader.ReadInt16(); - CleanupStack::PopAndDestroy(); // reader - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::ConstructIndArrayL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorArray::ConstructIndArrayL() - { - if( AknLayoutUtils::ScalableLayoutInterfaceAvailable() ) - {//use the new layout - ConstructIndicatorsL( R_SCREENSAVER_INDICATOR_ARRAY_NEW_LAYOUT ); - } - else - {//use the old layout - ConstructIndicatorsL( R_SCREENSAVER_INDICATOR_ARRAY ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::ConstructIndicatorsL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorArray::ConstructIndicatorsL( TInt aResourceId ) - { - TResourceReader reader; - - CEikonEnv::Static()->CreateResourceReaderLC( - reader, aResourceId); - - iCount = reader.ReadInt16(); - - iIndicators = new( ELeave ) CArrayPtrFlat( iCount ); - iDependencyRecord = new( ELeave ) CArrayFixFlat( iCount ); - - CScreensaverIndicator *nInd; - TInt32 type; - for (TInt i = 0; i < iCount; i++) - { - iDependencyRecord->AppendL( ETrue ); - type = reader.ReadInt32(); - nInd = NewIndicatorLC( ( TScreensaverIndicatorType ) type ); - nInd->ConstructL( reader, iBgColor, iTextColor ); - iIndicators->InsertL( 0, nInd ); - CleanupStack::Pop(); // nInd - } - - CleanupStack::PopAndDestroy(); // reader - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::Dependency -// ----------------------------------------------------------------------------- -// -TBool CScreensaverIndicatorArray::Dependency(TInt aIndex) const - { - return (*iDependencyRecord)[aIndex]; - } -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::Setup -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorArray::Setup( TAknLayoutRect& aLayoutRect, - TAknLayoutText& aLayoutText, TAknLayoutRect& aLayoutInds ) - { - // Reset drawing parameters (do not use those defined in resources) - iRect = aLayoutRect.Rect(); - - TInt rightMargin = 0; - // Left margin = indicators left edge - indicator area left edge - // Right margin = 0, the AM/PM indicator needs to be on the edge - // Except when mirrored the other way around. Right margin can be reduced - // by 1 when mirrored, because the icons contain a border on top & right - if ( AknLayoutUtils::LayoutMirrored() ) - { - iMargin = 0; - rightMargin = aLayoutInds.Rect().iTl.iX - iRect.iTl.iX - 1; - } - else - { - iMargin = aLayoutInds.Rect().iTl.iX - iRect.iTl.iX; - rightMargin = 0; - } - - TInt currentX = iRect.iBr.iX - rightMargin; - - TInt leftmostRightAlignedBorder = iRect.iBr.iX - rightMargin; // iMargin; - - // This is done in two passes, first we set up right-aligned indicators - // and then left-aligned. If any left-aligned indicator overlaps with leftmost - // right-aligned indicator the the process is stopped (right-aligned - // indicators have higher priority). - for ( TInt i = 0; i < iIndicators->Count(); i++ ) - { - if (iIndicators->At(i)->Alignment() != ESsAlignRight) - { - continue; - } - - SetIndicatorsAttribute( i, aLayoutText, aLayoutInds, currentX ); - - if (iIndicators->At(i)->Visible()) - { - currentX -= iIndicators->At(i)->Width() + iGap; - leftmostRightAlignedBorder = currentX; - if (currentX < iMargin) - { - break; - } - } - } - - // Start second round from left edge - currentX = iRect.iTl.iX + iMargin; - for ( TInt i = 0; i < iIndicators->Count(); i++ ) - { - if (iIndicators->At(i)->Alignment() != ESsAlignLeft) - { - continue; - } - - SetIndicatorsAttribute( i, aLayoutText, aLayoutInds, currentX ); - - if (iIndicators->At(i)->Visible()) - { - if (currentX + iIndicators->At(i)->Width() + iGap >= leftmostRightAlignedBorder) - { - iIndicators->At(i)->SetVisibility(EFalse); - break; - } - currentX += iIndicators->At(i)->Width() + iGap; - if (currentX > iRect.Width() - iMargin) - { - break; - } - } - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::SetIndicatorsAttribute -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorArray::SetIndicatorsAttribute( - TInt& Ind, - TAknLayoutText& aLayoutText, - TAknLayoutRect& aLayoutInds, - TInt& aCurrentX ) - { - - // Set text layout for text containing indicators - iIndicators->At(Ind)->SetTextLayout(aLayoutText, aCurrentX); - - // Set icon layout for icon containing indicators - iIndicators->At(Ind)->SetIconLayout(aLayoutInds, aCurrentX); - - // Not visible, if conditions (e.g. there's icon & payload) are not met, - // or there's no reason to show the indicator - if (!iIndicators->At(Ind)->CheckVisibilityConditions() || Dependency(iIndicators->At(Ind)->Id())) - { - iIndicators->At(Ind)->SetVisibility(EFalse); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::Draw -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorArray::Draw(CWindowGc& aGc) const - { - aGc.SetBrushColor(iBgColor); - aGc.SetPenColor(iTextColor); - aGc.Clear(iRect); - - for (TInt i = 0; i < iIndicators->Count(); i++) - { - if (iIndicators->At(i)->Visible()) - { - iIndicators->At(i)->Draw(aGc); - } - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::CheckDependencyConflict -// ----------------------------------------------------------------------------- -// -TBool CScreensaverIndicatorArray::CheckDependencyConflict( - TScreensaverIndicatorId aId) const - { - if ((iDependencyRecord) && (aId < iCount)) - { - return Dependency(aId); - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::SetDependencyStatus -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorArray::SetDependencyStatus( - TScreensaverIndicatorId aId, TBool aValue) - { - if ((iDependencyRecord) && (aId < iCount)) - { - (*iDependencyRecord)[aId] = aValue; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::GetIndicatorPayload -// ----------------------------------------------------------------------------- -// -TInt CScreensaverIndicatorArray::GetIndicatorPayload( - TScreensaverIndicatorId aId, TIndicatorPayload& aPayload) const - { - if (aId < iCount) - { - for (TInt i = 0; i < iIndicators->Count(); i++) - { - if (aId == iIndicators->At(i)->Id()) - { - iIndicators->At(i)->Payload(aPayload); - return KErrNone; - } - } - } - - return KErrCorrupt; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::SetIndicatorPayload -// ----------------------------------------------------------------------------- -// -TInt CScreensaverIndicatorArray::SetIndicatorPayload( - TScreensaverIndicatorId aId, const TIndicatorPayload& aPayload) - { - if (aId < iCount) - { - for (TInt i = 0; i < iIndicators->Count(); i++) - { - if (aId == iIndicators->At(i)->Id()) - { - iIndicators->At(i)->SetPayload(aPayload); - return KErrNone; - } - } - } - - return KErrCorrupt; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::PreferredDrawingMode -// ----------------------------------------------------------------------------- -// -TScreensaverDrawType CScreensaverIndicatorArray::PreferredDrawingMode() const - { - TScreensaverDrawType result = ESsDrawTypeNotDrawn; // Default mode. - - for (TInt i = 0; i < iIndicators->Count(); i++) - { - if ((iIndicators->At(i)->CheckVisibilityConditions() == EFalse) - || (CheckDependencyConflict(iIndicators->At(i)->Id()))) - { - // This indicator can't be visible or there is - // dependency conflict -> continue. - continue; - } - - switch (iIndicators->At(i)->DrawType()) - { - case ESsDrawTypePrimary: - // Primary draw type overides everything, - // so we can return immediately. - return ESsDrawTypePrimary; - case ESsDrawTypeSecondary: - result = ESsDrawTypeSecondary; - break; - default: - break; - } - } - - return result; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::ActualDrawingMode -// ----------------------------------------------------------------------------- -// -TScreensaverDrawType CScreensaverIndicatorArray::ActualDrawingMode() const - { - TScreensaverDrawType result = ESsDrawTypeNotDrawn; // Default mode. - - for (TInt i = 0; i < iIndicators->Count(); i++) - { - if ((iIndicators->At(i)->CheckVisibilityConditions() == EFalse) - || !( iIndicators->At(i)->Visible() ) ) - { - // This indicator can't be visible or it is visible - continue; - } - - switch (iIndicators->At(i)->DrawType()) - { - case ESsDrawTypePrimary: - return ESsDrawTypePrimary; // Primary draw type overides everything. - case ESsDrawTypeSecondary: - result = ESsDrawTypeSecondary; - break; - default: - break; - } - } - - return result; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::Height -// ----------------------------------------------------------------------------- -// -TInt CScreensaverIndicatorArray::Height() const - { - return iHeight; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::SetVisibilityForIndicators -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorArray::SetVisibilityForIndicators() - { - for (int i = 0; i < iIndicators->Count(); i++) - { - // Not visible, if conditions (e.g. there's icon & payload) are not met, - // or there's no reason to show the indicator - if (!iIndicators->At(i)->CheckVisibilityConditions() || Dependency(iIndicators->At(i)->Id())) - { - iIndicators->At(i)->SetVisibility(EFalse); - } - else - iIndicators->At(i)->SetVisibility(ETrue); - } - - } - -// ----------------------------------------------------------------------------- -// CScreensaverIndicatorArray::CScreensaverIndicatorArray -// ----------------------------------------------------------------------------- -// -CScreensaverIndicatorArray::CScreensaverIndicatorArray() - { - - } - -// End of files diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverindicatoricon.cpp --- a/src/screensaverindicatoricon.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,218 +0,0 @@ -/* -* Copyright (c) 2003 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: CScreensaverIndicatorIcon implementation. -* -*/ - - - -#include -#include - -#include "screensaverindicatoricon.h" - -// -// CScreensaverIconIndicator -// - -// ----------------------------------------------------------------------------- -// CScreensaverIconIndicator::~CScreensaverIconIndicator -// ----------------------------------------------------------------------------- -// -CScreensaverIndicatorIcon::~CScreensaverIndicatorIcon() - { - delete iIcon; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIconIndicator::Draw -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorIcon::Draw(CWindowGc& aGc) const - { - aGc.SetPenColor(iTextColor); - aGc.SetBrushColor(iBgColor); - if (Visible() && iIcon) - { - if (!iIcon->Mask()) - { - aGc.BitBlt(iTopLeft, iIcon->Bitmap(), iRect); - } - else - { - aGc.BitBltMasked(iTopLeft, iIcon->Bitmap(), iRect, iIcon->Mask(), - ETrue); - } - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverIconIndicator::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorIcon::ConstructL(TResourceReader &aReader, - TUint32 aBgColor, TUint aTextColor) - { - CScreensaverIndicator::ConstructL(aReader, aBgColor, aTextColor); - - // Icon & mask ids - TInt id = aReader.ReadInt32(); - TInt maskid = aReader.ReadInt32(); - - // Icon & mask skin identifiers - TInt skinid = aReader.ReadInt32(); - TInt skinmaskid = aReader.ReadInt32(); - - iIcon = CGulIcon::NewL(); - - CFbsBitmap* bmp= NULL; - CFbsBitmap* mask= NULL; - - // Load skinned bitmap - AknsUtils::CreateColorIconLC(AknsUtils::SkinInstance(), - MakeSkinItemId(skinid), - KAknsIIDNone, // Lie so that we get default color, not skin color - 0, // No color group - bmp, mask, AknIconUtils::AvkonIconFileName(), id, maskid, - iTextColor); - - CleanupStack::Pop(2); - - // Save the icon - iIcon->SetBitmap(bmp); - iIcon->SetMask(mask); - - // Set initial size for SVG graphics, this is later altered - // as the layout is known - // Set desired size for SVG graphics (height from LAF, width 3 x height) - TAknLayoutRect screenLayout; - screenLayout.LayoutRect(TRect(0, 0, 0, 0), AknLayout::screen() ); - TRect screenRect = screenLayout.Rect(); - TAknLayoutRect powerSavePaneLayout; - powerSavePaneLayout.LayoutRect(screenRect, - AknLayout::Power_save_pane_descendants_Line_1() ); - TRect powerSavePaneRect = powerSavePaneLayout.Rect(); - TAknLayoutRect rect; - rect.LayoutRect(powerSavePaneRect, - AknLayout::Power_save_pane_descendants_Line_3() ); - TInt height = rect.Rect().Height(); - TSize iconSize(3 * height, height); - AknIconUtils::SetSize(iIcon->Bitmap(), iconSize); - } - -// ----------------------------------------------------------------------------- -// CScreensaverIconIndicator::SetupDrawingParameters -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorIcon::SetupDrawingParameters(const TPoint &aCorner, - const TRect& aParentRect) - { - iVisible = EFalse; - - if (!iIcon) - { - return; - } - - TSize size = iIcon->Bitmap()->SizeInPixels(); - iTopLeft.iX = aCorner.iX; - if (iAlignment == ESsAlignRight) - { - // Change topright to topleft. - iTopLeft.iX -= size.iWidth; - } - // Center bitmap in y direction. - iTopLeft.iY = aCorner.iY + (aParentRect.Size().iHeight / 2) - (size.iHeight / 2) - 2; - - iRect = TRect(0, 0, size.iWidth, size.iHeight); - - iVisible = ETrue; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIconIndicator::CheckVisibilityConditions -// ----------------------------------------------------------------------------- -// -TBool CScreensaverIndicatorIcon::CheckVisibilityConditions() const - { - return (iIcon == 0 ? EFalse : ETrue); - } - -// ----------------------------------------------------------------------------- -// CScreensaverIconIndicator::Payload -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorIcon::Payload(TIndicatorPayload& aPayload) const - { - aPayload.iType = EPayloadTypeIcon; - aPayload.iInteger = -1; - aPayload.iText = KNullDesC; - aPayload.iIsDisplayed = Visible(); - aPayload.iIcon = iIcon; - } - -// ----------------------------------------------------------------------------- -// CScreensaverIconIndicator::SetPayload -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorIcon::SetPayload(const TIndicatorPayload& /*aPayload*/) - { - // Nothing to set, payload is icon and it is created from resources. - } - -// ----------------------------------------------------------------------------- -// CScreensaverIconIndicator::SetIconLayout -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorIcon::SetIconLayout(TAknLayoutRect& aLayout, TInt aX) - { - if (!iIcon) - { - ASSERT(iIcon); - return; - } - - // Resize icon according to layout - TInt height = aLayout.Rect().Height(); - TSize iconSize(KMaxTInt, height); - AknIconUtils::SetSize(iIcon->Bitmap(), iconSize, - EAspectRatioPreservedAndUnusedSpaceRemoved); - - // Set vertical icon position according to layout (this overrides - // what's already there. Also set correct width in iRect - iTopLeft.iY = aLayout.Rect().iTl.iY; - iTopLeft.iX = aX; - TSize size = iIcon->Bitmap()->SizeInPixels(); - iRect = TRect(0, 0, size.iWidth, size.iHeight); - - if (iAlignment == ESsAlignRight) - { - // Change topright to topleft. - iTopLeft.iX -= size.iWidth; - } - -#ifdef SS_LAYOUTTRACE - SCRLOGGER_WRITEF(_L("SCR: Icon indicator (%d):"), iId); - SCRLOGGER_WRITEF(_L("SCR: Rect: (%d,%d,%d,%d)"), - iRect.iTl.iX, - iRect.iTl.iY, - iRect.iBr.iX, - iRect.iBr.iY); - SCRLOGGER_WRITEF(_L("SCR: Size: (%d,%d)"), size.iWidth, size.iHeight); - SCRLOGGER_WRITEF(_L("SCR: Pos: (%d,%d)"), iTopLeft.iX, iTopLeft.iY); -#endif - } - - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverindicatornumberandicon.cpp --- a/src/screensaverindicatornumberandicon.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,434 +0,0 @@ -/* -* Copyright (c) 2003 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: CScreensaverIndicatorNumberAndIcon implementation. -* -*/ - - - -#include -#include -#include - -#include "screensaverindicatornumberandicon.h" - - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::~CScreensaverNumberAndIconIndicator -// ----------------------------------------------------------------------------- -// -CScreensaverIndicatorNumberAndIcon::~CScreensaverIndicatorNumberAndIcon() - { - delete iIcon; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::Draw -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::Draw( CWindowGc& aGc ) const - { - TBuf<10> nStr; - nStr.AppendNum( iValue ); - - aGc.SetPenColor( iTextColor ); - aGc.SetBrushColor( iBgColor ); - - if ( iFont ) - { - aGc.UseFont( iFont ); - } - else - { - ASSERT( iFont != NULL ); - aGc.UseFont( CEikonEnv::Static()->AnnotationFont() ); - } - - if ( Visible() && iIcon ) - { - // Convert number according to language - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( nStr ); - - DrawIcon( aGc ); - - // Draw number beside icon - if ( ( iTextRect.IsEmpty() ) || ( !iFont ) ) - { - // Draw using text position (old layout) - aGc.DrawText( nStr, iTextPos ); - } - else - { - // Use text rect - ASSERT( iTextOffset> 0 ); - aGc.DrawText( nStr, iTextRect, iTextOffset ); - } - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::ConstructL( TResourceReader &aReader, - TUint32 aBgColor, TUint aTextColor ) - { - CScreensaverIndicator::ConstructL( aReader, aBgColor, aTextColor ); - - iIconAlign = ( TScreensaverAlignment )aReader.ReadInt32(); - iFont = AknLayoutUtils::FontFromId( aReader.ReadInt32() ); - if ( !iFont ) - { - iFont = LatinPlain12(); - } - - // create icon - InitializeIconL( aReader ); - - // Set desired size for SVG graphics (height from LAF, width 3 x height) - InitializeLayout(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::SetupDrawingParameters -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::SetupDrawingParameters( - const TPoint& aCorner, const TRect& aParentRect ) - { - iVisible = EFalse; - - TBuf<10> nStr; - - if ( !iIcon ) - { - return; - } - - nStr.AppendNum( iValue ); - - TSize bmsize = iIcon->Bitmap()->SizeInPixels(); - TInt textWidth = iFont ? iFont->TextWidthInPixels( nStr ) + 1 : nStr.Length() - * 11; // Should be enough for APAC too - - iTopLeft.iX = aCorner.iX; - if ( iAlignment == ESsAlignRight ) - { - // Change topright to topleft. - iTopLeft.iX -= bmsize.iWidth + textWidth; - } - // Center bitmap in y direction. - iTopLeft.iY = aCorner.iY + ( aParentRect.Size().iHeight / 2 ) - ( bmsize.iHeight / 2 ) - 2; - - // Calculate text corner - if ( iIconAlign == ESsAlignLeft ) - { - iTextPos.iX = iTopLeft.iX + bmsize.iWidth + 1; - } - else - { - iTextPos.iX = iTopLeft.iX; - } - - iTextPos.iY = aCorner.iY + iRect.Size().iHeight / 2 + 4; - - iRect = TRect( 0, 0, bmsize.iWidth + textWidth, aParentRect.Size().iHeight ); - - // Make sure text rect is not used - iTextRect.SetRect( 0, 0, 0, 0 ); - - iVisible = ETrue; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::CheckVisibilityConditions -// ----------------------------------------------------------------------------- -// -TBool CScreensaverIndicatorNumberAndIcon::CheckVisibilityConditions() const - { - if ( ( iIcon ) && ( iValue > 0 ) ) - { - return ETrue; - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::Payload -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::Payload( TIndicatorPayload& aPayload ) const - { - aPayload.iType = EPayloadTypeInteger; - aPayload.iInteger = iValue; - aPayload.iText = KNullDesC; - aPayload.iIsDisplayed = Visible(); - aPayload.iIcon = iIcon; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::SetPayload -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::SetPayload( - const TIndicatorPayload& aPayload ) - { - if ( aPayload.iType != EPayloadTypeInteger ) - { - return; - } - - iValue = aPayload.iInteger; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::SetIconLayout -// Sets icon position and size -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::SetIconLayout( TAknLayoutRect& aLayout, - TInt aX ) - { - if ( !iIcon ) - { - ASSERT( iIcon ); - return; - } - - // Resize icon according to layout - TInt height = aLayout.Rect().Height(); - TSize iconSize(KMaxTInt, height); - AknIconUtils::SetSize( iIcon->Bitmap(), iconSize, - EAspectRatioPreservedAndUnusedSpaceRemoved ); - - // Overrides vertical icon position set earlier - iTopLeft.iY = aLayout.Rect().iTl.iY; - - // Set initial rect - iRect = TRect( 0, 0, PreferredWidth(), height ); - - // Set X-position - SetXPos( aX ); - -#ifdef SS_LAYOUTTRACE - SCRLOGGER_WRITEF( _L("SCR: NumberAndIcon indicator (%d):"), iId ); - SCRLOGGER_WRITEF( _L("SCR: Icon rect: (%d,%d,%d,%d)"), - iRect.iTl.iX, - iRect.iTl.iY, - iRect.iBr.iX, - iRect.iBr.iY ); - TSize size = iIcon->Bitmap()->SizeInPixels(); - SCRLOGGER_WRITEF( _L("SCR: Icon size: (%d,%d)"), size.iWidth, size.iHeight ); - SCRLOGGER_WRITEF( _L("SCR: Icon pos: (%d,%d)"), iTopLeft.iX, iTopLeft.iY ); -#endif - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::SetTextLayout -// Sets text position and font -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::SetTextLayout( TAknLayoutText& aLayout, - TInt /* aX */ ) - { - // Font from layout - iFont = aLayout.Font(); - // Layout MUST have a font - ASSERT( iFont != NULL ); - - // Vertical dimension of text rect from layout - // (x-dims will be set separately) - iTextRect = aLayout.TextRect(); - - // Calculate text offset from rect top - const CAknLayoutFont* layoutFont = - CAknLayoutFont::AsCAknLayoutFontOrNull( iFont ); - - if ( layoutFont ) - { - iTextOffset = layoutFont->TextPaneTopToBaseline(); - } - else - { - iTextOffset = iFont->AscentInPixels(); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::PreferredWidth -// Return width where the whole indicator can be drawn -// ----------------------------------------------------------------------------- -// -TInt CScreensaverIndicatorNumberAndIcon::PreferredWidth() - { - // Preferred width = icon width + text width + a little gap in between - TBuf<10> nStr; - nStr.AppendNum( iValue ); - - TInt width = iFont ? iFont->TextWidthInPixels( nStr ) : nStr.Length() * 11; // Should be enough for APAC too - - // Add icon width - width += MinimumWidth(); - - // Add a little gap between text and icon - return width + 1; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::MinimumWidth -// Get minimum width -// ----------------------------------------------------------------------------- -// -TInt CScreensaverIndicatorNumberAndIcon::MinimumWidth() - { - // Minimum width is icon width - return ( iIcon ? ( iIcon->Bitmap()->SizeInPixels()).iWidth : 0 ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::SetXPos -// Sets the x-position for the indicator -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::SetXPos( TInt aX ) - { - iVisible = EFalse; - - if ( !iIcon ) - { - return; - } - - TBuf<10> nStr; - nStr.AppendNum( iValue ); - - TSize bmsize = iIcon->Bitmap()->SizeInPixels(); - TInt textWidth = iFont ? iFont->TextWidthInPixels( nStr ) + 1 : nStr.Length() - * 11; // Should be enough for APAC too - - iTopLeft.iX = aX; - if ( iAlignment == ESsAlignRight ) - { - // Change topright to topleft. - iTopLeft.iX -= bmsize.iWidth + textWidth; - } - - // Calculate text corner - if ( iIconAlign == ESsAlignLeft ) - { - iTextRect.iTl.iX = iTopLeft.iX + bmsize.iWidth; - } - else - { - iTextRect.iTl.iX = iTopLeft.iX; - } - - iTextRect.SetWidth( textWidth ); - - iVisible = ETrue; - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::InitializeLayout -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::InitializeLayout() - { - // Set desired size for SVG graphics (height from LAF, width 3 x height) - TAknLayoutRect screenLayout; - screenLayout.LayoutRect( TRect(0, 0, 0, 0), AknLayout::screen() ); - TRect screenRect = screenLayout.Rect(); - TAknLayoutRect powerSavePaneLayout; - powerSavePaneLayout.LayoutRect( screenRect, - AknLayout::Power_save_pane_descendants_Line_1() ); - TRect powerSavePaneRect = powerSavePaneLayout.Rect(); - TAknLayoutRect rect; - rect.LayoutRect( powerSavePaneRect, - AknLayout::Power_save_pane_descendants_Line_3() ); - TInt height = rect.Rect().Height(); - TSize iconSize( 2 * height, height ); - AknIconUtils::SetSize( iIcon->Bitmap(), iconSize ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::InitializeIconL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::InitializeIconL( TResourceReader &aReader ) - { - // Icon & mask ids - TInt id = aReader.ReadInt32(); - TInt maskid = aReader.ReadInt32(); - - // Icon & mask skin identifiers - TInt skinid = aReader.ReadInt32(); - TInt skinmask = aReader.ReadInt32(); - - iIcon = CGulIcon::NewL(); - - CFbsBitmap* bmp= NULL; - CFbsBitmap* mask= NULL; - - // Load skinned bitmap - AknsUtils::CreateColorIconLC( AknsUtils::SkinInstance(), - MakeSkinItemId( skinid ), - KAknsIIDNone, // Lie so that we get default color, not skin color - 0, // No color group - bmp, mask, AknIconUtils::AvkonIconFileName(), id, maskid, - iTextColor ); - - CleanupStack::Pop( 2 ); - - // Save the icon - iIcon->SetBitmap( bmp ); - iIcon->SetMask( mask ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverNumberAndIconIndicator::DrawIcon -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorNumberAndIcon::DrawIcon( CWindowGc& aGc ) const - { - if ( iIconAlign == ESsAlignLeft ) - { - if ( !iIcon->Mask() ) - { - aGc.BitBlt( iTopLeft, iIcon->Bitmap(), iRect ); - } - else - { - aGc.BitBltMasked( iTopLeft, iIcon->Bitmap(), iRect, - iIcon->Mask(), ETrue ); - } - } - else - { - // Calculate icon left point (right edge - icon width) - TPoint pTmp = TPoint( iTopLeft.iX + iRect.Size().iWidth - iIcon->Bitmap()->SizeInPixels().iWidth, iTopLeft.iY ); - - if ( !iIcon->Mask() ) - { - aGc.BitBlt( pTmp, iIcon->Bitmap(), iRect ); - } - else - { - aGc.BitBltMasked( pTmp, iIcon->Bitmap(), iRect, iIcon->Mask(), - ETrue ); - } - } - } - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverindicatortext.cpp --- a/src/screensaverindicatortext.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,234 +0,0 @@ -/* -* Copyright (c) 2003 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: CScreensaverIndicatorText implementation. -* -*/ - - - -#include -#include - -#include "screensaverindicatortext.h" - - - -// ----------------------------------------------------------------------------- -// CScreensaverTextIndicator::Draw -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorText::Draw( CWindowGc& aGc ) const - { - if ( iFont ) - { - aGc.UseFont( iFont ); - } - aGc.SetPenColor( iTextColor ); - - // Draw normal bidi text - TBidiText* bidi= NULL; - TRAPD( err, bidi = TBidiText::NewL( iText, 1 ) ); - if ( err == KErrNone ) - { - bidi->WrapText( Width(), *iFont, NULL ); - if ( iTextRect.IsEmpty() ) - { - bidi->DrawText( aGc, iTopLeft ); - } - else - { - TPoint pt = iTextRect.iTl; - pt.iY += iTextOffset; - bidi->DrawText( aGc, pt ); - } - delete bidi; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverTextIndicator::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorText::ConstructL( TResourceReader &aReader, - TUint32 aBgColor, TUint aTextColor ) - { - CScreensaverIndicator::ConstructL( aReader, aBgColor, aTextColor ); - - iFont = AknLayoutUtils::FontFromId( aReader.ReadInt32() ); - if ( !iFont ) - { - iFont = LatinPlain12(); - } - - } - -// ----------------------------------------------------------------------------- -// CScreensaverTextIndicator::SetupDrawingParameters -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorText::SetupDrawingParameters( const TPoint& aCorner, - const TRect& aParentRect ) - { - iVisible = EFalse; - - if ( iText.Length() <= 0 ) - { - return; - } - - TInt textWidth = ( iFont ? iFont->TextWidthInPixels(iText) + 1 - : iText.Length() * 11 ); // Should be enough for APAC too - - iRect = TRect( 0, 0, textWidth, aParentRect.Size().iHeight ); - - iTopLeft.iX = aCorner.iX; - - if ( iAlignment == ESsAlignRight ) - { - // Change topright to topleft. - iTopLeft.iX -= iRect.Size().iWidth; - } - - iTopLeft.iY = aCorner.iY + ( aParentRect.Size().iHeight / 2 ) + ( ( aParentRect.Size().iHeight - iFont->HeightInPixels() ) / 2 ) + 2; - - // Make sure text rect is not used - iTextRect.SetRect( 0, 0, 0, 0 ); - - iVisible = ETrue; - } - -// ----------------------------------------------------------------------------- -// CScreensaverTextIndicator::ConstructL -// ----------------------------------------------------------------------------- -// -TBool CScreensaverIndicatorText::CheckVisibilityConditions() const - { - return ( iText.Length() > 0 ? ETrue : EFalse ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverTextIndicator::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorText::Payload( TIndicatorPayload &aPayload ) const - { - aPayload.iType = EPayloadTypeText; - aPayload.iText = iText; - aPayload.iInteger = -1; - aPayload.iIsDisplayed = Visible(); - aPayload.iIcon = NULL; - } - -// ----------------------------------------------------------------------------- -// CScreensaverTextIndicator::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorText::SetPayload( const TIndicatorPayload& aPayload ) - { - if ( aPayload.iType != EPayloadTypeText ) - { - return; - } - - if ( aPayload.iText.Length() > iText.MaxLength() ) - { - return; // Don't panic. - } - - iText = aPayload.iText; - } - -// ----------------------------------------------------------------------------- -// CScreensaverTextIndicator::SetTextLayout -// Sets text position and font -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorText::SetTextLayout( TAknLayoutText& aLayout, TInt aX ) - { - // Font from layout - iFont = aLayout.Font(); - // Layout MUST have a font - ASSERT( iFont != NULL ); - - // Vertical dimension of text rect from layout - iTextRect = aLayout.TextRect(); - - // Calculate text offset from rect top - const CAknLayoutFont* layoutFont = - CAknLayoutFont::AsCAknLayoutFontOrNull( iFont ); - - if ( layoutFont ) - { - iTextOffset = layoutFont->TextPaneTopToBaseline(); - } - else - { - iTextOffset = iFont->AscentInPixels(); - } - - // X-pos from parameter - iTextRect.iTl.iX = aX; - - // Initially set indicator rect (this may later be overridden by SetWidth()) - iRect = TRect( 0, 0, PreferredWidth(), aLayout.TextRect().Height() ); - - // If right-aligned, the X-pos indicates right edge - switch to left - if ( iAlignment == ESsAlignRight ) - { - // Change topright to topleft. - iTextRect.iTl.iX -= Width(); // iRect.Size().iWidth; - } - - // Indicator width = text rect width - iTextRect.SetWidth( Width() ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverTextIndicator::PreferredWidth -// Gets preferred indicator width -// ----------------------------------------------------------------------------- -// -TInt CScreensaverIndicatorText::PreferredWidth() - { - TInt textWidth = ( iFont ? iFont->TextWidthInPixels( iText ) + 1 - : iText.Length() * 11 ); // Should be enough for APAC too - return textWidth; - } - -// ----------------------------------------------------------------------------- -// CScreensaverTextIndicator::SetWidth -// Sets indicator width -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorText::SetWidth( TInt iWidth ) - { - iRect.SetWidth( iWidth ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverTextIndicator::SetXPos -// Sets indicator X-position (new layout) -// ----------------------------------------------------------------------------- -// -void CScreensaverIndicatorText::SetXPos( TInt aX ) - { - iTopLeft.iX = aX; - if ( iAlignment == ESsAlignRight ) - { - // Change topright to topleft. - iTopLeft.iX -= iRect.Size().iWidth; - } - } - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverrepositorywatcher.cpp --- a/src/screensaverrepositorywatcher.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,171 +0,0 @@ -/* -* Copyright (c) 2003 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: CScreensaverRepositoryWatcher implementation. -* -*/ - - - -#include - -#include "screensaverrepositorywatcher.h" -#include "ScreensaverUtils.h" -// -// CScreensaverRepositoryWatcher -// -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::NewL -// ----------------------------------------------------------------------------- -// -CScreensaverRepositoryWatcher* CScreensaverRepositoryWatcher::NewL( - const TUid aUid, - const TUint32 aKey, - CCenRepNotifyHandler::TCenRepKeyType aKeyType, - TCallBack aCallBack, - CRepository* aRepository) - { - CScreensaverRepositoryWatcher* self = new(ELeave) CScreensaverRepositoryWatcher(aUid, aKey, aCallBack, aRepository); - - CleanupStack::PushL(self); - self->ConstructL(aKeyType); - CleanupStack::Pop(self); - - return self; - } - - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::NewL -// ----------------------------------------------------------------------------- -// -CScreensaverRepositoryWatcher* CScreensaverRepositoryWatcher::NewL( - const TUid aUid, - TCallBack aCallBack, - CRepository* aRepository) - { - CScreensaverRepositoryWatcher* self = new(ELeave) CScreensaverRepositoryWatcher( - aUid, NCentralRepositoryConstants::KInvalidNotificationId, aCallBack, aRepository); - - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - return self; - } - - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::CScreensaverRepositoryWatcher -// ----------------------------------------------------------------------------- -// -CScreensaverRepositoryWatcher::~CScreensaverRepositoryWatcher() - { - if (iNotifyHandler) - { - iNotifyHandler->StopListening(); - delete iNotifyHandler; - } - } - - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::CScreensaverRepositoryWatcher -// ----------------------------------------------------------------------------- -// -CScreensaverRepositoryWatcher::CScreensaverRepositoryWatcher( - const TUid aUid, - const TUint32 aKey, - TCallBack aCallBack, - CRepository* aRepository) - :iUid(aUid), iKey(aKey), iCallBack(aCallBack), iRepository(aRepository) - { - } - - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::ConstructL(CCenRepNotifyHandler::TCenRepKeyType aKeyType) - { - iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iRepository, aKeyType, iKey); - iNotifyHandler->StartListeningL(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::ConstructL() - { - iNotifyHandler = CCenRepNotifyHandler::NewL(*this, *iRepository); - iNotifyHandler->StartListeningL(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::ChangedKey -// ----------------------------------------------------------------------------- -// -TUint32 CScreensaverRepositoryWatcher::ChangedKey() - { - return iChangedKey; - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::HandleNotifyInt -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::HandleNotifyInt(TUint32 aKey, TInt aNewValue) - { - SCRLOGGER_WRITEF(_L("SCR: HandleNotifyInt aKey=%d, aNewValue=%d"), aKey, aNewValue); - - iChangedKey = aKey; - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::HandleNotifyString -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::HandleNotifyString(TUint32 aKey, const TDesC16& aNewValue) - { - SCRLOGGER_WRITEF(_L("SCR: HandleNotifyString aKey=%d, aNewValue=%S"), aKey, &aNewValue); - - iChangedKey = aKey; - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::HandleNotifyGeneric -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::HandleNotifyGeneric(TUint32 aKey) - { - iChangedKey = aKey; - iCallBack.CallBack(); - iChangedKey = NCentralRepositoryConstants::KInvalidNotificationId; - } - -// ----------------------------------------------------------------------------- -// CScreensaverRepositoryWatcher::HandleNotifyError -// ----------------------------------------------------------------------------- -// -void CScreensaverRepositoryWatcher::HandleNotifyError(TUint32 /*aKey*/, TInt /*aError*/, CCenRepNotifyHandler* /*aHandler*/) - { - } - - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa src/screensavershareddatai.cpp --- a/src/screensavershareddatai.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,918 +0,0 @@ -/* -* Copyright (c) 2003-2006 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: Implementation for screensaver shared data connections. -* -*/ - - - -#include -#include // Profile API, not yet included in .h -#include -#include -#include -#include // KCoreAppUIsUipInd, KLightsVTForcedLightsOn -#include // KPSUidAiInformation -#include // KSettingsScreenSaverPeriod -#include // KLogsNewMissedCalls -#include -#include // KAknNewContactsNoteActive -#include // KAknKeyguardStatus -#include // Message (voice) waiting status -#include // KPSGlobalSystemState -#include -#include // Profile engine API -#include -#include - -#include "screensaverappui.h" -#include "screensaverctrlmovingtext.h" -#include "screensaverengine.h" -#include "screensavershareddatai.h" -#include "ScreensaverInternalPSKeys.h" -#include "screensaverutility.h" -#include "screensaverrepositorywatcher.h" -#include "screensaversubscriber.h" - -const TInt KTimeoutDefault = 15; // seconds (also in GS) -const TInt KTimeoutMin = 5; // minimum timeout in seconds (also in GS) - -// Screensaver "On/Off" status values -const TInt KScreensaverOff = 0; -const TInt KScreensaverOn = 1; - -// Screensaver activated from idle status values -const TInt KScreensaverNotFromIdle = 0; -const TInt KScreensaverStartedFromIdle = 1; - -// Screen saver text type. -_LIT( KScreenSaverTypeText, "Text" ); -//Screensaver "None" (Sleep mode) -_LIT( KScreenSaverTypeNone, "None" ); - -// Define security policies for Screensavers property keys -_LIT_SECURITY_POLICY_PASS(KSSPolicyPass); -_LIT_SECURITY_POLICY_C1(KSSPolicyWriteUserData, ECapabilityWriteUserData); -_LIT_SECURITY_POLICY_S0(KSSPolicyWriteSSOnly, 0x100056cf); - -// -// CScreensaverSharedDataI -// -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::NewL -// ----------------------------------------------------------------------------- -// -CScreensaverSharedDataI* CScreensaverSharedDataI::NewL() - { - CScreensaverSharedDataI* self = new (ELeave) CScreensaverSharedDataI(); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(); //self - return self; - } - - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::~CScreensaverSharedDataI -// ----------------------------------------------------------------------------- -// -CScreensaverSharedDataI::~CScreensaverSharedDataI() - { - // Release the active profile resources - InvalidateActiveProfile(); - - // Release the profile engine - if (iProfileEngine) - { - // No need to delete pointer, just release resources - iProfileEngine->Release(); - } - - delete iScreensaverRepositoryWatcher; - delete iScreensaverRepository; - delete iSettingsRepositoryWatcher; - delete iSettingsRepository; - delete iCTsyRepository; - delete iInboxFolder; - delete iMsvSession; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::DisplayObjectType -// ----------------------------------------------------------------------------- -// -TDisplayObjectType CScreensaverSharedDataI::DisplayObjectType() const - { - TInt type = 0; - - if (iScreensaverRepository) - { - iScreensaverRepository->Get( KScreenSaverObject, type ); - } - - return ( TDisplayObjectType )type; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::SetDisplayObjectType -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::SetDisplayObjectType( const TDisplayObjectType aType ) - { - if( iScreensaverRepository ) - { - iScreensaverRepository->Set(KScreenSaverObject, aType); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::GetDisplayObjectText -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::GetDisplayObjectText( TDes& aDes ) const - { - CEikonEnv::Static()->ReadResource(aDes, R_SCREEN_SAVER_TEXT); - - if ( iScreensaverRepository ) - { - iScreensaverRepository->Get( KScreenSaverText, aDes ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::PluginName -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::GetPluginName( TFileName& aFileName ) const - { - if ( iScreensaverRepository ) - { - iScreensaverRepository->Get( KScreenSaverPluginName, aFileName ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ColorInversionUsed -// ----------------------------------------------------------------------------- -// -TBool CScreensaverSharedDataI::IsInvertedColors() const - { - TInt colorInversionUsed(0); - - if( iScreensaverRepository ) - { - iScreensaverRepository->Get( KScreenSaverInvertedColors, colorInversionUsed ); - } - - return ( colorInversionUsed != 0 ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ScreensaverTimeout -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataI::ScreensaverTimeout() const - { - TInt timeout = KTimeoutDefault; - - if (iSettingsRepository) - { - iSettingsRepository->Get(KSettingsScreenSaverPeriod, timeout); - } - // No less than minimum timeout - // Old backed up minutes 1-4 will cause default timeout after - // being restored to new sw using seconds - if (timeout < KTimeoutMin) - { - return KTimeoutDefault; - } - - return timeout; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::IsNCNActive -// ----------------------------------------------------------------------------- -// -TBool CScreensaverSharedDataI::IsNCNActive() const - { - // Setting the flag here is also needed, because Screensaver should not - // display new calls when Ncn note has been cancelled (even if the missed - // calls count is still nonzero). - // Also, when the phone is (re)started, and there are missed calls, - // Ncn will pop a note, This is the only way Screensaver knows about that. - - CRepository* avkonRepository = NULL; - - TRAP_IGNORE( avkonRepository = CRepository::NewL( KCRUidAvkon ) ); - - TInt value = 0; - - if ( avkonRepository ) - { - avkonRepository->Get( KAknNewContactsNoteActive, value ); - } - - delete avkonRepository; - - return ( value != 0 ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::NewMissedCalls -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataI::NewMissedCalls() const - { - CRepository* logsRepository = NULL; - - TRAP_IGNORE( logsRepository = CRepository::NewL( KCRUidLogs ) ); - - TInt value = 0; - - if ( logsRepository ) - { - logsRepository->Get( KLogsNewMissedCalls, value ); - } - - delete logsRepository; - - return value; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::SetSSForcedLightsOn -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::SetSSForcedLightsOn(TInt aSecs) - { - SCRLOGGER_WRITEF(_L("SCR: RequestLights(%d)"), aSecs); - - RProperty::Set( KPSUidCoreApplicationUIs, KLightsSSForcedLightsOn, aSecs ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::SetScreensaverStatus -// Indicate whether Screensaver is active or not -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::SetScreensaverStatus( TBool aOn /* = ETrue */ ) - { - //Check if the value is already updated. If so, setting the value again - //will cause unnecessary call backs to any subscribers of this property - if ( aOn ) - { - RProperty::Set( KPSUidScreenSaver, KScreenSaverOn, KScreensaverOn ); - //else - no need to re-apply the same value - } - else //aOn is false - { - RProperty::Set( KPSUidScreenSaver, KScreenSaverOn, KScreensaverOff ); - //else - no need to re-apply the same value - - //if stop from idle, change the status - RProperty::Set( KPSUidScreenSaver, KScreenSaverOn, KScreensaverNotFromIdle); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::SetSSStartedFromIdleStatus -// Set "Screensaver started from Idle" status -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::SetSSStartedFromIdleStatus() - { - TInt idleState = EPSAiBackground; - RProperty::Get(KPSUidAiInformation, KActiveIdleState, idleState); - - if (idleState == EPSAiBackground) - { - RProperty::Set( KPSUidScreenSaver, KScreenSaverActivatedFromIdle, KScreensaverNotFromIdle ); - } - else - { - RProperty::Set( KPSUidScreenSaver, KScreenSaverActivatedFromIdle, KScreensaverStartedFromIdle ); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::IsScreenSaverAllowed -// Set "Screensaver started from Idle" status -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataI::IsScreenSaverAllowed() const - { - TInt value = 0; - - RProperty::Get( KPSUidScreenSaver, KScreenSaverAllowScreenSaver, value ); - - return value; - } - -TInt CScreensaverSharedDataI::ScreensaverPreviewMode() const - { - TInt value = 0; - - RProperty::Get( KPSUidScreenSaver, KScreenSaverPreviewMode, value ); - - return value; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::SetScreensaverPreviewMode -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::SetScreensaverPreviewMode( const TInt aMode ) - { - RProperty::Set( KPSUidScreenSaver, KScreenSaverPreviewMode, aMode ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ScreensaverPreviewState -// Get preview state -// ----------------------------------------------------------------------------- -// -TScreenSaverPreviewState CScreensaverSharedDataI::ScreensaverPreviewState() const - { - TInt state = EScreenSaverPreviewNone; - RProperty::Get( KPSUidScreenSaver, KScreenSaverPreviewState, state ); - - return ( TScreenSaverPreviewState ) state; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::SetScreensaverPreviewState -// Report preview state -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::SetScreensaverPreviewState( - const TScreenSaverPreviewState aState ) - { - RProperty::Set( KPSUidScreenSaver, KScreenSaverPreviewState, aState ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::IsKeyguardOn -// ----------------------------------------------------------------------------- -// -TBool CScreensaverSharedDataI::IsKeyguardOn() const - { - // Report preview state - TInt state = 0; - - RProperty::Get( KPSUidAvkonDomain, KAknKeyguardStatus, state ); - - return ( state != 0 ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::IsUsePowerSaveMode -// ----------------------------------------------------------------------------- -TBool CScreensaverSharedDataI::IsUsePowerSaveMode() const - { - TInt state = 0; - - // Check if power save mode has been denied - RProperty::Get( KPSUidScreenSaver, KScreenSaverNoPowerSaveMode, state ); - - return ( state != 1 ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::SystemStartupComplete -// Returns whether system startup has been completed -// ----------------------------------------------------------------------------- -// -TBool CScreensaverSharedDataI::IsSystemStartupComplete() - { - if ( iStartupComplete == EFalse ) - { - TInt startupState = -1; - RProperty::Get( KPSUidStartup, KPSGlobalSystemState, startupState ); - - switch (startupState) - { - case ESwStateNormalRfOn: - case ESwStateNormalRfOff: - case ESwStateNormalBTSap: - iStartupComplete = ETrue; - break; - default: - break; - } - } - return iStartupComplete; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::DefaultScreensaverType -// ----------------------------------------------------------------------------- -// -TDisplayObjectType CScreensaverSharedDataI::DefaultScreensaverType() const - { - return iDefaultType; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::UnreadMessagesNumber -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataI::UnreadMessagesNumber() - { - TInt numberOfUnreadMessages = 0; - // Check how many unread messages there are in the In-box. - if( !iInboxFolder ) - { - TRAPD( err, ConnectToInboxL() ); - if (err != KErrNone) - { - return numberOfUnreadMessages; - } - } - - const TInt itemCount = iInboxFolder->Count(); - for ( TInt index = 0; index < itemCount; index++ ) - { - const TMsvEntry entry = ( *iInboxFolder )[index]; - if ( entry.iType.iUid == KUidMsvMessageEntryValue && entry.Unread()) - { - if( entry.Visible() ) - { - numberOfUnreadMessages++; - } - } - } - return numberOfUnreadMessages; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ProfileName -// ----------------------------------------------------------------------------- -const TDesC& CScreensaverSharedDataI::ProfileName() - { - // Get the active profile name from profile engine, not from - // shareddata ( may not be up-to-date after phone restart ) - - if ( ConnectToActiveProfile() ) - { - // Ectract profile name - const MProfileName& profileName = iActiveProfile->ProfileName(); - - return ( profileName.Name() ); - } - - return KNullDesC; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ActiveProfile -// ----------------------------------------------------------------------------- -TInt CScreensaverSharedDataI::ActiveProfile() - { - // Return the current profile Id - TInt profileId = 0; - - // Connect to profile engine - if ( ConnectToProfileEngine() ) - { - profileId = iProfileEngine->ActiveProfileId(); - } - - return profileId; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::IsHaveNewEmail -// ----------------------------------------------------------------------------- -TBool CScreensaverSharedDataI::IsHaveNewEmail() const - { - TInt state = 0; - // Check the new email state from PubSub - TInt error = RProperty::Get( - KPSUidCoreApplicationUIs, KCoreAppUIsNewEmailStatus, state); - - SCRLOGGER_WRITEF(_L("SCR: QueryNewEmail state=%d error=%d"), state, error); - - if ( ( error == KErrNone ) && ( state == ECoreAppUIsNewEmail ) ) - { - return ETrue; - } - else - { - return EFalse; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::IsHaveNewVoicemail -// ----------------------------------------------------------------------------- -TBool CScreensaverSharedDataI::IsHaveNewVoicemail() const - { - // Show the indicator, if either line has messages waiting - if ( ( VoiceMailCount( KNcnVoiceMailCountInLine1 ) > 0 ) - || ( VoiceMailCount( KNcnVoiceMailCountInLine2 ) > 0 ) ) - { - return ETrue; - } - else - { - return EFalse; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::IsHaveNewInstantMessages -// ----------------------------------------------------------------------------- -TBool CScreensaverSharedDataI::IsHaveNewInstantMessages() const - { - TInt showValue = 0; - TInt error = RProperty::Get( - KPSUidCoreApplicationUIs, KCoreAppUIsUipInd, showValue); - - SCRLOGGER_WRITEF(_L("SCR: QueryNewInstantMessages state=%d error=%d"), - showValue, error); - - return ( ( error == KErrNone ) && ( showValue == ECoreAppUIsShow ) ); - } - - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::IsSilentMode -// ----------------------------------------------------------------------------- -TBool CScreensaverSharedDataI::IsSilentMode() - { - // Connect to active profile, and return silent mode status - if (ConnectToActiveProfile()) - { - return iActiveProfile->IsSilent(); - } - - return EFalse; - } - - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::IsVibraMode -// ----------------------------------------------------------------------------- -TBool CScreensaverSharedDataI::IsVibraMode() - { - // Get the active profile name from profile engine, not from - // shareddata (may not be up-to-date after phone restart) - if (ConnectToActiveProfile()) - { - // Extract profile vibra setting - return iActiveProfile->ProfileTones().ToneSettings().iVibratingAlert; - } - - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::HandleSessionEventL -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::HandleSessionEventL(TMsvSessionEvent aEvent, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) - { - switch (aEvent) - { - case EMsvCloseSession: - case EMsvServerTerminated: - delete iInboxFolder; - iInboxFolder = NULL; - delete iMsvSession; - iMsvSession = NULL; - break; - default: - break; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::HandleEntryEventL -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::HandleEntryEventL(TMsvEntryEvent /*aEvent */, TAny* /*aArg1*/, TAny* /*aArg2*/, TAny* /*aArg3*/) - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ScreensaverRepository -// ----------------------------------------------------------------------------- -// -CRepository* CScreensaverSharedDataI::ScreensaverRepository() const - { - return iScreensaverRepository; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::CScreensaverSharedDataI -// ----------------------------------------------------------------------------- -// -CScreensaverSharedDataI::CScreensaverSharedDataI() - { - iStartupComplete = EFalse; - } - - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::ConstructL() - { - GetDefaultType(); - ConnectToSSCRL(); - ConnectToPslnSettingCRL(); - ConnectToCommonTsyCRL(); - - // Define and publish "Screensaver is on" property - // Read: pass, Write: Screensaver only - DefineScreensaverProperties( KScreenSaverOn, KSSPolicyWriteSSOnly ); - - // Define and publish "Screensaver activated from idle" property - // Read: pass, Write: Screensaver only - DefineScreensaverProperties( KScreenSaverActivatedFromIdle, KSSPolicyWriteSSOnly ); - - // Define and attach "allow screensaver property" - // Read: Readuserdata, Write: writeuserdata - DefineScreensaverProperties( KScreenSaverAllowScreenSaver, KSSPolicyWriteUserData ); - - // Define and attach "screensaver preview property" - // Read: Readuserdata, Write: writeuserdata - DefineScreensaverProperties( KScreenSaverPreviewMode, KSSPolicyWriteUserData ); - - // Define and attach "screensaver preview state property" - // Read: Readuserdata, Write: writeuserdata - DefineScreensaverProperties( KScreenSaverPreviewState, KSSPolicyWriteUserData ); - - // Define and initialize "current plugin settings changed" property - // Read: pass, Write: pass - DefineScreensaverProperties( KScreenSaverPluginSettingsChanged, KSSPolicyPass ); - - // Define and initialize "no power save mode" property - // Read: pass, Write: pass - DefineScreensaverProperties( KScreenSaverNoPowerSaveMode, KSSPolicyPass ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ConnectToSSCR -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::ConnectToSSCRL() - { - iScreensaverRepository = CRepository::NewL( KCRUidScreenSaver ); - - if( iScreensaverRepository ) - iScreensaverRepositoryWatcher = CScreensaverRepositoryWatcher::NewL( - KCRUidScreenSaver, - TCallBack( HandleDisplayObjChanged, this ), - iScreensaverRepository ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ConnectToPslnSettingCRL -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::ConnectToPslnSettingCRL() - { - TRAPD(ret, iSettingsRepository = CRepository::NewL(KCRUidPersonalizationSettings)); - - if( ret == KErrNone ) - { - iSettingsRepositoryWatcher = CScreensaverRepositoryWatcher::NewL( - KCRUidPersonalizationSettings, - KSettingsScreenSaverPeriod, - CCenRepNotifyHandler::EIntKey, - TCallBack(HandleTimeoutChanged, this), - iSettingsRepository); - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ConnectToCommonTsyCRL -// Connects to common tsy central repository -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::ConnectToCommonTsyCRL() - { - iCTsyRepository = CRepository::NewL( KCRUidCtsyMessageWaitingIndicator ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ConnectToInboxL -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::ConnectToInboxL() - { - if (!iMsvSession) - { - iMsvSession = CMsvSession::OpenSyncL( *this ); - } - iInboxFolder = iMsvSession->GetEntryL( KMsvGlobalInBoxIndexEntryId ); - - TMsvSelectionOrdering ordering = iInboxFolder->SortType(); - ordering.SetShowInvisibleEntries( EFalse ); - iInboxFolder->SetSortTypeL( ordering ); - - iInboxFolder->AddObserverL( *this ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ConnectToProfileEngine -// Connect to Profile engine. Returns ETrue if successfully connected -// ----------------------------------------------------------------------------- -// -TBool CScreensaverSharedDataI::ConnectToProfileEngine() - { - // Check if already connected - if ( iProfileEngine ) - { - // Done - return ETrue; - } - // The member variable is also used to indicate successful - // connection, hence a pointer instead of just RSystemAgent - TRAPD( err, ( iProfileEngine = CreateProfileEngineL() ) ); - - if ( err != KErrNone ) - { - // Something went wrong on allocation - iProfileEngine = NULL; - return EFalse; - } - - // Successfully connected - return ETrue; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ClearPreviewFlag -// Connect to current active Profile. Returns ETrue if successfully connected -// ----------------------------------------------------------------------------- -// -TBool CScreensaverSharedDataI::ConnectToActiveProfile() - { - InvalidateActiveProfile(); - - if ( ConnectToProfileEngine() ) - { - TRAPD( err, ( iActiveProfile = iProfileEngine->ActiveProfileL() ) ); - if ( ( err == KErrNone ) && ( iActiveProfile ) ) - { - return ETrue; - } - } - return EFalse; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::DefineScreensaverProperties -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::DefineScreensaverProperties( - TUint32 aKey, const TSecurityPolicy& aWritePolicy ) - { - RProperty::Define( - KPSUidScreenSaver, - aKey, - RProperty::EInt, - KSSPolicyPass, - aWritePolicy ); - - RProperty::Set( KPSUidScreenSaver, aKey, 0); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::HandleTimeoutChanged -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataI::HandleTimeoutChanged(TAny* aPtr) - { - STATIC_CAST(CScreensaverSharedDataI*, aPtr)->ResetInactivityTimeout(); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::ResetInactivityTimeout -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::ResetInactivityTimeout() - { - AppUi()->Model().ResetInactivityTimeout(); - } - - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::HandleDisplayObjChanged -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataI::HandleDisplayObjChanged(TAny* aPtr) - { - CScreensaverSharedDataI* self = STATIC_CAST(CScreensaverSharedDataI*, aPtr); - - self->AppUi()->ScreensaverView()->SetDisplayObject( self->DisplayObjectType() ); - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::GetDefaultType -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::GetDefaultType() - { - //Store the default screensaver for this device - TBuf<16> screensaverName; - - TInt error = GetDefaultTypeString( screensaverName ); - - if ( KErrNone == error ) - { - if ( screensaverName.CompareF( KScreenSaverTypeNone ) == 0 ) - { - iDefaultType = EDisplayNone; - } - else if ( screensaverName.CompareF( KScreenSaverTypeText ) == 0 ) - { - iDefaultType = EDisplayText; - } - else //go back to the "old" option, ie - Date type - { - iDefaultType = EDisplayTime; - } - } - - iDefaultType = EDisplayTime; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::GetDefaultTypeString -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataI::GetDefaultTypeString( TDes& DefaultScreenSaver ) - { - CRepository* skinsRepository = NULL; - TRAP_IGNORE( skinsRepository = CRepository::NewL( KCRUidPersonalisation ) ); - - TInt error = skinsRepository->Get( KPslnSystemDefaultScreenSaver, - DefaultScreenSaver ); - - delete skinsRepository; - - return error; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::VoiceMailCount -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataI::VoiceMailCount( const TUint32 aKey ) const - { - TInt line(0); - TInt error = KErrNone; - - error = iCTsyRepository->Get( aKey, line ); - - if( error != KErrNone ) - { - line = 0; - } - - return line; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::InvalidateActiveProfile -// Invalidate the cached active profile, so that next call to ConnectToActiveProfile -// will use the newest profile data (in case it has changed) -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataI::InvalidateActiveProfile() - { - if (iActiveProfile) - { - iActiveProfile->Release(); - iActiveProfile = NULL; - } - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataI::AppUi -// ----------------------------------------------------------------------------- -// -CScreensaverAppUi *CScreensaverSharedDataI::AppUi() const - { - return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() ); - } -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa src/screensavershareddatamonitor.cpp --- a/src/screensavershareddatamonitor.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,283 +0,0 @@ -/* -* Copyright (c) 2003 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: Implementation for screensaver shared data monitoring. -* -*/ - - - -#include -#include -#include -#include // kaknkeyguardstatus -#include // kpsuidctsycallinformation -#include // kpsglobalsystemstate -#include -#include // kuikmmcinserted - -#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 -#include -#endif - -#include "screensavershareddatamonitor.h" -#include "screensavershareddatai.h" -#include "screensaverrepositorywatcher.h" -#include "screensaverview.h" -#include "screensaverengine.h" -#include "screensaverappui.h" -#include "screensaversubscriber.h" -#include "screensaverutility.h" - -//System shuttingdown value -const TInt KSystemShuttingdown = 1; - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::~CScreensaverSharedDataMonitor -// ----------------------------------------------------------------------------- -// -CScreensaverSharedDataMonitor::~CScreensaverSharedDataMonitor() - { - DeleteSubscriber( iPreviewModeSubscriber ); - iPreviewModeProperty.Close(); - - DeleteSubscriber( iMMCWatchSubscriber ); - iMMCWatchProperty.Close(); - - DeleteSubscriber( iUSBWatchSubscriber ); - iUSBWatchProperty.Close(); - - DeleteSubscriber( iKeyguardStateSubscriber ); - iKeyguardStateProperty.Close(); - - DeleteSubscriber( iCallStateSubscriber ); - iCallStateProperty.Close(); - - DeleteSubscriber( iShuttingDownSubscriber ); - iShuttingDownProperty.Close(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::NewL -// ----------------------------------------------------------------------------- -// -CScreensaverSharedDataMonitor* CScreensaverSharedDataMonitor::NewL( CScreensaverSharedDataI* aData ) - { - CScreensaverSharedDataMonitor* self = new( ELeave )CScreensaverSharedDataMonitor( aData ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); // self; - return self; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::CScreensaverSharedDataMonitor -// ----------------------------------------------------------------------------- -// -CScreensaverSharedDataMonitor::CScreensaverSharedDataMonitor( - CScreensaverSharedDataI* aData ) - :iData( aData ) - { - // No implementation required - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataMonitor::ConstructL() - { - User::LeaveIfError(iPreviewModeProperty.Attach(KPSUidScreenSaver, KScreenSaverPreviewMode)); - iPreviewModeSubscriber = new (ELeave) CSubscriber(TCallBack(HandlePreviewModeChanged, this), iPreviewModeProperty); - iPreviewModeSubscriber->SubscribeL(); - - - // MMC watcher - User::LeaveIfError(iMMCWatchProperty.Attach(KPSUidUikon, KUikMMCInserted)); - iMMCWatchSubscriber = new (ELeave) CSubscriber( - TCallBack(HandleMMCStateChanged, this), iMMCWatchProperty); - iMMCWatchSubscriber->SubscribeL(); - - // USB watcher (MMC dismount) - User::LeaveIfError(iUSBWatchProperty.Attach( - KPSUidUsbWatcher, KUsbWatcherSelectedPersonality)); - iUSBWatchSubscriber = new (ELeave) CSubscriber( - TCallBack(HandleUSBStateChanged, this), iUSBWatchProperty); - iUSBWatchSubscriber->SubscribeL(); - - // Keyguard state watcher - User::LeaveIfError(iKeyguardStateProperty.Attach( - KPSUidAvkonDomain, KAknKeyguardStatus)); - iKeyguardStateSubscriber = new (ELeave) CSubscriber( - TCallBack(HandleKeyguardStateChanged, this), iKeyguardStateProperty); - iKeyguardStateSubscriber->SubscribeL(); - - // Call state watcher - User::LeaveIfError(iCallStateProperty.Attach( KPSUidCtsyCallInformation, KCTsyCallState ) ); - iCallStateSubscriber = new (ELeave) CSubscriber( - TCallBack(HandleCallStateChanged, this), iCallStateProperty); - iCallStateSubscriber->SubscribeL(); - - // Shutting down state watcher - User::LeaveIfError( iShuttingDownProperty.Attach( KPSUidStartup, KPSGlobalSystemState ) ); - iShuttingDownSubscriber = new (ELeave) CSubscriber( - TCallBack(HandleShuttingDownStateChanged, this), iShuttingDownProperty); - iShuttingDownSubscriber->SubscribeL(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::View -// ----------------------------------------------------------------------------- -// -CScreensaverView* CScreensaverSharedDataMonitor::View() - { - return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() )->ScreensaverView(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::Model -// ----------------------------------------------------------------------------- -// -CScreensaverEngine& CScreensaverSharedDataMonitor::Model() - { - return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() )->Model(); - } - - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::DeteleSubscriber -// ----------------------------------------------------------------------------- -// -void CScreensaverSharedDataMonitor::DeleteSubscriber( CSubscriber*& aSubscriber ) - { - if ( aSubscriber ) - { - aSubscriber->StopSubscribe(); - } - delete aSubscriber; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::HandlePreviewModeChanged -// Handles preview mode property key change. If key is changed to 1, -// preview mode is started -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataMonitor::HandlePreviewModeChanged(TAny *aPtr) - { - CScreensaverSharedDataMonitor *data = STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr); - - if ( data->iData->ScreensaverPreviewMode() == 1) - { - TRAP_IGNORE( data->Model().StartPreviewModeL() ); - } - - return KErrNone; - } - - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::HandleMMCStateChanged -// Handles MMC state change callback. If current plugin is loaded from -// MMC, screensaver defaults to date & time when MMC removed -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataMonitor::HandleMMCStateChanged(TAny* aPtr) - { - STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver(); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::HandleUSBStateChanged -// Handles USB state change callback. If current plugin is loaded from -// MMC, screensaver defaults to date & time when USB attached -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataMonitor::HandleUSBStateChanged(TAny* aPtr) - { - // Same handler as in MMC removal, parameter tells it's because of USB - STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver(); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::HandleKeyguardStateChanged -// Handles keyguards status change callback. -// When keys become locked, screensaver timeout is shortened. -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataMonitor::HandleKeyguardStateChanged(TAny* aPtr) - { - // If keyguard just became unlocked, inform model so that - // short timeout use is reset. Otherwise there might be a situation - // where short timeout was in use, user opened keys, did something - // without letting the device idle for short timeout period and - // locked keys again. Then short timeout would remain in use without this - // notification. - // Also inform of keys locked, in case Screensaver is running this - // happened because of automatic keyguard fired, and screensaver - // should update the display to show the keyguard indicator - CScreensaverSharedDataMonitor* _this = - STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr); - - if ( _this->iData->IsKeyguardOn() ) - { - // Keys locked - if screensaver is running, this was caused by - // automatic keyguard and screensaver should refresh the view - // to show the keylock indicator - if ( _this->Model().ScreenSaverIsOn() ) - { - _this->View()->UpdateAndRefresh(); - } - } - - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::HandleCallStateChanged -// Handles call state change callback. If call state changes, -// screensaver is stopped -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataMonitor::HandleCallStateChanged(TAny* aPtr) - { -#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 - // Prevent fullscreen transition from screensaver on incoming call - CAknTransitionUtils::SetData( KScreensaverCallStateChange, (TAny*)1 ); -#endif - - STATIC_CAST(CScreensaverSharedDataMonitor*, aPtr)->Model().StopScreenSaver(); - return KErrNone; - } - -// ----------------------------------------------------------------------------- -// CScreensaverSharedDataMonitor::HandleShuttingDownStateChanged -// ----------------------------------------------------------------------------- -// -TInt CScreensaverSharedDataMonitor::HandleShuttingDownStateChanged( TAny* /*aPtr*/ ) - { - TInt startupState = -1; - - RProperty::Get( KPSUidStartup, KPSGlobalSystemState, startupState ); - - if( startupState == ESwStateShuttingDown ) - { - RProperty::Set( KPSUidScreenSaver, KScreenSaverAllowScreenSaver, KSystemShuttingdown); - } - - return KErrNone; - } - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa src/screensaversubscriber.cpp --- a/src/screensaversubscriber.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/* -* Copyright (c) 2003 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: Implementation of screensaver shared data Subscriber. -* -*/ - - - -#include "screensaversubscriber.h" - - -// ----------------------------------------------------------------------------- -// CSubscriber::CSubscriber -// ----------------------------------------------------------------------------- -// -CSubscriber::CSubscriber(TCallBack aCallBack, RProperty& aProperty) - : CActive(EPriorityNormal), iCallBack(aCallBack), iProperty(aProperty) - { - CActiveScheduler::Add(this); - } - -// ----------------------------------------------------------------------------- -// CSubscriber::~CSubscriber -// ----------------------------------------------------------------------------- -// -CSubscriber::~CSubscriber() - { - } - -// ----------------------------------------------------------------------------- -// CSubscriber::SubscribeL -// ----------------------------------------------------------------------------- -// -void CSubscriber::SubscribeL() - { - if (!IsActive()) - { - iProperty.Subscribe(iStatus); - SetActive(); - } - } - -// ----------------------------------------------------------------------------- -// CSubscriber::StopSubscribe -// ----------------------------------------------------------------------------- -// -void CSubscriber::StopSubscribe() - { - Cancel(); - } - -// ----------------------------------------------------------------------------- -// CSubscriber::RunL -// ----------------------------------------------------------------------------- -// -void CSubscriber::RunL() - { - if (iStatus.Int() == KErrNone) - { - iCallBack.CallBack(); - SubscribeL(); - } - } - -// ----------------------------------------------------------------------------- -// CSubscriber::DoCancel -// ----------------------------------------------------------------------------- -// -void CSubscriber::DoCancel() - { - iProperty.Cancel(); - } - - -// End of file. diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverutility.cpp --- a/src/screensaverutility.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,223 +0,0 @@ -/* -* Copyright (c) 2004 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: Defines screensaver utility tools. -* -*/ - - - -#include -#include -#include -#include - -#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 -#include -#endif - -#include "screensaverutility.h" -#include "screensaverappui.h" -#include "ScreensaverUtils.h" - - -// Screensaver window group priority boost (to ensure it's on top) -const TInt KSSWinPriorityBoost = 2; - -_LIT(KSsBitmapName, "\\ssbackground.mbm"); -_LIT(KSsBitmapUserDrive, "c:"); -_LIT(KSsBitmapSystemDrive, "z:"); - -// ----------------------------------------------------------------------------- -// CScreensaverUtility::Panic( TInt aPanic ) -// ----------------------------------------------------------------------------- -// -void ScreensaverUtility::Panic( TInt aPanic ) - { - User::Panic( _L("Screensaver"),aPanic ); - } - - -// ----------------------------------------------------------------------------- -// CScreensaverUtility::FlushDrawBuffer( TInt aPanic ) -// Flushes pending draw commands. A "must" before activating power save -// mode, so that the image can be copied to power save memory -// ----------------------------------------------------------------------------- -// -void ScreensaverUtility::FlushDrawBuffer() - { - CCoeEnv::Static()->WsSession().Flush(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverUtility::ScreenRotated( TInt aPanic ) -// Checks if screen has been rotated -// ----------------------------------------------------------------------------- -// -TBool ScreensaverUtility::ScreenRotated() - { - TPixelsAndRotation pxRot; - CCoeEnv::Static()->ScreenDevice()->GetDefaultScreenSizeAndRotation(pxRot); - - // Rotated, if 90 or 270 degrees - return ((pxRot.iRotation == CFbsBitGc::EGraphicsOrientationRotated90) - || (pxRot.iRotation == CFbsBitGc::EGraphicsOrientationRotated270)); - } - -// ----------------------------------------------------------------------------- -// ScreensaverUtility::Query12HourClock -// Query whether 12-hour clock is displayed -// ----------------------------------------------------------------------------- -// -TBool ScreensaverUtility::Query12HourClock( ) - { - TLocale locale; - return (locale.TimeFormat() == ETime12); - } - - -// ----------------------------------------------------------------------------- -// ScreensaverUtility::BringToForeground -// ----------------------------------------------------------------------------- -// -void ScreensaverUtility::BringToForeground() - { -#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 - const TInt KSsaCustomActivateContextNum = 1002; - - GfxTransEffect::BeginFullScreen( KSsaCustomActivateContextNum, TRect( ), - AknTransEffect::EParameterType, AknTransEffect::GfxTransParam( - KUidScreensaverApp, - AknTransEffect::TParameter::EActivateExplicitContinue ) ); -#endif - CEikonEnv::Static()->SetAutoForwarding( ETrue ); - CEikonEnv::Static()->BringForwards( ETrue, ECoeWinPriorityAlwaysAtFront - + KSSWinPriorityBoost ); - } - -// ----------------------------------------------------------------------------- -// ScreensaverUtility::SendToBackground -// ----------------------------------------------------------------------------- -// -void ScreensaverUtility::SendToBackground() - { -#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2 - - // Start the exit effect context even if this is actually application switch. The exit context - // makes possible to map effect by using the *previous* application uid (=Screen Saver). - // Note: Not allowed to call GfxTransEffect::EndFullScreen() as AVKON takes care of that when - // EApplicationExit context is used! - const TInt KSsaCustomDeactivateContextNum = 1001; - - //condition takes care of special case of incomeing call (should not have effect then) - if ( CAknTransitionUtils::GetData( KScreensaverCallStateChange ) == NULL ) - { - GfxTransEffect::BeginFullScreen( KSsaCustomDeactivateContextNum, - TRect( ), AknTransEffect::EParameterType, - AknTransEffect::GfxTransParam( KUidScreensaverApp, - AknTransEffect::TParameter::EActivateExplicitContinue ) ); - } - - CAknTransitionUtils::RemoveData( KScreensaverCallStateChange ); -#endif - - CEikonEnv::Static()->BringForwards( EFalse ); - } - -// ----------------------------------------------------------------------------- -// ScreensaverUtility::IsDrivePresent -// ----------------------------------------------------------------------------- -// -TBool ScreensaverUtility::IsDrivePresent(TInt aDrive) - { - RFs& fs = CCoeEnv::Static()->FsSession(); - - TInt error = KErrNone; - TDriveInfo driveInfo; - error = fs.Drive(driveInfo, aDrive ); - - // Not present, locked or unknown is bad - if ((error != KErrNone) || - (driveInfo.iMediaAtt & KMediaAttLocked) || - (driveInfo.iType == EMediaNotPresent) || - (driveInfo.iType == EMediaUnknown)) - { - return EFalse; - } - - // Read-only is fine - return ETrue; - } - -// ----------------------------------------------------------------------------- -// ScreensaverUtility::LoadBitmapL -// ----------------------------------------------------------------------------- -// -CGulIcon* ScreensaverUtility::LoadBitmapL() - { - CGulIcon *icon = CGulIcon::NewL(); - CleanupStack::PushL( icon ); - icon->SetBitmap(new (ELeave) CFbsBitmap()); - CFbsBitmap* mask = new (ELeave) CFbsBitmap(); - - // First try user path and then system path. - TInt error; - TFileName path; - path.Copy(KSsBitmapUserDrive); - path.Append(KDC_APP_BITMAP_DIR); - path.Append(KSsBitmapName); - - for (TInt i = 0; i < 2; i++) - { - error = icon->Bitmap()->Load(path, 0); - if (error == KErrNone) - { - error = mask->Load(path, 1); - if (error != KErrNone) - { - delete mask; - } - else - { - icon->SetMask( mask ); - } - CleanupStack::Pop(); // icon - return icon; - } - path.Copy(KSsBitmapSystemDrive); - path.Append(KDC_APP_BITMAP_DIR); - path.Append(KSsBitmapName); - } - - CleanupStack::PopAndDestroy(); // icon - return NULL; - } - - -// ----------------------------------------------------------------------------- -// ScreensaverUtility::StopWServHeartBeat -// ----------------------------------------------------------------------------- -// -void ScreensaverUtility::StopWServHeartBeat() - { - SCRLOGGER_WRITE("Model: Stopping WServ HB, snoozing..."); - RWsSession ws; - TInt err = ws.Connect( ); - if ( !err ) - { - ws.PrepareForSwitchOff( ); - ws.Close( ); - } - } - -// End of file diff -r 058b1fc1663a -r 8a173132b0aa src/screensaverview.cpp --- a/src/screensaverview.cpp Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,261 +0,0 @@ -/* -* Copyright (c) 2004 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: Screensaver view class implementation. -* -*/ - - - -#include -#include - -#include "ScreensaverUtils.h" -#include "screensaverview.h" -#include "screensaverappui.h" -#include "screensaverplugin.h" -#include "screensaverutility.h" -#include "screensaverctrlmovingtext.h" -#include "screensaverctrlnone.h" -#include "screensaverctrlplugin.h" -#include "screensaverengine.h" -#include "screensavershareddatai.h" - - -// ----------------------------------------------------------------------------- -// CScreensaverView::NewLC -// add this NewLC code called by UI -// ----------------------------------------------------------------------------- -// -CScreensaverView* CScreensaverView::NewL() - { - CScreensaverView* self = new( ELeave ) CScreensaverView(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -// ----------------------------------------------------------------------------- -// CScreensaverView::CScreensaverView -// ----------------------------------------------------------------------------- -// -CScreensaverView::CScreensaverView() - { - } - - -// ----------------------------------------------------------------------------- -// CScreensaverView::~CScreensaverView -// ----------------------------------------------------------------------------- -// -CScreensaverView::~CScreensaverView( ) - { - DestroyDisplayObject(); - } - - -// ----------------------------------------------------------------------------- -// CScreensaverView::ConstructL -// ----------------------------------------------------------------------------- -// -void CScreensaverView::ConstructL( ) - { - // Let CAknView do its stuff - BaseConstructL(); - - SetDisplayObject( PslnSettingScreensaverType() ); - } - - -// ----------------------------------------------------------------------------- -// CScreensaverView::CreateDisplayObjectL -// ----------------------------------------------------------------------------- -// -void CScreensaverView::CreateDisplayObjectL( TDisplayObjectType aType ) - { - SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::CreateDisplayObjectL "),aType); - - DestroyDisplayObject(); - - switch( aType ) - { - case EDisplayPlugin: - { - iControl = CScreensaverCtrlPlugin::NewL(); - break; - } - - case EDisplayTime: - case EDisplayText: - { - iControl = CScreensaverCtrlMovingText::NewL( aType ); - break; - } - - case EDisplayNone: - { - iControl = CScreensaverCtrlNone::NewL(); - break; - } - - default: - { - break; - } - } - - iCurrentControlType = aType; - } - -// ----------------------------------------------------------------------------- -// CScreensaverView::SetDisplayObject -// ----------------------------------------------------------------------------- -// -void CScreensaverView::SetDisplayObject( TDisplayObjectType aType ) - { - SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::SetDisplayObject ")); - - TRAPD( error, CreateDisplayObjectL( aType ) ); - - if(error == KErrNone) - return; - - SCRLOGGER_WRITE("ResetDisplayObject() setting default screensaver"); - - TRAP_IGNORE( CreateDisplayObjectL( DefaultScreensaverType() ) ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverView::CreatePreviewDisplayObjectL -// ----------------------------------------------------------------------------- -// -void CScreensaverView::CreatePreviewDisplayObjectL() - { - SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::CreatePreviewDisplayObjectL ")); - TRAPD( error, CreateDisplayObjectL( PslnSettingScreensaverType() ) ); - - if(error == KErrNone) - { - Model().SharedDataInterface()->SetScreensaverPreviewState( - EScreenSaverPreviewLoaded ); - return; - } - - Model().SharedDataInterface()->SetScreensaverPreviewState( - EScreenSaverPreviewError ); - } - -// ----------------------------------------------------------------------------- -// CScreensaverView::Id -// ----------------------------------------------------------------------------- -// -TUid CScreensaverView::Id( ) const - { - return KUidScreensaverView; - } - - -// ----------------------------------------------------------------------------- -// CScreensaverView::DoActivateL -// ----------------------------------------------------------------------------- -// -void CScreensaverView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, - TUid /*aCustomMessageId*/, const TDesC8& /*aCustomMessage*/) - { - } - - -// ----------------------------------------------------------------------------- -// CScreensaverView::DoDeactivate -// ----------------------------------------------------------------------------- -// -void CScreensaverView::DoDeactivate( ) - { - } - -// ----------------------------------------------------------------------------- -// CScreensaverView::ShowDisplayObject -// ----------------------------------------------------------------------------- -// -void CScreensaverView::ShowDisplayObject() - { - SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::ShowDisplayObject ")); - - iControl->StartDrawObject(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverView::HideDisplayObject -// ----------------------------------------------------------------------------- -// -void CScreensaverView::HideDisplayObject() - { - SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::HideDisplayObject ")); - iControl->StopDrawObject(); - - ScreensaverUtility::SendToBackground(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverView::UpdateAndRefresh -// Updates indicators and refreshes the display -// ----------------------------------------------------------------------------- -// -void CScreensaverView::UpdateAndRefresh( ) - { - SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::UpdateAndRefresh ")); - iControl->Refresh(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverView::DefaultScreensaverType -// ----------------------------------------------------------------------------- -// -TDisplayObjectType CScreensaverView::DefaultScreensaverType() - { - return Model().SharedDataInterface()->DefaultScreensaverType(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverView::PslnSettingScreensaverType -// ----------------------------------------------------------------------------- -// -TDisplayObjectType CScreensaverView::PslnSettingScreensaverType() - { - return Model().SharedDataInterface()->DisplayObjectType(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverView::Model -// ----------------------------------------------------------------------------- -// -CScreensaverEngine& CScreensaverView::Model() const - { - return STATIC_CAST( CScreensaverAppUi*, CCoeEnv::Static()->AppUi() )->Model(); - } - -// ----------------------------------------------------------------------------- -// CScreensaverView::DestroyDisplayObject -// ----------------------------------------------------------------------------- -// -void CScreensaverView::DestroyDisplayObject() - { - SCRLOGGER_WRITEF(_L("SCR: CScreensaverView::DestroyDisplayObject ")); - if( iControl ) - { - delete iControl; - iControl = NULL; - } - } -// End of file diff -r 058b1fc1663a -r 8a173132b0aa sysdef_1_4_0.dtd --- a/sysdef_1_4_0.dtd Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff -r 058b1fc1663a -r 8a173132b0aa systemDefinition.xml --- a/systemDefinition.xml Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ - - - - - - - - -]> - - - -&layer_file; - - -&targetDefinition_file; - - - - -&defaultbuild_file; - - - - - -&defaultclean_file; - - - - diff -r 058b1fc1663a -r 8a173132b0aa systemDefinitionLayer.xml --- a/systemDefinitionLayer.xml Mon Jan 18 20:19:52 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ - - - - - - -