diff -r ac7e4d1d9209 -r ebd48d2de13c textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp --- a/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp Thu Aug 19 10:15:25 2010 +0300 +++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayoutpopupwnd.cpp Tue Aug 31 15:31:50 2010 +0300 @@ -48,7 +48,6 @@ { //do nothing } - delete iExt; } // --------------------------------------------------------------------------- @@ -59,14 +58,6 @@ EXPORT_C void CFepLayoutPopupWnd::ConstructL() { BaseConstructL(); - iExt = CPopupWndExt::NewL(); - //check whether we need create backup bmp. Some pop up window is created after UI layout is created - //If a pop up window is created during layout constructing, it will create the backup bitmap in Handleresourcechange - if (UiLayout()->NotDrawToLayoutDevice()) - { - iExt->ContructBkDeviceL(Rect().Size(), - UiLayout()->LayoutOwner()->BitmapDevice()->DisplayMode()); - } } EXPORT_C void CFepLayoutPopupWnd::ReDrawRect(const TRect& /*aRect*/) @@ -267,9 +258,6 @@ RootControl()->SetActiveCtrl(this); ReportEvent(EEventCapturePointer); - //When preparing the pop up window, it causes redraw the underlying control sometimes. - DisableDrawingInGroup();//disable any drawing during preparation to avoid it dirty the background - //let pop up window do preparation OnDisplay(); @@ -299,11 +287,13 @@ switch( aDisPostion ) { case EDispBottomRight: - rtPopup.SetRect( TPoint( offsetRect.iTl.iX, offsetRect.iBr.iY ), szPopup ); + rtPopup.SetRect( TPoint( offsetRect.iTl.iX, offsetRect.iBr.iY ), szPopup ); if( rtPopup.iBr.iY > ptScreenSize.iPixelSize.iHeight ) { - rtPopup.Move( 0, ptScreenSize.iPixelSize.iHeight - rtPopup.iBr.iY ); - } + //we need move x also + rtPopup.Move( aOffsetRect.Width(), + ptScreenSize.iPixelSize.iHeight - rtPopup.iBr.iY ); + } if(rtPopup.iBr.iX > ptScreenSize.iPixelSize.iWidth ) { rtPopup.Move ( ptScreenSize.iPixelSize.iWidth - rtPopup.iBr.iX, 0 ); @@ -314,8 +304,9 @@ szPopup ); if( rtPopup.iBr.iY > ptScreenSize.iPixelSize.iHeight ) { - //we need move the pop wnd up to ensure it not to be out of screen - rtPopup.Move( 0, ptScreenSize.iPixelSize.iHeight - rtPopup.iBr.iY ); + //we need move x also + rtPopup.Move( aOffsetRect.Width(), + ptScreenSize.iPixelSize.iHeight - rtPopup.iBr.iY ); } if( rtPopup.iTl.iX < 0 ) { @@ -324,11 +315,11 @@ break; case EDispTopRight: rtPopup.SetRect( TPoint( offsetRect.iTl.iX, offsetRect.iTl.iY - szPopup.iHeight ), - szPopup ); + szPopup ); if( rtPopup.iTl.iY < 0 ) { - rtPopup.Move ( 0, -rtPopup.iTl.iY ); - } + rtPopup.Move ( aOffsetRect.Width(), -rtPopup.iTl.iY ); + } if(rtPopup.iBr.iX > ptScreenSize.iPixelSize.iWidth ) { rtPopup.Move ( ptScreenSize.iPixelSize.iWidth - rtPopup.iBr.iX, 0 ); @@ -341,7 +332,7 @@ if( rtPopup.iTl.iY < 0 ) { - rtPopup.Move ( 0, -rtPopup.iTl.iY ); + rtPopup.Move ( -aOffsetRect.Width(), -rtPopup.iTl.iY ); } if( rtPopup.iTl.iX < 0 ) @@ -371,9 +362,7 @@ //RootControl()->Clear(); DrawTransparentMaskBackground( TRect( TPoint(), rtFinal.Size() ) ); RootControl()->Move(iLayoutMoveOff); - EnableDrawingInGroup(); - RootControl()->Draw(); - DisableDrawingInGroup(); + RootControl()->Draw(); //UpdateArea( TRect( TPoint(), rtFinal.Size()), ETrue); } else @@ -391,30 +380,8 @@ //iRect = rtPopup; Move( rtPopup.iTl - Rect().iTl); - //copy and save the bitmap - if (UiLayout()->NotDrawToLayoutDevice()) - { - iExt->SetRect(Rect()); - - CFbsBitGc* gc = iExt->BackupGc(); - gc->Activate( iExt->BackupDevice() ); - CFbsBitGc* layoutGc = static_cast( - UiLayout()->LayoutOwner()->BitmapContext()); - gc->BitBlt(TPoint(0,0),*layoutGc,Rect()); - - Hide(EFalse); - } - - EnableDrawingInGroup(); - UiLayout()->LockArea(iRect,this); - - SetReady(ETrue);//enalbe it as in Close, the flag is reset. - if (UiLayout()->NotDrawToLayoutDevice()) - Draw();//force draw - else - Hide(EFalse); - UpdateArea(iRect, EFalse); + Hide(EFalse); iIsShowing = ETrue; AfterDisplayed(); @@ -470,26 +437,7 @@ iIsShowing = EFalse; if(iWndControl) iWndControl->MakeVisible(EFalse); - SetReady(EFalse);//disable redraw - TRect popRect = iRect; - UiLayout()->UnLockArea(iRect, this); - - //restore the background bitmap - TBool bRedraw = ETrue; - if (UiLayout()->NotDrawToLayoutDevice()) - { - CFbsBitGc* layoutGc = static_cast( - UiLayout()->LayoutOwner()->BitmapContext()); - - iExt->BackupGc(); - layoutGc->Activate( UiLayout()->LayoutOwner()->BitmapDevice()); - TRect r; - r.SetSize(iExt->Rect().Size()); - layoutGc->BitBlt(iExt->Rect().iTl,iExt->BackupBitmap(),r); - bRedraw = EFalse; - } - - Hide(ETrue); + Hide(ETrue); UiLayout()->UnLockArea(iRect,this); iRect.Move(-iRect.iTl); MLayoutOwner* layoutOwner = UiLayout()->LayoutOwner(); @@ -501,18 +449,14 @@ layoutOwner->SetPosition(iPrevLayoutRect.iTl); layoutOwner->LayoutSizeChanged(iPrevLayoutRect.Size()); RootControl()->GraphicDeviceSizeChanged(); - bRedraw = ETrue; } - if (bRedraw) - { - RootControl()->Draw(); - } + RootControl()->Draw(); iIsShowing = EFalse; - //TRect rect(TPoint(0, 0), iPrevLayoutRect.Size()); - UpdateArea(popRect, EFalse); + TRect rect( TPoint(0,0),iPrevLayoutRect.Size() ); + UpdateArea( rect, EFalse ); } // --------------------------------------------------------------------------- @@ -555,87 +499,3 @@ { //do nothing } -EXPORT_C void CFepLayoutPopupWnd::HandleResourceChange(TInt aType) - { - if (aType == KPenInputOwnDeviceChange) - { - if (UiLayout()->NotDrawToLayoutDevice()) - { - TRAP_IGNORE(iExt->ContructBkDeviceL(Rect().Size(), - UiLayout()->LayoutOwner()->BitmapDevice()->DisplayMode())); - } - } - else - CControlGroup::HandleResourceChange(aType); - } -void CFepLayoutPopupWnd::DisableDrawingInGroup() - { - - UiLayout()->DisableLayoutDrawing(ETrue); - SetReady(EFalse); - for(TInt i = 0; i < NumOfControls(); ++i) - { - //There is potential defect that if the child control is a group control, its children not set. - //This can be solved by locking the area so no one can update until we unlock it in Enalbegroup - ControlList()[i]->SetReady(EFalse); - } - } -void CFepLayoutPopupWnd::EnableDrawingInGroup() - { - SetReady(ETrue); - for(TInt i = 0; i < NumOfControls(); ++i) - { - //There is potential defect that if the child control is a group control, its children not set. - //This can be solved by locking the area so no one can update until we unlock it in Enalbegroup - ControlList()[i]->SetReady(ETrue); - } - UiLayout()->DisableLayoutDrawing(EFalse); - } - - - -CFepLayoutPopupWnd::CPopupWndExt* CFepLayoutPopupWnd::CPopupWndExt::NewL() - { - CPopupWndExt* self = new (ELeave)CPopupWndExt(); - return self; - } - -void CFepLayoutPopupWnd::CPopupWndExt::ContructBkDeviceL(const TSize& aSize,const TDisplayMode& aMode) - { - TBool bNewBmp = EFalse; - if(!iBitmap || iBitmap->DisplayMode() != aMode) - { - delete iBitmap; - iBitmap = 0; - iBitmap = new (ELeave) CFbsBitmap; - User::LeaveIfError( iBitmap->Create( aSize,aMode)); - delete iBitmapDevice; - iBitmapDevice = 0; - iBitmapDevice = CFbsBitmapDevice::NewL(iBitmap); - bNewBmp = ETrue; - } - if(!iGc) - iGc = CFbsBitGc::NewL(); - - if(!bNewBmp && aSize != iBitmap->SizeInPixels()) - { - ResizeBackupDeviceL(aSize); - } - } -void CFepLayoutPopupWnd::CPopupWndExt::ResizeBackupDeviceL(const TSize& aSize) - { - - iBitmap->Resize(aSize); - iBitmapDevice->Resize( aSize); - iGc->Activate(iBitmapDevice); - iGc->Resized(); - } -void CFepLayoutPopupWnd::CPopupWndExt::SetRect(const TRect& aRect) - { - iRect = aRect; - if(iBitmap && iBitmap->SizeInPixels() != aRect.Size()) - { - TRAP_IGNORE(ResizeBackupDeviceL(aRect.Size())); - } - } -// End of File