|
1 /* |
|
2 * Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Screen clearer. |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 #include <eikappui.h> |
|
20 #include <eikspane.h> |
|
21 #include "aknclearer.h" |
|
22 #include <aknconsts.h> |
|
23 #include <aknnavi.h> |
|
24 #include <avkon.mbg> |
|
25 #include <AknLayout.lag> |
|
26 #include <AknSgcc.h> |
|
27 #include <AknUtils.h> |
|
28 #include <AknsUtils.h> |
|
29 #include <aknenv.h> |
|
30 #include <AknsUtils.h> |
|
31 #include <AknIconUtils.h> |
|
32 #include <AknsLayeredBackgroundControlContext.h> |
|
33 #include <aknappui.h> |
|
34 #include <AknsDrawUtils.h> |
|
35 #include <mifconvdefs.h> |
|
36 #include <aknlayoutscalable_avkon.cdl.h> |
|
37 #include <layoutmetadata.cdl.h> |
|
38 #include <AknStatuspaneUtils.h> |
|
39 |
|
40 #ifdef SYMBIAN_ENABLE_SPLIT_HEADERS |
|
41 #include <uikon/eikenvinterface.h> |
|
42 #endif |
|
43 |
|
44 #define KWholeScreen (AknLayout::screen().Rect()) |
|
45 |
|
46 #ifdef RD_UI_TRANSITION_EFFECTS_LAYOUT_SWITCH |
|
47 #include <akntranseffect.h> |
|
48 #include <akntransitionutils.h> |
|
49 #endif |
|
50 |
|
51 enum TAknScreenClearerBaseFlags |
|
52 { |
|
53 EAknScreenClearerDrawNavi, |
|
54 EAknScreenClearerBlankAppStatusPane, |
|
55 EAknScreenClearerDrawNaviSolid, |
|
56 }; |
|
57 |
|
58 enum |
|
59 { |
|
60 ELayerCbaBackground=0, |
|
61 ELayerBackground = 1, |
|
62 ELayerExtension = 2, |
|
63 ELayerStripe = 3, |
|
64 ELayerWallpaper = 4, |
|
65 ELayerN = 5 |
|
66 }; |
|
67 |
|
68 enum |
|
69 { |
|
70 ELayerStaconCbaBackground=0, |
|
71 ELayerStaconTop = 1, |
|
72 ELayerStaconBottom = 2, |
|
73 ELayerStaconMain = 3, |
|
74 ELayerStaconWallpaper = 4, |
|
75 ELayerStaconN = 5 |
|
76 }; |
|
77 |
|
78 enum |
|
79 { |
|
80 ELayerFlatCbaBackground=0, |
|
81 ELayerFlatBackground = 1, |
|
82 ELayerFlatTl = 2, |
|
83 ELayerFlatTr = 3, |
|
84 ELayerFlatBl = 4, |
|
85 ELayerFlatBr = 5, |
|
86 ELayerFlatT = 6, |
|
87 ELayerFlatB = 7, |
|
88 ELayerFlatR = 8, |
|
89 ELayerFlatL = 9, |
|
90 ELayerFlatCenter = 10, |
|
91 ELayerFlatMain = 11, |
|
92 ELayerFlatWallpaper = 12, |
|
93 ELayerSCtrl1 = 13, |
|
94 ELayerSCtrl2 = 14, |
|
95 ELayerSCtrl3 = 15, |
|
96 ELayerSCtrl4 = 16, |
|
97 ELayerSCtrl5 = 17, |
|
98 ELayerFlatN = 18 |
|
99 }; |
|
100 |
|
101 |
|
102 class CAknScreenClearerBaseExtension : public CBase |
|
103 { |
|
104 public: |
|
105 ~CAknScreenClearerBaseExtension() |
|
106 { |
|
107 delete iNaviWipe; |
|
108 delete iNaviMask; |
|
109 delete iBgContext; |
|
110 } |
|
111 public: |
|
112 CFbsBitmap* iNaviWipe; |
|
113 CFbsBitmap* iNaviMask; |
|
114 CAknsLayeredBackgroundControlContext* iBgContext; |
|
115 TInt iOrdinalPosition; |
|
116 }; |
|
117 |
|
118 /* THIS FUNCTION IS NOT USED |
|
119 |
|
120 static void LoadAndFlipBitmapL( |
|
121 CFbsBitmap* aTrg, const TDesC& aFile, const TInt aIndex ) |
|
122 { |
|
123 User::LeaveIfNull(aTrg); |
|
124 |
|
125 CFbsBitmap* sourceBitmap = new (ELeave) CFbsBitmap(); |
|
126 CleanupStack::PushL(sourceBitmap); |
|
127 User::LeaveIfError(sourceBitmap->Load(aFile, aIndex, ETrue)); |
|
128 TSize sourceBitmapSize = sourceBitmap->SizeInPixels(); |
|
129 |
|
130 User::LeaveIfError(aTrg->Create(sourceBitmapSize, sourceBitmap->DisplayMode())); |
|
131 |
|
132 CFbsBitmapDevice* destinationDevice = CFbsBitmapDevice::NewL( aTrg ); |
|
133 CleanupStack::PushL(destinationDevice); |
|
134 |
|
135 CFbsBitGc* destinationGc; |
|
136 User::LeaveIfError( destinationDevice->CreateContext( destinationGc ) ); |
|
137 |
|
138 TRect sourceBitmapBlittingRect( 0,0,1,sourceBitmapSize.iHeight ); |
|
139 |
|
140 for ( TInt xPos=sourceBitmapSize.iWidth-1; xPos >= 0; xPos-- ) |
|
141 { |
|
142 destinationGc->BitBlt( TPoint(xPos,0), sourceBitmap, sourceBitmapBlittingRect ); |
|
143 sourceBitmapBlittingRect.iTl.iX++; |
|
144 sourceBitmapBlittingRect.iBr.iX++; |
|
145 } |
|
146 |
|
147 delete destinationGc; |
|
148 CleanupStack::PopAndDestroy(2); // sourceBitmap, destinationDevice |
|
149 } |
|
150 */ |
|
151 |
|
152 /* THIS FUNCTION IS NOT USED |
|
153 |
|
154 static CFbsBitmap* FlipBitmapL( CFbsBitmap* aBitmap ) |
|
155 { |
|
156 User::LeaveIfNull(aBitmap); |
|
157 |
|
158 TSize sourceBitmapSize = aBitmap->SizeInPixels(); |
|
159 |
|
160 // get a copy of wanted rect of source bitmap to tmpBitmap |
|
161 CFbsBitmap* tmpBitmap = new (ELeave) CFbsBitmap(); |
|
162 CleanupStack::PushL( tmpBitmap ); |
|
163 |
|
164 User::LeaveIfError( tmpBitmap->Create( sourceBitmapSize, aBitmap->DisplayMode() ) ); |
|
165 |
|
166 CFbsBitmapDevice* destinationDevice = CFbsBitmapDevice::NewL( tmpBitmap ); |
|
167 CleanupStack::PushL( destinationDevice ); |
|
168 |
|
169 CFbsBitGc* destinationGc; |
|
170 User::LeaveIfError( destinationDevice->CreateContext( destinationGc ) ); |
|
171 |
|
172 TRect sourceBitmapBlittingRect( 0,0,1,sourceBitmapSize.iHeight ); |
|
173 |
|
174 for ( TInt xPos=sourceBitmapSize.iWidth-1; xPos >= 0; xPos-- ) |
|
175 { |
|
176 destinationGc->BitBlt( TPoint(xPos,0), aBitmap, sourceBitmapBlittingRect ); |
|
177 sourceBitmapBlittingRect.iTl.iX++; |
|
178 sourceBitmapBlittingRect.iBr.iX++; |
|
179 } |
|
180 |
|
181 delete destinationGc; |
|
182 CleanupStack::PopAndDestroy(); // destinationDevice |
|
183 CleanupStack::Pop(); // tmpBitmap |
|
184 |
|
185 return tmpBitmap; |
|
186 } |
|
187 */ |
|
188 |
|
189 EXPORT_C CAknScreenClearerBase::~CAknScreenClearerBase() |
|
190 { |
|
191 delete iExtension; |
|
192 } |
|
193 |
|
194 EXPORT_C void CAknScreenClearerBase::ConstructL(RWindowGroup& aParent, TInt aOrdinalPos, TBool aBlankAppStatusPane) |
|
195 { |
|
196 iExtension = new (ELeave) CAknScreenClearerBaseExtension(); |
|
197 |
|
198 CreateWindowL(&aParent); |
|
199 |
|
200 iFlags.Assign(EAknScreenClearerBlankAppStatusPane, aBlankAppStatusPane); |
|
201 |
|
202 SetShapeL(); |
|
203 |
|
204 DrawableWindow()->SetOrdinalPosition(aOrdinalPos); |
|
205 iExtension->iOrdinalPosition = aOrdinalPos; |
|
206 |
|
207 ActivateL(); |
|
208 |
|
209 // Setup skin background context |
|
210 iExtension->iBgContext = CAknsLayeredBackgroundControlContext::NewL( |
|
211 KAknsIIDQsnBgAreaStatus, TRect(0,0,1,1), ETrue, ELayerFlatN + 1); |
|
212 |
|
213 for (TInt n=0; n<ELayerFlatN; n++) |
|
214 { |
|
215 iExtension->iBgContext->SetLayerImage( n, KAknsIIDNone ); |
|
216 } |
|
217 |
|
218 SetSkinShapeL(); |
|
219 |
|
220 DrawNow(); |
|
221 } |
|
222 |
|
223 |
|
224 |
|
225 EXPORT_C void CAknScreenClearerBase::Draw(const TRect& /*aRect*/) const |
|
226 { |
|
227 CWindowGc& gc = SystemGc(); |
|
228 MAknsSkinInstance* skin = AknsUtils::SkinInstance(); |
|
229 AknsDrawUtils::Background( skin, iExtension->iBgContext, this, gc, Rect() ); |
|
230 |
|
231 if (Layout_Meta_Data::IsPenEnabled() && Layout_Meta_Data::IsLandscapeOrientation()) |
|
232 { |
|
233 #if 0 |
|
234 TRect application_window( KWholeScreen ); |
|
235 TAknLayoutRect area_side_right_pane; |
|
236 TInt variety = 0; |
|
237 area_side_right_pane.LayoutRect(application_window, AknLayoutScalable_Avkon::area_side_right_pane(variety)); |
|
238 |
|
239 CFbsBitmap *mask1 = AknsUtils::GetCachedBitmap( skin, KAknsIIDQgnIndiSctrlSkMaskLsc ); |
|
240 CFbsBitmap *mask5 = AknsUtils::GetCachedBitmap( skin, KAknsIIDQgnIndiSctrlSkMaskLsc ); |
|
241 |
|
242 CFbsBitmap *bitmap = new(ELeave)CFbsBitmap; |
|
243 CleanupStack::PushL(bitmap); |
|
244 bitmap->Create(area_side_right_pane.Rect().Size(), EColor16MA); |
|
245 CFbsBitGc* bitmapContext = NULL; |
|
246 CFbsBitmapDevice* bitmapDevice = |
|
247 CFbsBitmapDevice::NewL( bitmap ); |
|
248 CleanupStack::PushL( bitmapDevice ); |
|
249 bitmapDevice->CreateContext( bitmapContext ); |
|
250 CleanupStack::PushL( bitmapContext ); |
|
251 |
|
252 TRect area_side_right_pane_rect = area_side_right_pane.Rect(); |
|
253 area_side_right_pane_rect.iTl = TPoint(0,0); |
|
254 |
|
255 TAknLayoutRect sctrl_sk_top_pane; |
|
256 sctrl_sk_top_pane.LayoutRect(area_side_right_pane_rect, AknLayoutScalable_Avkon::sctrl_sk_top_pane(0)); |
|
257 |
|
258 TAknLayoutRect sctrl_sk_bottom_pane; |
|
259 sctrl_sk_bottom_pane.LayoutRect(area_side_right_pane_rect, AknLayoutScalable_Avkon::sctrl_sk_bottom_pane(0)); |
|
260 |
|
261 TAknLayoutRect grid_sctrl_middle_pane; |
|
262 grid_sctrl_middle_pane.LayoutRect(area_side_right_pane_rect, AknLayoutScalable_Avkon::grid_sctrl_middle_pane(0)); |
|
263 |
|
264 TAknLayoutRect cell_sctrl_middle_pane1; |
|
265 cell_sctrl_middle_pane1.LayoutRect(grid_sctrl_middle_pane.Rect(), AknLayoutScalable_Avkon::cell_sctrl_middle_pane(0,0,0)); |
|
266 TAknLayoutRect cell_sctrl_middle_pane2; |
|
267 cell_sctrl_middle_pane2.LayoutRect(grid_sctrl_middle_pane.Rect(), AknLayoutScalable_Avkon::cell_sctrl_middle_pane(0,0,1)); |
|
268 TAknLayoutRect cell_sctrl_middle_pane3; |
|
269 cell_sctrl_middle_pane3.LayoutRect(grid_sctrl_middle_pane.Rect(), AknLayoutScalable_Avkon::cell_sctrl_middle_pane(0,0,2)); |
|
270 |
|
271 AknsDrawUtils::DrawFrame( skin, *bitmapContext, sctrl_sk_top_pane.Rect(), Convert(sctrl_sk_top_pane.Rect()), KAknsIIDQgnFrSctrlSkButton, KAknsIIDQgnFrSctrlSkButtonCenter); |
|
272 AknsDrawUtils::DrawFrame( skin, *bitmapContext, cell_sctrl_middle_pane1.Rect(), Convert2(cell_sctrl_middle_pane1.Rect()), KAknsIIDQgnFrSctrlButton, KAknsIIDQgnFrSctrlButtonCenter); |
|
273 AknsDrawUtils::DrawFrame( skin, *bitmapContext, cell_sctrl_middle_pane2.Rect(), Convert2(cell_sctrl_middle_pane2.Rect()), KAknsIIDQgnFrSctrlButton, KAknsIIDQgnFrSctrlButtonCenter); |
|
274 AknsDrawUtils::DrawFrame( skin, *bitmapContext, cell_sctrl_middle_pane3.Rect(), Convert2(cell_sctrl_middle_pane3.Rect()), KAknsIIDQgnFrSctrlButton, KAknsIIDQgnFrSctrlButtonCenter); |
|
275 AknsDrawUtils::DrawFrame( skin, *bitmapContext, sctrl_sk_bottom_pane.Rect(), Convert(sctrl_sk_bottom_pane.Rect()), KAknsIIDQgnFrSctrlSkButton, KAknsIIDQgnFrSctrlSkButtonCenter); |
|
276 |
|
277 TSize size1 = sctrl_sk_top_pane.Rect().Size(); |
|
278 TSize size5 = sctrl_sk_bottom_pane.Rect().Size(); |
|
279 AknIconUtils::SetSize(mask1, size1, EAspectRatioNotPreserved); |
|
280 AknIconUtils::SetSize(mask5, size5, EAspectRatioNotPreserved); |
|
281 |
|
282 gc.BitBltMasked( area_side_right_pane.Rect().iTl+sctrl_sk_top_pane.Rect().iTl, bitmap, sctrl_sk_top_pane.Rect(), mask1, EFalse); |
|
283 gc.BitBltMasked( area_side_right_pane.Rect().iTl+sctrl_sk_bottom_pane.Rect().iTl, bitmap, sctrl_sk_bottom_pane.Rect(), mask5, EFalse); |
|
284 |
|
285 CleanupStack::PopAndDestroy(3); // bitmap, bitmapdevice, bitmapcontext |
|
286 #endif |
|
287 } |
|
288 |
|
289 |
|
290 iEikonEnv->WsSession().Flush(); |
|
291 return; |
|
292 } |
|
293 |
|
294 EXPORT_C void CAknScreenClearerBase::HandlePointerEventL(const TPointerEvent& aPointerEvent) |
|
295 { |
|
296 CAknControl::HandlePointerEventL(aPointerEvent); |
|
297 } |
|
298 |
|
299 EXPORT_C void* CAknScreenClearerBase::ExtensionInterface( TUid /*aInterface*/ ) |
|
300 { |
|
301 return NULL; |
|
302 } |
|
303 |
|
304 EXPORT_C void CAknScreenClearerBase::HandleStatusPaneSizeChangeL() |
|
305 { |
|
306 SetShapeL(); |
|
307 SetSkinShapeL(); |
|
308 DrawableWindow()->SetOrdinalPosition(iExtension->iOrdinalPosition); |
|
309 DrawNow(); |
|
310 } |
|
311 |
|
312 void CAknScreenClearerBase::SetShapeL() |
|
313 { |
|
314 RRegion shape; |
|
315 CleanupClosePushL(shape); |
|
316 RRegion appStatuspaneShape; |
|
317 CleanupClosePushL(appStatuspaneShape); |
|
318 |
|
319 CEikStatusPaneBase* sp = CEikStatusPaneBase::Current(); |
|
320 |
|
321 if (iFlags[EAknScreenClearerBlankAppStatusPane]) |
|
322 { |
|
323 shape.AddRect(KWholeScreen); |
|
324 } |
|
325 else |
|
326 { |
|
327 shape.AddRect(KWholeScreen); |
|
328 sp->GetShapeL(appStatuspaneShape, !iFlags[EAknScreenClearerBlankAppStatusPane], ETrue); |
|
329 shape.SubRegion(appStatuspaneShape); |
|
330 } |
|
331 |
|
332 if (shape.CheckError()) |
|
333 User::Leave(KErrNoMemory); |
|
334 |
|
335 SetRect(KWholeScreen); |
|
336 DrawableWindow()->SetShape(shape); |
|
337 |
|
338 CleanupStack::PopAndDestroy(2); // close shapes |
|
339 |
|
340 TBool drawNavi = |
|
341 iFlags[EAknScreenClearerBlankAppStatusPane] && |
|
342 sp->IsVisible() && |
|
343 sp->PaneCapabilities(TUid::Uid(EEikStatusPaneUidNavi)).IsInCurrentLayout(); |
|
344 |
|
345 iFlags.Assign(EAknScreenClearerDrawNavi, drawNavi); |
|
346 } |
|
347 |
|
348 |
|
349 |
|
350 void CAknScreenClearerBase::SetSkinShapeL() |
|
351 { |
|
352 for (TInt n=0; n<ELayerFlatN; n++) |
|
353 { |
|
354 iExtension->iBgContext->SetLayerImage( n, KAknsIIDNone ); |
|
355 } |
|
356 |
|
357 TBool widescreenPaneUsed( |
|
358 R_AVKON_WIDESCREEN_PANE_LAYOUT_USUAL == |
|
359 AVKONENV->StatusPaneResIdForCurrentLayout( |
|
360 R_AVKON_STATUS_PANE_LAYOUT_USUAL ) || |
|
361 R_AVKON_WIDESCREEN_PANE_LAYOUT_IDLE == |
|
362 AVKONENV->StatusPaneResIdForCurrentLayout( |
|
363 R_AVKON_STATUS_PANE_LAYOUT_IDLE ) ); |
|
364 |
|
365 // Check that if in landscape mode statuspane is changed to stacon pane |
|
366 TBool staconPaneUsedInLandscape = |
|
367 ( ( R_AVKON_STATUS_PANE_LAYOUT_USUAL != |
|
368 AVKONENV->StatusPaneResIdForCurrentLayout( |
|
369 R_AVKON_STATUS_PANE_LAYOUT_USUAL ) ) && |
|
370 ( R_AVKON_STATUS_PANE_LAYOUT_USUAL_MIRRORED != |
|
371 AVKONENV->StatusPaneResIdForCurrentLayout( |
|
372 R_AVKON_STATUS_PANE_LAYOUT_USUAL ) ) ); |
|
373 |
|
374 TBool flatStatuspaneusedInLandscape = |
|
375 ( R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT == |
|
376 AVKONENV->StatusPaneResIdForCurrentLayout( |
|
377 R_AVKON_STATUS_PANE_LAYOUT_USUAL ) ); |
|
378 |
|
379 |
|
380 // TRect application_window = iAvkonAppUi->ApplicationRect(); |
|
381 // This is sometimes needed before iAvkonAppUi->ApplicationRect() is updated |
|
382 TRect application_window( KWholeScreen ); |
|
383 if ( application_window.Width() > application_window.Height() ) |
|
384 { |
|
385 if ( widescreenPaneUsed ) |
|
386 { |
|
387 // Main pane area |
|
388 TAknLayoutRect mainPane; |
|
389 mainPane.LayoutRect( |
|
390 application_window, |
|
391 AknLayoutScalable_Avkon::main_pane( 4 ).LayoutLine() ); |
|
392 |
|
393 iExtension->iBgContext->SetLayerImage( ELayerWallpaper, |
|
394 KAknsIIDQsnBgAreaMain ); |
|
395 iExtension->iBgContext->SetLayerRect( ELayerWallpaper, |
|
396 mainPane.Rect() ); |
|
397 |
|
398 // Status pane area |
|
399 TAknLayoutRect layoutRect; |
|
400 layoutRect.LayoutRect( |
|
401 application_window, |
|
402 AknLayoutScalable_Avkon::area_top_pane( 8 ).LayoutLine() ); |
|
403 |
|
404 iExtension->iBgContext->SetLayerImage( ELayerBackground, |
|
405 KAknsIIDQsnBgAreaStatus ); |
|
406 iExtension->iBgContext->SetLayerRect( ELayerBackground, layoutRect.Rect() ); |
|
407 } |
|
408 else if ( flatStatuspaneusedInLandscape ) |
|
409 { |
|
410 TInt topVariety = 2; |
|
411 TInt spVariety = 2; |
|
412 TInt bgVariety = 1; |
|
413 |
|
414 TAknLayoutRect control_pane; |
|
415 control_pane.LayoutRect(application_window, AKN_LAYOUT_WINDOW_control_pane(application_window)); |
|
416 |
|
417 TAknWindowLineLayout topLayout = AknLayoutScalable_Avkon::area_top_pane(topVariety).LayoutLine(); |
|
418 |
|
419 TAknLayoutRect layoutRect; |
|
420 layoutRect.LayoutRect( application_window, topLayout ); |
|
421 TRect topLayoutRect = layoutRect.Rect(); |
|
422 |
|
423 TAknWindowLineLayout statuspaneLayout = AknLayoutScalable_Avkon::status_pane(spVariety).LayoutLine(); |
|
424 layoutRect.LayoutRect( topLayoutRect, statuspaneLayout ); |
|
425 TRect spRect = layoutRect.Rect(); |
|
426 |
|
427 TAknWindowLineLayout bgLayout = AknLayoutScalable_Avkon::bg_status_flat_pane(bgVariety).LayoutLine(); |
|
428 layoutRect.LayoutRect( spRect, bgLayout ); |
|
429 TRect bgRect = layoutRect.Rect(); |
|
430 |
|
431 TAknLayoutRect extension; |
|
432 extension.LayoutRect( application_window, |
|
433 AKN_LAYOUT_WINDOW_main_pane(application_window, 0, 1, 1) ); |
|
434 |
|
435 iExtension->iBgContext->SetLayerImage( ELayerFlatMain, KAknsIIDQsnBgAreaMain ); |
|
436 iExtension->iBgContext->SetLayerRect( ELayerFlatMain, extension.Rect() ); |
|
437 |
|
438 // Wallpaper |
|
439 iExtension->iBgContext->SetLayerImage( ELayerFlatWallpaper, KAknsIIDNone ); |
|
440 iExtension->iBgContext->SetLayerRect( ELayerFlatWallpaper, extension.Rect() ); |
|
441 |
|
442 // Transparency support |
|
443 iExtension->iBgContext->SetLayerImage( ELayerFlatBackground, KAknsIIDQsnBgScreen ); |
|
444 iExtension->iBgContext->SetLayerRect( ELayerFlatBackground, application_window ); |
|
445 |
|
446 MAknsSkinInstance* si = AknsUtils::SkinInstance(); |
|
447 |
|
448 CAknsItemData* idata = NULL; |
|
449 |
|
450 if ( si ) |
|
451 { |
|
452 TRAP_IGNORE(idata = si->CreateUncachedItemDataL( KAknsIIDQsnFrStatusFlat, EAknsITImageTable );); |
|
453 } |
|
454 |
|
455 if (idata) |
|
456 { |
|
457 TAknWindowLineLayout layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g2().LayoutLine(); |
|
458 layoutRect.LayoutRect( bgRect, layout ); |
|
459 iExtension->iBgContext->SetLayerImage( ELayerFlatTl, KAknsIIDQsnFrStatusFlatCornerTl ); |
|
460 iExtension->iBgContext->SetLayerRect( ELayerFlatTl, layoutRect.Rect() ); |
|
461 |
|
462 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g3().LayoutLine(); |
|
463 layoutRect.LayoutRect( bgRect, layout ); |
|
464 iExtension->iBgContext->SetLayerImage( ELayerFlatTr, KAknsIIDQsnFrStatusFlatCornerTr ); |
|
465 iExtension->iBgContext->SetLayerRect( ELayerFlatTr, layoutRect.Rect()); |
|
466 |
|
467 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g4().LayoutLine(); |
|
468 layoutRect.LayoutRect( bgRect, layout ); |
|
469 iExtension->iBgContext->SetLayerImage( ELayerFlatBl, KAknsIIDQsnFrStatusFlatCornerBl ); |
|
470 iExtension->iBgContext->SetLayerRect( ELayerFlatBl, layoutRect.Rect() ); |
|
471 |
|
472 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g5().LayoutLine(); |
|
473 layoutRect.LayoutRect( bgRect, layout ); |
|
474 iExtension->iBgContext->SetLayerImage( ELayerFlatBr, KAknsIIDQsnFrStatusFlatCornerBr ); |
|
475 iExtension->iBgContext->SetLayerRect( ELayerFlatBr, layoutRect.Rect() ); |
|
476 |
|
477 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g6().LayoutLine(); |
|
478 layoutRect.LayoutRect( bgRect, layout ); |
|
479 iExtension->iBgContext->SetLayerImage( ELayerFlatT, KAknsIIDQsnFrStatusFlatSideT); |
|
480 iExtension->iBgContext->SetLayerRect( ELayerFlatT, layoutRect.Rect() ); |
|
481 |
|
482 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g7().LayoutLine(); |
|
483 layoutRect.LayoutRect( bgRect, layout ); |
|
484 iExtension->iBgContext->SetLayerImage( ELayerFlatB, KAknsIIDQsnFrStatusFlatSideB ); |
|
485 iExtension->iBgContext->SetLayerRect( ELayerFlatB, layoutRect.Rect() ); |
|
486 |
|
487 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g9().LayoutLine(); |
|
488 layoutRect.LayoutRect( bgRect, layout ); |
|
489 iExtension->iBgContext->SetLayerImage( ELayerFlatR, KAknsIIDQsnFrStatusFlatSideR ); |
|
490 iExtension->iBgContext->SetLayerRect( ELayerFlatR, layoutRect.Rect() ); |
|
491 |
|
492 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g8().LayoutLine(); |
|
493 layoutRect.LayoutRect( bgRect, layout ); |
|
494 iExtension->iBgContext->SetLayerImage( ELayerFlatL, KAknsIIDQsnFrStatusFlatSideL ); |
|
495 iExtension->iBgContext->SetLayerRect( ELayerFlatL, layoutRect.Rect() ); |
|
496 |
|
497 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g1().LayoutLine(); |
|
498 layoutRect.LayoutRect( bgRect, layout ); |
|
499 iExtension->iBgContext->SetLayerImage( ELayerFlatCenter, KAknsIIDQsnFrStatusFlatCenter ); |
|
500 iExtension->iBgContext->SetLayerRect( ELayerFlatCenter, layoutRect.Rect() ); |
|
501 } |
|
502 else |
|
503 { |
|
504 iExtension->iBgContext->SetLayerImage( 0, KAknsIIDQsnFrStatusFlat); |
|
505 iExtension->iBgContext->SetLayerRect(0, bgRect); |
|
506 } |
|
507 |
|
508 delete idata; |
|
509 iExtension->iBgContext->SetLayerImage( ELayerFlatN, KAknsIIDQsnBgAreaControl ); |
|
510 iExtension->iBgContext->SetLayerRect( ELayerFlatN, control_pane.Rect() ); |
|
511 |
|
512 } |
|
513 else |
|
514 { |
|
515 // Landscape with staconpane |
|
516 TRect staconTop = TRect(0,0,0,0); |
|
517 TRect staconBottom = TRect(0,0,0,0); |
|
518 TAknLayoutRect main_pane; |
|
519 main_pane.LayoutRect(application_window, AKN_LAYOUT_WINDOW_main_pane(application_window, 0,1,0)); |
|
520 |
|
521 TAknWindowLineLayout staconTopParent = AknLayoutScalable_Avkon::area_top_pane(2).LayoutLine(); |
|
522 TAknWindowLineLayout staconBottomParent = AknLayoutScalable_Avkon::area_bottom_pane(2).LayoutLine(); |
|
523 |
|
524 TAknLayoutRect layoutRect; |
|
525 layoutRect.LayoutRect( application_window, staconTopParent ); |
|
526 TRect staconTopParentRect = layoutRect.Rect(); |
|
527 |
|
528 layoutRect.LayoutRect( application_window, staconBottomParent ); |
|
529 TRect staconBottomParentRect = layoutRect.Rect(); |
|
530 |
|
531 |
|
532 TAknWindowLineLayout layout = AknLayoutScalable_Avkon::stacon_top_pane().LayoutLine(); |
|
533 layoutRect.LayoutRect( staconTopParentRect, layout ); |
|
534 staconTop = layoutRect.Rect(); |
|
535 |
|
536 layout = AknLayoutScalable_Avkon::stacon_bottom_pane().LayoutLine(); |
|
537 layoutRect.LayoutRect( staconBottomParentRect, layout ); |
|
538 staconBottom = layoutRect.Rect(); |
|
539 |
|
540 TBool staconPaneRight = EFalse; |
|
541 CEikStatusPaneBase* statusPane = CEikStatusPaneBase::Current(); |
|
542 if (statusPane) |
|
543 { |
|
544 TInt currentStatusPaneLayoutResId = AVKONENV->StatusPaneResIdForCurrentLayout(statusPane->CurrentLayoutResId()); |
|
545 |
|
546 staconPaneRight = ((currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_USUAL_SOFTKEYS_RIGHT) || |
|
547 (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_EMPTY_SOFTKEYS_RIGHT) || |
|
548 (currentStatusPaneLayoutResId == R_AVKON_STACON_PANE_LAYOUT_IDLE_SOFTKEYS_RIGHT)); |
|
549 |
|
550 } |
|
551 |
|
552 iExtension->iBgContext->SetLayerImage( 0, KAknsIIDQsnBgAreaMain ); |
|
553 if (staconPaneRight) |
|
554 { |
|
555 iExtension->iBgContext->SetLayerImage( 1, KAknsIIDQsnBgAreaStaconRt ); |
|
556 iExtension->iBgContext->SetLayerImage( 2, KAknsIIDQsnBgAreaStaconRb ); |
|
557 } |
|
558 else |
|
559 { |
|
560 iExtension->iBgContext->SetLayerImage( 1, KAknsIIDQsnBgAreaStaconLt ); |
|
561 iExtension->iBgContext->SetLayerImage( 2, KAknsIIDQsnBgAreaStaconLb ); |
|
562 } |
|
563 iExtension->iBgContext->SetLayerImage( 3, KAknsIIDNone ); |
|
564 iExtension->iBgContext->SetLayerImage( 4, KAknsIIDNone ); |
|
565 |
|
566 iExtension->iBgContext->SetLayerRect( 0, main_pane.Rect() ); |
|
567 iExtension->iBgContext->SetLayerRect( 1, staconTop ); |
|
568 iExtension->iBgContext->SetLayerRect( 2, staconBottom ); |
|
569 } |
|
570 |
|
571 if (Layout_Meta_Data::IsPenEnabled()) |
|
572 { |
|
573 TAknLayoutRect area_side_right_pane; |
|
574 TInt variety = 0; |
|
575 area_side_right_pane.LayoutRect(application_window, AknLayoutScalable_Avkon::area_side_right_pane(variety)); |
|
576 |
|
577 TAknLayoutRect sctrl_sk_top_pane; |
|
578 sctrl_sk_top_pane.LayoutRect(area_side_right_pane.Rect(), AknLayoutScalable_Avkon::sctrl_sk_top_pane(0)); |
|
579 |
|
580 TAknLayoutRect sctrl_sk_bottom_pane; |
|
581 sctrl_sk_bottom_pane.LayoutRect(area_side_right_pane.Rect(), AknLayoutScalable_Avkon::sctrl_sk_bottom_pane(0)); |
|
582 |
|
583 TAknLayoutRect grid_sctrl_middle_pane; |
|
584 grid_sctrl_middle_pane.LayoutRect(area_side_right_pane.Rect(), AknLayoutScalable_Avkon::grid_sctrl_middle_pane(0)); |
|
585 |
|
586 TAknLayoutRect cell_sctrl_middle_pane1; |
|
587 cell_sctrl_middle_pane1.LayoutRect(grid_sctrl_middle_pane.Rect(), AknLayoutScalable_Avkon::cell_sctrl_middle_pane(0,0,0)); |
|
588 TAknLayoutRect cell_sctrl_middle_pane2; |
|
589 cell_sctrl_middle_pane2.LayoutRect(grid_sctrl_middle_pane.Rect(), AknLayoutScalable_Avkon::cell_sctrl_middle_pane(0,0,1)); |
|
590 TAknLayoutRect cell_sctrl_middle_pane3; |
|
591 cell_sctrl_middle_pane3.LayoutRect(grid_sctrl_middle_pane.Rect(), AknLayoutScalable_Avkon::cell_sctrl_middle_pane(0,0,2)); |
|
592 |
|
593 |
|
594 |
|
595 iExtension->iBgContext->SetLayerImage( ELayerFlatCbaBackground, KAknsIIDQsnBgScreen ); |
|
596 |
|
597 |
|
598 iExtension->iBgContext->SetLayerRect( ELayerFlatCbaBackground, application_window ); |
|
599 } |
|
600 |
|
601 |
|
602 |
|
603 |
|
604 } |
|
605 else |
|
606 { |
|
607 // Default is portrait |
|
608 TInt spRes = CEikStatusPaneBase::Current()->CurrentLayoutResId(); |
|
609 if (spRes == R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT) |
|
610 { |
|
611 TAknLayoutRect status_pane_thin; |
|
612 status_pane_thin.LayoutRect( application_window, |
|
613 AknLayoutScalable_Avkon::area_top_pane(6).LayoutLine() ); |
|
614 TAknLayoutRect main_pane; |
|
615 main_pane.LayoutRect(application_window, AknLayoutScalable_Avkon::main_pane(7).LayoutLine()); |
|
616 TAknLayoutRect control_pane; |
|
617 control_pane.LayoutRect(application_window, AKN_LAYOUT_WINDOW_control_pane(application_window)); |
|
618 |
|
619 // Statuspane area |
|
620 CAknsItemData* idata = NULL; |
|
621 MAknsSkinInstance* si = AknsUtils::SkinInstance(); |
|
622 TAknLayoutRect layoutRect; |
|
623 if (si) |
|
624 TRAP_IGNORE(idata = si->CreateUncachedItemDataL( KAknsIIDQsnFrStatusFlat, EAknsITImageTable );); |
|
625 |
|
626 if (idata) |
|
627 { |
|
628 TAknWindowLineLayout layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g2().LayoutLine(); |
|
629 layoutRect.LayoutRect( status_pane_thin.Rect(), layout ); |
|
630 iExtension->iBgContext->SetLayerImage( ELayerFlatTl, KAknsIIDQsnFrStatusFlatCornerTl ); |
|
631 iExtension->iBgContext->SetLayerRect( ELayerFlatTl, layoutRect.Rect() ); |
|
632 |
|
633 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g3().LayoutLine(); |
|
634 layoutRect.LayoutRect( status_pane_thin.Rect(), layout ); |
|
635 iExtension->iBgContext->SetLayerImage( ELayerFlatTr, KAknsIIDQsnFrStatusFlatCornerTr ); |
|
636 iExtension->iBgContext->SetLayerRect( ELayerFlatTr, layoutRect.Rect()); |
|
637 |
|
638 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g4().LayoutLine(); |
|
639 layoutRect.LayoutRect( status_pane_thin.Rect(), layout ); |
|
640 iExtension->iBgContext->SetLayerImage( ELayerFlatBl, KAknsIIDQsnFrStatusFlatCornerBl ); |
|
641 iExtension->iBgContext->SetLayerRect( ELayerFlatBl, layoutRect.Rect() ); |
|
642 |
|
643 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g5().LayoutLine(); |
|
644 layoutRect.LayoutRect( status_pane_thin.Rect(), layout ); |
|
645 iExtension->iBgContext->SetLayerImage( ELayerFlatBr, KAknsIIDQsnFrStatusFlatCornerBr ); |
|
646 iExtension->iBgContext->SetLayerRect( ELayerFlatBr, layoutRect.Rect() ); |
|
647 |
|
648 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g6().LayoutLine(); |
|
649 layoutRect.LayoutRect( status_pane_thin.Rect(), layout ); |
|
650 iExtension->iBgContext->SetLayerImage( ELayerFlatT, KAknsIIDQsnFrStatusFlatSideT); |
|
651 iExtension->iBgContext->SetLayerRect( ELayerFlatT, layoutRect.Rect() ); |
|
652 |
|
653 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g7().LayoutLine(); |
|
654 layoutRect.LayoutRect( status_pane_thin.Rect(), layout ); |
|
655 iExtension->iBgContext->SetLayerImage( ELayerFlatB, KAknsIIDQsnFrStatusFlatSideB ); |
|
656 iExtension->iBgContext->SetLayerRect( ELayerFlatB, layoutRect.Rect() ); |
|
657 |
|
658 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g9().LayoutLine(); |
|
659 layoutRect.LayoutRect( status_pane_thin.Rect(), layout ); |
|
660 iExtension->iBgContext->SetLayerImage( ELayerFlatR, KAknsIIDQsnFrStatusFlatSideR ); |
|
661 iExtension->iBgContext->SetLayerRect( ELayerFlatR, layoutRect.Rect() ); |
|
662 |
|
663 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g8().LayoutLine(); |
|
664 layoutRect.LayoutRect( status_pane_thin.Rect(), layout ); |
|
665 iExtension->iBgContext->SetLayerImage( ELayerFlatL, KAknsIIDQsnFrStatusFlatSideL ); |
|
666 iExtension->iBgContext->SetLayerRect( ELayerFlatL, layoutRect.Rect() ); |
|
667 |
|
668 layout = AknLayoutScalable_Avkon::bg_status_flat_pane_g1().LayoutLine(); |
|
669 layoutRect.LayoutRect( status_pane_thin.Rect(), layout ); |
|
670 iExtension->iBgContext->SetLayerImage( ELayerFlatCenter, KAknsIIDQsnFrStatusFlatCenter ); |
|
671 iExtension->iBgContext->SetLayerRect( ELayerFlatCenter, layoutRect.Rect() ); |
|
672 } |
|
673 else |
|
674 { |
|
675 iExtension->iBgContext->SetLayerImage( 0, KAknsIIDQsnFrStatusFlat); |
|
676 iExtension->iBgContext->SetLayerRect(0, status_pane_thin.Rect()); |
|
677 } |
|
678 delete idata; |
|
679 |
|
680 // Transparency support |
|
681 iExtension->iBgContext->SetLayerImage( ELayerFlatBackground, KAknsIIDQsnBgScreen ); |
|
682 iExtension->iBgContext->SetLayerRect( ELayerFlatBackground, application_window ); |
|
683 |
|
684 // main pane |
|
685 iExtension->iBgContext->SetLayerImage( ELayerFlatMain, KAknsIIDQsnBgAreaMain ); |
|
686 iExtension->iBgContext->SetLayerRect( ELayerFlatMain, main_pane.Rect() ); |
|
687 |
|
688 // control pane |
|
689 iExtension->iBgContext->SetLayerImage( ELayerFlatN, KAknsIIDQsnBgAreaControl ); |
|
690 iExtension->iBgContext->SetLayerRect( ELayerFlatN, control_pane.Rect() ); |
|
691 } |
|
692 else |
|
693 { |
|
694 TAknLayoutRect topArea; |
|
695 topArea.LayoutRect( application_window, |
|
696 AknLayoutScalable_Avkon::area_top_pane(0).LayoutLine() ); |
|
697 |
|
698 TAknLayoutRect status_pane_usual; |
|
699 status_pane_usual.LayoutRect( topArea.Rect(), |
|
700 AknLayoutScalable_Avkon::status_pane(0).LayoutLine() ); |
|
701 |
|
702 TAknLayoutRect main_pane; |
|
703 main_pane.LayoutRect(application_window, AKN_LAYOUT_WINDOW_main_pane(application_window, 0,1,1)); |
|
704 TAknLayoutRect control_pane; |
|
705 control_pane.LayoutRect(application_window, AKN_LAYOUT_WINDOW_control_pane(application_window)); |
|
706 |
|
707 // Statuspane area |
|
708 iExtension->iBgContext->SetLayerImage( ELayerBackground, KAknsIIDQsnBgAreaStatus ); |
|
709 iExtension->iBgContext->SetLayerRect( ELayerBackground, status_pane_usual.Rect() ); |
|
710 iExtension->iBgContext->SetLayerImage( ELayerExtension, KAknsIIDNone ); |
|
711 iExtension->iBgContext->SetLayerImage( ELayerStripe, KAknsIIDQsnBgNavipaneSolid ); |
|
712 // skin does not follow avkon LAF, skin wipe is 176x15, not 174x15 |
|
713 TAknLayoutRect navi_wipe; |
|
714 navi_wipe.LayoutRect( status_pane_usual.Rect(), |
|
715 AKN_LAYOUT_WINDOW_Status_pane_elements_Line_1 ); |
|
716 TRect skinnedNaviWipeRect(navi_wipe.Rect()); |
|
717 skinnedNaviWipeRect.iTl.iX = 0; |
|
718 skinnedNaviWipeRect.iBr.iX = status_pane_usual.Rect().iBr.iX; |
|
719 iExtension->iBgContext->SetLayerRect( ELayerStripe, skinnedNaviWipeRect ); |
|
720 // main pane |
|
721 iExtension->iBgContext->SetLayerImage( ELayerWallpaper, KAknsIIDQsnBgAreaMain ); |
|
722 iExtension->iBgContext->SetLayerRect( ELayerWallpaper, main_pane.Rect() ); |
|
723 // control pane |
|
724 iExtension->iBgContext->SetLayerImage( ELayerN, KAknsIIDQsnBgAreaControl ); |
|
725 iExtension->iBgContext->SetLayerRect( ELayerN, control_pane.Rect() ); |
|
726 } |
|
727 } |
|
728 } |
|
729 |
|
730 |
|
731 EXPORT_C CAknLocalScreenClearer* CAknLocalScreenClearer::NewLC() |
|
732 { |
|
733 return CAknLocalScreenClearer::NewLC(ETrue); |
|
734 } |
|
735 |
|
736 EXPORT_C CAknLocalScreenClearer* CAknLocalScreenClearer::NewLC(TBool aBlankAppStatusPane) |
|
737 { |
|
738 CAknLocalScreenClearer* self=new(ELeave) CAknLocalScreenClearer; |
|
739 CleanupStack::PushL(self); |
|
740 CEikonEnv& eikEnv = *static_cast<CEikonEnv*>(self->ControlEnv()); |
|
741 self->ConstructL(eikEnv.RootWin(), 0, aBlankAppStatusPane); |
|
742 return(self); |
|
743 } |
|
744 |
|
745 EXPORT_C CAknLocalScreenClearer* CAknLocalScreenClearer::NewL(TBool aBlankAppStatusPane) |
|
746 { |
|
747 CAknLocalScreenClearer* self = CAknLocalScreenClearer::NewLC(aBlankAppStatusPane); |
|
748 CleanupStack::Pop(self); |
|
749 return(self); |
|
750 } |
|
751 |
|
752 EXPORT_C void CAknLocalScreenClearer::HandleResourceChange(TInt aType) |
|
753 { |
|
754 if (aType == KEikDynamicLayoutVariantSwitch) |
|
755 { |
|
756 SetShapeL(); |
|
757 SetSkinShapeL(); |
|
758 DrawDeferred(); |
|
759 } |
|
760 } |
|
761 |