2 ============================================================================
4 Author : Michael Prager
6 Copyright : Licensed under GPLv3
7 Description : CSkinFetcher implementation
8 ============================================================================
11 #include <AknsUtils.h>
12 #include <AknsDrawUtils.h>
13 #include <ImageConversion.h>
14 #include <AknViewAppUi.h>
15 #include <AknsBasicBackgroundControlContext.h>
16 #include "SkinFetcher.h"
18 CSkinFetcher::CSkinFetcher()
20 // No implementation required
23 CSkinFetcher::~CSkinFetcher()
27 CSkinFetcher
* CSkinFetcher::NewLC()
29 CSkinFetcher
* self
= new (ELeave
) CSkinFetcher();
30 CleanupStack::PushL(self
);
35 CSkinFetcher
* CSkinFetcher::NewL()
37 CSkinFetcher
* self
= CSkinFetcher::NewLC();
38 CleanupStack::Pop(); // self;
42 void CSkinFetcher::ConstructL()
47 void CSkinFetcher::GenerateBackgroundImage(TInt aPosition
,
48 CAknAppUiBase::TAppUiOrientation aOrientation
)
50 CAknAppUiBase::TAppUiOrientation oldOrientation
=
51 iAvkonAppUi
->Orientation();
52 iAvkonAppUi
->SetOrientationL(aOrientation
);
55 if (aOrientation
== CAknViewAppUi::EAppUiOrientationPortrait
)
56 screenSize
= TSize(360, 640);
58 screenSize
= TSize(640, 360);
59 TSize outputSize
= TSize(312, 82);
61 // draw homescreen graphics into offscreen buffer
62 CFbsBitmap
* offScreenBitmap
= new (ELeave
) CFbsBitmap();
63 CleanupStack::PushL(offScreenBitmap
);
64 User::LeaveIfError(offScreenBitmap
->Create(outputSize
, EColor16MA
));
65 CFbsBitmapDevice
* bitmapDevice
= CFbsBitmapDevice::NewL(offScreenBitmap
);
66 CleanupStack::PushL(bitmapDevice
);
68 User::LeaveIfError(bitmapDevice
->CreateContext(bitGc
));
69 CleanupStack::PushL(bitGc
);
72 if (aOrientation
== CAknViewAppUi::EAppUiOrientationPortrait
)
74 for (int i
= 0; i
< COUNT
; i
++)
75 outer
[i
] = TRect(22, 136 + i
* 86, 334, 136 + i
* 86 + 82);
83 * slot1: 322, 50, 634, 132
84 * slot2: 5, 136, 317, 218
86 for (int i
= 0; i
< COUNT
; i
++)
88 outer
[i
] = TRect(5, 50 + (i
+ 1) / 2 * 86, 317, 50 + (i
+ 1)
91 outer
[i
] = TRect(322, 50 + (i
+ 1) / 2 * 86, 634, 50 + (i
+ 1)
95 MAknsSkinInstance
* skin
= AknsUtils::SkinInstance();
96 CAknsBasicBackgroundControlContext
* context
=
97 CAknsBasicBackgroundControlContext::NewL(KAknsIIDWallpaper
, TRect(
98 0, 0, screenSize
.iWidth
, screenSize
.iHeight
), EFalse
);
99 CleanupStack::PushL(context
);
100 AknsDrawUtils::DrawBackground(skin
, context
, NULL
, *bitGc
, TPoint(0, 0),
101 outer
[aPosition
], KAknsDrawParamDefault
);
102 TRect innerBox
= TRect(outputSize
);
103 innerBox
.Shrink(5, 5);
104 AknsDrawUtils::DrawFrame(skin
, *bitGc
, TRect(outputSize
), innerBox
,
105 KAknsIIDQgnHomeBgWidget
, KAknsIIDQgnHomeBgWidgetCenter
);
107 // save buffer into png
109 if (aOrientation
== CAknViewAppUi::EAppUiOrientationPortrait
)
110 filename
.Copy(_L("c:\\data\\background_portrait.png"));
112 filename
.Copy(_L("c:\\data\\background_landscape.png"));
113 CImageEncoder
* iImageEncoder
= CImageEncoder::FileNewL(
114 CEikonEnv::Static()->FsSession(), filename
, _L8("image/png"),CImageEncoder::EOptionAlwaysThread
);
115 CleanupStack::PushL(iImageEncoder
);
116 TRequestStatus iStatus
= KErrNone
;
117 iImageEncoder
->Convert(&iStatus
, *offScreenBitmap
);
118 User::WaitForRequest(iStatus
);
120 CleanupStack::PopAndDestroy(5);
121 iAvkonAppUi
->SetOrientationL(oldOrientation
);