Binary file CenRep/keys_screensaver.xls has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/aif/screensaver_reg.rss Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,32 @@
+/*
+* 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 <appinfo.rh>
+#include <screensaver.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0x100056CF // Screensaver UID
+
+RESOURCE APP_REGISTRATION_INFO
+ {
+ app_file = "screensaver";
+ hidden = KAppIsHidden;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/aif/screensaveraif.rss Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,27 @@
+/*
+* 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 <aiftool.rh>
+
+RESOURCE AIF_DATA
+ {
+ app_uid=0x100056CF;
+ hidden=KAppIsHidden;
+ }
Binary file animations/balloons.gif has changed
Binary file animations/bird.swf has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/animations/butterfly0.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,335 @@
+<svg width="100%" height="100%" viewBox="0 0 352 352" preserveAspectRatio="none" xmlns:a="http://www.adobe.com/svg10-extensions" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg">
+<defs>
+<radialGradient id="shape14grad" gradientUnits="userSpaceOnUse" r="38.014" cx="257.431" cy="44.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="3s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="3s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="3s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape15grad" gradientUnits="userSpaceOnUse" r="47.802" cx="287.578" cy="46.388">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="2.80s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="2.80s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="2.80s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape16grad" gradientUnits="userSpaceOnUse" r="26.08" cx="310.265" cy="58.231">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="2.60s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="2.60s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="2.60s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape17grad" gradientUnits="userSpaceOnUse" r="45.221" cx="317.432" cy="97.185">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="2.40s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="2.40s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="2.40s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape18grad" gradientUnits="userSpaceOnUse" r="47.708" cx="294.431" cy="133.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="2.20s" dur="2.41s" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="2.20s" dur="2.41s" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="2.20s" dur="2.41s" />
+</stop>
+</radialGradient>
+<radialGradient id="shape19grad" gradientUnits="userSpaceOnUse" r="44.72" cx="313.382" cy="110.537">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="2s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="2s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="2s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape20grad" gradientUnits="userSpaceOnUse" r="32.894" cx="285.431" cy="97.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="1.80s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="1.80s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.084;0.171;0.25;0.417;1" begin="1.80s" dur="2.40s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape21grad" gradientUnits="userSpaceOnUse" r="52.346" cx="249.431" cy="129.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1.60s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1.60s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1.60s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape22grad" gradientUnits="userSpaceOnUse" r="46.641" cx="214.281" cy="146.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1.40s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1.40s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1.40s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape23grad" gradientUnits="userSpaceOnUse" r="69.355" cx="147.431" cy="189.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1.20s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1.20s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1.20s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape24grad" gradientUnits="userSpaceOnUse" r="76.008" cx="102.43" cy="256.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="1s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape25grad" gradientUnits="userSpaceOnUse" r="109.402" cx="102.431" cy="251.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0.80s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0.80s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0.80s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape26grad" gradientUnits="userSpaceOnUse" r="96.318" cx="75.431" cy="144.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0.60s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0.60s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0.60s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape27grad" gradientUnits="userSpaceOnUse" r="68.861" cx="111.455" cy="147.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;#FEFEFE;#007176;#007176;#007176" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0.40s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;#7CFFFF;#00FFFF;#00FFFF;#00FFFF" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0.40s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;#00FFFF;#1038B6;#1038B6;#1038B6" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0.40s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape28grad" gradientUnits="userSpaceOnUse" r="130.385" cx="154.431" cy="227.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;#007176;black;#FEFEFE;#007176;black;#007176" fill="freeze" keyTimes="0;0.083;0.088;0.171;0.249;0.415;1" begin="0.20s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;#00FFFF;black;#7CFFFF;#00FFFF;black;#00FFFF" fill="freeze" keyTimes="0;0.083;0.088;0.171;0.249;0.415;1" begin="0.20s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;#1038B6;black;#00FFFF;#1038B6;black;#1038B6" fill="freeze" keyTimes="0;0.083;0.088;0.171;0.249;0.415;1" begin="0.20s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape29grad" gradientUnits="userSpaceOnUse" r="208.195" cx="246.431" cy="414.786">
+<stop offset="0.441" stop-color="#007176">
+<animate attributeName="stop-color" values="#007176;black;#FEFEFE;#007176;black;#007176" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.787" stop-color="#00FFFF">
+<animate attributeName="stop-color" values="#00FFFF;black;#7CFFFF;#00FFFF;black;#00FFFF" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="#1038B6">
+<animate attributeName="stop-color" values="#1038B6;black;#00FFFF;#1038B6;black;#1038B6" fill="freeze" keyTimes="0;0.083;0.171;0.249;0.415;1" begin="0s" dur="2.41s" repeatCount="indefinite" />
+</stop>
+</radialGradient>
+<radialGradient id="shape31grad" gradientUnits="userSpaceOnUse" r="10" cx="0" cy="0">
+<stop offset="0.055" stop-color="#F0EB8A">
+<animate attributeName="offset" values="0.055;0;0.055" fill="freeze" keyTimes="0;0.513;1" begin="0s" dur="0.80s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.232" stop-color="#7F802A">
+<animate attributeName="offset" values="0.232;0.096;0.232" fill="freeze" keyTimes="0;0.513;1" begin="0s" dur="0.80s" repeatCount="indefinite" />
+</stop>
+<stop offset="0.614" stop-color="#2F1300">
+<animate attributeName="offset" values="0.614;0.369;0.614" fill="freeze" keyTimes="0;0.513;1" begin="0s" dur="0.80s" repeatCount="indefinite" />
+</stop>
+<stop offset="1" stop-color="black" />
+</radialGradient>
+<circle transform="translate(78,158)" id="shape31" fill="url(#shape31grad)" fill-rule="evenodd" cx="0" cy="0" r="10">
+</circle>
+</defs>
+<g>
+<rect transform="translate(176.408,175.674) scale(1.5)" fill="black" fill-rule="evenodd" x="-176" y="-176" width="352" height="352" />
+<g transform="translate(0,-14)">
+<use transform="translate(76.801,-205.199) scale(0.401)" xlink:href="#shape31">
+<animateTransform attributeName="transform" type="translate" additive="replace" values="108.001,-142;4.001,568.001" fill="freeze" keyTimes="0;1" begin="0.41s" dur="1s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="scale" additive="sum" values="0.401,0.401;1.201,1.201" fill="freeze" keyTimes="0;1" begin="0.41s" dur="1s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-78,-158;-78,-158" begin="0.41s" />
+</use>
+<use transform="translate(189.4,-262.599) scale(0.7)" xlink:href="#shape31">
+<animateTransform attributeName="transform" type="translate" additive="replace" values="244,-151.999;306.001,606" fill="freeze" keyTimes="0;1" begin="0.20s" dur="1.80s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="scale" additive="sum" values="0.7,0.7;1.201,1.201" fill="freeze" keyTimes="0;1" begin="0.20s" dur="1.80s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-78,-158;-78,-158" begin="0.20s" />
+</use>
+<use transform="translate(102,-320)" xlink:href="#shape31">
+<animateTransform attributeName="transform" type="translate" additive="replace" values="180,-161.999;212.001,594" fill="freeze" keyTimes="0;1" begin="0s" dur="1.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="scale" additive="sum" values="1,1;1.201,1.201" fill="freeze" keyTimes="0;1" begin="0s" dur="1.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-78,-158;-78,-158" begin="0s" />
+</use>
+<use transform="translate(169.001,-208.999) scale(0.5)" xlink:href="#shape31">
+<animateTransform attributeName="transform" type="translate" additive="replace" values="208.001,-129.999;226.001,552.001" fill="freeze" keyTimes="0;1" begin="1s" dur="3.01s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="scale" additive="sum" values="0.5,0.5;1.201,1.201" fill="freeze" keyTimes="0;1" begin="1s" dur="3.01s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-78,-158;-78,-158" begin="1s" />
+</use>
+<use transform="translate(104,-236) scale(0.5)" xlink:href="#shape31">
+<animateTransform attributeName="transform" type="translate" additive="replace" values="144,-155.999;124,582" fill="freeze" keyTimes="0;1" begin="0s" dur="5.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="scale" additive="sum" values="0.5,0.5;1,1" fill="freeze" keyTimes="0;1" begin="0s" dur="5.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-79.999,-160;-79.999,-160" begin="0s" />
+</use>
+<use transform="translate(138.001,-313.999)" xlink:href="#shape31">
+<animateTransform attributeName="transform" type="translate" additive="replace" values="216.001,-155.999;298,580" fill="freeze" keyTimes="0;1" begin="0.20s" dur="3.80s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="scale" additive="sum" values="1,1;1.201,1.201" fill="freeze" keyTimes="0;1" begin="0.20s" dur="3.80s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-78,-158;-78,-158" begin="0.20s" />
+</use>
+<use transform="translate(28.4,460.4) scale(0.7)" xlink:href="#shape31">
+<animateTransform attributeName="transform" type="translate" additive="replace" values="83.001,571;83.001,571" fill="freeze" keyTimes="0;1" begin="0.40s" dur="4.20s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="scale" additive="sum" values="0.7,0.7;1,1" fill="freeze" keyTimes="0;1" begin="0.40s" dur="4.20s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-78,-158;-78,-158" begin="0.40s" />
+</use>
+<use transform="translate(99.4,-240.6) scale(0.7)" xlink:href="#shape31">
+<animateTransform attributeName="transform" type="translate" additive="replace" values="154,-130;83.001,571" fill="freeze" keyTimes="0;1" begin="0.81s" dur="3.19s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="scale" additive="sum" values="0.7,0.7;1,1" fill="freeze" keyTimes="0;1" begin="0.81s" dur="3.19s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-78,-158;-78,-158" begin="0.81s" />
+</use>
+</g>
+<g id="Layer_1">
+<path transform="translate(-17,0)" fill-opacity="0" display="none" fill="url(#shape14grad)" fill-rule="evenodd" d="M287.352,24.92C286.872,23.718,287.086,22.351,286.662,21.381C286.238,20.409,284.829,18.988,284.313,18.866C283.796,18.744,283.779,17.433,282.661,16.625C281.544,15.818,276.387,26.148,276.387,26.148C276.387,26.148,280.549,16.345,279.193,11.015C278.287,7.466,274.017,2.932,274.017,2.932C274.017,2.932,273.698,0.133,273.18,0.011C272.663,-0.111,272.264,0.665,271.109,6.494C270.185,11.149,269.821,15.722,269.683,19.077C269.293,18.282,268.732,17.388,268.176,17.16C268.374,15.148,268.475,13.286,268.229,12.242C267.922,10.949,265.382,7.213,265.293,6.212C265.201,5.21,265.336,3.718,264.54,3.858C262.84,4.155,263.025,11.507,264.057,15.616C264.659,18.015,266.394,22.9,267.179,24.825C267.251,26.52,267.729,28.833,269.057,31.827C270.873,35.917,276.138,38.831,276.936,38.151C277.095,38.014,277.131,37.704,277.077,37.271C277.747,37.791,278.384,38.045,278.94,37.97C280.403,37.77,282.886,36.939,284.745,35.526C286.602,34.113,287.898,30.932,288.117,30.003C288.334,29.073,287.831,26.122,287.352,24.92M274.7,29.847C274.685,29.799,274.671,29.75,274.658,29.705C274.767,29.525,274.873,29.344,274.976,29.157C274.878,29.393,274.784,29.625,274.7,29.847">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="3s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.084;0.171;0.417;1" begin="3s" dur="2.40s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="258.72,19.126;258.72,19.126;258.72,40.126;258.72,40.126" fill="freeze" keyTimes="0;0.084;0.417;1" begin="3s" dur="2.40s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-275.719,-19.125;-275.719,-19.125" begin="3s" />
+</path>
+<path transform="translate(-17,0)" fill-opacity="0" display="none" fill="url(#shape15grad)" fill-rule="evenodd" d="M300.964,73.274C296.739,70.927,287.821,66,287.821,66L287.955,66.375C286.03,65.608,283.998,65.101,283.833,65.764C283.833,65.764,283.964,66.327,284.296,67.06C281.163,67.504,272.303,69.493,264.353,78.2C254.497,88.996,256.843,90.403,257.547,91.342C258.252,92.28,261.773,91.575,262.711,91.575C263.649,91.575,268.107,92.045,270.691,91.107C271.722,90.732,274.586,87.774,277.655,84.118C276.491,88.351,277.003,91.016,278.2,91.813C279.607,92.75,283.128,92.048,284.537,91.813C285.945,91.578,291.107,88.996,293.924,84.538C296.671,80.187,295.618,74.283,293.603,71.6C293.644,71.591,293.688,71.582,293.726,71.57C295.527,72.497,297.428,73.555,298.619,74.448C301.434,76.558,309.413,81.958,309.413,80.314C309.412,78.67,305.188,75.622,300.964,73.274z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="2.80s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.083;0.171;0.415;1" begin="2.80s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="266.103,78.875;266.103,78.875;266.103,99.875;266.103,99.875" fill="freeze" keyTimes="0;0.083;0.415;1" begin="2.80s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-283.102,-78.874;-283.102,-78.874" begin="2.80s" />
+</path>
+<path transform="translate(-17)" fill-opacity="0" display="none" fill="url(#shape16grad)" fill-rule="evenodd" d="M339.739,51.13C339.073,49.846,333.471,54.219,327.012,59.371C321.369,63.873,318.253,67.092,317.556,67.833C317.551,67.83,317.546,67.827,317.542,67.823C318.330,66.853,322.653,61.601,326.389,58.279C330.51,54.612,335.836,47.862,336.96,44.393C338.084,40.924,335.588,39.602,335.391,37.617C335.195,35.631,334.995,33.644,333.903,33.257C332.812,32.869,326.242,41.489,321.078,52.056C316.454,61.515,316.415,66.302,316.457,67.203C316.063,67.013,315.749,66.911,315.57,66.948C314.967,67.07,314.567,67.301,314.332,67.467C310.747,66.274,298.369,62.256,291.097,61.145C282.523,59.835,277.805,57.544,278.238,59.687C278.670,61.829,280.228,61.516,281.712,62.836C283.194,64.157,290.368,67.575,296.797,68.304C301.863,68.879,310.967,68.89,314.599,68.869C314.670,68.981,314.745,69.096,314.827,69.212C312.157,69.285,306.998,69.452,302.761,69.735C296.763,70.134,293.140,70.258,293.375,71.425C293.610,72.593,298.365,74.066,301.096,75.541C303.826,77.017,308.815,78.644,315.397,77.114C320.8,75.857,320.792,74.192,320.162,73.054C320.890,72.782,321.57,72.179,321.712,71.667C325.986,73.773,333.259,69.426,336.806,65.703C341.823,60.435,341.074,55.724,340.838,54.555C340.598,53.388,340.403,52.415,339.739,51.13z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="2.60s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.083;0.171;0.415;1" begin="2.60s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="292.626,55.49;292.626,55.49;292.626,76.49;292.626,76.49" fill="freeze" keyTimes="0;0.083;0.415;1" begin="2.60s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-309.625,-55.489;-309.625,-55.489" begin="2.60s" />
+</path>
+<path transform="translate(-17,0)" fill-opacity="0" display="none" fill="url(#shape17grad)" fill-rule="evenodd" d="M354.278,68.531C352.749,66.567,353.403,64.6,350.783,64.381C348.165,64.162,344.452,71.805,341.612,75.736C341.342,76.112,341.05,76.550,340.753,77.013C343.162,71.041,345.461,64.692,345.981,62.198C347.073,56.957,343.581,51.062,342.27,49.533C340.959,48.004,340.085,44.51,338.121,44.51C336.155,44.51,333.753,55.865,332.443,65.691C331.441,73.212,331.334,82.005,331.339,85.72C330.695,84.991,330.039,84.211,329.388,83.379C325.991,79.039,316.066,70.931,316.941,73.116C318.32,76.569,327.639,85.781,331.353,88.401C335.064,91.021,337.465,91.675,337.465,91.675C337.465,91.675,336.452,90.875,334.956,89.463C334.968,89.45,334.98,89.43,334.992,89.416C335.514,89.687,336.24,90.127,337.029,90.803C341.538,94.669,352.969,87.091,355.37,82.506C357.77,77.919,355.805,70.497,354.278,68.531z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="2.40s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.084;0.171;0.417;1" begin="2.40s" dur="2.40s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="319.711,68.147;319.711,68.147;319.711,89.147;319.711,89.147" fill="freeze" keyTimes="0;0.084;0.417;1" begin="2.40s" dur="2.40s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-336.71,-68.146;-336.71,-68.146" begin="2.40s" />
+</path>
+<path transform="translate(-17,0.001)" fill-opacity="0" display="none" fill="url(#shape18grad)" fill-rule="evenodd" d="M335.174,101.739C333.413,99.475,334.168,97.212,331.15,96.96C328.132,96.709,323.858,105.512,320.589,110.038C320.276,110.471,319.945,110.96,319.603,111.494C322.375,104.621,325.020,97.318,325.618,94.448C326.875,88.412,322.853,81.622,321.344,79.863C319.835,78.102,318.828,74.078,316.566,74.078C314.302,74.078,311.538,87.155,310.028,98.471C308.874,107.133,308.751,117.26,308.756,121.538C308.015,120.698,307.259,119.8,306.509,118.841C302.596,113.842,291.167,104.507,292.175,107.021C293.765,110.997,304.496,121.606,308.772,124.624C313.046,127.642,315.812,128.396,315.812,128.396C315.812,128.396,314.402,126.611,315.31,127.39C320.503,131.843,333.667,123.115,336.433,117.834C339.196,112.552,336.934,104.001,335.174,101.739z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="2.20s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.083;0.171;0.415;1" begin="2.20s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="297.944,101.298;297.944,101.298;297.944,122.298;297.944,122.298" fill="freeze" keyTimes="0;0.083;0.415;1" begin="2.20s" dur="2.41s" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-314.943,-101.297;-314.943,-101.297" begin="2.20s" />
+</path>
+<path transform="translate(-17)" fill-opacity="0" display="none" fill="url(#shape19grad)" fill-rule="evenodd" d="M339.938,142.321C338.507,133.573,332.484,125.423,328.606,123.674C327.135,122.2,324.415,120.467,322.566,120.227C319.908,119.881,314.211,118.471,313.106,121.254C312.888,121.8,313.351,122.326,314.178,122.816C312.469,125.88,308.482,133.788,307.468,142.474C306.167,153.618,308.585,163.633,310.866,163.260C313.149,162.887,321.097,158.984,325.241,157.265C325.618,157.109,325.967,156.864,326.303,156.579C326.523,156.66,326.744,156.719,326.977,156.723C329.847,156.773,341.512,151.954,339.938,142.321z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="2s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.084;0.171;0.417;1" begin="2s" dur="2.40s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="306.54,141.414;306.54,141.414;306.54,162.414;306.54,162.414" fill="freeze" keyTimes="0;0.084;0.417;1" begin="2s" dur="2.40s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-323.539,-141.413;-323.539,-141.413" begin="2s" />
+</path>
+<path transform="translate(-17)" fill-opacity="0" display="none" fill="url(#shape20grad)" fill-rule="evenodd" d="M321.998,98.458C321.478,96.639,313.163,100.794,303.547,105.733C295.15,110.046,290.322,113.366,289.235,114.137C289.230,114.133,289.224,114.127,289.219,114.123C290.485,113.081,297.385,107.465,303.028,104.173C309.264,100.535,317.841,93.258,320.18,89.101C322.519,84.943,319.659,82.604,319.918,80.005C320.18,77.406,320.439,74.807,319.140,74.028C317.84,73.249,307.187,82.604,297.829,94.819C289.459,105.745,288.167,111.873,287.986,113.046C287.531,112.7,287.153,112.489,286.916,112.489C286.127,112.489,285.533,112.68,285.187,112.83C280.882,110.365,266.064,102.02,257.034,98.716C246.377,94.818,240.92,90.659,240.92,93.518C240.92,96.377,243.002,96.377,244.561,98.456C246.12,100.534,254.434,106.772,262.492,109.371C268.84,111.419,280.51,113.788,285.173,114.701C285.235,114.864,285.301,115.029,285.376,115.2C281.928,114.603,275.267,113.481,269.767,112.749C261.972,111.709,257.293,110.93,257.293,112.489C257.293,114.048,263.011,117.166,266.129,119.765C269.247,122.363,275.224,125.741,284.06,125.482C291.294,125.269,291.734,123.141,291.228,121.52C292.226,121.361,293.254,120.749,293.573,120.133C298.511,123.934,308.954,120.244,314.464,116.387C322.261,110.929,322.522,104.693,322.522,103.134C322.519,101.574,322.519,100.276,321.998,98.458z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="1.80s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.084;0.171;0.417;1" begin="1.80s" dur="2.40s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="264.721,99.755;264.721,99.755;264.721,120.755;264.721,120.755" fill="freeze" keyTimes="0;0.084;0.417;1" begin="1.80s" dur="2.40s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-281.72,-99.754;-281.72,-99.754" begin="1.80s" />
+</path>
+<path transform="translate(-17)" fill-opacity="0" fill="url(#shape21grad)" fill-rule="evenodd" d="M284.684,156.974C275.628,152.010,260.178,147.911,255.268,146.680C254.376,145.512,253.282,144.709,252.149,145.254C251.643,145.496,251.496,146.172,251.66,147.046C247.306,149.794,237.292,156.489,229.173,164.733C218.48,175.589,216.673,181.845,217.523,182.99C218.374,184.135,220.234,182.137,221.119,183.491C222.004,184.842,223.106,184.881,224.498,184.023C225.893,183.164,234.972,172.191,239.27,166.398C242.45,162.104,248.916,152.825,252.059,148.294C252.186,148.588,252.33,148.888,252.507,149.193C250.649,152.112,245.254,160.594,241.019,167.339C235.822,175.622,230.833,185.152,231.964,186.68C233.099,188.205,239.812,183.735,246.875,172.171C252.974,162.188,254.835,155.267,254.985,152.088C255.423,152.446,255.901,152.778,256.416,153.071C258.301,154.141,257.640,152.221,257.338,150.92C260.229,153.638,267.989,160.815,272.352,163.72C277.787,167.342,290.717,175.108,292.148,173.175C292.919,172.137,280.396,164.582,275.426,161.104C271.426,158.304,260.651,151.472,256.588,148.907C256.404,148.517,256.194,148.112,255.958,147.711C259.462,149.918,266.469,154.338,272.608,158.243C281.202,163.708,292.82,170.188,294.317,169.952C295.813,169.716,295.751,168.019,295.751,168.019C295.751,168.019,296.964,167.402,297.679,166.435C298.395,165.471,295.558,162.935,284.684,156.974z">
+<animate attributeName="display" values="inline;none;none" fill="freeze" keyTimes="0;0.362;1" begin="1.80s" dur="2.21s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.083;0.171;0.415;1" begin="1.60s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="240.557,166.025;240.557,166.025;240.557,187.025;240.557,187.025" fill="freeze" keyTimes="0;0.083;0.415;1" begin="1.60s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-257.556,-166.024;-257.556,-166.024" begin="1.60s" />
+</path>
+<path transform="translate(-17)" fill-opacity="0" display="none" fill="url(#shape22grad)" fill-rule="evenodd" d="M204.655,152.633C209.582,136.8,207.386,113.728,205.828,114.336C204.269,114.945,205.048,127.709,203.488,135.915C201.529,146.208,198.416,157.06,198.061,158.288C195.326,153.563,188.238,141.053,183.599,130.445C177.749,117.072,173.071,95.492,171.512,94.581C169.95,93.668,171.249,98.179,168.78,99.14C161.762,101.876,166.754,126.048,174.24,136.221C185.559,151.604,192.125,157.555,195.547,159.844C195.528,159.869,195.508,159.891,195.489,159.917C192.181,157.64,183.478,151.368,176.969,144.122C168.78,135.005,163.712,120.415,160.592,120.415C157.473,120.415,157.473,131.661,158.253,139.867C159.033,148.074,178.141,167.222,187.499,167.222C189.885,167.222,191.605,167.063,192.854,166.827C192.871,166.99,192.9,167.131,192.958,167.222C193.739,168.438,196.078,169.043,198.418,166.916C200.167,165.327,201.693,162.043,200.404,159.976C201.792,158.922,203.357,156.805,204.655,152.633z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="1.40s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.083;0.171;0.415;1" begin="1.40s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="165.75,131.399;165.75,131.399;165.75,152.399;165.75,152.399" fill="freeze" keyTimes="0;0.083;0.415;1" begin="1.40s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-182.749,-131.398;-182.749,-131.398" begin="1.40s" />
+</path>
+<path transform="translate(-17)" fill-opacity="0" display="none" fill="url(#shape23grad)" fill-rule="evenodd" d="M185.788,225.131C169.144,217.941,156.801,215.978,154.696,215.681C153.969,214.976,152.350,215.053,151.664,215.865C150.811,216.873,149.669,218.334,148.651,219.844C145.011,222.327,134.085,229.944,129.968,234.622C124.996,240.27,119.347,247.954,120.476,252.248C121.606,256.543,130.872,244.113,134.036,239.368C136.312,235.953,142.799,228.795,146.259,225.047C146.259,225.667,146.507,226.111,147.144,226.258C147.848,226.421,148.683,226.008,149.541,225.275C150.040,227.124,152.153,231.239,159.346,237.107C167.933,244.114,179.91,247.728,182.171,244.564C184.174,241.758,179.068,237.707,173.788,233.2C180.594,237.076,186.669,240.527,188.046,241.629C191.436,244.34,196.859,243.211,199.347,242.984C201.832,242.758,207.031,243.663,208.384,242.081C209.741,240.499,204.092,233.042,185.788,225.131z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="1.20s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.083;0.171;0.415;1" begin="1.20s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="147.454,234.163;147.454,234.163;147.454,255.163;147.454,255.163" fill="freeze" keyTimes="0;0.083;0.415;1" begin="1.20s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-164.453,-234.162;-164.453,-234.162" begin="1.20s" />
+</path>
+<path transform="translate(-16.999)" fill-opacity="0" display="none" fill="url(#shape24grad)" fill-rule="evenodd" d="M136.084,208.571C135,208.028,127.951,211.824,121.989,215.62C116.252,219.271,102.492,224.926,101.456,225.349C101.658,224.999,101.77,224.742,101.77,224.613C101.77,223.58,99.466,222.414,98.411,223.58C98.338,223.66,98.252,223.757,98.173,223.845C95.839,217.487,88.546,205.975,76.993,198.272C57.476,185.26,53.681,183.635,50.429,185.26C47.177,186.887,49.345,189.057,47.718,191.766C46.092,194.477,40.728,197.774,41.213,200.44C42.297,206.405,55.309,211.825,65.609,216.706C70.463,219.005,77.604,221.665,83.798,223.835C77.44,222.005,69.867,219.866,63.983,218.331C51.513,215.077,38.608,207.927,33.624,212.909C29.288,217.247,30.691,224.399,35.25,228.089C46.635,237.305,75.910,239.474,87.293,235.138C88.999,234.488,90.395,233.864,91.545,233.269C91.516,233.716,91.663,234.042,92.082,234.174C93.968,234.769,98.136,230.8,98.136,230.8C98.136,230.8,103.015,228.089,108.979,225.378C114.941,222.668,137.168,209.114,136.084,208.571z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="1s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.083;0.171;0.415;1" begin="1s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="66.558,211.01;66.558,211.01;66.558,232.01;66.558,232.01" fill="freeze" keyTimes="0;0.083;0.415;1" begin="1s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-83.557,-211.009;-83.557,-211.009" begin="1s" />
+</path>
+<path transform="translate(-16.999,0)" fill-opacity="0" display="none" fill="url(#shape25grad)" fill-rule="evenodd" d="M123.513,141.868C120.346,141.868,119.819,151.898,116.652,154.010C113.485,156.12,111.902,160.344,109.791,164.567C109.192,165.763,106.22,170.479,102.208,176.693C93.879,177.317,82.958,193.273,79.443,197.292C78.331,198.563,75.848,201.901,72.905,206.11C71.897,206.514,70.947,207.105,70.202,207.849C70.082,207.969,69.954,208.104,69.831,208.23C68.543,202.301,64.094,182.551,59.644,171.428C54.367,158.232,51.746,143.98,44.337,143.98C39.059,143.98,40.240,147.861,38.003,149.258C33.781,151.898,25.335,163.510,25.335,170.37C25.335,173.719,30.228,184.724,36.589,195.796C27.786,186.619,18.782,178.516,14.252,178.29C3.697,177.762,0,195.181,0,202.571C0,209.961,17.948,237.407,31.143,238.465C44.34,239.519,52.257,231.603,52.257,231.603L58.375,223.736C57.052,226.103,55.849,228.571,54.875,231.076C53.345,235.012,54.084,239.785,57.25,239.785C57.8,239.785,58.831,239.046,60.146,237.814C66.291,234.68,77.332,222.099,77.332,222.099C78.137,220.489,83.358,213.655,89.04,205.76C97.389,198.03,109.648,185.771,114.012,176.707C120.875,162.454,126.681,141.868,123.513,141.868z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="0.80s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.083;0.171;0.415;1" begin="0.80s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="45.165,190.827;45.165,190.827;45.165,211.827;45.165,211.827" fill="freeze" keyTimes="0;0.083;0.415;1" begin="0.80s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-62.164,-190.826;-62.164,-190.826" begin="0.80s" />
+</path>
+<path transform="translate(-17)" fill-opacity="0" display="none" fill="url(#shape26grad)" fill-rule="evenodd" d="M89.128,218.588C84.436,202.172,74.262,188.196,70.005,182.833C71.445,181.629,72.17,180.471,71.579,179.486C68.571,174.471,58.043,178.984,53.031,180.488C49.578,181.524,44.937,185.65,42.546,188.938C35.536,193.397,25.96,210.752,25.96,228.115C25.96,247.165,50.526,253.181,56.041,252.178C56.474,252.099,56.883,251.943,57.273,251.726C58.013,252.169,58.772,252.497,59.548,252.68C68.07,254.685,84.616,259.698,89.128,259.698C93.639,259.698,95.144,239.646,89.128,218.588z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="0.60s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.083;0.171;0.415;1" begin="0.60s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="42.518,218.451;42.518,218.451;42.518,239.451;42.518,239.451" fill="freeze" keyTimes="0;0.083;0.415;1" begin="0.60s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-59.517,-218.45;-59.517,-218.45" begin="0.60s" />
+</path>
+<path transform="translate(-17)" fill-opacity="0" display="none" fill="url(#shape27grad)" fill-rule="evenodd" d="M195.321,108.811C194.831,106.353,165.333,130.443,152.06,139.292C140.519,146.987,120.438,162.849,115.39,166.861C114.51,165.532,113.187,164.59,111.256,164.364C110.407,164.264,109.579,164.812,108.822,165.766C103.921,158.744,92.788,144.701,74.877,132.409C49.805,115.202,40.956,109.795,37.023,110.777C33.089,111.76,36.531,116.676,36.04,119.135C35.548,121.593,31.615,125.526,33.09,128.967C34.564,132.408,58.162,149.124,72.910,154.531C83.764,158.511,99.667,165.149,107.314,168.38C107.101,168.862,106.902,169.373,106.716,169.899C99.049,167.347,76.176,159.747,66.028,156.5C53.737,152.566,30.633,143.226,28.174,145.685C25.716,148.143,31.122,161.416,33.09,164.366C35.057,167.316,64.555,184.03,79.303,184.03C90.765,184.03,100.427,181.952,105.556,179.871C105.636,180.142,105.733,180.384,105.849,180.589C107.816,184.03,113.714,183.539,115.189,181.573C115.395,181.299,115.629,180.778,115.858,180.094C123.72,179.992,142.522,167.179,146.653,163.874C151.570,159.942,173.693,147.651,172.709,144.702C171.726,141.753,158.943,151.093,151.570,154.534C145.295,157.462,123.016,166.792,116.506,169.511C116.293,168.653,115.989,167.848,115.57,167.142C121.986,164.004,149.581,150.406,163.859,141.752C168.78,138.77,188.931,120.612,190.407,117.663C191.879,114.711,195.814,111.269,195.321,108.811z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="0.40s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animate attributeName="fill-opacity" values="0;0;1;0;0" fill="freeze" keyTimes="0;0.083;0.171;0.415;1" begin="0.40s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="94.46,146.421;94.46,146.421;94.46,167.421;94.46,167.421" fill="freeze" keyTimes="0;0.083;0.415;1" begin="0.40s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-111.459,-146.42;-111.459,-146.42" begin="0.40s" />
+</path>
+<path transform="translate(-17)" display="none" fill="url(#shape28grad)" fill-rule="evenodd" d="M230.463,308.050C211.309,292.726,173.62,275.792,160.803,270.245C159.696,267.796,158.049,266.092,155.642,266.387C154.188,266.566,153.267,268.244,152.999,270.713C144.493,274.32,114.633,287.612,89.603,306.494C60.085,328.765,53.352,343.264,54.905,346.369C56.459,349.477,61.638,345.335,63.193,348.959C64.744,352.584,67.334,353.102,70.96,351.549C74.585,349.994,98.924,325.655,111.354,313.227C121.694,302.889,152.918,272.56,152.924,272.775C145.644,281.943,128.487,303.424,116.532,317.373C100.996,335.498,85.46,356.73,87.531,360.873C89.602,365.016,107.209,356.73,128.442,331.355C148.867,306.943,155.392,289.727,155.859,283.382C156.687,284.953,157.697,286.49,158.91,287.915C162.368,291.973,162.362,286.693,162.764,283.442C162.874,282.558,162.891,280.832,162.726,278.805C164.269,280.906,184.297,308.082,195.247,318.537C206.639,329.413,234.087,353.232,238.23,349.091C240.458,346.862,213.89,323.716,203.533,313.357C190.325,300.151,161.724,272.846,161.659,272.619C170.392,279.72,188.257,294.424,201.461,306.495C219.588,323.067,244.446,343.264,248.068,343.264C251.693,343.264,252.213,339.121,252.213,339.121C252.213,339.121,255.318,338.085,257.391,336.014C259.464,333.942,253.769,326.692,230.463,308.050z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="0.20s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="139.263,314.101;139.263,314.101;139.263,335.101;139.263,335.101" fill="freeze" keyTimes="0;0.083;0.415;1" begin="0.20s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-156.262,-314.1;-156.262,-314.1" begin="0.20s" />
+</path>
+<path transform="translate(-34,-9)" display="none" fill="url(#shape29grad)" fill-rule="evenodd" d="M412.385,306C408.991,299.709,409.299,292.079,406.354,287.018C403.408,281.953,394.783,275.050,391.875,274.709C388.966,274.368,388.038,267.185,381.399,263.461C374.787,259.753,353.191,319.164,353.006,319.672C353.155,319.165,369.581,263.133,358.803,234.872C351.596,215.972,325.291,193.806,325.291,193.806C325.291,193.806,321.76,178.653,318.849,178.312C315.938,177.971,314.235,182.486,311.583,215.194C309.47,241.292,310.361,266.641,311.731,285.133C309.096,281.029,305.443,276.390,302.253,275.483C302.063,264.352,301.435,254.114,299.425,248.556C296.927,241.656,280.624,222.771,279.494,217.332C278.360,211.893,278.155,203.617,273.875,204.883C264.734,207.593,270.405,247.815,278.665,269.708C283.477,282.458,296.066,308.097,301.609,318.207C303.076,327.465,307.187,339.884,316.379,355.486C328.929,376.777,359.66,389.432,363.608,385.189C364.396,384.343,364.425,382.644,363.853,380.3C367.849,382.715,371.489,383.691,374.485,382.925C382.386,380.902,395.487,374.772,404.786,365.837C414.085,356.9,419.174,338.632,419.786,333.397C420.4,328.165,415.776,312.293,412.385,306z">
+<animate attributeName="display" values="none;inline;none;none" fill="freeze" keyTimes="0;0.083;0.415;1" begin="0s" dur="2.41s" repeatCount="indefinite" calcMode="discrete" />
+<animateTransform attributeName="transform" type="translate" additive="replace" values="312.443,272.37;312.443,272.37;312.443,293.37;312.443,293.37" fill="freeze" keyTimes="0;0.083;0.415;1" begin="0s" dur="2.41s" repeatCount="indefinite" />
+<animateTransform attributeName="transform" type="translate" additive="sum" fill="freeze" values="-346.442,-281.369;-346.442,-281.369" begin="0s" />
+</path>
+</g>
+</g>
+</svg>
Binary file animations/hypnose.swf has changed
Binary file conf/screensaver.confml has changed
Binary file conf/screensaver_101F8770.crml has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/group/ScreensaverConfig.hrh Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,62 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/group/backup_registration.xml Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="yes"?>
+<backup_registration version="1.0">
+ <proxy_data_manager sid = "0x10202BE9" />
+ <restore requires_reboot = "no"/>
+</backup_registration>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/group/bld.inf Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,68 @@
+/*
+* 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 <platform_paths.hrh>
+
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/group/screensaver.mmp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,124 @@
+/*
+* 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 <bldvariant.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/ScreensaverUtils.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,157 @@
+/*
+* 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 <e32std.h>
+#include <e32def.h>
+#include <eikenv.h>
+#include <flogger.h>
+
+
+/* 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<const TDesC> 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<const TDesC> /*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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaver.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,86 @@
+/*
+* 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 <e32base.h>
+
+//For turning display off
+#include <hal.h>
+
+#include <centralrepository.h>
+
+#include <aknapp.h>
+#include <AknDoc.h>
+#include <apgwgnam.h>
+
+//
+// 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaver.hrh Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,103 @@
+/*
+* 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 <avkon.hrh>
+
+//
+// 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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverappui.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,117 @@
+/*
+* 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 <e32base.h>
+#include <aknViewAppUi.h>
+
+#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
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverbase.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,219 @@
+/*
+* 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 <coeccntx.h>
+#include <coecntrl.h>
+#include <AknPictographDrawerInterface.h>
+
+#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
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverctrlmovingtext.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,260 @@
+/*
+* 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 <AknPictographInterface.h>
+
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverctrlnone.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,107 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverctrlplugin.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,205 @@
+/*
+* 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 <babitflags.h>
+
+#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<TUint32> iPluginFlag;
+
+ /**
+ * The refresh rate of plugin
+ */
+ TInt iPluginRefreshRate;
+ };
+#endif // C_SCREENSAVERCTRLPLUGIN_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverengine.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,304 @@
+/*
+* 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 <e32base.h>
+#include <AknCapServerClient.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverindicator.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,270 @@
+/*
+* 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 <aknconsts.h>
+#include <coecntrl.h>
+#include <coeccntx.h>
+#include <e32base.h>
+#include <AknIconArray.h>
+#include <gulicon.h>
+#include <AknsItemID.h>
+#include <AknUtils.h>
+#include <screensaverplugin.h>
+
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverindicatorarray.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,245 @@
+/*
+* 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<CScreensaverIndicator>* iIndicators;
+
+ /**
+ * The array of dependency record
+ */
+ CArrayFixFlat<TBool>* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverindicatoricon.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,96 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverindicatornumberandicon.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,155 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverindicatortext.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,117 @@
+/*
+* 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<KMaxPayloadTextLength> 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverrepositorywatcher.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,95 @@
+/*
+* 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 <cenrepnotifyhandler.h>
+
+// 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensavershareddatai.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,381 @@
+/*
+* 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 <msvapi.h> // for MMsvSessionObserver
+#include <cenrepnotifyhandler.h>
+
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensavershareddatamonitor.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,157 @@
+/*
+* 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 <e32property.h>
+
+// 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaversubscriber.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,50 @@
+/*
+* 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 <e32base.h>
+#include <e32property.h>
+
+/**
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverutility.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,81 @@
+/*
+* 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 <e32base.h>
+
+// 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/inc/screensaverview.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,161 @@
+/*
+* 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 <aknview.h>
+#include <babitflags.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/layers.sysdef.xml Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "sysdef_1_4_0.dtd" [
+ <!ENTITY layer_real_source_path "sf/app/screensaver" >
+]>
+
+<SystemDefinition name="screensaver" schema="1.4.0">
+ <systemModel>
+ <layer name="app_layer">
+ <module name="screensaver">
+ <unit unitID="abs.screensaver" mrp="" bldFile="&layer_real_source_path;/group" name="screensaver" />
+ </module>
+ </layer>
+ </systemModel>
+</SystemDefinition>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/package_definition.xml Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<SystemDefinition schema="3.0.0">
+ <package id="screensaver" name="Screen Saver Apps" levels="plugin ui">
+ <!-- is this a user-facing application or a daemon? -->
+ <collection id="scrsaver" name="Screen Saver" level="plugin">
+ <component id="scrsaverplugins" filter="s60" name="Screen Saver Plugins" class="plugin">
+ <!-- is this not built? why is this commented out? -->
+ <!-- <unit bldFile="scrsaver/scrsaverplugins/group"/> -->
+ </component>
+ <component id="screensaveraiwplugin" filter="s60" name="Screen Saver AIW Plugin" class="plugin">
+ <unit bldFile="scrsaver/screensaveraiwplugin/group"/>
+ </component>
+ </collection>
+ <collection id="screensaver_info" name="Screen Saver Apps Info" level="ui">
+ <component id="screensaver_build" filter="s60" name="Screen Saver Application">
+ <!--should have the app be a separate component -->
+ <unit bldFile="group"/>
+ </component>
+ </collection>
+ </package>
+</SystemDefinition>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/rom/screensaver.iby Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,37 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/screensaveraiwplugin/group/bld.inf Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,53 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/screensaveraiwplugin/group/screensaveraiwplugin.mmp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,64 @@
+/*
+* 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 <platform_paths.hrh>
+#include <data_caging_paths.hrh>
+
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/screensaveraiwplugin/inc/screensaveraiwplugin.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,122 @@
+/*
+* 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 <AiwServiceIfMenu.h>
+#include <ConeResLoader.h>
+
+#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<TImageFile>& 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<TImageFile>& aSupportedImageFiles);
+#endif
+
+
+ void GetSupportedImageFilesL(const CAiwGenericParamList& aParamList,
+ RArray<TImageFile>& aSupportedImageFiles);
+ void SetAnimatedScreenSaverL( const RArray<TImageFile>& aSupportedImageFiles );
+ void SetSlideShowScreenSaverL( const RArray<TImageFile>& aSupportedImageFiles );
+
+ private:
+ RConeResourceLoader iConeResLoader;
+ RArray<TImageFile> iSupportedImageFiles;
+ CRepository* iScreensaverRepository;
+ CRepository* iAnimationRepository;
+ CRepository* iSlideshowRepository;
+ };
+
+#endif // C_CSCREENSAVERAIWPLUGIN_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/screensaveraiwplugin/inc/screensaveraiwplugin.rh Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,42 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/screensaveraiwplugin/loc/screensaveraiwplugin.loc Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,59 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/screensaveraiwplugin/rom/screensaveraiwplugin.iby Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,30 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/screensaveraiwplugin/rom/screensaveraiwpluginresources.iby Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/screensaveraiwplugin/src/10282921.rss Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,54 @@
+/*
+* 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 <registryinfov2.rh>
+#include <AiwCommon.hrh>
+#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;
+ }
+ };
+ }
+ };
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/screensaveraiwplugin/src/screensaveraiwplugin.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,657 @@
+/*
+* 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 <eikmenup.h>
+#include <f32file.h>
+#include <e32property.h>
+#include <AiwMenu.h>
+#include <AiwCommon.h>
+#include <AiwCommon.hrh>
+#include <barsread.h>
+#include <eikenv.h>
+#include <implementationproxy.h>
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+#include <data_caging_path_literals.hrh>
+#include <screensaveraiwplugin.rsg>
+#include <AknsSrvClient.h>
+#include <imageconversion.h>
+#include <centralrepository.h>
+#include <ScreensaverInternalCRKeys.h>
+#include <ScreensaverInternalPSKeys.h>
+#include <pslninternalcrkeys.h>
+#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<MAiwNotifyCallback*> (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<TImageFile>& 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<TImageFile>& 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<TImageFile>& 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<TImageFile>& 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<TImageFile>& 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;
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/screensaveraiwplugin/src/screensaveraiwplugin.rss Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,60 @@
+/*
+* 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 <eikon.rh>
+
+// Commands etc.
+#include "screensaveraiwplugin.rh"
+
+
+// Localized texts.
+#include <screensaveraiwplugin.loc>
+
+
+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; }
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/EABI/bmpanimscrplugin_ecomU.def Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,13 @@
+EXPORTS
+ _Z24ImplementationGroupProxyRi @ 1 NONAME
+ _ZTI12CBmpAnimItem @ 2 NONAME ; #<TI>#
+ _ZTI13CBmpAnimModel @ 3 NONAME ; #<TI>#
+ _ZTI15CBmpAnimIniData @ 4 NONAME ; #<TI>#
+ _ZTI16CBmpAnimSettings @ 5 NONAME ; #<TI>#
+ _ZTI17CBmpAnimScrPlugin @ 6 NONAME ; #<TI>#
+ _ZTV12CBmpAnimItem @ 7 NONAME ; #<VT>#
+ _ZTV13CBmpAnimModel @ 8 NONAME ; #<VT>#
+ _ZTV15CBmpAnimIniData @ 9 NONAME ; #<VT>#
+ _ZTV16CBmpAnimSettings @ 10 NONAME ; #<VT>#
+ _ZTV17CBmpAnimScrPlugin @ 11 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/bmarm/BMPANIMSCRPLUGINU.DEF Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+ CreatePluginModule__Fv @ 1 NONAME R3UNUSED ; CreatePluginModule(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/bmarm/BMPANIMSCRPLUGIN_ECOMU.DEF Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+ ImplementationGroupProxy__FRi @ 1 NONAME R3UNUSED ; ImplementationGroupProxy(int &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/bwins/BMPANIMSCRPLUGIN_ECOMU.DEF Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+ ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * __cdecl ImplementationGroupProxy(int &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/bwins/bmpanimscrpluginu.def Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+ ?CreatePluginModule@@YAPAVMScreensaverPlugin@@XZ @ 1 NONAME ; class MScreensaverPlugin * __cdecl CreatePluginModule(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/ABLD.BAT Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,15 @@
+@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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimConfig.hrh Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,29 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimScrPlugin.ini Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,27 @@
+[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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimScrPlugin.mmp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,82 @@
+/*
+* 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 <platform_paths.hrh>
+
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/BmpAnimScrPlugin.pkg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,52 @@
+;
+; 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"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/bld.inf Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,42 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/group/makesis_3x.bat Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,23 @@
+@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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/BmpAnimUtils.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,164 @@
+/*
+* 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 <e32std.h>
+#include <e32def.h>
+#include <eikenv.h>
+#include <flogger.h>
+
+
+/* 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<const TDesC> 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<const TDesC> /*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
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimIniData.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,84 @@
+/*
+* 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 <e32base.h>
+
+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
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimItem.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,95 @@
+/*
+* 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 <e32base.h> // e32def, e32std
+#include <gulicon.h>
+
+// 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimModel.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,109 @@
+/*
+* 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 <aIndex>. Space must be reserved.
+ void InsertItemL(TInt aIndex, CBmpAnimItem* aItem);
+
+ // Delete item at <anIndex>.
+ void DeleteItemL(TInt aIndex);
+
+ // Delete all items
+ void DeleteAll();
+
+ // Get item at position <aIndex>
+ 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 <aCount> items
+ void SetReserveL(TInt aCount);
+
+ // Get settings
+ inline CBmpAnimSettings* Settings() const;
+
+private: // Utility functions
+
+private:
+ // Item array
+ CArrayPtrFlat<CBmpAnimItem>* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimScrPlugin.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,178 @@
+/*
+* 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 <e32base.h>
+#include <fbs.h>
+#include <eikenv.h>
+#include <coecntrl.h>
+#include <coeccntx.h>
+
+#include <ScreensaverpluginIntDef.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/inc/CBmpAnimSettings.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,183 @@
+/*
+* 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 <e32std.h>
+#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<KMaxPluginNameLength> 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/rom/bmpanimscrplugin.iby Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,36 @@
+/*
+* 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__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/101F86FF.rss Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,60 @@
+/*
+* 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 <RegistryInfo.rh>
+#include <ScreensaverpluginIntDef.hrh>
+
+
+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;
+ }
+ };
+ }
+ };
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/BmpAnimScrPluginDll.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,53 @@
+/*
+* 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 <implementationproxy.h>
+
+// __________________________________________________________________________
+// 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimIniData.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,472 @@
+/*
+* 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 <f32file.h>
+#include <e32std.h>
+
+// 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<RFs> fs;
+ User::LeaveIfError(fs.iObj.Connect());
+ fs.PushL();
+
+ // Just replace the file with the data, no seeking necessary
+ TAutoClose<RFile> 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<RFs> fs;
+ User::LeaveIfError(fs.iObj.Connect());
+ fs.PushL();
+
+ // Find file, given name
+ TFindFile ff(fs.iObj);
+ TAutoClose<RFile> 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimItem.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,95 @@
+/*
+* 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 <fbs.h>
+#include <bitdev.h>
+#include <gdi.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimModel.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,170 @@
+/*
+* 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<CBmpAnimItem>(
+ 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 <aIndex>. 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 <aIndex>
+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 <aIndex>
+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 <aCount> Items
+void CBmpAnimModel::SetReserveL(TInt aCount)
+ {
+ if ((iItems) && (aCount >= NumberOfItems()))
+ {
+ iItems->SetReserveL(aCount);
+ }
+ }
+
+
+// --- private functions ---
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimScrPlugin.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,1073 @@
+/*
+* 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 <eikenv.h>
+#include <e32math.h>
+#include <bitdev.h>
+#include <aknutils.h>
+#include <akniconutils.h>
+#include <mifconvdefs.h>
+
+#include "CBmpAnimScrPlugin.h"
+#include "BmpAnimUtils.h"
+
+#include <AknQueryDialog.h>
+#include <avkon.rsg>
+// "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<TUint8*>(srcAddress);
+ TUint8* trgAddr8 = reinterpret_cast<TUint8*>(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<TUint16*>(srcAddress);
+ TUint16* trgAddr16 = reinterpret_cast<TUint16*>(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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/src/CBmpAnimSettings.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,320 @@
+/*
+* 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 <e32std.h>
+
+#include "CBmpAnimSettings.h"
+
+#include "BmpAnimUtils.h"
+#include <f32file.h>
+
+// 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/animation.mk Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,72 @@
+#
+# 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.mk Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,51 @@
+#
+# 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.s60.mk Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,51 @@
+#
+# 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.series60.mk Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,47 @@
+#
+# 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/bitmaps.series60_lowcolor.mk Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,43 @@
+#
+# 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim01.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:32:55Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:03:52Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim02.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:23:39Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:03:44Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x30_2">
+ <g opacity="0.3">
+ <polygon fill="#FFCC00" points="145.002,104.102 112.421,121.947 149.582,139.471 180.031,118.835 "/>
+ <polygon fill="#FF9900" points="112.421,121.947 116.345,163.209 151.221,181.376 149.582,139.471 "/>
+
+ <linearGradient id="XMLID_146_" gradientUnits="userSpaceOnUse" x1="-6.1548" y1="435.9668" x2="28.7212" y2="435.9668" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_146_)" points="116.345,163.209 151.221,181.376 149.582,139.471 "/>
+ <polygon fill="#F27C0E" points="180.031,118.835 149.582,139.471 151.221,181.376 180.031,160.096 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim03.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:23:58Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:03:37Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x30_3">
+ <g opacity="0">
+ <polygon fill="#FFCC00" points="145.002,104.102 112.421,121.947 149.582,139.471 180.031,118.835 "/>
+ <polygon fill="#FF9900" points="112.421,121.947 116.345,163.209 151.221,181.376 149.582,139.471 "/>
+
+ <linearGradient id="XMLID_144_" gradientUnits="userSpaceOnUse" x1="-6.1548" y1="435.9668" x2="28.7212" y2="435.9668" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_144_)" points="116.345,163.209 151.221,181.376 149.582,139.471 "/>
+ <polygon fill="#F27C0E" points="180.031,118.835 149.582,139.471 151.221,181.376 180.031,160.096 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim04.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:25:01Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:03:31Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x30_4">
+ <g opacity="0.3">
+ <polygon fill="#FFCC00" points="145.002,104.102 112.421,121.947 149.582,139.471 180.031,118.835 "/>
+ <polygon fill="#FF9900" points="112.421,121.947 116.345,163.209 151.221,181.376 149.582,139.471 "/>
+
+ <linearGradient id="XMLID_142_" gradientUnits="userSpaceOnUse" x1="-6.1548" y1="435.9668" x2="28.7212" y2="435.9668" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_142_)" points="116.345,163.209 151.221,181.376 149.582,139.471 "/>
+ <polygon fill="#F27C0E" points="180.031,118.835 149.582,139.471 151.221,181.376 180.031,160.096 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim05.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:25:35Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:03:27Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x30_5">
+ <g opacity="0.6">
+ <polygon fill="#FFCC00" points="145.002,104.102 112.421,121.947 149.582,139.471 180.031,118.835 "/>
+ <polygon fill="#FF9900" points="112.421,121.947 116.345,163.209 151.221,181.376 149.582,139.471 "/>
+
+ <linearGradient id="XMLID_140_" gradientUnits="userSpaceOnUse" x1="-6.1548" y1="435.9668" x2="28.7212" y2="435.9668" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_140_)" points="116.345,163.209 151.221,181.376 149.582,139.471 "/>
+ <polygon fill="#F27C0E" points="180.031,118.835 149.582,139.471 151.221,181.376 180.031,160.096 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim06.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:25:56Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:03:22Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x30_6">
+ <g>
+ <polygon fill="#FFCC00" points="146.102,105.201 113.521,123.046 150.682,140.57 181.131,119.935 "/>
+ <polygon fill="#FF9900" points="113.521,123.046 117.445,164.31 152.321,182.479 150.682,140.57 "/>
+
+ <linearGradient id="XMLID_138_" gradientUnits="userSpaceOnUse" x1="-5.0552" y1="434.8662" x2="29.8208" y2="434.8662" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_138_)" points="117.445,164.31 152.321,182.479 150.682,140.57 "/>
+ <polygon fill="#F27C0E" points="181.131,119.935 150.682,140.57 152.321,182.479 181.131,161.195 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim07.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:26:11Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:03:16Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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
/9k=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x30_7">
+ <g>
+ <polygon fill="#FFCC00" points="157.502,110.602 124.922,128.448 162.083,145.971 192.529,125.336 "/>
+ <polygon fill="#FF9900" points="124.922,128.448 128.846,169.707 163.721,187.874 162.083,145.971 "/>
+
+ <linearGradient id="XMLID_136_" gradientUnits="userSpaceOnUse" x1="6.3462" y1="429.4688" x2="41.2212" y2="429.4688" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_136_)" points="128.846,169.707 163.721,187.874 162.083,145.971 "/>
+ <polygon fill="#F27C0E" points="192.529,125.336 162.083,145.971 163.721,187.874 192.529,166.596 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim08.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,158 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:26:27Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:03:05Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x30_8">
+ <g>
+ <polygon fill="#FFCC00" points="172.506,118.298 139.926,136.144 177.086,153.667 207.514,133.032 "/>
+ <polygon fill="#FF9900" points="139.926,136.144 143.85,177.421 178.725,195.591 177.086,153.667 "/>
+
+ <linearGradient id="XMLID_134_" gradientUnits="userSpaceOnUse" x1="21.3501" y1="421.7617" x2="56.2246" y2="421.7617" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_134_)" points="143.85,177.421 178.725,195.591 177.086,153.667 "/>
+ <polygon fill="#F27C0E" points="207.514,133.032 177.086,153.667 178.725,195.591 207.514,174.307 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim09.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,167 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:26:45Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:02:59Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x30_9">
+ <g opacity="0.2">
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="186.506,127.103 153.92,144.948 191.086,162.472 221.537,141.836 "/>
+ <polygon fill="#FF9900" points="153.92,144.948 157.844,186.202 192.725,204.372 191.086,162.472 "/>
+
+ <linearGradient id="XMLID_132_" gradientUnits="userSpaceOnUse" x1="35.3438" y1="412.9688" x2="70.2246" y2="412.9688" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_132_)" points="157.844,186.202 192.725,204.372 191.086,162.472 "/>
+ <polygon fill="#F27C0E" points="221.537,141.836 191.086,162.472 192.725,204.372 221.537,183.086 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim10.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:27:02Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:02:54Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x31_0">
+ <g>
+ <polygon fill="#FFCC00" points="202.904,113.501 170.324,131.347 207.484,148.864 237.936,128.235 "/>
+ <polygon fill="#FF9900" points="170.324,131.347 174.248,172.605 209.123,190.777 207.484,148.864 "/>
+
+ <linearGradient id="XMLID_130_" gradientUnits="userSpaceOnUse" x1="51.748" y1="426.5703" x2="86.623" y2="426.5703" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_130_)" points="174.248,172.605 209.123,190.777 207.484,148.864 "/>
+ <polygon fill="#F27C0E" points="237.936,128.235 207.484,148.864 209.123,190.777 237.936,169.488 "/>
+ </g>
+ <g opacity="0.5">
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim11.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,181 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:27:16Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:02:49Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x31_1">
+ <g>
+ <polygon fill="#FFCC00" points="217.904,101.501 185.324,119.347 222.484,136.864 252.936,116.235 "/>
+ <polygon fill="#FF9900" points="185.324,119.347 189.248,160.605 224.123,178.777 222.484,136.864 "/>
+
+ <linearGradient id="XMLID_128_" gradientUnits="userSpaceOnUse" x1="66.748" y1="438.5703" x2="101.623" y2="438.5703" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_128_)" points="189.248,160.605 224.123,178.777 222.484,136.864 "/>
+ <polygon fill="#F27C0E" points="252.936,116.235 222.484,136.864 224.123,178.777 252.936,157.488 "/>
+ </g>
+ <g opacity="0.65">
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g opacity="0.2">
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim12.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,187 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:27:28Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:02:42Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x31_2">
+ <g>
+ <polygon fill="#FFCC00" points="217.904,101.501 185.324,119.347 222.484,136.864 252.936,116.235 "/>
+ <polygon fill="#FF9900" points="185.324,119.347 189.248,160.605 224.123,178.777 222.484,136.864 "/>
+
+ <linearGradient id="XMLID_126_" gradientUnits="userSpaceOnUse" x1="66.748" y1="438.5703" x2="101.623" y2="438.5703" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_126_)" points="189.248,160.605 224.123,178.777 222.484,136.864 "/>
+ <polygon fill="#F27C0E" points="252.936,116.235 222.484,136.864 224.123,178.777 252.936,157.488 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g opacity="0.4">
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim13.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:27:40Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:02:33Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x31_3">
+ <g opacity="0.2">
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_123_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_123_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="199.904,92.501 167.324,110.347 204.484,127.864 234.936,107.235 "/>
+ <polygon fill="#FF9900" points="167.324,110.347 171.248,151.605 206.123,169.778 204.484,127.864 "/>
+
+ <linearGradient id="XMLID_124_" gradientUnits="userSpaceOnUse" x1="48.748" y1="447.5703" x2="83.623" y2="447.5703" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_124_)" points="171.248,151.605 206.123,169.778 204.484,127.864 "/>
+ <polygon fill="#F27C0E" points="234.936,107.235 204.484,127.864 206.123,169.778 234.936,148.488 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g opacity="0.65">
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim14.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,211 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:27:56Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:02:24Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x31_4">
+ <g opacity="0.4">
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_119_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_119_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="181.004,83.198 148.42,101.043 185.584,118.561 216.035,97.932 "/>
+ <polygon fill="#FF9900" points="148.42,101.043 152.344,142.302 187.223,160.488 185.584,118.561 "/>
+
+ <linearGradient id="XMLID_120_" gradientUnits="userSpaceOnUse" x1="29.8438" y1="456.8662" x2="64.7227" y2="456.8662" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_120_)" points="152.344,142.302 187.223,160.488 185.584,118.561 "/>
+ <polygon fill="#F27C0E" points="216.035,97.932 185.584,118.561 187.223,160.488 216.035,139.185 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g opacity="0.2">
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim15.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,234 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:28:12Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:02:17Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x31_5">
+ <path opacity="0.2" enable-background="new " d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279
+ c2.772,0.754,5.231,1.131,7.378,1.131c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738
+ c-0.945-0.904-2.7-2.086-5.263-3.545c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442
+ c0-3.237,1.085-5.668,3.257-7.295c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183
+ c-2.259-0.514-4.358-0.771-6.297-0.771c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462
+ c0,1.426,0.46,2.567,1.382,3.425c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975
+ c1.041,1.603,1.562,3.404,1.562,5.408c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path opacity="0.2" fill="#808080" enable-background="new " d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316
+ c0.857,0.876,1.286,2.284,1.286,4.223c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479
+ h-2.584L112.728,302.891L112.728,302.891z M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931
+ c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"
+ />
+ <g opacity="0.65">
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_115_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_115_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="176.004,61.198 143.42,79.043 180.584,96.561 211.035,75.932 "/>
+ <polygon fill="#FF9900" points="143.42,79.043 147.344,120.302 182.223,138.488 180.584,96.561 "/>
+
+ <linearGradient id="XMLID_116_" gradientUnits="userSpaceOnUse" x1="24.8438" y1="478.8662" x2="59.7227" y2="478.8662" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_116_)" points="147.344,120.302 182.223,138.488 180.584,96.561 "/>
+ <polygon fill="#F27C0E" points="211.035,75.932 180.584,96.561 182.223,138.488 211.035,117.185 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g opacity="0.4">
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim16.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:28:25Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:02:09Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x31_6">
+ <path opacity="0.4" enable-background="new " d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279
+ c2.772,0.754,5.231,1.131,7.378,1.131c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738
+ c-0.945-0.904-2.7-2.086-5.263-3.545c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442
+ c0-3.237,1.085-5.668,3.257-7.295c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183
+ c-2.259-0.514-4.358-0.771-6.297-0.771c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462
+ c0,1.426,0.46,2.567,1.382,3.425c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975
+ c1.041,1.603,1.562,3.404,1.562,5.408c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path opacity="0.2" enable-background="new " d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227
+ c-4.198,0-7.346-1.21-9.445-3.629c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395
+ c2.059-2.65,4.931-3.979,8.616-3.979c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309
+ c0,3.012,0.577,5.271,1.73,6.776s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z
+ M105.184,273.04h8.892c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path opacity="0.4" fill="#808080" enable-background="new " d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316
+ c0.857,0.876,1.286,2.284,1.286,4.223c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479
+ h-2.584L112.728,302.891L112.728,302.891z M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931
+ c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"
+ />
+ <rect x="135.898" y="301.786" opacity="0.2" fill="#808080" enable-background="new " width="2.56" height="19.022"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_111_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_111_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g opacity="0.2">
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g opacity="0.65">
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="175.4,40.401 142.82,58.247 179.986,75.764 210.438,55.135 "/>
+ <polygon fill="#FF9900" points="142.82,58.247 146.744,99.505 181.625,117.675 179.986,75.764 "/>
+
+ <linearGradient id="XMLID_112_" gradientUnits="userSpaceOnUse" x1="24.2441" y1="499.6719" x2="59.125" y2="499.6719" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_112_)" points="146.744,99.505 181.625,117.675 179.986,75.764 "/>
+ <polygon fill="#F27C0E" points="210.438,55.135 179.986,75.764 181.625,117.675 210.438,96.388 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim17.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,275 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:28:37Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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
+7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqgb3W9NsnEc0v7wmhRfiI9zTpmo13bul0suHJ
+L1dw3I9/d97k4tJkyCwNkRbXlrdJzt5VkXvxO4+Y6jM7S63DqI8WKQkPL9Pd8WrJilA1IUrZktbs
+VdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVQt/qllYpyu
+JAGP2Yxux+QzXdodq6fSRvLKj3dT8PwG/Dp55D6QxXUvNN7c1jt/9HhPcH4yPdu30Z572p7WZ89x
+xfu4f7I/Hp8Pm7nB2dCG8vUfsSUkk1O5OcoTbsF0U0sTh4naNx0ZSQfvGWYs08cuKBMZd42YyiJC
+iLTyx83XsVFulFwn832X/DY/dnWaD2x1GPbMBkj38pfq+z4uvzdmQl9PpZDY67pt5QRyhJD/ALqk
++Fvo7H6M7XQdv6XVbRlUv5stj+o/Al1ebR5MfMbeSPzcuK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq
+7FXYq7FXYq7FXYq7FXYq7FXYq7FXYql/mC4ubbRby4tm4TxRl0bY0puevtmv7VyThppygakI83K0
+UIzzRjLkS8zj1tZ35XJIlb7TklgT8zvnjmfHOcjIkyJ7+b10tJwj08karKyhlIKnoRvmIQRzaCKb
+xQ7FVC7vLe1i9Sdwq9h3J8AMsxYZTNRZwxmRoMcutduLu5jjj/dW5dRxHVhX9o/wzeaTRxxyBO8n
+PjphGJJ3L3jPXnz12KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV
+B6zF6ukX0VK87eVR8yhzE18OLT5I98Jfc36WXDlif6Q+94rnj76EqQ3E0JrGxXxHY/RglEHmwnAS
+5plb6whos68T/Mu4+7Maen7nEnpT/Cpal5hgtwY7eks1Ov7K/Pxy7T6Ey3lsFxaUy3OwYzcXM9zK
+ZJnLue57fLNvCAiKAoOxhARFBq2/3pi/11/XluP6h70T+kvozPU3zR2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVBXl7FweJPjLAqT2FdspySBBDHxKOzxdgVJB6g0
+OeNkUafSgbFuRHduKipxESeSCQOaI+rCMVbdvwGW+HTX4lpFef70yfPMzH9IcmPJRybJUtv96Yv9
+df15PH9Q97Cf0l9GZ6m+aOxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K
+pVrvmbSNFi5Xkv70isdunxSN9HYe52xc3R9n5dQfQNu/oww/mebiXhLbehBU/ZblUduWw/DK5gnk
+7PV+zeQRvHISPUHb5ftTuw1rT71A0Mqn2rlB25vNZsM8UuHJExPmwmTSp5b+5FOEKSuvM+zEbeOe
+X5tJI5pjkBKX3voGLUgYonqYj7kT9XigTjGKeJPU/PLPDERQa+MyNlBz98xpuRBjl7/vVJ8x+rLs
+X0hzY8lDLGSI0+Cae9hjhRpJC60VRU7HJQNEFqzTEYEk0H0LFPDKKxsG9u/3Z6Zp9XizC4SB/Hc+
+bmJHNfmQh2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KqN5e2lnbtcXUqwwp9qRz
+QYtmLFLJLhiLLz3zH+Z0snK30VfTTobxx8R/1FPT5n7hi9RofZ8D1Ztz/N/WWBzTTTytLM7SSuav
+I5LMT4knF6WMBEUBQWYsl8M80Lh4nKOP2lNMBFtWbBDLHhmBIeac2nmaYAJdrzH+/E2P0r0P0UzU
+6zsfHl3Hpk6ifZJh/cnb+bLl8DzHx4kdDf2l7E0trKsqI5jcr+y6gEqfcchnI67s3Ng3kPT3jl+x
+oGURn4c/Tk7j+jvQ0/fNJNz4Md1AUum96fqy7D9LmQ5IvRPL9/q83GBeMKmkk7fZX+p9stcbV62G
+Aern3PSNF0DT9Jh4W6cpWH7ydvtt/Qe2Lyuq1k8xuXLuTMEg1BoR0IyUZGJsGi4itYa28uoR2QIl
+5cub/wAvFSevffN72N27lyamOAnjBuz1FAnn1Tk0lYzM7J5nbOC7FXYq7FXYq7FXYq7FXYq7FXYq
+7FXYq7FXYq7FXYq7FXYq8h/5yHuLy0stDvbaQxtHNPG1Oh5qjUI6H7HfJwFvdexEITnlhIXcYn5X
++t5jpfnO3lpHfr6L9PVWpQ/MdRhOPuev1HZUo7w3Hd1ZHHJHIgeNg6NurKag5W6qUSDRXYoU7i5t
+7aF57iRYokFWdjQDFQGLjUdf82Xb6d5cjaGzHw3OoPVQB/rfs17AfEcxdbrsOljxZDv0HUtWr1eH
+Sx4sp36R6n8fJ6Z5S8uQeW9Ij0+CZpmVzLJMwA5SNSpA3oNumef9pdrZdUTfpgduEd3n3vnnaOuO
+pzeKRR6eVJrcW1tcD4l9KT+dBsfmv9M0XhSj9Jsdx/X+tzNL2zOG0xxBB6f5QS6v2mvZV+qpSiRn
+4n+fQqPxww1kIVGdx+53OTteJh+63l9zN7eCC3hSGBFjiQURFFABmwjIEWHn5zlI3Lcr2ZVUsxAU
+bknpiSALLEAk0Emv9VaSscBKx9C/Qn+gzUanXGXphydpp9II7y5q3lVa6xGfBXP4UzaeyUb10fKM
+vuXtE/uj8Gb56y867FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq8s/5yKtxJ5Ks5h9
+qHUI/wDgWilB/GmTx83s/YedayQ78Z++L5zy59VRmn6rf2D8raUqD9qM7ofmMBALRm00Mo9QZGvn
+u0jsnluYGE6DZE3ViTTYnplZxui1XZ5x7g3EojRfJev+bJo9R8wM9lpIPKCyWqu47bH7IP8AMdz2
+znO1PaDHguGH1ZO/oP1l5btLt7Hp7hh9eTv6D9Zeoafp1jp1pHZ2MK29tEKJGgoPmfEnuTnCZ888
+sjOZ4pF4bPnnlkZzPFIonKmp2KtqzKQVJBHQjBKIIoqCRuEQ3mAWMJlu3AiXq3f5U7nMeGhnxfuS
+Ynu6OT+d4R69wv1C9lnfjWkQAIUbdRXfMDLqp5BUnoNLiiI8Q5lCZQ5SdeUQDqxPhExH3gZ1XscL
+1n+Yf0Ov7T/uvizTPVHn3Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWAfnpb+r+XF
++/8AviW3k++ZU/43ycOb03shOu0ID+cJD/Yk/ofL+XPsTsVUrpylu7A0YceJ9wwOAi9nC7QjxY66
+Pb7TVbq2otfUiH7DeHse2eSSxgvzpDMQnVpqlrc0UNwk/kbYn5eOY8sZDkxyCSMytsdiqD1PVLXT
+4PUmNWP93GPtMfbL8GnllNBqy5RAWWDanqt1qE/qTGij+7jH2VH+ffOgwaeOIUHVZcpmbL0mb7f+
+xX/iIzzmqfR9P/dj3LMW5PvJoP6SlPYQkfey52HsUP8ACpH/AGs/7qLre1D+7H9b9BZhnpzoXYq7
+FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWKfmrbfWPy81yOleNv6nb/dTrJ3/wBXJR5u
+79nMnDr8R/pV8xT5Ly99tdiqhfD/AEZ/an6xi42s/uy9htzWCM1rVVNfozynIPUfe/N+UVM+9UyD
+Wj7PWLiCiSfvYx2J+IfI5XPEC3RzEc0TqPma1trUPEC871CRkUAI7sf6ZLT6KWQ7/SyyakRG3Nht
+3d3F3O087l5G7nsPAeAzfY8cYCo8nWzmZGyo5Ng9XuFKylTsQFBHuAM8zkbNvpmAVAL7KyuLy4WC
+BeTt37AeJPhmVotDl1OQY8YuR+zzPkyy5Y448UmcaTpFvp0HFPimYfvZe59h7Z632P2Ni0WOo7zP
+1S7/ANjzmp1Msp35dyPzcOM7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqo3lna3tp
+NZ3cSzW1wjRzROKqyMKEHFsxZZY5CcTUomwXjHnX/nHtW9S88qTcTux0y4bb5RSn9T/8Flgyd73/
+AGV7bEVDVD/PH6R+r5PGdU0nU9KvHstStZLS6j+1FKpU/MV6jwI2y0F77T6nHmgJ45CUT1CAnUGC
+QEV+Fj9wrix1n90fh971jTWDadasNwYYyD81GeWakVkl/WP3vznrBWaY/pH70TlLjuxVL9V/3V/s
+v4Zs9F9J97RmS/Mxpdir2NNPuL7UnhgG9asx6KKdTnn/AGb2dl1eQY8Y6Cz0A7y+kHNHHjssy0zS
+7bT7cRRCrn+8lPVj/T2z17srsrFosfBD6usup/Z3B0Go1EssrKMzZtDsVdirsVdirsVdirsVdirs
+VdirsVdirsVdirsVdirsVdirsVdirsVSvzB5Y0HzDZmz1izjuot+DMKOhPeNxRlPyOEGnM0XaGfS
+z48UjE/YfeOReI+cv+ce9ZtmeXyxML+2l+AWs7LHNHz+H7Zojqtak7H2OWDJ3ve6T2yxZcZhqBwT
+rmN4mvtH2uXTptMA02dlaaxH1aVkrxLRfAxWtDSq55nrBWaf9aX3vlOryCeach1kT9reYzjuxVLt
+V+1H8j/DNpovoPvaMvNAZltKceWfK+peYb8WtmvFF3nuGrwjXxPiT2HfL9Pp5ZZUG3FhMzQfQlva
+29uGEKBA55NTuc3+j0OHTR4cUREPQTySlzKrmWwdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi
+rsVdirsVdirsVdirsVdirsVY9r/kjR9W5Shfqt41T68QHxE93Xo36/fNVreyMWff6Z94/S1TwiXv
+ec675R1nR2LTRerbdrmL4k/2XdfpzlNZ2ZlwbkXHvH42cOeIxSXNe1pdqv2o/kf4ZtNF9B97Rl5p
+j5R8nah5jvOEX7qyiI+s3RGyj+Vf5mPh9+bXTaWWU7cu9OHAch8nuejaLp+jWEdjYR+nCm5J3ZmP
+VnPcnOjxYo448MXcY8YgKCOyxm7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq
+7FXYq7FXYq7FXYq5lDAqwBUihB3BBxItWJa9+Xel33KawpZXJ34qP3TH3UfZ/wBj92aPWdh48m8P
+RL7P2fBongB5bMPtfyw1m91hbe/H1axg3muFIbmD0WL3NO427+GYeh7KyRJjPYXz/U4n5WUpb8nq
+unadZadZxWdlEIbeEURF/WfEnuc6WEBAUOTsIxERQRGTZOxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku
+xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux
+V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV
+2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2
+KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K
+uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KpB598wzeXvKGp6xAA1xbRgQctwJJXWJCR3AZwaYq8U/L/y
+FdfmOL7WvMGsXDiGX0VAIeUuVDk1eqogBFAF+6mKvXfIP5d2fk0362d7NdQXvo0jnC/uzFzrQrQf
+F6nh2xVNtZ816HpDiK9uKTkV9FAXeh7kDp9OKt6N5q0PWHMVlccplHIwuCj08QD1+jFUdNf2sNzH
+byNSWX7AoaGpp1xVTTWNPkulto5ecrEgcQSKgV69MVRmKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku
+xV2KuxV2KuxV2KuxV2KuxV2KuxV2KpZ5m0K21/Qb7R7hikV5EY+YFSrfaR6d+LAHFXzn6f5hflXr
+DSBSltM3EvQyWdyF3G+1D9zDFXtvkP8AMvS/Nmk3FxHGbbULJOd5ZE8qChIZGoOSmnht+tViflG/
+0ufzJcalr0yVKtIhmFVMrMANjX7K1pires32lWnnO2vtFdPq4aKR/R2TkWpIoA8V6/PFWa+ayRew
+kbER7H/ZHFU40/RrG2SKQR1nUAmQk1qRvtWmKphirsVdirsVdirsVdirsVdirsVdirsVdirsVdir
+sVdirsVdirsVdirsVdirsVdiqhf6hY6favd39xHa2sZUSTzMEjXmwReTNQCrMBiqR+YvMPkeTQbr
+9LX9ncaZJGwlj9WOT1BToigks38tN64q8Y/5x8066ufMmqSryW0XT3gncCo5TSJwX5/Ax+jFWU+T
+49KtPME1lr0MfEq0I9cDikqsOvLYVoRXFXoR0zyPHJGvo2AlkZViX93yZyaKFHUmuKobzZ/vZD/x
+j/42OKsmi/u0+Q/Viq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX
+Yq7FUBr2habr2k3Gk6lGZLK54+qisUJ4OHWjLQ7MoOKsFX8gPIIl5n64y1r6RmHH5bJy/HFWcaD5
+d0XQLAWGkWqWlsDyKrUlmpTk7GrMdupOKobWvJ+haxL613ARcUoZ42KMQPHsfpGKoTT/AMvfLljd
+RXSJLJLC6yRGSQ0DKQVNFC9CO+KpzfaTZ3siyThiyjiKGm1a4qjAAAAOg2GKuxV2KuxV2KuxV2Ku
+xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVSurq3tYGnuHEcSU5Ofc0H45TqNRDD
+AzmaiGePHKcuGIssfn85oJwIbfnAOrMaMfl1pnE5/baIyVjx3j8zRPu7vxydpDso8O53TXS9d0/U
+mkjt3PrRANLEw3UNWlabb0zqOy+18WtjxQsEcwR+AXC1Gknioy5HqmGbRxUiufMtxHdX0MGntcR6
+fxNxIsiqQrLyqFI32BxVN7K7ivLSK6hr6cyh1r1oexxVTW7c6k9pQcFiEgbvUtTFUUSAKk0A6k4q
+tSWN/sOrU60IOKrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVSfzf
+A0/ly+jUFmKKwA3JKurdvlmp7cx8ejyDy+4guf2ZPh1ET+OTym9l1Cxsm/elWNBx68QffPMo6UcQ
+4hu9lEQyS5Mk/KBZDPqkrBipWIczWharGlfHO29mY7z7tv0um9oiKgPf+h6VnWvLsQS21O61vzBb
+WUkUKTGFLiSQMzBWjYfABQV69cVZRYWcdlZQ2kZJSFAgJ6mnc/PFUKn/AB35f+Ydf+J4qjbiQRwu
+5XkAPs+OKoaLl9dj5BAShNE8PfFUbirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir
+sVdirsVdiriARQ7g9RirHdY8jaLqbKzB4ByDSLEQFYA1Ioa8fozSansDT5ZiQuPfXI/q+DtNN2tl
+xCufvTuxsbOxtktbOJYYIxRI1FB/afc5t8WGOOIjAVEOvy5ZZJcUjZKvljWpRWltDPNPHGFmuOJm
+cdW4ii1+VcVVcVWCGITGYKPVK8S/enWmKryAQQRUHqDiqxIIUNUQKfEe+Kr8VdirsVdirsVdirsV
+dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVd
+irsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi
+rsVdirsVdirsVdirsVdirsVdirsVdirsVf/Z
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:02:05Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x31_7">
+ <path opacity="0.65" enable-background="new " d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279
+ c2.772,0.754,5.231,1.131,7.378,1.131c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738
+ c-0.945-0.904-2.7-2.086-5.263-3.545c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442
+ c0-3.237,1.085-5.668,3.257-7.295c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183
+ c-2.259-0.514-4.358-0.771-6.297-0.771c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462
+ c0,1.426,0.46,2.567,1.382,3.425c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975
+ c1.041,1.603,1.562,3.404,1.562,5.408c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path opacity="0.4" enable-background="new " d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227
+ c-4.198,0-7.346-1.21-9.445-3.629c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395
+ c2.059-2.65,4.931-3.979,8.616-3.979c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309
+ c0,3.012,0.577,5.271,1.73,6.776s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z
+ M105.184,273.04h8.892c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path opacity="0.2" enable-background="new " d="M125.805,289.238v-28.096h3.797l1.273,4.662
+ c0.785-1.634,1.867-2.863,3.245-3.689c1.378-0.824,3.052-1.236,5.023-1.236c0.513,0,0.889,0.016,1.129,0.049v5.383
+ c-0.897-0.063-1.554-0.097-1.971-0.097c-2.163,0-3.701,0.478-4.614,1.431s-1.37,2.527-1.37,4.724v16.87H125.805L125.805,289.238z
+ "/>
+ <path opacity="0.65" fill="#808080" enable-background="new " d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316
+ c0.857,0.876,1.286,2.284,1.286,4.223c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479
+ h-2.584L112.728,302.891L112.728,302.891z M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931
+ c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"
+ />
+ <rect x="135.898" y="301.786" opacity="0.4" fill="#808080" enable-background="new " width="2.56" height="19.022"/>
+ <path opacity="0.2" fill="#808080" enable-background="new " d="M159.537,318.788c-0.865,1.476-2.211,2.212-4.038,2.212
+ c-1.273,0-2.265-0.359-2.974-1.074c-0.709-0.72-1.063-1.722-1.063-3.012c0-1.33,0.365-2.322,1.094-2.975
+ c0.729-0.653,1.602-1.063,2.62-1.226c1.017-0.166,2.255-0.247,3.713-0.247v-1.646c0-1.625-0.869-2.438-2.607-2.438
+ c-1.001,0-2.223,0.214-3.665,0.638v-1.791c1.45-0.399,2.828-0.601,4.134-0.601c1.538,0,2.706,0.369,3.503,1.112
+ c0.797,0.738,1.195,1.83,1.195,3.273v9.793h-1.394L159.537,318.788z M158.888,313.994h-1.43c-1.146,0-2.005,0.242-2.578,0.727
+ c-0.573,0.485-0.859,1.209-0.859,2.17c0,0.785,0.174,1.371,0.523,1.762c0.348,0.387,0.871,0.582,1.568,0.582
+ c0.881,0,1.564-0.28,2.049-0.842c0.485-0.562,0.727-1.322,0.727-2.283V313.994z"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_107_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_107_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g opacity="0.4">
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="195.4,51.401 162.82,69.247 199.986,86.764 230.438,66.135 "/>
+ <polygon fill="#FF9900" points="162.82,69.247 166.744,110.505 201.625,128.675 199.986,86.764 "/>
+
+ <linearGradient id="XMLID_108_" gradientUnits="userSpaceOnUse" x1="44.2441" y1="488.6719" x2="79.125" y2="488.6719" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_108_)" points="166.744,110.505 201.625,128.675 199.986,86.764 "/>
+ <polygon fill="#F27C0E" points="230.438,66.135 199.986,86.764 201.625,128.675 230.438,107.388 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim18.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,295 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:28:51Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:01:59Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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
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==</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x31_8">
+ <path d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279c2.772,0.754,5.231,1.131,7.378,1.131
+ c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738c-0.945-0.904-2.7-2.086-5.263-3.545
+ c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442c0-3.237,1.085-5.668,3.257-7.295
+ c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183c-2.259-0.514-4.358-0.771-6.297-0.771
+ c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462c0,1.426,0.46,2.567,1.382,3.425
+ c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975c1.041,1.603,1.562,3.404,1.562,5.408
+ c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path opacity="0.65" enable-background="new " d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227
+ c-4.198,0-7.346-1.21-9.445-3.629c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395
+ c2.059-2.65,4.931-3.979,8.616-3.979c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309
+ c0,3.012,0.577,5.271,1.73,6.776s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z
+ M105.184,273.04h8.892c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path opacity="0.4" enable-background="new " d="M125.805,289.238v-28.096h3.797l1.273,4.662
+ c0.785-1.634,1.867-2.863,3.245-3.689c1.378-0.824,3.052-1.236,5.023-1.236c0.513,0,0.889,0.016,1.129,0.049v5.383
+ c-0.897-0.063-1.554-0.097-1.971-0.097c-2.163,0-3.701,0.478-4.614,1.431s-1.37,2.527-1.37,4.724v16.87H125.805L125.805,289.238z
+ "/>
+ <path opacity="0.2" enable-background="new " d="M145.104,289.238v-24.273h-3.101v-3.82h9.589v28.094H145.104L145.104,289.238
+ z M148.348,257.635c-1.057,0-1.918-0.297-2.583-0.89s-0.997-1.378-0.997-2.354c0-0.978,0.332-1.764,0.997-2.355
+ s1.526-0.889,2.583-0.889c1.025,0,1.883,0.305,2.572,0.912c0.689,0.608,1.033,1.387,1.033,2.332c0,0.992-0.336,1.781-1.009,2.366
+ C150.271,257.342,149.405,257.635,148.348,257.635z"/>
+ <path fill="#808080" d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316c0.857,0.876,1.286,2.284,1.286,4.223
+ c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479h-2.584L112.728,302.891L112.728,302.891z
+ M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06
+ c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"/>
+ <rect x="135.898" y="301.786" opacity="0.65" fill="#808080" enable-background="new " width="2.56" height="19.022"/>
+ <path opacity="0.4" fill="#808080" enable-background="new " d="M159.537,318.788c-0.865,1.476-2.211,2.212-4.038,2.212
+ c-1.273,0-2.265-0.359-2.974-1.074c-0.709-0.72-1.063-1.722-1.063-3.012c0-1.33,0.365-2.322,1.094-2.975
+ c0.729-0.653,1.602-1.063,2.62-1.226c1.017-0.166,2.255-0.247,3.713-0.247v-1.646c0-1.625-0.869-2.438-2.607-2.438
+ c-1.001,0-2.223,0.214-3.665,0.638v-1.791c1.45-0.399,2.828-0.601,4.134-0.601c1.538,0,2.706,0.369,3.503,1.112
+ c0.797,0.738,1.195,1.83,1.195,3.273v9.793h-1.394L159.537,318.788z M158.888,313.994h-1.43c-1.146,0-2.005,0.242-2.578,0.727
+ c-0.573,0.485-0.859,1.209-0.859,2.17c0,0.785,0.174,1.371,0.523,1.762c0.348,0.387,0.871,0.582,1.568,0.582
+ c0.881,0,1.564-0.28,2.049-0.842c0.485-0.562,0.727-1.322,0.727-2.283V313.994z"/>
+ <path opacity="0.2" fill="#808080" enable-background="new " d="M181.83,320.566c-1.074,0.289-2.083,0.434-3.028,0.434
+ c-1.09,0-1.887-0.256-2.392-0.764c-0.505-0.51-0.757-1.319-0.757-2.434v-9.302h-1.838v-0.961l3.737-3.81h0.661v3.101h3.4v1.67
+ h-3.4v8.882c0,0.76,0.124,1.262,0.372,1.508c0.248,0.244,0.625,0.365,1.13,0.365c0.521,0,1.227-0.115,2.115-0.349V320.566
+ L181.83,320.566z"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_103_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_103_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g opacity="0.65">
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g opacity="0.2">
+ <polygon fill="#99FF66" points="147.897,58.767 176.792,42.482 210.77,55.167 182.688,73.26 "/>
+ <polygon fill="#66CC33" points="147.897,58.767 148.881,99.045 182.277,114.76 182.688,73.26 "/>
+ <polygon fill="#669900" points="182.688,73.26 182.277,114.76 209.783,94.787 210.77,55.167 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="214.502,55.302 181.922,73.147 219.082,90.665 249.533,70.036 "/>
+ <polygon fill="#FF9900" points="181.922,73.147 185.846,114.406 220.721,132.576 219.082,90.665 "/>
+
+ <linearGradient id="XMLID_104_" gradientUnits="userSpaceOnUse" x1="63.3457" y1="484.7695" x2="98.2207" y2="484.7695" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_104_)" points="185.846,114.406 220.721,132.576 219.082,90.665 "/>
+ <polygon fill="#F27C0E" points="249.533,70.036 219.082,90.665 220.721,132.576 249.533,111.289 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim19.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,309 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:29:06Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:01:53Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x31_9">
+ <path d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279c2.772,0.754,5.231,1.131,7.378,1.131
+ c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738c-0.945-0.904-2.7-2.086-5.263-3.545
+ c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442c0-3.237,1.085-5.668,3.257-7.295
+ c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183c-2.259-0.514-4.358-0.771-6.297-0.771
+ c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462c0,1.426,0.46,2.567,1.382,3.425
+ c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975c1.041,1.603,1.562,3.404,1.562,5.408
+ c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309c0,3.012,0.577,5.271,1.73,6.776
+ s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z M105.184,273.04h8.892
+ c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path opacity="0.65" enable-background="new " d="M125.805,289.238v-28.096h3.797l1.273,4.662
+ c0.785-1.634,1.867-2.863,3.245-3.689c1.378-0.824,3.052-1.236,5.023-1.236c0.513,0,0.889,0.016,1.129,0.049v5.383
+ c-0.897-0.063-1.554-0.097-1.971-0.097c-2.163,0-3.701,0.478-4.614,1.431s-1.37,2.527-1.37,4.724v16.87H125.805L125.805,289.238z
+ "/>
+ <path opacity="0.4" enable-background="new " d="M145.104,289.238v-24.273h-3.101v-3.82h9.589v28.094H145.104L145.104,289.238
+ z M148.348,257.635c-1.057,0-1.918-0.297-2.583-0.89s-0.997-1.378-0.997-2.354c0-0.978,0.332-1.764,0.997-2.355
+ s1.526-0.889,2.583-0.889c1.025,0,1.883,0.305,2.572,0.912c0.689,0.608,1.033,1.387,1.033,2.332c0,0.992-0.336,1.781-1.009,2.366
+ C150.271,257.342,149.405,257.635,148.348,257.635z"/>
+ <path opacity="0.2" enable-background="new " d="M178.197,288.396c-2.692,0.816-5.488,1.227-8.388,1.227
+ c-4.198,0-7.346-1.21-9.445-3.629c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.029-7.742,3.088-10.395
+ c2.059-2.65,4.931-3.979,8.616-3.979c3.396,0,5.98,1.127,7.75,3.377c1.771,2.252,2.656,6.414,2.656,12.486h-15.31
+ c0,3.012,0.577,5.271,1.73,6.776c1.153,1.506,2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227v3.992H178.197z
+ M164.018,273.04h8.893c0-3.302-0.353-5.576-1.058-6.826c-0.705-1.249-1.73-1.874-3.076-1.874c-1.506,0-2.652,0.674-3.437,2.02
+ C164.555,267.705,164.114,269.932,164.018,273.04z"/>
+ <path fill="#808080" d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316c0.857,0.876,1.286,2.284,1.286,4.223
+ c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479h-2.584L112.728,302.891L112.728,302.891z
+ M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06
+ c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"/>
+ <rect x="135.898" y="301.786" fill="#808080" width="2.56" height="19.022"/>
+ <path opacity="0.65" fill="#808080" enable-background="new " d="M159.537,318.788c-0.865,1.476-2.211,2.212-4.038,2.212
+ c-1.273,0-2.265-0.359-2.974-1.074c-0.709-0.72-1.063-1.722-1.063-3.012c0-1.33,0.365-2.322,1.094-2.975
+ c0.729-0.653,1.602-1.063,2.62-1.226c1.017-0.166,2.255-0.247,3.713-0.247v-1.646c0-1.625-0.869-2.438-2.607-2.438
+ c-1.001,0-2.223,0.214-3.665,0.638v-1.791c1.45-0.399,2.828-0.601,4.134-0.601c1.538,0,2.706,0.369,3.503,1.112
+ c0.797,0.738,1.195,1.83,1.195,3.273v9.793h-1.394L159.537,318.788z M158.888,313.994h-1.43c-1.146,0-2.005,0.242-2.578,0.727
+ c-0.573,0.485-0.859,1.209-0.859,2.17c0,0.785,0.174,1.371,0.523,1.762c0.348,0.387,0.871,0.582,1.568,0.582
+ c0.881,0,1.564-0.28,2.049-0.842c0.485-0.562,0.727-1.322,0.727-2.283V313.994z"/>
+ <path opacity="0.4" fill="#808080" enable-background="new " d="M181.83,320.566c-1.074,0.289-2.083,0.434-3.028,0.434
+ c-1.09,0-1.887-0.256-2.392-0.764c-0.505-0.51-0.757-1.319-0.757-2.434v-9.302h-1.838v-0.961l3.737-3.81h0.661v3.101h3.4v1.67
+ h-3.4v8.882c0,0.76,0.124,1.262,0.372,1.508c0.248,0.244,0.625,0.365,1.13,0.365c0.521,0,1.227-0.115,2.115-0.349V320.566
+ L181.83,320.566z"/>
+ <path opacity="0.2" fill="#808080" enable-background="new " d="M198.402,301.594c0.81,0,1.595,0.096,2.354,0.287v1.742
+ c-0.753-0.24-1.382-0.359-1.887-0.359c-0.802,0-1.306,0.254-1.515,0.762c-0.209,0.511-0.313,1.445-0.313,2.808h2.561v1.67h-2.561
+ v12.306h-2.561v-12.306h-1.693v-1.67h1.693c0-2.123,0.324-3.526,0.975-4.211C196.107,301.936,197.089,301.594,198.402,301.594
+ L198.402,301.594z"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_99_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_99_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g opacity="0.4">
+ <polygon fill="#99FF66" points="147.897,58.767 176.792,42.482 210.77,55.167 182.688,73.26 "/>
+ <polygon fill="#66CC33" points="147.897,58.767 148.881,99.045 182.277,114.76 182.688,73.26 "/>
+ <polygon fill="#669900" points="182.688,73.26 182.277,114.76 209.783,94.787 210.77,55.167 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="198.502,67.302 165.922,85.147 203.082,102.665 233.533,82.036 "/>
+ <polygon fill="#FF9900" points="165.922,85.147 169.846,126.406 204.721,144.576 203.082,102.665 "/>
+
+ <linearGradient id="XMLID_100_" gradientUnits="userSpaceOnUse" x1="47.3462" y1="472.7695" x2="82.2207" y2="472.7695" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_100_)" points="169.846,126.406 204.721,144.576 203.082,102.665 "/>
+ <polygon fill="#F27C0E" points="233.533,82.036 203.082,102.665 204.721,144.576 233.533,123.289 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim20.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,333 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:29:28Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:01:48Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x32_0">
+ <path d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279c2.772,0.754,5.231,1.131,7.378,1.131
+ c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738c-0.945-0.904-2.7-2.086-5.263-3.545
+ c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442c0-3.237,1.085-5.668,3.257-7.295
+ c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183c-2.259-0.514-4.358-0.771-6.297-0.771
+ c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462c0,1.426,0.46,2.567,1.382,3.425
+ c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975c1.041,1.603,1.562,3.404,1.562,5.408
+ c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309c0,3.012,0.577,5.271,1.73,6.776
+ s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z M105.184,273.04h8.892
+ c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path d="M125.805,289.238v-28.096h3.797l1.273,4.662c0.785-1.634,1.867-2.863,3.245-3.689c1.378-0.824,3.052-1.236,5.023-1.236
+ c0.513,0,0.889,0.016,1.129,0.049v5.383c-0.897-0.063-1.554-0.097-1.971-0.097c-2.163,0-3.701,0.478-4.614,1.431
+ s-1.37,2.527-1.37,4.724v16.87H125.805L125.805,289.238z"/>
+ <path opacity="0.65" enable-background="new " d="M145.104,289.238v-24.273h-3.101v-3.82h9.589v28.094H145.104
+ L145.104,289.238z M148.348,257.635c-1.057,0-1.918-0.297-2.583-0.89s-0.997-1.378-0.997-2.354c0-0.978,0.332-1.764,0.997-2.355
+ s1.526-0.889,2.583-0.889c1.025,0,1.883,0.305,2.572,0.912c0.689,0.608,1.033,1.387,1.033,2.332c0,0.992-0.336,1.781-1.009,2.366
+ C150.271,257.342,149.405,257.635,148.348,257.635z"/>
+ <path opacity="0.4" enable-background="new " d="M178.197,288.396c-2.692,0.816-5.488,1.227-8.388,1.227
+ c-4.198,0-7.346-1.21-9.445-3.629c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.029-7.742,3.088-10.395
+ c2.059-2.65,4.931-3.979,8.616-3.979c3.396,0,5.98,1.127,7.75,3.377c1.771,2.252,2.656,6.414,2.656,12.486h-15.31
+ c0,3.012,0.577,5.271,1.73,6.776c1.153,1.506,2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227v3.992H178.197z
+ M164.018,273.04h8.893c0-3.302-0.353-5.576-1.058-6.826c-0.705-1.249-1.73-1.874-3.076-1.874c-1.506,0-2.652,0.674-3.437,2.02
+ C164.555,267.705,164.114,269.932,164.018,273.04z"/>
+ <path opacity="0.2" enable-background="new " d="M190.693,289.623c-2.402,0-4.989-0.329-7.762-0.984v-4.184
+ c2.739,0.834,4.998,1.25,6.776,1.25c1.649,0,2.894-0.324,3.726-0.975c0.834-0.647,1.25-1.621,1.25-2.92
+ c0-0.769-0.231-1.484-0.697-2.149c-0.465-0.665-1.777-1.542-3.94-2.632c-1.458-0.754-2.624-1.446-3.497-2.079
+ c-0.873-0.634-1.599-1.454-2.175-2.464c-0.577-1.01-0.865-2.268-0.865-3.772c0-2.5,0.921-4.454,2.765-5.864
+ c1.843-1.41,4.205-2.115,7.09-2.115c2.498,0,4.773,0.313,6.824,0.938v3.989c-2.002-0.688-3.916-1.033-5.744-1.033
+ c-1.488,0-2.604,0.305-3.34,0.913s-1.104,1.522-1.104,2.739c0,0.642,0.22,1.242,0.66,1.804s1.702,1.354,3.784,2.379
+ c2.916,1.427,4.768,2.82,5.553,4.183c0.785,1.361,1.178,2.867,1.178,4.519c0,2.788-0.896,4.896-2.691,6.319
+ C196.688,288.91,194.092,289.623,190.693,289.623z"/>
+ <path fill="#808080" d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316c0.857,0.876,1.286,2.284,1.286,4.223
+ c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479h-2.584L112.728,302.891L112.728,302.891z
+ M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06
+ c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"/>
+ <rect x="135.898" y="301.786" fill="#808080" width="2.56" height="19.022"/>
+ <path fill="#808080" d="M159.537,318.788c-0.865,1.476-2.211,2.212-4.038,2.212c-1.273,0-2.265-0.359-2.974-1.074
+ c-0.709-0.72-1.063-1.722-1.063-3.012c0-1.33,0.365-2.322,1.094-2.975c0.729-0.653,1.602-1.063,2.62-1.226
+ c1.017-0.166,2.255-0.247,3.713-0.247v-1.646c0-1.625-0.869-2.438-2.607-2.438c-1.001,0-2.223,0.214-3.665,0.638v-1.791
+ c1.45-0.399,2.828-0.601,4.134-0.601c1.538,0,2.706,0.369,3.503,1.112c0.797,0.738,1.195,1.83,1.195,3.273v9.793h-1.394
+ L159.537,318.788z M158.888,313.994h-1.43c-1.146,0-2.005,0.242-2.578,0.727c-0.573,0.485-0.859,1.209-0.859,2.17
+ c0,0.785,0.174,1.371,0.523,1.762c0.348,0.387,0.871,0.582,1.568,0.582c0.881,0,1.564-0.28,2.049-0.842
+ c0.485-0.562,0.727-1.322,0.727-2.283V313.994z"/>
+ <path opacity="0.65" fill="#808080" enable-background="new " d="M181.83,320.566c-1.074,0.289-2.083,0.434-3.028,0.434
+ c-1.09,0-1.887-0.256-2.392-0.764c-0.505-0.51-0.757-1.319-0.757-2.434v-9.302h-1.838v-0.961l3.737-3.81h0.661v3.101h3.4v1.67
+ h-3.4v8.882c0,0.76,0.124,1.262,0.372,1.508c0.248,0.244,0.625,0.365,1.13,0.365c0.521,0,1.227-0.115,2.115-0.349V320.566
+ L181.83,320.566z"/>
+ <path opacity="0.4" fill="#808080" enable-background="new " d="M198.402,301.594c0.81,0,1.595,0.096,2.354,0.287v1.742
+ c-0.753-0.24-1.382-0.359-1.887-0.359c-0.802,0-1.306,0.254-1.515,0.762c-0.209,0.511-0.313,1.445-0.313,2.808h2.561v1.67h-2.561
+ v12.306h-2.561v-12.306h-1.693v-1.67h1.693c0-2.123,0.324-3.526,0.975-4.211C196.107,301.936,197.089,301.594,198.402,301.594
+ L198.402,301.594z"/>
+ <path opacity="0.2" fill="#808080" enable-background="new " d="M216.611,321c-1.883,0-3.293-0.617-4.229-1.852
+ c-0.938-1.233-1.405-3.084-1.405-5.551c0-2.148,0.485-3.847,1.459-5.097c0.975-1.249,2.367-1.874,4.178-1.874
+ c1.826,0,3.222,0.616,4.187,1.852c0.966,1.232,1.449,2.955,1.449,5.166c0,2.275-0.451,4.069-1.353,5.385
+ C219.994,320.344,218.566,321,216.611,321z M216.611,319.354c0.986,0,1.729-0.445,2.229-1.34c0.501-0.893,0.752-2.39,0.752-4.488
+ c0-1.481-0.256-2.726-0.769-3.731c-0.513-1.004-1.25-1.507-2.212-1.507c-0.978,0-1.719,0.451-2.223,1.357
+ c-0.506,0.904-0.758,2.199-0.758,3.881c0,1.892,0.252,3.334,0.758,4.332C214.895,318.854,215.635,319.354,216.611,319.354z"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_95_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_95_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g opacity="0.65">
+ <polygon fill="#99FF66" points="147.897,58.767 176.792,42.482 210.77,55.167 182.688,73.26 "/>
+ <polygon fill="#66CC33" points="147.897,58.767 148.881,99.045 182.277,114.76 182.688,73.26 "/>
+ <polygon fill="#669900" points="182.688,73.26 182.277,114.76 209.783,94.787 210.77,55.167 "/>
+ </g>
+ <g opacity="0.2">
+ <polygon fill="#CC66FF" points="185.191,74.515 222.688,91.457 251.824,70.171 212.861,56.423 "/>
+ <polygon fill="#6F348E" points="222.927,91.133 221.895,133.763 249.195,111.758 251.742,70.171 "/>
+ <polygon fill="#9933CC" points="184.781,74.515 184.287,116.015 221.895,133.763 222.927,91.133 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="184.563,79.017 151.989,96.863 189.143,114.38 219.594,93.751 "/>
+ <polygon fill="#FF9900" points="151.989,96.863 155.913,138.121 190.781,156.291 189.143,114.38 "/>
+
+ <linearGradient id="XMLID_96_" gradientUnits="userSpaceOnUse" x1="33.4131" y1="461.0547" x2="68.2813" y2="461.0547" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_96_)" points="155.913,138.121 190.781,156.291 189.143,114.38 "/>
+ <polygon fill="#F27C0E" points="219.594,93.751 189.143,114.38 190.781,156.291 219.594,135.004 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim21.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,361 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:29:42Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:01:43Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x32_1">
+ <path d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279c2.772,0.754,5.231,1.131,7.378,1.131
+ c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738c-0.945-0.904-2.7-2.086-5.263-3.545
+ c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442c0-3.237,1.085-5.668,3.257-7.295
+ c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183c-2.259-0.514-4.358-0.771-6.297-0.771
+ c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462c0,1.426,0.46,2.567,1.382,3.425
+ c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975c1.041,1.603,1.562,3.404,1.562,5.408
+ c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309c0,3.012,0.577,5.271,1.73,6.776
+ s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z M105.184,273.04h8.892
+ c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path d="M125.805,289.238v-28.096h3.797l1.273,4.662c0.785-1.634,1.867-2.863,3.245-3.689c1.378-0.824,3.052-1.236,5.023-1.236
+ c0.513,0,0.889,0.016,1.129,0.049v5.383c-0.897-0.063-1.554-0.097-1.971-0.097c-2.163,0-3.701,0.478-4.614,1.431
+ s-1.37,2.527-1.37,4.724v16.87H125.805L125.805,289.238z"/>
+ <path d="M145.104,289.238v-24.273h-3.101v-3.82h9.589v28.094H145.104L145.104,289.238z M148.348,257.635
+ c-1.057,0-1.918-0.297-2.583-0.89s-0.997-1.378-0.997-2.354c0-0.978,0.332-1.764,0.997-2.355s1.526-0.889,2.583-0.889
+ c1.025,0,1.883,0.305,2.572,0.912c0.689,0.608,1.033,1.387,1.033,2.332c0,0.992-0.336,1.781-1.009,2.366
+ C150.271,257.342,149.405,257.635,148.348,257.635z"/>
+ <path opacity="0.65" enable-background="new " d="M178.197,288.396c-2.692,0.816-5.488,1.227-8.388,1.227
+ c-4.198,0-7.346-1.21-9.445-3.629c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.029-7.742,3.088-10.395
+ c2.059-2.65,4.931-3.979,8.616-3.979c3.396,0,5.98,1.127,7.75,3.377c1.771,2.252,2.656,6.414,2.656,12.486h-15.31
+ c0,3.012,0.577,5.271,1.73,6.776c1.153,1.506,2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227v3.992H178.197z
+ M164.018,273.04h8.893c0-3.302-0.353-5.576-1.058-6.826c-0.705-1.249-1.73-1.874-3.076-1.874c-1.506,0-2.652,0.674-3.437,2.02
+ C164.555,267.705,164.114,269.932,164.018,273.04z"/>
+ <path opacity="0.4" enable-background="new " d="M190.693,289.623c-2.402,0-4.989-0.329-7.762-0.984v-4.184
+ c2.739,0.834,4.998,1.25,6.776,1.25c1.649,0,2.894-0.324,3.726-0.975c0.834-0.647,1.25-1.621,1.25-2.92
+ c0-0.769-0.231-1.484-0.697-2.149c-0.465-0.665-1.777-1.542-3.94-2.632c-1.458-0.754-2.624-1.446-3.497-2.079
+ c-0.873-0.634-1.599-1.454-2.175-2.464c-0.577-1.01-0.865-2.268-0.865-3.772c0-2.5,0.921-4.454,2.765-5.864
+ c1.843-1.41,4.205-2.115,7.09-2.115c2.498,0,4.773,0.313,6.824,0.938v3.989c-2.002-0.688-3.916-1.033-5.744-1.033
+ c-1.488,0-2.604,0.305-3.34,0.913s-1.104,1.522-1.104,2.739c0,0.642,0.22,1.242,0.66,1.804s1.702,1.354,3.784,2.379
+ c2.916,1.427,4.768,2.82,5.553,4.183c0.785,1.361,1.178,2.867,1.178,4.519c0,2.788-0.896,4.896-2.691,6.319
+ C196.688,288.91,194.092,289.623,190.693,289.623z"/>
+ <path fill="#808080" d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316c0.857,0.876,1.286,2.284,1.286,4.223
+ c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479h-2.584L112.728,302.891L112.728,302.891z
+ M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06
+ c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"/>
+ <rect x="135.898" y="301.786" fill="#808080" width="2.56" height="19.022"/>
+ <path fill="#808080" d="M159.537,318.788c-0.865,1.476-2.211,2.212-4.038,2.212c-1.273,0-2.265-0.359-2.974-1.074
+ c-0.709-0.72-1.063-1.722-1.063-3.012c0-1.33,0.365-2.322,1.094-2.975c0.729-0.653,1.602-1.063,2.62-1.226
+ c1.017-0.166,2.255-0.247,3.713-0.247v-1.646c0-1.625-0.869-2.438-2.607-2.438c-1.001,0-2.223,0.214-3.665,0.638v-1.791
+ c1.45-0.399,2.828-0.601,4.134-0.601c1.538,0,2.706,0.369,3.503,1.112c0.797,0.738,1.195,1.83,1.195,3.273v9.793h-1.394
+ L159.537,318.788z M158.888,313.994h-1.43c-1.146,0-2.005,0.242-2.578,0.727c-0.573,0.485-0.859,1.209-0.859,2.17
+ c0,0.785,0.174,1.371,0.523,1.762c0.348,0.387,0.871,0.582,1.568,0.582c0.881,0,1.564-0.28,2.049-0.842
+ c0.485-0.562,0.727-1.322,0.727-2.283V313.994z"/>
+ <path fill="#808080" d="M181.83,320.566c-1.074,0.289-2.083,0.434-3.028,0.434c-1.09,0-1.887-0.256-2.392-0.764
+ c-0.505-0.51-0.757-1.319-0.757-2.434v-9.302h-1.838v-0.961l3.737-3.81h0.661v3.101h3.4v1.67h-3.4v8.882
+ c0,0.76,0.124,1.262,0.372,1.508c0.248,0.244,0.625,0.365,1.13,0.365c0.521,0,1.227-0.115,2.115-0.349V320.566L181.83,320.566z"
+ />
+ <path opacity="0.65" fill="#808080" enable-background="new " d="M198.402,301.594c0.81,0,1.595,0.096,2.354,0.287v1.742
+ c-0.753-0.24-1.382-0.359-1.887-0.359c-0.802,0-1.306,0.254-1.515,0.762c-0.209,0.511-0.313,1.445-0.313,2.808h2.561v1.67h-2.561
+ v12.306h-2.561v-12.306h-1.693v-1.67h1.693c0-2.123,0.324-3.526,0.975-4.211C196.107,301.936,197.089,301.594,198.402,301.594
+ L198.402,301.594z"/>
+ <path opacity="0.4" fill="#808080" enable-background="new " d="M216.611,321c-1.883,0-3.293-0.617-4.229-1.852
+ c-0.938-1.233-1.405-3.084-1.405-5.551c0-2.148,0.485-3.847,1.459-5.097c0.975-1.249,2.367-1.874,4.178-1.874
+ c1.826,0,3.222,0.616,4.187,1.852c0.966,1.232,1.449,2.955,1.449,5.166c0,2.275-0.451,4.069-1.353,5.385
+ C219.994,320.344,218.566,321,216.611,321z M216.611,319.354c0.986,0,1.729-0.445,2.229-1.34c0.501-0.893,0.752-2.39,0.752-4.488
+ c0-1.481-0.256-2.726-0.769-3.731c-0.513-1.004-1.25-1.507-2.212-1.507c-0.978,0-1.719,0.451-2.223,1.357
+ c-0.506,0.904-0.758,2.199-0.758,3.881c0,1.892,0.252,3.334,0.758,4.332C214.895,318.854,215.635,319.354,216.611,319.354z"/>
+ <path opacity="0.2" fill="#808080" enable-background="new " d="M236.909,306.832l0.589,2.331
+ c0.777-1.644,2.131-2.464,4.063-2.464c0.256,0,0.444,0.013,0.564,0.035v2.332c-0.201-0.016-0.501-0.023-0.9-0.023
+ c-1.099,0-1.904,0.262-2.416,0.788c-0.514,0.522-0.77,1.343-0.77,2.456v8.521h-2.561v-13.977H236.909z"/>
+ <path opacity="0.2" fill="#0F3AAC" enable-background="new " d="M228.208,242.369c2.563,0,4.944,0.191,7.146,0.576v5.576
+ c-1.942-0.428-4.047-0.642-6.313-0.642c-3.354,0-5.977,1.181-7.867,3.541c-1.89,2.36-3.049,5.901-3.477,10.623
+ c2.072-2.009,4.935-3.013,8.588-3.013c4.102,0,7.221,1.303,9.357,3.908c2.135,2.606,3.203,6.334,3.203,11.185
+ c0,5.362-1.309,9.544-3.926,12.546c-2.615,3.001-6.393,4.502-11.327,4.502c-4.934,0-8.657-1.752-11.168-5.255
+ c-2.51-3.504-3.765-9.313-3.765-17.433c0-7.989,1.677-14.34,5.029-19.051C217.046,244.725,221.885,242.369,228.208,242.369
+ L228.208,242.369z M223.594,285.854c2.157,0,3.771-0.828,4.84-2.482c1.066-1.655,1.602-4.674,1.602-9.053
+ c0-3.291-0.502-5.764-1.506-7.418c-1.004-1.656-2.51-2.483-4.52-2.483c-2.093,0-3.689,0.79-4.789,2.371
+ c-1.102,1.581-1.65,3.76-1.65,6.536c0,3.332,0.225,5.849,0.673,7.547c0.448,1.699,1.116,2.953,2.003,3.766
+ S222.248,285.854,223.594,285.854z"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_91_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_91_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g>
+ <polygon fill="#99FF66" points="147.897,58.767 176.792,42.482 210.77,55.167 182.688,73.26 "/>
+ <polygon fill="#66CC33" points="147.897,58.767 148.881,99.045 182.277,114.76 182.688,73.26 "/>
+ <polygon fill="#669900" points="182.688,73.26 182.277,114.76 209.783,94.787 210.77,55.167 "/>
+ </g>
+ <g opacity="0.4">
+ <polygon fill="#CC66FF" points="185.191,74.515 222.688,91.457 251.824,70.171 212.861,56.423 "/>
+ <polygon fill="#6F348E" points="222.927,91.133 221.895,133.763 249.195,111.758 251.742,70.171 "/>
+ <polygon fill="#9933CC" points="184.781,74.515 184.287,116.015 221.895,133.763 222.927,91.133 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="167.563,71.017 134.989,88.863 172.143,106.38 202.594,85.751 "/>
+ <polygon fill="#FF9900" points="134.989,88.863 138.913,130.121 173.781,148.291 172.143,106.38 "/>
+
+ <linearGradient id="XMLID_92_" gradientUnits="userSpaceOnUse" x1="16.4131" y1="469.0547" x2="51.2813" y2="469.0547" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_92_)" points="138.913,130.121 173.781,148.291 172.143,106.38 "/>
+ <polygon fill="#F27C0E" points="202.594,85.751 172.143,106.38 173.781,148.291 202.594,127.004 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim22.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,397 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:29:58Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:01:36Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x32_2">
+ <path d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279c2.772,0.754,5.231,1.131,7.378,1.131
+ c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738c-0.945-0.904-2.7-2.086-5.263-3.545
+ c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442c0-3.237,1.085-5.668,3.257-7.295
+ c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183c-2.259-0.514-4.358-0.771-6.297-0.771
+ c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462c0,1.426,0.46,2.567,1.382,3.425
+ c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975c1.041,1.603,1.562,3.404,1.562,5.408
+ c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309c0,3.012,0.577,5.271,1.73,6.776
+ s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z M105.184,273.04h8.892
+ c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path d="M125.805,289.238v-28.096h3.797l1.273,4.662c0.785-1.634,1.867-2.863,3.245-3.689c1.378-0.824,3.052-1.236,5.023-1.236
+ c0.513,0,0.889,0.016,1.129,0.049v5.383c-0.897-0.063-1.554-0.097-1.971-0.097c-2.163,0-3.701,0.478-4.614,1.431
+ s-1.37,2.527-1.37,4.724v16.87H125.805L125.805,289.238z"/>
+ <path d="M145.104,289.238v-24.273h-3.101v-3.82h9.589v28.094H145.104L145.104,289.238z M148.348,257.635
+ c-1.057,0-1.918-0.297-2.583-0.89s-0.997-1.378-0.997-2.354c0-0.978,0.332-1.764,0.997-2.355s1.526-0.889,2.583-0.889
+ c1.025,0,1.883,0.305,2.572,0.912c0.689,0.608,1.033,1.387,1.033,2.332c0,0.992-0.336,1.781-1.009,2.366
+ C150.271,257.342,149.405,257.635,148.348,257.635z"/>
+ <path d="M178.197,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.029-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.771,2.252,2.656,6.414,2.656,12.486h-15.31c0,3.012,0.577,5.271,1.73,6.776
+ c1.153,1.506,2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227v3.992H178.197z M164.018,273.04h8.893
+ c0-3.302-0.353-5.576-1.058-6.826c-0.705-1.249-1.73-1.874-3.076-1.874c-1.506,0-2.652,0.674-3.437,2.02
+ C164.555,267.705,164.114,269.932,164.018,273.04z"/>
+ <path opacity="0.65" enable-background="new " d="M190.693,289.623c-2.402,0-4.989-0.329-7.762-0.984v-4.184
+ c2.739,0.834,4.998,1.25,6.776,1.25c1.649,0,2.894-0.324,3.726-0.975c0.834-0.647,1.25-1.621,1.25-2.92
+ c0-0.769-0.231-1.484-0.697-2.149c-0.465-0.665-1.777-1.542-3.94-2.632c-1.458-0.754-2.624-1.446-3.497-2.079
+ c-0.873-0.634-1.599-1.454-2.175-2.464c-0.577-1.01-0.865-2.268-0.865-3.772c0-2.5,0.921-4.454,2.765-5.864
+ c1.843-1.41,4.205-2.115,7.09-2.115c2.498,0,4.773,0.313,6.824,0.938v3.989c-2.002-0.688-3.916-1.033-5.744-1.033
+ c-1.488,0-2.604,0.305-3.34,0.913s-1.104,1.522-1.104,2.739c0,0.642,0.22,1.242,0.66,1.804s1.702,1.354,3.784,2.379
+ c2.916,1.427,4.768,2.82,5.553,4.183c0.785,1.361,1.178,2.867,1.178,4.519c0,2.788-0.896,4.896-2.691,6.319
+ C196.688,288.91,194.092,289.623,190.693,289.623z"/>
+ <path fill="#808080" d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316c0.857,0.876,1.286,2.284,1.286,4.223
+ c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479h-2.584L112.728,302.891L112.728,302.891z
+ M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06
+ c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"/>
+ <rect x="135.898" y="301.786" fill="#808080" width="2.56" height="19.022"/>
+ <path fill="#808080" d="M159.537,318.788c-0.865,1.476-2.211,2.212-4.038,2.212c-1.273,0-2.265-0.359-2.974-1.074
+ c-0.709-0.72-1.063-1.722-1.063-3.012c0-1.33,0.365-2.322,1.094-2.975c0.729-0.653,1.602-1.063,2.62-1.226
+ c1.017-0.166,2.255-0.247,3.713-0.247v-1.646c0-1.625-0.869-2.438-2.607-2.438c-1.001,0-2.223,0.214-3.665,0.638v-1.791
+ c1.45-0.399,2.828-0.601,4.134-0.601c1.538,0,2.706,0.369,3.503,1.112c0.797,0.738,1.195,1.83,1.195,3.273v9.793h-1.394
+ L159.537,318.788z M158.888,313.994h-1.43c-1.146,0-2.005,0.242-2.578,0.727c-0.573,0.485-0.859,1.209-0.859,2.17
+ c0,0.785,0.174,1.371,0.523,1.762c0.348,0.387,0.871,0.582,1.568,0.582c0.881,0,1.564-0.28,2.049-0.842
+ c0.485-0.562,0.727-1.322,0.727-2.283V313.994z"/>
+ <path fill="#808080" d="M181.83,320.566c-1.074,0.289-2.083,0.434-3.028,0.434c-1.09,0-1.887-0.256-2.392-0.764
+ c-0.505-0.51-0.757-1.319-0.757-2.434v-9.302h-1.838v-0.961l3.737-3.81h0.661v3.101h3.4v1.67h-3.4v8.882
+ c0,0.76,0.124,1.262,0.372,1.508c0.248,0.244,0.625,0.365,1.13,0.365c0.521,0,1.227-0.115,2.115-0.349V320.566L181.83,320.566z"
+ />
+ <path fill="#808080" d="M198.402,301.594c0.81,0,1.595,0.096,2.354,0.287v1.742c-0.753-0.24-1.382-0.359-1.887-0.359
+ c-0.802,0-1.306,0.254-1.515,0.762c-0.209,0.511-0.313,1.445-0.313,2.808h2.561v1.67h-2.561v12.306h-2.561v-12.306h-1.693v-1.67
+ h1.693c0-2.123,0.324-3.526,0.975-4.211C196.107,301.936,197.089,301.594,198.402,301.594L198.402,301.594z"/>
+ <path opacity="0.65" fill="#808080" enable-background="new " d="M216.611,321c-1.883,0-3.293-0.617-4.229-1.852
+ c-0.938-1.233-1.405-3.084-1.405-5.551c0-2.148,0.485-3.847,1.459-5.097c0.975-1.249,2.367-1.874,4.178-1.874
+ c1.826,0,3.222,0.616,4.187,1.852c0.966,1.232,1.449,2.955,1.449,5.166c0,2.275-0.451,4.069-1.353,5.385
+ C219.994,320.344,218.566,321,216.611,321z M216.611,319.354c0.986,0,1.729-0.445,2.229-1.34c0.501-0.893,0.752-2.39,0.752-4.488
+ c0-1.481-0.256-2.726-0.769-3.731c-0.513-1.004-1.25-1.507-2.212-1.507c-0.978,0-1.719,0.451-2.223,1.357
+ c-0.506,0.904-0.758,2.199-0.758,3.881c0,1.892,0.252,3.334,0.758,4.332C214.895,318.854,215.635,319.354,216.611,319.354z"/>
+ <path opacity="0.4" fill="#808080" enable-background="new " d="M236.909,306.832l0.589,2.331
+ c0.777-1.644,2.131-2.464,4.063-2.464c0.256,0,0.444,0.013,0.564,0.035v2.332c-0.201-0.016-0.501-0.023-0.9-0.023
+ c-1.099,0-1.904,0.262-2.416,0.788c-0.514,0.522-0.77,1.343-0.77,2.456v8.521h-2.561v-13.977H236.909z"/>
+ <path opacity="0.2" fill="#808080" enable-background="new " d="M272.073,320.809h-2.56v-9.627
+ c0-0.929-0.177-1.629-0.523-2.096c-0.35-0.471-0.871-0.704-1.568-0.704c-0.896,0-1.588,0.353-2.072,1.058
+ s-0.728,1.623-0.728,2.752v8.617h-2.56v-9.627c0-0.929-0.18-1.629-0.535-2.096c-0.356-0.471-0.891-0.704-1.604-0.704
+ c-0.881,0-1.563,0.356-2.043,1.069s-0.721,1.627-0.721,2.74v8.615h-2.56v-13.976h1.43l0.517,2.065
+ c0.856-1.514,2.163-2.271,3.918-2.271c0.929,0,1.699,0.177,2.313,0.528c0.611,0.353,1.063,0.881,1.353,1.586
+ c0.793-1.409,2.063-2.114,3.81-2.114c1.379,0,2.412,0.372,3.101,1.117s1.034,1.858,1.034,3.341L272.073,320.809L272.073,320.809z
+ "/>
+ <path opacity="0.4" fill="#0F3AAC" enable-background="new " d="M228.208,242.369c2.563,0,4.944,0.191,7.146,0.576v5.576
+ c-1.942-0.428-4.047-0.642-6.313-0.642c-3.354,0-5.977,1.181-7.867,3.541c-1.89,2.36-3.049,5.901-3.477,10.623
+ c2.072-2.009,4.935-3.013,8.588-3.013c4.102,0,7.221,1.303,9.357,3.908c2.135,2.606,3.203,6.334,3.203,11.185
+ c0,5.362-1.309,9.544-3.926,12.546c-2.615,3.001-6.393,4.502-11.327,4.502c-4.934,0-8.657-1.752-11.168-5.255
+ c-2.51-3.504-3.765-9.313-3.765-17.433c0-7.989,1.677-14.34,5.029-19.051C217.046,244.725,221.885,242.369,228.208,242.369
+ L228.208,242.369z M223.594,285.854c2.157,0,3.771-0.828,4.84-2.482c1.066-1.655,1.602-4.674,1.602-9.053
+ c0-3.291-0.502-5.764-1.506-7.418c-1.004-1.656-2.51-2.483-4.52-2.483c-2.093,0-3.689,0.79-4.789,2.371
+ c-1.102,1.581-1.65,3.76-1.65,6.536c0,3.332,0.225,5.849,0.673,7.547c0.448,1.699,1.116,2.953,2.003,3.766
+ S222.248,285.854,223.594,285.854z"/>
+ <path opacity="0.2" fill="#0F3AAC" enable-background="new " d="M260.316,242.369c4.935,0,8.662,1.752,11.184,5.255
+ c2.521,3.504,3.781,9.688,3.781,18.554c0,9.721-1.276,16.316-3.829,19.789c-2.554,3.471-6.318,5.206-11.296,5.206
+ c-4.358,0-7.647-1.153-9.87-3.461c-2.222-2.308-3.669-5.224-4.343-8.748c-0.672-3.524-1.008-7.786-1.008-12.786
+ c0-8.693,1.291-14.836,3.877-18.425C251.396,244.164,255.232,242.369,260.316,242.369z M260.092,285.854
+ c2.18,0,3.776-1.223,4.791-3.668c1.016-2.447,1.521-7.781,1.521-16.008c0-7.904-0.522-12.962-1.569-15.173
+ s-2.628-3.315-4.743-3.315c-1.922,0-3.338,0.77-4.244,2.308c-0.908,1.538-1.476,3.546-1.699,6.024
+ c-0.225,2.478-0.336,5.863-0.336,10.156c0,8.461,0.502,13.854,1.506,16.184C256.32,284.689,257.913,285.854,260.092,285.854z"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_87_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_87_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g>
+ <polygon fill="#99FF66" points="147.897,58.767 176.792,42.482 210.77,55.167 182.688,73.26 "/>
+ <polygon fill="#66CC33" points="147.897,58.767 148.881,99.045 182.277,114.76 182.688,73.26 "/>
+ <polygon fill="#669900" points="182.688,73.26 182.277,114.76 209.783,94.787 210.77,55.167 "/>
+ </g>
+ <g opacity="0.65">
+ <polygon fill="#CC66FF" points="185.191,74.515 222.688,91.457 251.824,70.171 212.861,56.423 "/>
+ <polygon fill="#6F348E" points="222.927,91.133 221.895,133.763 249.195,111.758 251.742,70.171 "/>
+ <polygon fill="#9933CC" points="184.781,74.515 184.287,116.015 221.895,133.763 222.927,91.133 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="143.801,59.9 111.221,77.746 148.382,95.263 178.832,74.634 "/>
+ <polygon fill="#FF9900" points="111.221,77.746 115.145,119.004 150.02,137.174 148.382,95.263 "/>
+
+ <linearGradient id="XMLID_88_" gradientUnits="userSpaceOnUse" x1="-7.355" y1="480.1719" x2="27.52" y2="480.1719" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_88_)" points="115.145,119.004 150.02,137.174 148.382,95.263 "/>
+ <polygon fill="#F27C0E" points="178.832,74.634 148.382,95.263 150.02,137.174 178.832,115.888 "/>
+ </g>
+ <g opacity="0.2">
+ <polygon fill="#0099FF" points="152.426,97.736 154.061,139.652 192.048,159.625 192.048,116.076 "/>
+ <polygon fill="#00CCFF" points="152.426,97.736 183.527,77.107 221.434,93.402 192.048,116.076 "/>
+ <polygon fill="#0066FF" points="192.048,116.076 192.048,159.625 220.443,136.396 221.434,93.402 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim23.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,411 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:30:16Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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==
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:01:29Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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
irsVdirsVdirsVdir//Z</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x32_3">
+ <path d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279c2.772,0.754,5.231,1.131,7.378,1.131
+ c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738c-0.945-0.904-2.7-2.086-5.263-3.545
+ c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442c0-3.237,1.085-5.668,3.257-7.295
+ c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183c-2.259-0.514-4.358-0.771-6.297-0.771
+ c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462c0,1.426,0.46,2.567,1.382,3.425
+ c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975c1.041,1.603,1.562,3.404,1.562,5.408
+ c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309c0,3.012,0.577,5.271,1.73,6.776
+ s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z M105.184,273.04h8.892
+ c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path d="M125.805,289.238v-28.096h3.797l1.273,4.662c0.785-1.634,1.867-2.863,3.245-3.689c1.378-0.824,3.052-1.236,5.023-1.236
+ c0.513,0,0.889,0.016,1.129,0.049v5.383c-0.897-0.063-1.554-0.097-1.971-0.097c-2.163,0-3.701,0.478-4.614,1.431
+ s-1.37,2.527-1.37,4.724v16.87H125.805L125.805,289.238z"/>
+ <path d="M145.104,289.238v-24.273h-3.101v-3.82h9.589v28.094H145.104L145.104,289.238z M148.348,257.635
+ c-1.057,0-1.918-0.297-2.583-0.89s-0.997-1.378-0.997-2.354c0-0.978,0.332-1.764,0.997-2.355s1.526-0.889,2.583-0.889
+ c1.025,0,1.883,0.305,2.572,0.912c0.689,0.608,1.033,1.387,1.033,2.332c0,0.992-0.336,1.781-1.009,2.366
+ C150.271,257.342,149.405,257.635,148.348,257.635z"/>
+ <path d="M178.197,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.029-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.771,2.252,2.656,6.414,2.656,12.486h-15.31c0,3.012,0.577,5.271,1.73,6.776
+ c1.153,1.506,2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227v3.992H178.197z M164.018,273.04h8.893
+ c0-3.302-0.353-5.576-1.058-6.826c-0.705-1.249-1.73-1.874-3.076-1.874c-1.506,0-2.652,0.674-3.437,2.02
+ C164.555,267.705,164.114,269.932,164.018,273.04z"/>
+ <path d="M190.693,289.623c-2.402,0-4.989-0.329-7.762-0.984v-4.184c2.739,0.834,4.998,1.25,6.776,1.25
+ c1.649,0,2.894-0.324,3.726-0.975c0.834-0.647,1.25-1.621,1.25-2.92c0-0.769-0.231-1.484-0.697-2.149
+ c-0.465-0.665-1.777-1.542-3.94-2.632c-1.458-0.754-2.624-1.446-3.497-2.079c-0.873-0.634-1.599-1.454-2.175-2.464
+ c-0.577-1.01-0.865-2.268-0.865-3.772c0-2.5,0.921-4.454,2.765-5.864c1.843-1.41,4.205-2.115,7.09-2.115
+ c2.498,0,4.773,0.313,6.824,0.938v3.989c-2.002-0.688-3.916-1.033-5.744-1.033c-1.488,0-2.604,0.305-3.34,0.913
+ s-1.104,1.522-1.104,2.739c0,0.642,0.22,1.242,0.66,1.804s1.702,1.354,3.784,2.379c2.916,1.427,4.768,2.82,5.553,4.183
+ c0.785,1.361,1.178,2.867,1.178,4.519c0,2.788-0.896,4.896-2.691,6.319C196.688,288.91,194.092,289.623,190.693,289.623z"/>
+ <path fill="#808080" d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316c0.857,0.876,1.286,2.284,1.286,4.223
+ c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479h-2.584L112.728,302.891L112.728,302.891z
+ M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06
+ c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"/>
+ <rect x="135.898" y="301.786" fill="#808080" width="2.56" height="19.022"/>
+ <path fill="#808080" d="M159.537,318.788c-0.865,1.476-2.211,2.212-4.038,2.212c-1.273,0-2.265-0.359-2.974-1.074
+ c-0.709-0.72-1.063-1.722-1.063-3.012c0-1.33,0.365-2.322,1.094-2.975c0.729-0.653,1.602-1.063,2.62-1.226
+ c1.017-0.166,2.255-0.247,3.713-0.247v-1.646c0-1.625-0.869-2.438-2.607-2.438c-1.001,0-2.223,0.214-3.665,0.638v-1.791
+ c1.45-0.399,2.828-0.601,4.134-0.601c1.538,0,2.706,0.369,3.503,1.112c0.797,0.738,1.195,1.83,1.195,3.273v9.793h-1.394
+ L159.537,318.788z M158.888,313.994h-1.43c-1.146,0-2.005,0.242-2.578,0.727c-0.573,0.485-0.859,1.209-0.859,2.17
+ c0,0.785,0.174,1.371,0.523,1.762c0.348,0.387,0.871,0.582,1.568,0.582c0.881,0,1.564-0.28,2.049-0.842
+ c0.485-0.562,0.727-1.322,0.727-2.283V313.994z"/>
+ <path fill="#808080" d="M181.83,320.566c-1.074,0.289-2.083,0.434-3.028,0.434c-1.09,0-1.887-0.256-2.392-0.764
+ c-0.505-0.51-0.757-1.319-0.757-2.434v-9.302h-1.838v-0.961l3.737-3.81h0.661v3.101h3.4v1.67h-3.4v8.882
+ c0,0.76,0.124,1.262,0.372,1.508c0.248,0.244,0.625,0.365,1.13,0.365c0.521,0,1.227-0.115,2.115-0.349V320.566L181.83,320.566z"
+ />
+ <path fill="#808080" d="M198.402,301.594c0.81,0,1.595,0.096,2.354,0.287v1.742c-0.753-0.24-1.382-0.359-1.887-0.359
+ c-0.802,0-1.306,0.254-1.515,0.762c-0.209,0.511-0.313,1.445-0.313,2.808h2.561v1.67h-2.561v12.306h-2.561v-12.306h-1.693v-1.67
+ h1.693c0-2.123,0.324-3.526,0.975-4.211C196.107,301.936,197.089,301.594,198.402,301.594L198.402,301.594z"/>
+ <path fill="#808080" d="M216.611,321c-1.883,0-3.293-0.617-4.229-1.852c-0.938-1.233-1.405-3.084-1.405-5.551
+ c0-2.148,0.485-3.847,1.459-5.097c0.975-1.249,2.367-1.874,4.178-1.874c1.826,0,3.222,0.616,4.187,1.852
+ c0.966,1.232,1.449,2.955,1.449,5.166c0,2.275-0.451,4.069-1.353,5.385C219.994,320.344,218.566,321,216.611,321z
+ M216.611,319.354c0.986,0,1.729-0.445,2.229-1.34c0.501-0.893,0.752-2.39,0.752-4.488c0-1.481-0.256-2.726-0.769-3.731
+ c-0.513-1.004-1.25-1.507-2.212-1.507c-0.978,0-1.719,0.451-2.223,1.357c-0.506,0.904-0.758,2.199-0.758,3.881
+ c0,1.892,0.252,3.334,0.758,4.332C214.895,318.854,215.635,319.354,216.611,319.354z"/>
+ <path opacity="0.65" fill="#808080" enable-background="new " d="M236.909,306.832l0.589,2.331
+ c0.777-1.644,2.131-2.464,4.063-2.464c0.256,0,0.444,0.013,0.564,0.035v2.332c-0.201-0.016-0.501-0.023-0.9-0.023
+ c-1.099,0-1.904,0.262-2.416,0.788c-0.514,0.522-0.77,1.343-0.77,2.456v8.521h-2.561v-13.977H236.909z"/>
+ <path opacity="0.4" fill="#808080" enable-background="new " d="M272.073,320.809h-2.56v-9.627
+ c0-0.929-0.177-1.629-0.523-2.096c-0.35-0.471-0.871-0.704-1.568-0.704c-0.896,0-1.588,0.353-2.072,1.058
+ s-0.728,1.623-0.728,2.752v8.617h-2.56v-9.627c0-0.929-0.18-1.629-0.535-2.096c-0.356-0.471-0.891-0.704-1.604-0.704
+ c-0.881,0-1.563,0.356-2.043,1.069s-0.721,1.627-0.721,2.74v8.615h-2.56v-13.976h1.43l0.517,2.065
+ c0.856-1.514,2.163-2.271,3.918-2.271c0.929,0,1.699,0.177,2.313,0.528c0.611,0.353,1.063,0.881,1.353,1.586
+ c0.793-1.409,2.063-2.114,3.81-2.114c1.379,0,2.412,0.372,3.101,1.117s1.034,1.858,1.034,3.341L272.073,320.809L272.073,320.809z
+ "/>
+ <path opacity="0.65" fill="#0F3AAC" enable-background="new " d="M228.208,242.369c2.563,0,4.944,0.191,7.146,0.576v5.576
+ c-1.942-0.428-4.047-0.642-6.313-0.642c-3.354,0-5.977,1.181-7.867,3.541c-1.89,2.36-3.049,5.901-3.477,10.623
+ c2.072-2.009,4.935-3.013,8.588-3.013c4.102,0,7.221,1.303,9.357,3.908c2.135,2.606,3.203,6.334,3.203,11.185
+ c0,5.362-1.309,9.544-3.926,12.546c-2.615,3.001-6.393,4.502-11.327,4.502c-4.934,0-8.657-1.752-11.168-5.255
+ c-2.51-3.504-3.765-9.313-3.765-17.433c0-7.989,1.677-14.34,5.029-19.051C217.046,244.725,221.885,242.369,228.208,242.369
+ L228.208,242.369z M223.594,285.854c2.157,0,3.771-0.828,4.84-2.482c1.066-1.655,1.602-4.674,1.602-9.053
+ c0-3.291-0.502-5.764-1.506-7.418c-1.004-1.656-2.51-2.483-4.52-2.483c-2.093,0-3.689,0.79-4.789,2.371
+ c-1.102,1.581-1.65,3.76-1.65,6.536c0,3.332,0.225,5.849,0.673,7.547c0.448,1.699,1.116,2.953,2.003,3.766
+ S222.248,285.854,223.594,285.854z"/>
+ <path opacity="0.4" fill="#0F3AAC" enable-background="new " d="M260.316,242.369c4.935,0,8.662,1.752,11.184,5.255
+ c2.521,3.504,3.781,9.688,3.781,18.554c0,9.721-1.276,16.316-3.829,19.789c-2.554,3.471-6.318,5.206-11.296,5.206
+ c-4.358,0-7.647-1.153-9.87-3.461c-2.222-2.308-3.669-5.224-4.343-8.748c-0.672-3.524-1.008-7.786-1.008-12.786
+ c0-8.693,1.291-14.836,3.877-18.425C251.396,244.164,255.232,242.369,260.316,242.369z M260.092,285.854
+ c2.18,0,3.776-1.223,4.791-3.668c1.016-2.447,1.521-7.781,1.521-16.008c0-7.904-0.522-12.962-1.569-15.173
+ s-2.628-3.315-4.743-3.315c-1.922,0-3.338,0.77-4.244,2.308c-0.908,1.538-1.476,3.546-1.699,6.024
+ c-0.225,2.478-0.336,5.863-0.336,10.156c0,8.461,0.502,13.854,1.506,16.184C256.32,284.689,257.913,285.854,260.092,285.854z"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_83_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_83_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g>
+ <polygon fill="#99FF66" points="147.897,58.767 176.792,42.482 210.77,55.167 182.688,73.26 "/>
+ <polygon fill="#66CC33" points="147.897,58.767 148.881,99.045 182.277,114.76 182.688,73.26 "/>
+ <polygon fill="#669900" points="182.688,73.26 182.277,114.76 209.783,94.787 210.77,55.167 "/>
+ </g>
+ <g>
+ <polygon fill="#CC66FF" points="185.191,74.515 222.688,91.457 251.824,70.171 212.861,56.423 "/>
+ <polygon fill="#6F348E" points="222.927,91.133 221.895,133.763 249.195,111.758 251.742,70.171 "/>
+ <polygon fill="#9933CC" points="184.781,74.515 184.287,116.015 221.895,133.763 222.927,91.133 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="127.601,43.202 95.021,61.047 132.182,78.564 162.633,57.936 "/>
+ <polygon fill="#FF9900" points="95.021,61.047 98.945,102.306 133.82,120.476 132.182,78.564 "/>
+
+ <linearGradient id="XMLID_84_" gradientUnits="userSpaceOnUse" x1="-23.5552" y1="496.8701" x2="11.3198" y2="496.8701" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_84_)" points="98.945,102.306 133.82,120.476 132.182,78.564 "/>
+ <polygon fill="#F27C0E" points="162.633,57.936 132.182,78.564 133.82,120.476 162.633,99.189 "/>
+ </g>
+ <g opacity="0.4">
+ <polygon fill="#0099FF" points="152.426,97.736 154.061,139.652 192.048,159.625 192.048,116.076 "/>
+ <polygon fill="#00CCFF" points="152.426,97.736 183.527,77.107 221.434,93.402 192.048,116.076 "/>
+ <polygon fill="#0066FF" points="192.048,116.076 192.048,159.625 220.443,136.396 221.434,93.402 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim24.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,416 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:30:28Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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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
+FXYq7FXYq7FXYq7FX//Z
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:01:23Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x32_4">
+ <path d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279c2.772,0.754,5.231,1.131,7.378,1.131
+ c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738c-0.945-0.904-2.7-2.086-5.263-3.545
+ c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442c0-3.237,1.085-5.668,3.257-7.295
+ c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183c-2.259-0.514-4.358-0.771-6.297-0.771
+ c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462c0,1.426,0.46,2.567,1.382,3.425
+ c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975c1.041,1.603,1.562,3.404,1.562,5.408
+ c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309c0,3.012,0.577,5.271,1.73,6.776
+ s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z M105.184,273.04h8.892
+ c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path d="M125.805,289.238v-28.096h3.797l1.273,4.662c0.785-1.634,1.867-2.863,3.245-3.689c1.378-0.824,3.052-1.236,5.023-1.236
+ c0.513,0,0.889,0.016,1.129,0.049v5.383c-0.897-0.063-1.554-0.097-1.971-0.097c-2.163,0-3.701,0.478-4.614,1.431
+ s-1.37,2.527-1.37,4.724v16.87H125.805L125.805,289.238z"/>
+ <path d="M145.104,289.238v-24.273h-3.101v-3.82h9.589v28.094H145.104L145.104,289.238z M148.348,257.635
+ c-1.057,0-1.918-0.297-2.583-0.89s-0.997-1.378-0.997-2.354c0-0.978,0.332-1.764,0.997-2.355s1.526-0.889,2.583-0.889
+ c1.025,0,1.883,0.305,2.572,0.912c0.689,0.608,1.033,1.387,1.033,2.332c0,0.992-0.336,1.781-1.009,2.366
+ C150.271,257.342,149.405,257.635,148.348,257.635z"/>
+ <path d="M178.197,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.029-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.771,2.252,2.656,6.414,2.656,12.486h-15.31c0,3.012,0.577,5.271,1.73,6.776
+ c1.153,1.506,2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227v3.992H178.197z M164.018,273.04h8.893
+ c0-3.302-0.353-5.576-1.058-6.826c-0.705-1.249-1.73-1.874-3.076-1.874c-1.506,0-2.652,0.674-3.437,2.02
+ C164.555,267.705,164.114,269.932,164.018,273.04z"/>
+ <path d="M190.693,289.623c-2.402,0-4.989-0.329-7.762-0.984v-4.184c2.739,0.834,4.998,1.25,6.776,1.25
+ c1.649,0,2.894-0.324,3.726-0.975c0.834-0.647,1.25-1.621,1.25-2.92c0-0.769-0.231-1.484-0.697-2.149
+ c-0.465-0.665-1.777-1.542-3.94-2.632c-1.458-0.754-2.624-1.446-3.497-2.079c-0.873-0.634-1.599-1.454-2.175-2.464
+ c-0.577-1.01-0.865-2.268-0.865-3.772c0-2.5,0.921-4.454,2.765-5.864c1.843-1.41,4.205-2.115,7.09-2.115
+ c2.498,0,4.773,0.313,6.824,0.938v3.989c-2.002-0.688-3.916-1.033-5.744-1.033c-1.488,0-2.604,0.305-3.34,0.913
+ s-1.104,1.522-1.104,2.739c0,0.642,0.22,1.242,0.66,1.804s1.702,1.354,3.784,2.379c2.916,1.427,4.768,2.82,5.553,4.183
+ c0.785,1.361,1.178,2.867,1.178,4.519c0,2.788-0.896,4.896-2.691,6.319C196.688,288.91,194.092,289.623,190.693,289.623z"/>
+ <path fill="#808080" d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316c0.857,0.876,1.286,2.284,1.286,4.223
+ c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479h-2.584L112.728,302.891L112.728,302.891z
+ M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06
+ c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"/>
+ <rect x="135.898" y="301.786" fill="#808080" width="2.56" height="19.022"/>
+ <path fill="#808080" d="M159.537,318.788c-0.865,1.476-2.211,2.212-4.038,2.212c-1.273,0-2.265-0.359-2.974-1.074
+ c-0.709-0.72-1.063-1.722-1.063-3.012c0-1.33,0.365-2.322,1.094-2.975c0.729-0.653,1.602-1.063,2.62-1.226
+ c1.017-0.166,2.255-0.247,3.713-0.247v-1.646c0-1.625-0.869-2.438-2.607-2.438c-1.001,0-2.223,0.214-3.665,0.638v-1.791
+ c1.45-0.399,2.828-0.601,4.134-0.601c1.538,0,2.706,0.369,3.503,1.112c0.797,0.738,1.195,1.83,1.195,3.273v9.793h-1.394
+ L159.537,318.788z M158.888,313.994h-1.43c-1.146,0-2.005,0.242-2.578,0.727c-0.573,0.485-0.859,1.209-0.859,2.17
+ c0,0.785,0.174,1.371,0.523,1.762c0.348,0.387,0.871,0.582,1.568,0.582c0.881,0,1.564-0.28,2.049-0.842
+ c0.485-0.562,0.727-1.322,0.727-2.283V313.994z"/>
+ <path fill="#808080" d="M181.83,320.566c-1.074,0.289-2.083,0.434-3.028,0.434c-1.09,0-1.887-0.256-2.392-0.764
+ c-0.505-0.51-0.757-1.319-0.757-2.434v-9.302h-1.838v-0.961l3.737-3.81h0.661v3.101h3.4v1.67h-3.4v8.882
+ c0,0.76,0.124,1.262,0.372,1.508c0.248,0.244,0.625,0.365,1.13,0.365c0.521,0,1.227-0.115,2.115-0.349V320.566L181.83,320.566z"
+ />
+ <path fill="#808080" d="M198.402,301.594c0.81,0,1.595,0.096,2.354,0.287v1.742c-0.753-0.24-1.382-0.359-1.887-0.359
+ c-0.802,0-1.306,0.254-1.515,0.762c-0.209,0.511-0.313,1.445-0.313,2.808h2.561v1.67h-2.561v12.306h-2.561v-12.306h-1.693v-1.67
+ h1.693c0-2.123,0.324-3.526,0.975-4.211C196.107,301.936,197.089,301.594,198.402,301.594L198.402,301.594z"/>
+ <path fill="#808080" d="M216.611,321c-1.883,0-3.293-0.617-4.229-1.852c-0.938-1.233-1.405-3.084-1.405-5.551
+ c0-2.148,0.485-3.847,1.459-5.097c0.975-1.249,2.367-1.874,4.178-1.874c1.826,0,3.222,0.616,4.187,1.852
+ c0.966,1.232,1.449,2.955,1.449,5.166c0,2.275-0.451,4.069-1.353,5.385C219.994,320.344,218.566,321,216.611,321z
+ M216.611,319.354c0.986,0,1.729-0.445,2.229-1.34c0.501-0.893,0.752-2.39,0.752-4.488c0-1.481-0.256-2.726-0.769-3.731
+ c-0.513-1.004-1.25-1.507-2.212-1.507c-0.978,0-1.719,0.451-2.223,1.357c-0.506,0.904-0.758,2.199-0.758,3.881
+ c0,1.892,0.252,3.334,0.758,4.332C214.895,318.854,215.635,319.354,216.611,319.354z"/>
+ <path fill="#808080" d="M236.909,306.832l0.589,2.331c0.777-1.644,2.131-2.464,4.063-2.464c0.256,0,0.444,0.013,0.564,0.035
+ v2.332c-0.201-0.016-0.501-0.023-0.9-0.023c-1.099,0-1.904,0.262-2.416,0.788c-0.514,0.522-0.77,1.343-0.77,2.456v8.521h-2.561
+ v-13.977H236.909z"/>
+ <path opacity="0.65" fill="#808080" enable-background="new " d="M272.073,320.809h-2.56v-9.627
+ c0-0.929-0.177-1.629-0.523-2.096c-0.35-0.471-0.871-0.704-1.568-0.704c-0.896,0-1.588,0.353-2.072,1.058
+ s-0.728,1.623-0.728,2.752v8.617h-2.56v-9.627c0-0.929-0.18-1.629-0.535-2.096c-0.356-0.471-0.891-0.704-1.604-0.704
+ c-0.881,0-1.563,0.356-2.043,1.069s-0.721,1.627-0.721,2.74v8.615h-2.56v-13.976h1.43l0.517,2.065
+ c0.856-1.514,2.163-2.271,3.918-2.271c0.929,0,1.699,0.177,2.313,0.528c0.611,0.353,1.063,0.881,1.353,1.586
+ c0.793-1.409,2.063-2.114,3.81-2.114c1.379,0,2.412,0.372,3.101,1.117s1.034,1.858,1.034,3.341L272.073,320.809L272.073,320.809z
+ "/>
+ <path fill="#0F3AAC" d="M228.208,242.369c2.563,0,4.944,0.191,7.146,0.576v5.576c-1.942-0.428-4.047-0.642-6.313-0.642
+ c-3.354,0-5.977,1.181-7.867,3.541c-1.89,2.36-3.049,5.901-3.477,10.623c2.072-2.009,4.935-3.013,8.588-3.013
+ c4.102,0,7.221,1.303,9.357,3.908c2.135,2.606,3.203,6.334,3.203,11.185c0,5.362-1.309,9.544-3.926,12.546
+ c-2.615,3.001-6.393,4.502-11.327,4.502c-4.934,0-8.657-1.752-11.168-5.255c-2.51-3.504-3.765-9.313-3.765-17.433
+ c0-7.989,1.677-14.34,5.029-19.051C217.046,244.725,221.885,242.369,228.208,242.369L228.208,242.369z M223.594,285.854
+ c2.157,0,3.771-0.828,4.84-2.482c1.066-1.655,1.602-4.674,1.602-9.053c0-3.291-0.502-5.764-1.506-7.418
+ c-1.004-1.656-2.51-2.483-4.52-2.483c-2.093,0-3.689,0.79-4.789,2.371c-1.102,1.581-1.65,3.76-1.65,6.536
+ c0,3.332,0.225,5.849,0.673,7.547c0.448,1.699,1.116,2.953,2.003,3.766S222.248,285.854,223.594,285.854z"/>
+ <path opacity="0.65" fill="#0F3AAC" enable-background="new " d="M260.316,242.369c4.935,0,8.662,1.752,11.184,5.255
+ c2.521,3.504,3.781,9.688,3.781,18.554c0,9.721-1.276,16.316-3.829,19.789c-2.554,3.471-6.318,5.206-11.296,5.206
+ c-4.358,0-7.647-1.153-9.87-3.461c-2.222-2.308-3.669-5.224-4.343-8.748c-0.672-3.524-1.008-7.786-1.008-12.786
+ c0-8.693,1.291-14.836,3.877-18.425C251.396,244.164,255.232,242.369,260.316,242.369z M260.092,285.854
+ c2.18,0,3.776-1.223,4.791-3.668c1.016-2.447,1.521-7.781,1.521-16.008c0-7.904-0.522-12.962-1.569-15.173
+ s-2.628-3.315-4.743-3.315c-1.922,0-3.338,0.77-4.244,2.308c-0.908,1.538-1.476,3.546-1.699,6.024
+ c-0.225,2.478-0.336,5.863-0.336,10.156c0,8.461,0.502,13.854,1.506,16.184C256.32,284.689,257.913,285.854,260.092,285.854z"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_79_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_79_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g>
+ <polygon fill="#99FF66" points="147.897,58.767 176.792,42.482 210.77,55.167 182.688,73.26 "/>
+ <polygon fill="#66CC33" points="147.897,58.767 148.881,99.045 182.277,114.76 182.688,73.26 "/>
+ <polygon fill="#669900" points="182.688,73.26 182.277,114.76 209.783,94.787 210.77,55.167 "/>
+ </g>
+ <g>
+ <polygon fill="#CC66FF" points="185.191,74.515 222.688,91.457 251.824,70.171 212.861,56.423 "/>
+ <polygon fill="#6F348E" points="222.927,91.133 221.895,133.763 249.195,111.758 251.742,70.171 "/>
+ <polygon fill="#9933CC" points="184.781,74.515 184.287,116.015 221.895,133.763 222.927,91.133 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="127.601,43.202 95.021,61.047 132.182,78.564 162.633,57.936 "/>
+ <polygon fill="#FF9900" points="95.021,61.047 98.945,102.306 133.82,120.476 132.182,78.564 "/>
+
+ <linearGradient id="XMLID_80_" gradientUnits="userSpaceOnUse" x1="-23.5552" y1="496.8701" x2="11.3198" y2="496.8701" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_80_)" points="98.945,102.306 133.82,120.476 132.182,78.564 "/>
+ <polygon fill="#F27C0E" points="162.633,57.936 132.182,78.564 133.82,120.476 162.633,99.189 "/>
+ </g>
+ <g opacity="0.65">
+ <polygon fill="#0099FF" points="152.426,97.736 154.061,139.652 192.048,159.625 192.048,116.076 "/>
+ <polygon fill="#00CCFF" points="152.426,97.736 183.527,77.107 221.434,93.402 192.048,116.076 "/>
+ <polygon fill="#0066FF" points="192.048,116.076 192.048,159.625 220.443,136.396 221.434,93.402 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim25.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,419 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:30:40Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:01:18Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x32_5">
+ <path d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279c2.772,0.754,5.231,1.131,7.378,1.131
+ c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738c-0.945-0.904-2.7-2.086-5.263-3.545
+ c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442c0-3.237,1.085-5.668,3.257-7.295
+ c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183c-2.259-0.514-4.358-0.771-6.297-0.771
+ c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462c0,1.426,0.46,2.567,1.382,3.425
+ c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975c1.041,1.603,1.562,3.404,1.562,5.408
+ c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309c0,3.012,0.577,5.271,1.73,6.776
+ s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z M105.184,273.04h8.892
+ c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path d="M125.805,289.238v-28.096h3.797l1.273,4.662c0.785-1.634,1.867-2.863,3.245-3.689c1.378-0.824,3.052-1.236,5.023-1.236
+ c0.513,0,0.889,0.016,1.129,0.049v5.383c-0.897-0.063-1.554-0.097-1.971-0.097c-2.163,0-3.701,0.478-4.614,1.431
+ s-1.37,2.527-1.37,4.724v16.87H125.805L125.805,289.238z"/>
+ <path d="M145.104,289.238v-24.273h-3.101v-3.82h9.589v28.094H145.104L145.104,289.238z M148.348,257.635
+ c-1.057,0-1.918-0.297-2.583-0.89s-0.997-1.378-0.997-2.354c0-0.978,0.332-1.764,0.997-2.355s1.526-0.889,2.583-0.889
+ c1.025,0,1.883,0.305,2.572,0.912c0.689,0.608,1.033,1.387,1.033,2.332c0,0.992-0.336,1.781-1.009,2.366
+ C150.271,257.342,149.405,257.635,148.348,257.635z"/>
+ <path d="M178.197,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.029-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.771,2.252,2.656,6.414,2.656,12.486h-15.31c0,3.012,0.577,5.271,1.73,6.776
+ c1.153,1.506,2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227v3.992H178.197z M164.018,273.04h8.893
+ c0-3.302-0.353-5.576-1.058-6.826c-0.705-1.249-1.73-1.874-3.076-1.874c-1.506,0-2.652,0.674-3.437,2.02
+ C164.555,267.705,164.114,269.932,164.018,273.04z"/>
+ <path d="M190.693,289.623c-2.402,0-4.989-0.329-7.762-0.984v-4.184c2.739,0.834,4.998,1.25,6.776,1.25
+ c1.649,0,2.894-0.324,3.726-0.975c0.834-0.647,1.25-1.621,1.25-2.92c0-0.769-0.231-1.484-0.697-2.149
+ c-0.465-0.665-1.777-1.542-3.94-2.632c-1.458-0.754-2.624-1.446-3.497-2.079c-0.873-0.634-1.599-1.454-2.175-2.464
+ c-0.577-1.01-0.865-2.268-0.865-3.772c0-2.5,0.921-4.454,2.765-5.864c1.843-1.41,4.205-2.115,7.09-2.115
+ c2.498,0,4.773,0.313,6.824,0.938v3.989c-2.002-0.688-3.916-1.033-5.744-1.033c-1.488,0-2.604,0.305-3.34,0.913
+ s-1.104,1.522-1.104,2.739c0,0.642,0.22,1.242,0.66,1.804s1.702,1.354,3.784,2.379c2.916,1.427,4.768,2.82,5.553,4.183
+ c0.785,1.361,1.178,2.867,1.178,4.519c0,2.788-0.896,4.896-2.691,6.319C196.688,288.91,194.092,289.623,190.693,289.623z"/>
+ <path fill="#808080" d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316c0.857,0.876,1.286,2.284,1.286,4.223
+ c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479h-2.584L112.728,302.891L112.728,302.891z
+ M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06
+ c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"/>
+ <rect x="135.898" y="301.786" fill="#808080" width="2.56" height="19.022"/>
+ <path fill="#808080" d="M159.537,318.788c-0.865,1.476-2.211,2.212-4.038,2.212c-1.273,0-2.265-0.359-2.974-1.074
+ c-0.709-0.72-1.063-1.722-1.063-3.012c0-1.33,0.365-2.322,1.094-2.975c0.729-0.653,1.602-1.063,2.62-1.226
+ c1.017-0.166,2.255-0.247,3.713-0.247v-1.646c0-1.625-0.869-2.438-2.607-2.438c-1.001,0-2.223,0.214-3.665,0.638v-1.791
+ c1.45-0.399,2.828-0.601,4.134-0.601c1.538,0,2.706,0.369,3.503,1.112c0.797,0.738,1.195,1.83,1.195,3.273v9.793h-1.394
+ L159.537,318.788z M158.888,313.994h-1.43c-1.146,0-2.005,0.242-2.578,0.727c-0.573,0.485-0.859,1.209-0.859,2.17
+ c0,0.785,0.174,1.371,0.523,1.762c0.348,0.387,0.871,0.582,1.568,0.582c0.881,0,1.564-0.28,2.049-0.842
+ c0.485-0.562,0.727-1.322,0.727-2.283V313.994z"/>
+ <path fill="#808080" d="M181.83,320.566c-1.074,0.289-2.083,0.434-3.028,0.434c-1.09,0-1.887-0.256-2.392-0.764
+ c-0.505-0.51-0.757-1.319-0.757-2.434v-9.302h-1.838v-0.961l3.737-3.81h0.661v3.101h3.4v1.67h-3.4v8.882
+ c0,0.76,0.124,1.262,0.372,1.508c0.248,0.244,0.625,0.365,1.13,0.365c0.521,0,1.227-0.115,2.115-0.349V320.566L181.83,320.566z"
+ />
+ <path fill="#808080" d="M198.402,301.594c0.81,0,1.595,0.096,2.354,0.287v1.742c-0.753-0.24-1.382-0.359-1.887-0.359
+ c-0.802,0-1.306,0.254-1.515,0.762c-0.209,0.511-0.313,1.445-0.313,2.808h2.561v1.67h-2.561v12.306h-2.561v-12.306h-1.693v-1.67
+ h1.693c0-2.123,0.324-3.526,0.975-4.211C196.107,301.936,197.089,301.594,198.402,301.594L198.402,301.594z"/>
+ <path fill="#808080" d="M216.611,321c-1.883,0-3.293-0.617-4.229-1.852c-0.938-1.233-1.405-3.084-1.405-5.551
+ c0-2.148,0.485-3.847,1.459-5.097c0.975-1.249,2.367-1.874,4.178-1.874c1.826,0,3.222,0.616,4.187,1.852
+ c0.966,1.232,1.449,2.955,1.449,5.166c0,2.275-0.451,4.069-1.353,5.385C219.994,320.344,218.566,321,216.611,321z
+ M216.611,319.354c0.986,0,1.729-0.445,2.229-1.34c0.501-0.893,0.752-2.39,0.752-4.488c0-1.481-0.256-2.726-0.769-3.731
+ c-0.513-1.004-1.25-1.507-2.212-1.507c-0.978,0-1.719,0.451-2.223,1.357c-0.506,0.904-0.758,2.199-0.758,3.881
+ c0,1.892,0.252,3.334,0.758,4.332C214.895,318.854,215.635,319.354,216.611,319.354z"/>
+ <path fill="#808080" d="M236.909,306.832l0.589,2.331c0.777-1.644,2.131-2.464,4.063-2.464c0.256,0,0.444,0.013,0.564,0.035
+ v2.332c-0.201-0.016-0.501-0.023-0.9-0.023c-1.099,0-1.904,0.262-2.416,0.788c-0.514,0.522-0.77,1.343-0.77,2.456v8.521h-2.561
+ v-13.977H236.909z"/>
+ <path fill="#808080" d="M272.073,320.809h-2.56v-9.627c0-0.929-0.177-1.629-0.523-2.096c-0.35-0.471-0.871-0.704-1.568-0.704
+ c-0.896,0-1.588,0.353-2.072,1.058s-0.728,1.623-0.728,2.752v8.617h-2.56v-9.627c0-0.929-0.18-1.629-0.535-2.096
+ c-0.356-0.471-0.891-0.704-1.604-0.704c-0.881,0-1.563,0.356-2.043,1.069s-0.721,1.627-0.721,2.74v8.615h-2.56v-13.976h1.43
+ l0.517,2.065c0.856-1.514,2.163-2.271,3.918-2.271c0.929,0,1.699,0.177,2.313,0.528c0.611,0.353,1.063,0.881,1.353,1.586
+ c0.793-1.409,2.063-2.114,3.81-2.114c1.379,0,2.412,0.372,3.101,1.117s1.034,1.858,1.034,3.341L272.073,320.809L272.073,320.809z
+ "/>
+ <path fill="#0F3AAC" d="M228.208,242.369c2.563,0,4.944,0.191,7.146,0.576v5.576c-1.942-0.428-4.047-0.642-6.313-0.642
+ c-3.354,0-5.977,1.181-7.867,3.541c-1.89,2.36-3.049,5.901-3.477,10.623c2.072-2.009,4.935-3.013,8.588-3.013
+ c4.102,0,7.221,1.303,9.357,3.908c2.135,2.606,3.203,6.334,3.203,11.185c0,5.362-1.309,9.544-3.926,12.546
+ c-2.615,3.001-6.393,4.502-11.327,4.502c-4.934,0-8.657-1.752-11.168-5.255c-2.51-3.504-3.765-9.313-3.765-17.433
+ c0-7.989,1.677-14.34,5.029-19.051C217.046,244.725,221.885,242.369,228.208,242.369L228.208,242.369z M223.594,285.854
+ c2.157,0,3.771-0.828,4.84-2.482c1.066-1.655,1.602-4.674,1.602-9.053c0-3.291-0.502-5.764-1.506-7.418
+ c-1.004-1.656-2.51-2.483-4.52-2.483c-2.093,0-3.689,0.79-4.789,2.371c-1.102,1.581-1.65,3.76-1.65,6.536
+ c0,3.332,0.225,5.849,0.673,7.547c0.448,1.699,1.116,2.953,2.003,3.766S222.248,285.854,223.594,285.854z"/>
+ <path fill="#0F3AAC" d="M260.316,242.369c4.935,0,8.662,1.752,11.184,5.255c2.521,3.504,3.781,9.688,3.781,18.554
+ c0,9.721-1.276,16.316-3.829,19.789c-2.554,3.471-6.318,5.206-11.296,5.206c-4.358,0-7.647-1.153-9.87-3.461
+ c-2.222-2.308-3.669-5.224-4.343-8.748c-0.672-3.524-1.008-7.786-1.008-12.786c0-8.693,1.291-14.836,3.877-18.425
+ C251.396,244.164,255.232,242.369,260.316,242.369z M260.092,285.854c2.18,0,3.776-1.223,4.791-3.668
+ c1.016-2.447,1.521-7.781,1.521-16.008c0-7.904-0.522-12.962-1.569-15.173s-2.628-3.315-4.743-3.315
+ c-1.922,0-3.338,0.77-4.244,2.308c-0.908,1.538-1.476,3.546-1.699,6.024c-0.225,2.478-0.336,5.863-0.336,10.156
+ c0,8.461,0.502,13.854,1.506,16.184C256.32,284.689,257.913,285.854,260.092,285.854z"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_75_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_75_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g>
+ <polygon fill="#99FF66" points="147.897,58.767 176.792,42.482 210.77,55.167 182.688,73.26 "/>
+ <polygon fill="#66CC33" points="147.897,58.767 148.881,99.045 182.277,114.76 182.688,73.26 "/>
+ <polygon fill="#669900" points="182.688,73.26 182.277,114.76 209.783,94.787 210.77,55.167 "/>
+ </g>
+ <g>
+ <polygon fill="#CC66FF" points="185.191,74.515 222.688,91.457 251.824,70.171 212.861,56.423 "/>
+ <polygon fill="#6F348E" points="222.927,91.133 221.895,133.763 249.195,111.758 251.742,70.171 "/>
+ <polygon fill="#9933CC" points="184.781,74.515 184.287,116.015 221.895,133.763 222.927,91.133 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="127.601,43.202 95.021,61.047 132.182,78.564 162.633,57.936 "/>
+ <polygon fill="#FF9900" points="95.021,61.047 98.945,102.306 133.82,120.476 132.182,78.564 "/>
+
+ <linearGradient id="XMLID_76_" gradientUnits="userSpaceOnUse" x1="-23.5552" y1="496.8701" x2="11.3198" y2="496.8701" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_76_)" points="98.945,102.306 133.82,120.476 132.182,78.564 "/>
+ <polygon fill="#F27C0E" points="162.633,57.936 132.182,78.564 133.82,120.476 162.633,99.189 "/>
+ </g>
+ <g>
+ <polygon fill="#0099FF" points="152.426,97.736 154.061,139.652 192.048,159.625 192.048,116.076 "/>
+ <polygon fill="#00CCFF" points="152.426,97.736 183.527,77.107 221.434,93.402 192.048,116.076 "/>
+ <polygon fill="#0066FF" points="192.048,116.076 192.048,159.625 220.443,136.396 221.434,93.402 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim26.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,419 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:30:56Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:01:12Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x32_6">
+ <path d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279c2.772,0.754,5.231,1.131,7.378,1.131
+ c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738c-0.945-0.904-2.7-2.086-5.263-3.545
+ c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442c0-3.237,1.085-5.668,3.257-7.295
+ c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183c-2.259-0.514-4.358-0.771-6.297-0.771
+ c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462c0,1.426,0.46,2.567,1.382,3.425
+ c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975c1.041,1.603,1.562,3.404,1.562,5.408
+ c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309c0,3.012,0.577,5.271,1.73,6.776
+ s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z M105.184,273.04h8.892
+ c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path d="M125.805,289.238v-28.096h3.797l1.273,4.662c0.785-1.634,1.867-2.863,3.245-3.689c1.378-0.824,3.052-1.236,5.023-1.236
+ c0.513,0,0.889,0.016,1.129,0.049v5.383c-0.897-0.063-1.554-0.097-1.971-0.097c-2.163,0-3.701,0.478-4.614,1.431
+ s-1.37,2.527-1.37,4.724v16.87H125.805L125.805,289.238z"/>
+ <path d="M145.104,289.238v-24.273h-3.101v-3.82h9.589v28.094H145.104L145.104,289.238z M148.348,257.635
+ c-1.057,0-1.918-0.297-2.583-0.89s-0.997-1.378-0.997-2.354c0-0.978,0.332-1.764,0.997-2.355s1.526-0.889,2.583-0.889
+ c1.025,0,1.883,0.305,2.572,0.912c0.689,0.608,1.033,1.387,1.033,2.332c0,0.992-0.336,1.781-1.009,2.366
+ C150.271,257.342,149.405,257.635,148.348,257.635z"/>
+ <path d="M178.197,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.029-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.771,2.252,2.656,6.414,2.656,12.486h-15.31c0,3.012,0.577,5.271,1.73,6.776
+ c1.153,1.506,2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227v3.992H178.197z M164.018,273.04h8.893
+ c0-3.302-0.353-5.576-1.058-6.826c-0.705-1.249-1.73-1.874-3.076-1.874c-1.506,0-2.652,0.674-3.437,2.02
+ C164.555,267.705,164.114,269.932,164.018,273.04z"/>
+ <path d="M190.693,289.623c-2.402,0-4.989-0.329-7.762-0.984v-4.184c2.739,0.834,4.998,1.25,6.776,1.25
+ c1.649,0,2.894-0.324,3.726-0.975c0.834-0.647,1.25-1.621,1.25-2.92c0-0.769-0.231-1.484-0.697-2.149
+ c-0.465-0.665-1.777-1.542-3.94-2.632c-1.458-0.754-2.624-1.446-3.497-2.079c-0.873-0.634-1.599-1.454-2.175-2.464
+ c-0.577-1.01-0.865-2.268-0.865-3.772c0-2.5,0.921-4.454,2.765-5.864c1.843-1.41,4.205-2.115,7.09-2.115
+ c2.498,0,4.773,0.313,6.824,0.938v3.989c-2.002-0.688-3.916-1.033-5.744-1.033c-1.488,0-2.604,0.305-3.34,0.913
+ s-1.104,1.522-1.104,2.739c0,0.642,0.22,1.242,0.66,1.804s1.702,1.354,3.784,2.379c2.916,1.427,4.768,2.82,5.553,4.183
+ c0.785,1.361,1.178,2.867,1.178,4.519c0,2.788-0.896,4.896-2.691,6.319C196.688,288.91,194.092,289.623,190.693,289.623z"/>
+ <path fill="#808080" d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316c0.857,0.876,1.286,2.284,1.286,4.223
+ c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479h-2.584L112.728,302.891L112.728,302.891z
+ M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06
+ c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"/>
+ <rect x="135.898" y="301.786" fill="#808080" width="2.56" height="19.022"/>
+ <path fill="#808080" d="M159.537,318.788c-0.865,1.476-2.211,2.212-4.038,2.212c-1.273,0-2.265-0.359-2.974-1.074
+ c-0.709-0.72-1.063-1.722-1.063-3.012c0-1.33,0.365-2.322,1.094-2.975c0.729-0.653,1.602-1.063,2.62-1.226
+ c1.017-0.166,2.255-0.247,3.713-0.247v-1.646c0-1.625-0.869-2.438-2.607-2.438c-1.001,0-2.223,0.214-3.665,0.638v-1.791
+ c1.45-0.399,2.828-0.601,4.134-0.601c1.538,0,2.706,0.369,3.503,1.112c0.797,0.738,1.195,1.83,1.195,3.273v9.793h-1.394
+ L159.537,318.788z M158.888,313.994h-1.43c-1.146,0-2.005,0.242-2.578,0.727c-0.573,0.485-0.859,1.209-0.859,2.17
+ c0,0.785,0.174,1.371,0.523,1.762c0.348,0.387,0.871,0.582,1.568,0.582c0.881,0,1.564-0.28,2.049-0.842
+ c0.485-0.562,0.727-1.322,0.727-2.283V313.994z"/>
+ <path fill="#808080" d="M181.83,320.566c-1.074,0.289-2.083,0.434-3.028,0.434c-1.09,0-1.887-0.256-2.392-0.764
+ c-0.505-0.51-0.757-1.319-0.757-2.434v-9.302h-1.838v-0.961l3.737-3.81h0.661v3.101h3.4v1.67h-3.4v8.882
+ c0,0.76,0.124,1.262,0.372,1.508c0.248,0.244,0.625,0.365,1.13,0.365c0.521,0,1.227-0.115,2.115-0.349V320.566L181.83,320.566z"
+ />
+ <path fill="#808080" d="M198.402,301.594c0.81,0,1.595,0.096,2.354,0.287v1.742c-0.753-0.24-1.382-0.359-1.887-0.359
+ c-0.802,0-1.306,0.254-1.515,0.762c-0.209,0.511-0.313,1.445-0.313,2.808h2.561v1.67h-2.561v12.306h-2.561v-12.306h-1.693v-1.67
+ h1.693c0-2.123,0.324-3.526,0.975-4.211C196.107,301.936,197.089,301.594,198.402,301.594L198.402,301.594z"/>
+ <path fill="#808080" d="M216.611,321c-1.883,0-3.293-0.617-4.229-1.852c-0.938-1.233-1.405-3.084-1.405-5.551
+ c0-2.148,0.485-3.847,1.459-5.097c0.975-1.249,2.367-1.874,4.178-1.874c1.826,0,3.222,0.616,4.187,1.852
+ c0.966,1.232,1.449,2.955,1.449,5.166c0,2.275-0.451,4.069-1.353,5.385C219.994,320.344,218.566,321,216.611,321z
+ M216.611,319.354c0.986,0,1.729-0.445,2.229-1.34c0.501-0.893,0.752-2.39,0.752-4.488c0-1.481-0.256-2.726-0.769-3.731
+ c-0.513-1.004-1.25-1.507-2.212-1.507c-0.978,0-1.719,0.451-2.223,1.357c-0.506,0.904-0.758,2.199-0.758,3.881
+ c0,1.892,0.252,3.334,0.758,4.332C214.895,318.854,215.635,319.354,216.611,319.354z"/>
+ <path fill="#808080" d="M236.909,306.832l0.589,2.331c0.777-1.644,2.131-2.464,4.063-2.464c0.256,0,0.444,0.013,0.564,0.035
+ v2.332c-0.201-0.016-0.501-0.023-0.9-0.023c-1.099,0-1.904,0.262-2.416,0.788c-0.514,0.522-0.77,1.343-0.77,2.456v8.521h-2.561
+ v-13.977H236.909z"/>
+ <path fill="#808080" d="M272.073,320.809h-2.56v-9.627c0-0.929-0.177-1.629-0.523-2.096c-0.35-0.471-0.871-0.704-1.568-0.704
+ c-0.896,0-1.588,0.353-2.072,1.058s-0.728,1.623-0.728,2.752v8.617h-2.56v-9.627c0-0.929-0.18-1.629-0.535-2.096
+ c-0.356-0.471-0.891-0.704-1.604-0.704c-0.881,0-1.563,0.356-2.043,1.069s-0.721,1.627-0.721,2.74v8.615h-2.56v-13.976h1.43
+ l0.517,2.065c0.856-1.514,2.163-2.271,3.918-2.271c0.929,0,1.699,0.177,2.313,0.528c0.611,0.353,1.063,0.881,1.353,1.586
+ c0.793-1.409,2.063-2.114,3.81-2.114c1.379,0,2.412,0.372,3.101,1.117s1.034,1.858,1.034,3.341L272.073,320.809L272.073,320.809z
+ "/>
+ <path fill="#0F3AAC" d="M228.208,242.369c2.563,0,4.944,0.191,7.146,0.576v5.576c-1.942-0.428-4.047-0.642-6.313-0.642
+ c-3.354,0-5.977,1.181-7.867,3.541c-1.89,2.36-3.049,5.901-3.477,10.623c2.072-2.009,4.935-3.013,8.588-3.013
+ c4.102,0,7.221,1.303,9.357,3.908c2.135,2.606,3.203,6.334,3.203,11.185c0,5.362-1.309,9.544-3.926,12.546
+ c-2.615,3.001-6.393,4.502-11.327,4.502c-4.934,0-8.657-1.752-11.168-5.255c-2.51-3.504-3.765-9.313-3.765-17.433
+ c0-7.989,1.677-14.34,5.029-19.051C217.046,244.725,221.885,242.369,228.208,242.369L228.208,242.369z M223.594,285.854
+ c2.157,0,3.771-0.828,4.84-2.482c1.066-1.655,1.602-4.674,1.602-9.053c0-3.291-0.502-5.764-1.506-7.418
+ c-1.004-1.656-2.51-2.483-4.52-2.483c-2.093,0-3.689,0.79-4.789,2.371c-1.102,1.581-1.65,3.76-1.65,6.536
+ c0,3.332,0.225,5.849,0.673,7.547c0.448,1.699,1.116,2.953,2.003,3.766S222.248,285.854,223.594,285.854z"/>
+ <path fill="#0F3AAC" d="M260.316,242.369c4.935,0,8.662,1.752,11.184,5.255c2.521,3.504,3.781,9.688,3.781,18.554
+ c0,9.721-1.276,16.316-3.829,19.789c-2.554,3.471-6.318,5.206-11.296,5.206c-4.358,0-7.647-1.153-9.87-3.461
+ c-2.222-2.308-3.669-5.224-4.343-8.748c-0.672-3.524-1.008-7.786-1.008-12.786c0-8.693,1.291-14.836,3.877-18.425
+ C251.396,244.164,255.232,242.369,260.316,242.369z M260.092,285.854c2.18,0,3.776-1.223,4.791-3.668
+ c1.016-2.447,1.521-7.781,1.521-16.008c0-7.904-0.522-12.962-1.569-15.173s-2.628-3.315-4.743-3.315
+ c-1.922,0-3.338,0.77-4.244,2.308c-0.908,1.538-1.476,3.546-1.699,6.024c-0.225,2.478-0.336,5.863-0.336,10.156
+ c0,8.461,0.502,13.854,1.506,16.184C256.32,284.689,257.913,285.854,260.092,285.854z"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_71_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_71_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g>
+ <polygon fill="#99FF66" points="147.897,58.767 176.792,42.482 210.77,55.167 182.688,73.26 "/>
+ <polygon fill="#66CC33" points="147.897,58.767 148.881,99.045 182.277,114.76 182.688,73.26 "/>
+ <polygon fill="#669900" points="182.688,73.26 182.277,114.76 209.783,94.787 210.77,55.167 "/>
+ </g>
+ <g>
+ <polygon fill="#CC66FF" points="185.191,74.515 222.688,91.457 251.824,70.171 212.861,56.423 "/>
+ <polygon fill="#6F348E" points="222.927,91.133 221.895,133.763 249.195,111.758 251.742,70.171 "/>
+ <polygon fill="#9933CC" points="184.781,74.515 184.287,116.015 221.895,133.763 222.927,91.133 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="127.601,43.202 95.021,61.047 132.182,78.564 162.633,57.936 "/>
+ <polygon fill="#FF9900" points="95.021,61.047 98.945,102.306 133.82,120.476 132.182,78.564 "/>
+
+ <linearGradient id="XMLID_72_" gradientUnits="userSpaceOnUse" x1="-23.5552" y1="496.8701" x2="11.3198" y2="496.8701" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_72_)" points="98.945,102.306 133.82,120.476 132.182,78.564 "/>
+ <polygon fill="#F27C0E" points="162.633,57.936 132.182,78.564 133.82,120.476 162.633,99.189 "/>
+ </g>
+ <g>
+ <polygon fill="#0099FF" points="152.426,97.736 154.061,139.652 192.048,159.625 192.048,116.076 "/>
+ <polygon fill="#00CCFF" points="152.426,97.736 183.527,77.107 221.434,93.402 192.048,116.076 "/>
+ <polygon fill="#0066FF" points="192.048,116.076 192.048,159.625 220.443,136.396 221.434,93.402 "/>
+ </g>
+ </g>
+ </svg>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/s60/BmpAnim27.svg Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,419 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 11.0, SVG Export Plug-In . SVG Version: 6.0.0 Build 78) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd" [
+ <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
+ <!ENTITY ns_svg "http://www.w3.org/2000/svg">
+ <!ENTITY ns_xlink "http://www.w3.org/1999/xlink">
+]>
+<svg xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
+ width="352" height="352" viewBox="0 0 352 352" overflow="visible" enable-background="new 0 0 352 352" xml:space="preserve">
+ <metadata>
+ <x:xmpmeta x:xmptk="XMP toolkit 3.0-29, framework 1.6" xmlns:x="adobe:ns:meta/">
+ <rdf:RDF xmlns:iX="http://ns.adobe.com/iX/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"></rdf:Description>
+ <rdf:Description rdf:about="" xmlns:xapGImg="http://ns.adobe.com/xap/1.0/g/img/" xmlns:xap="http://ns.adobe.com/xap/1.0/">
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-04T09:32:40Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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=
+ </xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+ </rdf:RDF>
+ </x:xmpmeta>
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d'?><x:xmpmeta xmlns:x='adobe:ns:meta/' x:xmptk='XMP toolkit 3.0-29, framework 1.6'>
+<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'>
+
+ <rdf:Description rdf:about=''
+ xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:tiff='http://ns.adobe.com/tiff/1.0/'>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:xap='http://ns.adobe.com/xap/1.0/'
+ xmlns:xapGImg='http://ns.adobe.com/xap/1.0/g/img/'>
+ <xap:CreateDate>2005-04-04T07:58:17Z</xap:CreateDate>
+ <xap:ModifyDate>2005-04-20T12:01:04Z</xap:ModifyDate>
+ <xap:CreatorTool>Illustrator</xap:CreatorTool>
+ <xap:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType='Resource'>
+ <xapGImg:format>JPEG</xapGImg:format>
+ <xapGImg:width>256</xapGImg:width>
+ <xapGImg:height>256</xapGImg:height>
+ <xapGImg:image>/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</xapGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xap:Thumbnails>
+ </rdf:Description>
+
+ <rdf:Description rdf:about=''
+ xmlns:dc='http://purl.org/dc/elements/1.1/'>
+ <dc:format>image/svg+xml</dc:format>
+ </rdf:Description>
+
+</rdf:RDF>
+</x:xmpmeta>
+ <?xpacket end='w'?>
+ </metadata>
+ <g id="_x30_1">
+ <rect fill="none" width="352" height="352"/>
+ </g>
+ <g id="_x32_7">
+ <path d="M82.136,289.623c-2.612,0-5.184-0.329-7.715-0.984v-4.279c2.772,0.754,5.231,1.131,7.378,1.131
+ c2.035,0,3.625-0.457,4.771-1.37s1.718-2.211,1.718-3.894c0-1.586-0.473-2.832-1.418-3.738c-0.945-0.904-2.7-2.086-5.263-3.545
+ c-2.804-1.569-4.695-3.151-5.672-4.746c-0.978-1.594-1.466-3.408-1.466-5.442c0-3.237,1.085-5.668,3.257-7.295
+ c2.171-1.626,5.003-2.438,8.496-2.438c2.532,0,4.863,0.24,6.994,0.722v4.183c-2.259-0.514-4.358-0.771-6.297-0.771
+ c-1.762,0-3.172,0.418-4.229,1.25c-1.058,0.834-1.586,1.988-1.586,3.462c0,1.426,0.46,2.567,1.382,3.425
+ c0.922,0.857,2.496,1.902,4.723,3.137c3.076,1.715,5.135,3.373,6.177,4.975c1.041,1.603,1.562,3.404,1.562,5.408
+ c0,3.604-1.069,6.309-3.208,8.11C89.601,288.723,86.398,289.623,82.136,289.623z"/>
+ <path d="M119.364,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.03-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.77,2.252,2.656,6.414,2.656,12.486h-15.309c0,3.012,0.577,5.271,1.73,6.776
+ s2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227L119.364,288.396L119.364,288.396z M105.184,273.04h8.892
+ c0-3.302-0.353-5.576-1.057-6.826c-0.705-1.249-1.73-1.874-3.077-1.874c-1.506,0-2.651,0.674-3.437,2.02
+ C105.719,267.705,105.28,269.932,105.184,273.04z"/>
+ <path d="M125.805,289.238v-28.096h3.797l1.273,4.662c0.785-1.634,1.867-2.863,3.245-3.689c1.378-0.824,3.052-1.236,5.023-1.236
+ c0.513,0,0.889,0.016,1.129,0.049v5.383c-0.897-0.063-1.554-0.097-1.971-0.097c-2.163,0-3.701,0.478-4.614,1.431
+ s-1.37,2.527-1.37,4.724v16.87H125.805L125.805,289.238z"/>
+ <path d="M145.104,289.238v-24.273h-3.101v-3.82h9.589v28.094H145.104L145.104,289.238z M148.348,257.635
+ c-1.057,0-1.918-0.297-2.583-0.89s-0.997-1.378-0.997-2.354c0-0.978,0.332-1.764,0.997-2.355s1.526-0.889,2.583-0.889
+ c1.025,0,1.883,0.305,2.572,0.912c0.689,0.608,1.033,1.387,1.033,2.332c0,0.992-0.336,1.781-1.009,2.366
+ C150.271,257.342,149.405,257.635,148.348,257.635z"/>
+ <path d="M178.197,288.396c-2.692,0.816-5.488,1.227-8.388,1.227c-4.198,0-7.346-1.21-9.445-3.629
+ c-2.099-2.42-3.148-6.049-3.148-10.889c0-4.276,1.029-7.742,3.088-10.395c2.059-2.65,4.931-3.979,8.616-3.979
+ c3.396,0,5.98,1.127,7.75,3.377c1.771,2.252,2.656,6.414,2.656,12.486h-15.31c0,3.012,0.577,5.271,1.73,6.776
+ c1.153,1.506,2.884,2.259,5.191,2.259c1.923,0,4.342-0.408,7.258-1.227v3.992H178.197z M164.018,273.04h8.893
+ c0-3.302-0.353-5.576-1.058-6.826c-0.705-1.249-1.73-1.874-3.076-1.874c-1.506,0-2.652,0.674-3.437,2.02
+ C164.555,267.705,164.114,269.932,164.018,273.04z"/>
+ <path d="M190.693,289.623c-2.402,0-4.989-0.329-7.762-0.984v-4.184c2.739,0.834,4.998,1.25,6.776,1.25
+ c1.649,0,2.894-0.324,3.726-0.975c0.834-0.647,1.25-1.621,1.25-2.92c0-0.769-0.231-1.484-0.697-2.149
+ c-0.465-0.665-1.777-1.542-3.94-2.632c-1.458-0.754-2.624-1.446-3.497-2.079c-0.873-0.634-1.599-1.454-2.175-2.464
+ c-0.577-1.01-0.865-2.268-0.865-3.772c0-2.5,0.921-4.454,2.765-5.864c1.843-1.41,4.205-2.115,7.09-2.115
+ c2.498,0,4.773,0.313,6.824,0.938v3.989c-2.002-0.688-3.916-1.033-5.744-1.033c-1.488,0-2.604,0.305-3.34,0.913
+ s-1.104,1.522-1.104,2.739c0,0.642,0.22,1.242,0.66,1.804s1.702,1.354,3.784,2.379c2.916,1.427,4.768,2.82,5.553,4.183
+ c0.785,1.361,1.178,2.867,1.178,4.519c0,2.788-0.896,4.896-2.691,6.319C196.688,288.91,194.092,289.623,190.693,289.623z"/>
+ <path fill="#808080" d="M112.728,302.891h4.747c1.875,0,3.24,0.438,4.098,1.316c0.857,0.876,1.286,2.284,1.286,4.223
+ c0,1.899-0.515,3.357-1.544,4.375c-1.029,1.018-2.497,1.525-4.404,1.525h-1.598v6.479h-2.584L112.728,302.891L112.728,302.891z
+ M115.312,304.607v7.979h1.454c1.169,0,2.031-0.312,2.583-0.931c0.553-0.622,0.829-1.674,0.829-3.155s-0.254-2.501-0.763-3.06
+ c-0.509-0.555-1.304-0.834-2.385-0.834H115.312L115.312,304.607z"/>
+ <rect x="135.898" y="301.786" fill="#808080" width="2.56" height="19.022"/>
+ <path fill="#808080" d="M159.537,318.788c-0.865,1.476-2.211,2.212-4.038,2.212c-1.273,0-2.265-0.359-2.974-1.074
+ c-0.709-0.72-1.063-1.722-1.063-3.012c0-1.33,0.365-2.322,1.094-2.975c0.729-0.653,1.602-1.063,2.62-1.226
+ c1.017-0.166,2.255-0.247,3.713-0.247v-1.646c0-1.625-0.869-2.438-2.607-2.438c-1.001,0-2.223,0.214-3.665,0.638v-1.791
+ c1.45-0.399,2.828-0.601,4.134-0.601c1.538,0,2.706,0.369,3.503,1.112c0.797,0.738,1.195,1.83,1.195,3.273v9.793h-1.394
+ L159.537,318.788z M158.888,313.994h-1.43c-1.146,0-2.005,0.242-2.578,0.727c-0.573,0.485-0.859,1.209-0.859,2.17
+ c0,0.785,0.174,1.371,0.523,1.762c0.348,0.387,0.871,0.582,1.568,0.582c0.881,0,1.564-0.28,2.049-0.842
+ c0.485-0.562,0.727-1.322,0.727-2.283V313.994z"/>
+ <path fill="#808080" d="M181.83,320.566c-1.074,0.289-2.083,0.434-3.028,0.434c-1.09,0-1.887-0.256-2.392-0.764
+ c-0.505-0.51-0.757-1.319-0.757-2.434v-9.302h-1.838v-0.961l3.737-3.81h0.661v3.101h3.4v1.67h-3.4v8.882
+ c0,0.76,0.124,1.262,0.372,1.508c0.248,0.244,0.625,0.365,1.13,0.365c0.521,0,1.227-0.115,2.115-0.349V320.566L181.83,320.566z"
+ />
+ <path fill="#808080" d="M198.402,301.594c0.81,0,1.595,0.096,2.354,0.287v1.742c-0.753-0.24-1.382-0.359-1.887-0.359
+ c-0.802,0-1.306,0.254-1.515,0.762c-0.209,0.511-0.313,1.445-0.313,2.808h2.561v1.67h-2.561v12.306h-2.561v-12.306h-1.693v-1.67
+ h1.693c0-2.123,0.324-3.526,0.975-4.211C196.107,301.936,197.089,301.594,198.402,301.594L198.402,301.594z"/>
+ <path fill="#808080" d="M216.611,321c-1.883,0-3.293-0.617-4.229-1.852c-0.938-1.233-1.405-3.084-1.405-5.551
+ c0-2.148,0.485-3.847,1.459-5.097c0.975-1.249,2.367-1.874,4.178-1.874c1.826,0,3.222,0.616,4.187,1.852
+ c0.966,1.232,1.449,2.955,1.449,5.166c0,2.275-0.451,4.069-1.353,5.385C219.994,320.344,218.566,321,216.611,321z
+ M216.611,319.354c0.986,0,1.729-0.445,2.229-1.34c0.501-0.893,0.752-2.39,0.752-4.488c0-1.481-0.256-2.726-0.769-3.731
+ c-0.513-1.004-1.25-1.507-2.212-1.507c-0.978,0-1.719,0.451-2.223,1.357c-0.506,0.904-0.758,2.199-0.758,3.881
+ c0,1.892,0.252,3.334,0.758,4.332C214.895,318.854,215.635,319.354,216.611,319.354z"/>
+ <path fill="#808080" d="M236.909,306.832l0.589,2.331c0.777-1.644,2.131-2.464,4.063-2.464c0.256,0,0.444,0.013,0.564,0.035
+ v2.332c-0.201-0.016-0.501-0.023-0.9-0.023c-1.099,0-1.904,0.262-2.416,0.788c-0.514,0.522-0.77,1.343-0.77,2.456v8.521h-2.561
+ v-13.977H236.909z"/>
+ <path fill="#808080" d="M272.073,320.809h-2.56v-9.627c0-0.929-0.177-1.629-0.523-2.096c-0.35-0.471-0.871-0.704-1.568-0.704
+ c-0.896,0-1.588,0.353-2.072,1.058s-0.728,1.623-0.728,2.752v8.617h-2.56v-9.627c0-0.929-0.18-1.629-0.535-2.096
+ c-0.356-0.471-0.891-0.704-1.604-0.704c-0.881,0-1.563,0.356-2.043,1.069s-0.721,1.627-0.721,2.74v8.615h-2.56v-13.976h1.43
+ l0.517,2.065c0.856-1.514,2.163-2.271,3.918-2.271c0.929,0,1.699,0.177,2.313,0.528c0.611,0.353,1.063,0.881,1.353,1.586
+ c0.793-1.409,2.063-2.114,3.81-2.114c1.379,0,2.412,0.372,3.101,1.117s1.034,1.858,1.034,3.341L272.073,320.809L272.073,320.809z
+ "/>
+ <path fill="#0F3AAC" d="M228.208,242.369c2.563,0,4.944,0.191,7.146,0.576v5.576c-1.942-0.428-4.047-0.642-6.313-0.642
+ c-3.354,0-5.977,1.181-7.867,3.541c-1.89,2.36-3.049,5.901-3.477,10.623c2.072-2.009,4.935-3.013,8.588-3.013
+ c4.102,0,7.221,1.303,9.357,3.908c2.135,2.606,3.203,6.334,3.203,11.185c0,5.362-1.309,9.544-3.926,12.546
+ c-2.615,3.001-6.393,4.502-11.327,4.502c-4.934,0-8.657-1.752-11.168-5.255c-2.51-3.504-3.765-9.313-3.765-17.433
+ c0-7.989,1.677-14.34,5.029-19.051C217.046,244.725,221.885,242.369,228.208,242.369L228.208,242.369z M223.594,285.854
+ c2.157,0,3.771-0.828,4.84-2.482c1.066-1.655,1.602-4.674,1.602-9.053c0-3.291-0.502-5.764-1.506-7.418
+ c-1.004-1.656-2.51-2.483-4.52-2.483c-2.093,0-3.689,0.79-4.789,2.371c-1.102,1.581-1.65,3.76-1.65,6.536
+ c0,3.332,0.225,5.849,0.673,7.547c0.448,1.699,1.116,2.953,2.003,3.766S222.248,285.854,223.594,285.854z"/>
+ <path fill="#0F3AAC" d="M260.316,242.369c4.935,0,8.662,1.752,11.184,5.255c2.521,3.504,3.781,9.688,3.781,18.554
+ c0,9.721-1.276,16.316-3.829,19.789c-2.554,3.471-6.318,5.206-11.296,5.206c-4.358,0-7.647-1.153-9.87-3.461
+ c-2.222-2.308-3.669-5.224-4.343-8.748c-0.672-3.524-1.008-7.786-1.008-12.786c0-8.693,1.291-14.836,3.877-18.425
+ C251.396,244.164,255.232,242.369,260.316,242.369z M260.092,285.854c2.18,0,3.776-1.223,4.791-3.668
+ c1.016-2.447,1.521-7.781,1.521-16.008c0-7.904-0.522-12.962-1.569-15.173s-2.628-3.315-4.743-3.315
+ c-1.922,0-3.338,0.77-4.244,2.308c-0.908,1.538-1.476,3.546-1.699,6.024c-0.225,2.478-0.336,5.863-0.336,10.156
+ c0,8.461,0.502,13.854,1.506,16.184C256.32,284.689,257.913,285.854,260.092,285.854z"/>
+ <g>
+ <polygon fill="#FFCC00" points="83.551,301.553 74.234,306.654 84.862,311.665 93.57,305.768 "/>
+ <polygon fill="#FF9900" points="74.234,306.654 75.357,318.456 85.331,323.65 84.862,311.665 "/>
+
+ <linearGradient id="XMLID_67_" gradientUnits="userSpaceOnUse" x1="-47.1431" y1="278.7324" x2="-37.1689" y2="278.7324" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_67_)" points="75.357,318.456 85.331,323.65 84.862,311.665 "/>
+ <polygon fill="#F27C0E" points="93.57,305.768 84.862,311.665 85.331,323.65 93.57,317.564 "/>
+ </g>
+ <g>
+ <polygon fill="#ABDD99" points="176.811,84.505 148.321,102.182 181.396,117.244 208.896,97.272 "/>
+ <polygon fill="#46AB48" points="148.321,102.182 150.291,142.135 181.721,157.521 181.396,117.244 "/>
+ <polygon fill="#16923B" points="208.896,97.272 181.396,117.244 181.721,157.521 208.245,134.602 "/>
+ </g>
+ <g>
+ <polygon fill="#FF6699" points="145.842,103.821 115.717,121.831 150.423,140.17 179.566,119.212 "/>
+ <polygon fill="#FF0066" points="150.423,140.17 115.717,121.831 119.646,166.366 152.395,184.371 "/>
+ <polygon fill="#BE0151" points="179.566,119.212 150.423,140.17 152.395,184.371 179.896,159.818 "/>
+ </g>
+ <g>
+ <polygon fill="#F5F661" points="250.023,114.932 212.693,99.54 185.518,119.518 222.518,136.871 "/>
+ <polygon fill="#FFF500" points="185.518,119.518 185.846,160.119 222.193,178.786 222.518,136.871 "/>
+ <polygon fill="#FFCC00" points="222.518,136.871 222.193,178.786 248.391,154.223 250.023,114.932 "/>
+ </g>
+ <g>
+ <polygon fill="#BFE230" points="153.919,143.233 183.227,122.111 220.314,139.299 191.896,163.205 "/>
+ <polygon fill="#84C322" points="153.919,143.233 155.552,187.436 191.572,207.083 191.896,163.205 "/>
+ <polygon fill="#5DAA3B" points="191.896,163.205 191.572,207.083 219.734,181.211 220.314,139.299 "/>
+ </g>
+ <g>
+ <polygon fill="#99FF66" points="147.897,58.767 176.792,42.482 210.77,55.167 182.688,73.26 "/>
+ <polygon fill="#66CC33" points="147.897,58.767 148.881,99.045 182.277,114.76 182.688,73.26 "/>
+ <polygon fill="#669900" points="182.688,73.26 182.277,114.76 209.783,94.787 210.77,55.167 "/>
+ </g>
+ <g>
+ <polygon fill="#CC66FF" points="185.191,74.515 222.688,91.457 251.824,70.171 212.861,56.423 "/>
+ <polygon fill="#6F348E" points="222.927,91.133 221.895,133.763 249.195,111.758 251.742,70.171 "/>
+ <polygon fill="#9933CC" points="184.781,74.515 184.287,116.015 221.895,133.763 222.927,91.133 "/>
+ </g>
+ <g>
+ <polygon fill="#FFCC00" points="127.601,43.202 95.021,61.047 132.182,78.564 162.633,57.936 "/>
+ <polygon fill="#FF9900" points="95.021,61.047 98.945,102.306 133.82,120.476 132.182,78.564 "/>
+
+ <linearGradient id="XMLID_68_" gradientUnits="userSpaceOnUse" x1="-23.5552" y1="496.8701" x2="11.3198" y2="496.8701" gradientTransform="matrix(1 0 0 -1 122.5 596.3906)">
+ <stop offset="0" style="stop-color:#FFCC66"/>
+ <stop offset="1" style="stop-color:#FF9900"/>
+ <a:midPointStop offset="0" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="0.5" style="stop-color:#FFCC66"/>
+ <a:midPointStop offset="1" style="stop-color:#FF9900"/>
+ </linearGradient>
+ <polygon fill="url(#XMLID_68_)" points="98.945,102.306 133.82,120.476 132.182,78.564 "/>
+ <polygon fill="#F27C0E" points="162.633,57.936 132.182,78.564 133.82,120.476 162.633,99.189 "/>
+ </g>
+ <g>
+ <polygon fill="#0099FF" points="152.426,97.736 154.061,139.652 192.048,159.625 192.048,116.076 "/>
+ <polygon fill="#00CCFF" points="152.426,97.736 183.527,77.107 221.434,93.402 192.048,116.076 "/>
+ <polygon fill="#0066FF" points="192.048,116.076 192.048,159.625 220.443,136.396 221.434,93.402 "/>
+ </g>
+ </g>
+ </svg>
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10000.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10001.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10002.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10003.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10004.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10005.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10006.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10007.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10008.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10009.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10010.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10011.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10012.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10013.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10014.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10015.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10016.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10017.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10018.bmp has changed
Binary file scrsaver/scrsaverplugins/BmpAnimScrPlugin/srcdata/series60/SS10019.bmp has changed
Binary file scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/cenrep/1020744E.txt has changed
Binary file scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/cenrep/keys_screensaveranimplugin.xls has changed
Binary file scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/conf/screensaveranimplugin.confml has changed
Binary file scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/conf/screensaveranimplugin_1020744E.crml has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/data/10207447.rss Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,59 @@
+/*
+* 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 <ecom/registryinfo.rh>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/data/ScreenSaverAnimPlugin.rss Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,378 @@
+/*
+* 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 <eikon.rh>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <aknsconstants.hrh>
+#include <pathconfiguration.hrh>
+#include <avkon.loc>
+#include "ScreenSaverAnimCustControl.rh"
+#include <screensaveranimplugin.loc>
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/group/ScreenSaverAnimPlugin.mmp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,95 @@
+/*
+* 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 <bldvariant.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/group/bld.inf Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,43 @@
+/*
+* 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 <platform_paths.hrh>
+
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/NpnImplementation.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,140 @@
+/*
+* 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 <e32std.h>
+#include <e32base.h>
+#include <eikenv.h>
+#include <npupp.h>
+#include <sysutil.h>
+
+
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimCustControl.rh Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,41 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPlugin.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,576 @@
+/*
+* 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 <gdi.h>
+#include <ScreensaverpluginIntDef.h>
+#include <coecntrl.h>
+#include <e32cmn.h>
+#include <screensaverplugin.h>
+#include <coecobs.h>
+#include <npupp.h>
+#include <ecom/implementationinformation.h>
+#include <CEcomBrowserPluginInterface.h>
+#include <PluginAdapterInterface.h>
+#include <flogger.h>
+
+
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPlugin.hrh Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,46 @@
+/*
+* 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 <avkon.hrh>
+
+
+// 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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginConst.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,63 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginContainer.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,160 @@
+/*
+* 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 <coeccntx.h>
+#include <eikclb.h>
+#include <eiklbo.h>
+
+// 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginHelper.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,144 @@
+/*
+* 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 <e32base.h>
+#include <MMGFetchVerifier.h>
+#include <cenrepnotifyhandler.h>
+
+// 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginImplementationUid.hrh Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,29 @@
+/*
+* 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
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimPluginInternalCRKeys.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,37 @@
+/*
+* 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
+
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/ScreenSaverAnimSettingDialog.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,192 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/inc/screensaver.hlp.hrh Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,35 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/loc/screensaveranimplugin.loc Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,141 @@
+/*
+* 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"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/rom/ScreenSaverAnimPlugin.iby Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,32 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/rom/ScreenSaverAnimPluginResources.iby Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,32 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/NpnImplementation.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,286 @@
+/*
+* 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
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPlugin.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,1571 @@
+/*
+* 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 <eikenv.h>
+#include <bautils.h>
+#include <apgcli.h>
+#include <data_caging_path_literals.hrh>
+#include <centralrepository.h>
+#include <DRMHelper.h>
+#include <aknnotewrappers.h>
+#include <aknnavi.h>
+#include <aknnavide.h>
+#include <npupp.h>
+#include <CEcomBrowserPluginInterface.h>
+#include <BrowserPluginInterface.h>
+#include <mmf/common/mmfcontrollerpluginresolver.h>
+#include <DRMHelperServerInternalCRKeys.h>
+#include <NPNExtensions.h>
+#include <screensaveranimplugin.rsg>
+#include <coecntrl.h>
+#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 (;i<end;)
+ } // end of outer for (;i<end;)
+
+ return EFalse;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CScreenSaverAnimPlugin::DeletePlugin
+// -----------------------------------------------------------------------------
+//
+void CScreenSaverAnimPlugin::DeletePlugin()
+ {
+#ifdef SCREENSAVER_LOG_ENABLED
+ _LIT( msg, "delete called " );
+ PrintDebugMsg( msg );
+#endif
+ if ( iPluginFuncs )
+ {
+ iPluginFuncs->destroy( 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<KMaxBufLen> 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<KMaxBufLen> 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<KMaxBufLen> 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.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPluginContainer.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,614 @@
+/*
+* 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 <aknlists.h>
+#include <akntitle.h>
+#include <aknslider.h>
+#include <aknsettingpage.h>
+#include <aknslidersettingpage.h>
+#include <CFLDFileListContainer.h>
+#include <MGFetch.h>
+#include <DRMHelper.h>
+#include <screensaveranimplugin.rsg>
+#include <barsread.h>
+#include <centralrepository.h>
+
+#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<CAknTitlePane*>(
+ 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPluginHelper.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,355 @@
+/*
+* 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 <DRMHelper.h>
+#include <coemain.h>
+#include <apgcli.h>
+#include <barsread.h>
+#include <aknnotewrappers.h>
+#include <centralrepository.h>
+
+#include <screensaveranimplugin.rsg>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimPluginProxy.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,51 @@
+/*
+* 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 <e32std.h>
+#include <ecom/implementationproxy.h>
+#include <coecntrl.h>
+#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
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverAnimPlugin/src/ScreenSaverAnimSettingDialog.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,470 @@
+/*
+* 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 <uikon/eikctrlstatus.h>
+#endif
+#include <e32std.h>
+#include <AknDialog.h>
+#include <coeaui.h>
+#include <eikenv.h>
+#include <bautils.h>
+#include <eikdialg.h>
+#include <eikmenup.h>
+#include <eikspane.h>
+
+#ifdef __SERIES60_HELP
+#include <hlplch.h>
+#endif // __SERIES60_HELP
+
+#ifdef __SERIES60_HELP
+// Help Context UID = DLL UID3
+const TUid KScreenSaverAnimPluginHelpContextUid = { 0x10207447 };
+#endif // __SERIES60_HELP
+
+#include <coeaui.h>
+#include <AknWaitNoteWrapper.h>
+#include <aknnotewrappers.h>
+#include <akntitle.h>
+#include <data_caging_path_literals.hrh>
+#include <StringLoader.h>
+#include <screensaveranimplugin.rsg>
+//-----------
+// 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/BWINSCW/ScreenSaverGifAnimPluginU.def Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,3 @@
+EXPORTS
+ ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/EABI/ScreenSaverGifAnimPluginU.def Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,9 @@
+EXPORTS
+ _Z24ImplementationGroupProxyRi @ 1 NONAME
+ _ZTI19CGifAnimationPlugin @ 2 NONAME ; #<TI>#
+ _ZTI26CGifAnimationPluginControl @ 3 NONAME ; #<TI>#
+ _ZTI27CGifAnimationPluginEcomMain @ 4 NONAME ; #<TI>#
+ _ZTV19CGifAnimationPlugin @ 5 NONAME ; #<VT>#
+ _ZTV26CGifAnimationPluginControl @ 6 NONAME ; #<VT>#
+ _ZTV27CGifAnimationPluginEcomMain @ 7 NONAME ; #<VT>#
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/group/ScreenSaverGifAnimPluginEcom.mmp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,64 @@
+/*
+* 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 <platform_paths.hrh>
+
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/group/bld.inf Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,34 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/inc/GifAnimationPlugin.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,430 @@
+/*
+* 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 <e32std.h>
+#include <coecntrl.h>
+#include <coemain.h>
+#include <fbs.h>
+#include <barsread.h>
+
+#include <npupp.h>
+#include <PluginAdapterInterface.h>
+#include <CEcomBrowserPluginInterface.h>
+#include <MIHLViewerObserver.h>
+
+
+// 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 <code>CGifAnimationPluginControl</code>
+ */
+ 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/inc/GifAnimationUtils.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,58 @@
+/*
+* 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 <e32base.h>
+#include <aknnotewrappers.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/resource/102750B5.rss Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,63 @@
+/*
+* 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 <ecom/registryinfo.rh>
+
+
+
+// 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
+ }
+ };
+ }
+ };
+ }
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/rom/ScreenSaverGifAnimPlugin.iby Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,32 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPlugin.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,145 @@
+/*
+* 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 <e32std.h>
+#include <eikenv.h>
+#include <barsread.h>
+#include <fbs.h>
+#include <gdi.h>
+#include <f32file.h>
+#include <CEcomBrowserPluginInterface.h>
+
+#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<MPluginAdapter*>( 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;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPluginControl.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,603 @@
+/*
+* 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 <eikenv.h>
+#include <w32std.h>
+#include <e32base.h>
+#include <e32std.h>
+
+#include <IHLImageFactory.h> // IHLImageFactory
+#include <IHLViewerFactory.h> // IHLViewerFactory
+#include <MIHLImageViewer.h> // MIHLImageViewer
+#include <MIHLFileImage.h> // MIHLFileImage
+#include <MIHLBitmap.h> // MIHLBitmap
+#include <MIHLImageViewer.h> // MIHLImageViewer
+#include <MIHLViewerObserver.h>
+#include <bautils.h>
+
+#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()
+ {
+ if ( iSourceImage )
+ {
+ 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;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPluginDllApi.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,278 @@
+/*
+* 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.h> // 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;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/ScreenSaverGifAnimPlugin/src/GifAnimationPluginMain.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,155 @@
+/*
+* 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 <ecom/implementationproxy.h>
+#include <CEcomBrowserPluginInterface.h>
+
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/data/102823EC.rss Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,58 @@
+/*
+* 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 <ecom/registryinfo.rh>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/data/SlideshowPlugin.rss Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,128 @@
+/*
+* 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 <eikon.rh>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <aknsconstants.hrh>
+#include <pathconfiguration.hrh>
+#include <avkon.loc>
+#include <slideshowplugin.loc>
+
+// ---------------------------------------------------------
+//
+// 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
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/group/ABLD.BAT Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,15 @@
+@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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/group/SlideshowPlugin.mmp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,96 @@
+/*
+* 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 <bldvariant.hrh>
+#include <data_caging_paths.hrh>
+#include <platform_paths.hrh>
+
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/group/bld.inf Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,35 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowModel.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,258 @@
+/*
+* 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 <e32base.h>
+
+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 <aIndex>. 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 <aIndex>.
+ *
+ * @param aIndex The slide at <aIndex> will be delete.
+ */
+ void DeleteSlide(TInt aIndex);
+
+ /*
+ * Delete all slides.
+ */
+ void DeleteAll();
+
+ /*
+ * Get slide at position <aIndex>.
+ *
+ * @return a slide at position <aIndex>.
+ */
+ 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 <aCount> 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<CSlideshowSlide>* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowPlugin.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,327 @@
+/*
+* 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 <gdi.h>
+#include <coecntrl.h>
+#include <e32cmn.h>
+#include <coecobs.h>
+#include <AknsSrvClient.h>
+#include <ScreensaverpluginIntDef.h>
+#include <screensaverplugin.h>
+#include <ScreensaverInternalPSKeys.h>
+
+#include <MCLFOperationObserver.h>
+#include <MCLFContentListingEngine.h>
+#include <MCLFItemListModel.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowPluginImpUID.hrh Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,28 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowPluginUtils.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,283 @@
+/*
+* 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 <e32base.h>
+#include <cenrepnotifyhandler.h>
+#include <e32property.h>
+
+#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 <e32std.h>
+#include <e32def.h>
+#include <eikenv.h>
+#include <flogger.h>
+
+
+/* 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<const TDesC> 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<const TDesC> /*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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowSlide.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,112 @@
+/*
+* 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 <e32base.h> // e32def, e32std
+#include <e32cmn.h>
+#include <fbs.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/inc/SlideshowSlideLoader.h Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,78 @@
+/*
+* 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 <e32std.h>
+#include <fbs.h>
+#include <f32file.h>
+#include <bautils.h>
+#include <coemain.h>
+#include <e32base.h>
+#include <bitstd.h>
+#include <imageconversion.h>
+
+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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/loc/slideshowplugin.loc Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,71 @@
+/*
+* 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"
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/rom/SlideshowPlugin.iby Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,29 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/rom/SlideshowPluginResources.iby Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,29 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowModel.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,441 @@
+/*
+* 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 <e32math.h>
+#include <eikenv.h>
+#include <bautils.h>
+
+#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<CSlideshowSlide>(
+ 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPlugin.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,1083 @@
+/*
+* 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 <eikenv.h>
+#include <bautils.h>
+#include <data_caging_path_literals.hrh>
+#include <centralrepository.h>
+#include <DRMHelper.h>
+
+// #include <aknnotewrappers.h> AppendSlideL
+// #include <aknnavi.h>
+// #include <aknnavide.h>
+// #include <mmfcontrollerpluginresolver.h>
+#include <DRMHelperServerInternalCRKeys.h>
+#include <mmf/common/mmfcontrollerpluginresolver.h> // For CleanupResetAndDestroyPushL
+#include <pslninternalcrkeys.h>
+#include <pslnslidesetdialoginterface.h>
+
+// #include <NPNExtensions.h>
+#include <coecntrl.h>
+#include <ecom/ecom.h>
+
+#include <ContentListingFactory.h>
+#include <MCLFItem.h>
+
+#include <slideshowplugin.rsg>
+
+#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<TInt> 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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPluginProxy.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,53 @@
+/*
+* 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 <e32std.h>
+#include <ecom/implementationinformation.h>
+#include <ecom/implementationproxy.h>
+#include <coecntrl.h>
+#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
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowPluginUtils.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,327 @@
+/*
+* 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 <centralrepository.h>
+#include <f32fsys.h>
+#include <eikenv.h>
+#include <pathinfo.h>
+#include <DRMHelper.h>
+#include <caf/caftypes.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowSlide.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,123 @@
+/*
+* 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/SlideshowPlugin/src/SlideshowSlideLoader.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,286 @@
+/*
+* 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;
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scrsaver/scrsaverplugins/group/bld.inf Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,24 @@
+/*
+* 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"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Screensaver.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,105 @@
+/*
+* 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 <eikstart.h>
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaver.rss Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,405 @@
+/*
+* 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 <eikon.rh>
+#include <avkon.rh>
+#include <avkon.mbg>
+#include <avkon.hrh>
+#include <avkon.rsg>
+#include <aknsconstants.hrh>
+
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverappui.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,216 @@
+/*
+* 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 <eikenv.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverbase.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,336 @@
+/*
+* 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 <coecntrl.h>
+#include <power_save_display_mode.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverctrlmovingtext.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,587 @@
+/*
+* 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 <e32def.h>
+#include <eikdef.h>
+#include <AknUtils.h>
+#include <e32math.h>
+#include <aknlayoutscalable_avkon.cdl.h>
+#include <screensaver.rsg>
+
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverctrlnone.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,172 @@
+/*
+* 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 <screensaverplugin.h>
+#include <hal.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverctrlplugin.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,638 @@
+/*
+* 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 <AknDef.h>
+#include <power_save_display_mode.h>
+
+#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(<rect>, %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 );
+ }
+
+ 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverengine.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,768 @@
+/*
+* 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 <barsread.h>
+#include <activitymanager.h>
+#include <featmgr.h>
+#include <PUAcodes.hrh>
+#include <Profile.hrh>
+#include <screensaver.rsg>
+#include <AknUtils.h>
+
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverindicator.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,220 @@
+/*
+* 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 <AknUtils.h>
+#include <barsread.h>
+#include <biditext.h>
+#include <AknsConstants.h>
+#include <AknsUtils.h>
+#include <aknlayout.cdl.h>
+#include <AknLayoutFont.h>
+#include <screensaver.rsg>
+
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverindicatorarray.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,498 @@
+/*
+* 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 <barsread.h>
+#include <screensaver.rsg>
+#include <AknUtils.h>
+
+#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<CScreensaverIndicator>( iCount );
+ iDependencyRecord = new( ELeave ) CArrayFixFlat<TBool>( 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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverindicatoricon.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,218 @@
+/*
+* 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 <AknsUtils.h>
+#include <barsread.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverindicatornumberandicon.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,434 @@
+/*
+* 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 <barsread.h>
+#include <AknsUtils.h>
+#include <AknLayoutFont.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverindicatortext.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,234 @@
+/*
+* 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 <AknLayoutFont.h>
+#include <barsread.h>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverrepositorywatcher.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,171 @@
+/*
+* 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 <centralrepository.h>
+
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensavershareddatai.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,918 @@
+/*
+* 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 <msvids.h>
+#include <MProfileName.h> // Profile API, not yet included in .h
+#include <MProfileTones.h>
+#include <TProfileToneSettings.h>
+#include <centralrepository.h>
+#include <coreapplicationuisdomainpskeys.h> // KCoreAppUIsUipInd, KLightsVTForcedLightsOn
+#include <activeidle2domainpskeys.h> // KPSUidAiInformation
+#include <SettingsInternalCRKeys.h> // KSettingsScreenSaverPeriod
+#include <LogsDomainCRKeys.h> // KLogsNewMissedCalls
+#include <ScreensaverInternalCRKeys.h>
+#include <AvkonInternalCRKeys.h> // KAknNewContactsNoteActive
+#include <avkondomainpskeys.h> // KAknKeyguardStatus
+#include <ctsydomaincrkeys.h> // Message (voice) waiting status
+#include <startupdomainpskeys.h> // KPSGlobalSystemState
+#include <AknSkinsInternalCRKeys.h>
+#include <MProfileEngine.h> // Profile engine API
+#include <MProfile.h>
+#include <NcnListDomainCRKeys.h>
+
+#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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensavershareddatamonitor.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,283 @@
+/*
+* 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 <coemain.h>
+#include <ScreensaverInternalCRKeys.h>
+#include <UsbWatcherInternalPSKeys.h>
+#include <avkondomainpskeys.h> // kaknkeyguardstatus
+#include <ctsydomainpskeys.h> // kpsuidctsycallinformation
+#include <startupdomainpskeys.h> // kpsglobalsystemstate
+#include <ScreensaverInternalPSKeys.h>
+#include <UikonInternalPSKeys.h> // kuikmmcinserted
+
+#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2
+#include <akntransitionutils.h>
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaversubscriber.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,86 @@
+/*
+* 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.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverutility.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,223 @@
+/*
+* 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 <coecntrl.h>
+#include <akntranseffect.h>
+#include <data_caging_path_literals.hrh>
+#include <gulicon.h>
+
+#ifdef RD_UI_TRANSITION_EFFECTS_PHASE2
+#include <akntransitionutils.h>
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/screensaverview.cpp Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,261 @@
+/*
+* 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 <power_save_display_mode.h>
+#include <screensaver.rsg>
+
+#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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysdef_1_4_0.dtd Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,86 @@
+ <!ELEMENT SystemDefinition (systemModel?, build?)>
+ <!ATTLIST SystemDefinition
+ name CDATA #REQUIRED
+ schema CDATA #REQUIRED>
+ <!ELEMENT systemModel (layer+)>
+ <!ELEMENT layer (logicalset* | module*)*>
+ <!ATTLIST layer
+ name CDATA #REQUIRED
+ levels CDATA #IMPLIED
+ span CDATA #IMPLIED>
+ <!ELEMENT logicalset (logicalsubset* | module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalset name CDATA #REQUIRED>
+ <!ELEMENT logicalsubset (module* | unit* | package* | prebuilt*)*>
+ <!ATTLIST logicalsubset name CDATA #REQUIRED>
+ <!ELEMENT module (component* | unit* | package* | prebuilt*)*>
+ <!ATTLIST module
+ name CDATA #REQUIRED
+ level CDATA #IMPLIED>
+ <!ELEMENT component (unit* | package* | prebuilt*)*>
+ <!ATTLIST component name CDATA #REQUIRED>
+ <!ELEMENT unit EMPTY>
+ <!ATTLIST unit
+ unitID ID #REQUIRED
+ name CDATA #REQUIRED
+ mrp CDATA #REQUIRED
+ filter CDATA #IMPLIED
+ bldFile CDATA #REQUIRED
+ priority CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT package EMPTY>
+ <!ATTLIST package
+ name CDATA #REQUIRED
+ mrp CDATA #REQUIRED
+ filter CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT prebuilt EMPTY>
+ <!ATTLIST prebuilt
+ name CDATA #REQUIRED
+ version CDATA #REQUIRED
+ late (Y|N) #IMPLIED
+ filter CDATA #IMPLIED
+ contract CDATA #IMPLIED>
+ <!ELEMENT build (option* | target+ | targetList+ | unitList+ | configuration+)*>
+ <!ELEMENT unitList (unitRef+)>
+ <!ATTLIST unitList
+ name ID #REQUIRED
+ description CDATA #REQUIRED>
+ <!ELEMENT unitRef EMPTY>
+ <!ATTLIST unitRef unit IDREF #REQUIRED>
+ <!ELEMENT targetList EMPTY>
+ <!ATTLIST targetList
+ name ID #REQUIRED
+ description CDATA #REQUIRED
+ target IDREFS #REQUIRED>
+ <!ELEMENT target EMPTY>
+ <!ATTLIST target
+ name ID #REQUIRED
+ abldTarget CDATA #REQUIRED
+ description CDATA #REQUIRED>
+ <!ELEMENT option EMPTY>
+ <!ATTLIST option
+ name ID #REQUIRED
+ abldOption CDATA #REQUIRED
+ description CDATA #REQUIRED
+ enable (Y | N | y | n) #REQUIRED>
+ <!ELEMENT configuration (unitListRef+ | layerRef+ | task+)*>
+ <!ATTLIST configuration
+ name ID #REQUIRED
+ description CDATA #REQUIRED
+ filter CDATA #REQUIRED>
+ <!ELEMENT task ( unitListRef* , (buildLayer | specialInstructions))>
+ <!ELEMENT unitListRef EMPTY>
+ <!ATTLIST unitListRef unitList IDREF #REQUIRED>
+ <!ELEMENT layerRef EMPTY>
+ <!ATTLIST layerRef layerName CDATA #REQUIRED>
+ <!ELEMENT buildLayer EMPTY>
+ <!ATTLIST buildLayer
+ command CDATA #REQUIRED
+ targetList IDREFS #IMPLIED
+ unitParallel (Y | N | y | n) #REQUIRED
+ targetParallel (Y | N | y | n) #IMPLIED>
+ <!ELEMENT specialInstructions EMPTY>
+ <!ATTLIST specialInstructions
+ name CDATA #REQUIRED
+ cwd CDATA #REQUIRED
+ command CDATA #REQUIRED>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/systemDefinition.xml Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,33 @@
+<?xml version="1.0"?>
+<!DOCTYPE SystemDefinition SYSTEM "systemDefinition.dtd"[
+
+ <!ENTITY layer_real_source_path "\sf\app\screensaver">
+ <!ENTITY layer_name "screensaver">
+
+ <!ENTITY layer_file SYSTEM "systemDefinitionLayer.xml">
+ <!ENTITY targetDefinition_file SYSTEM "/epoc32/tools/systemDefinition/targetDefinition.xml">
+ <!ENTITY defaultbuild_file SYSTEM "/epoc32/tools/systemDefinition/default_build.xml">
+ <!ENTITY defaultclean_file SYSTEM "/epoc32/tools/systemDefinition/default_clean.xml">
+]>
+
+<SystemDefinition name="SystemDefinition" schema="1.4.0">
+ <systemModel>
+&layer_file;
+ </systemModel>
+ <build>
+&targetDefinition_file;
+
+ <configuration name="build" description="build layer" filter="">
+ <layerRef layerName="&layer_name;"/>
+
+&defaultbuild_file;
+ </configuration>
+
+ <configuration name="clean" description="clean layer" filter="">
+ <layerRef layerName="&layer_name;"/>
+
+&defaultclean_file;
+ </configuration>
+
+ </build>
+</SystemDefinition>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/systemDefinitionLayer.xml Thu Dec 17 08:46:04 2009 +0200
@@ -0,0 +1,7 @@
+<layer name="screensaver">
+ <module name="group_screensaver">
+ <component name="group_screensaver">
+ <unit unitID="screensaver" mrp="" bldFile="&layer_real_source_path;\group" name="screensaver" />
+ </component>
+ </module>
+</layer>