diff -r 000000000000 -r 15bf7259bb7c uiacceltk/hitchcock/coretoolkit/src/HuiDisplayCoeControl.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiacceltk/hitchcock/coretoolkit/src/HuiDisplayCoeControl.cpp Tue Feb 02 07:56:43 2010 +0200 @@ -0,0 +1,250 @@ +/* +* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies 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 the CHuiDisplayCoeControl class. +* CHuiDisplayCoeControl is a CCoeControl that has its own +* CHuiDisplay instance attached to the control's RWindow. +* +*/ + + + +#include "uiacceltk/HuiDisplayCoeControl.h" // Class definition +#include "uiacceltk/HuiEnv.h" +#include "uiacceltk/HuiDisplay.h" +#include "uiacceltk/HuiEvent.h" + + +EXPORT_C CHuiDisplayCoeControl* +CHuiDisplayCoeControl::NewL(CHuiEnv& aEnv, const TRect& aRect, TInt aFlags) + { + CHuiDisplayCoeControl* self = CHuiDisplayCoeControl::NewLC(aEnv, aRect, aFlags); + CleanupStack::Pop(self); + return self; + } + + +EXPORT_C CHuiDisplayCoeControl* +CHuiDisplayCoeControl::NewLC(CHuiEnv& aEnv, const TRect& aRect, TInt aFlags) + { + CHuiDisplayCoeControl* self = new (ELeave) CHuiDisplayCoeControl(aEnv); + CleanupStack::PushL(self); + self->ConstructL(aRect, aFlags); + return self; + } + + +EXPORT_C CHuiDisplayCoeControl::CHuiDisplayCoeControl(CHuiEnv& aEnv) + : iEnv(aEnv) + { + } + + +EXPORT_C void CHuiDisplayCoeControl::ConstructL(const TRect& aRect, TInt aFlags) + { + // The display has its own window. + CreateWindowL(); +#ifndef SYMBIAN_BUILD_GCE + Window().EnableOSB(EFalse); +#endif + // Set the size of the control. + SetRect(aRect); + + if(aFlags & CHuiEnv::ENewDisplayFullScreen) + { + SetExtentToWholeScreen(); + } + + // Create a new CHuiDisplay for our window. We don't get ownership of + // the display instance. + iDisplay = &iEnv.NewDisplayL(Rect(), this, aFlags); + + // Since display creation went ok, we know that this rectangle size can be handled. + iPrevRect = aRect; + + // The control is now ready to be drawn. + ActivateL(); + + EnableDragEvents(); + } + + +EXPORT_C CHuiDisplayCoeControl::~CHuiDisplayCoeControl() + { + // if the environment has been destroyed, the display is + // already been deleted + if (CHuiEnv::Static()) + { + // The display is discarded. + delete iDisplay; + } + } + + +EXPORT_C CHuiEnv& CHuiDisplayCoeControl::Env() + { + return iEnv; + } + + +EXPORT_C CHuiDisplay& CHuiDisplayCoeControl::Display() + { + return *iDisplay; + } + + +EXPORT_C void CHuiDisplayCoeControl::SizeChanged() + { + if(iDisplay) + { + // Change the size of the display. + TSize size = Rect().Size(); + TRAPD(err, iDisplay->SetSizeL(size)); + if(err != KErrNone) + { + // Switching to new size failed. Maintain old size. + size = iPrevRect.Size(); + } + else + { + iPrevRect = Rect(); + } + + // Redefine the portion of the drawing surface that is used by + // the display. + iDisplay->SetVisibleArea(TRect(TPoint(0, 0), size)); + } + } + + +EXPORT_C TInt CHuiDisplayCoeControl::CountComponentControls() const + { + return 0; + } + + +EXPORT_C CCoeControl* CHuiDisplayCoeControl::ComponentControl(TInt /*aIndex*/) const + { + return NULL; + } + + +EXPORT_C void CHuiDisplayCoeControl::Draw(const TRect& /*aRect*/) const + { + // This is called when the application framework wants us to redraw + // a certain portion of the screen. + + if(iDisplay) + { + /// @todo Use aRect as the dirty area to redraw. + + // Make sure refresh is going to happen. + iDisplay->SetDirty(); + } + } + + +EXPORT_C void CHuiDisplayCoeControl::HandleResourceChange(TInt aType) + { + CCoeControl::HandleResourceChange(aType); + } + + +EXPORT_C void CHuiDisplayCoeControl::HandleControlEventL(CCoeControl* /*aControl*/, + TCoeEvent /*aEventType*/) + { + /** @todo What to do here? */ + } + + +EXPORT_C TKeyResponse CHuiDisplayCoeControl::OfferKeyEventL(const TKeyEvent& aKeyEvent, + TEventCode aType) + { + THuiEvent event(iDisplay, aKeyEvent, aType); + + // Notify the environemnt. + iEnv.NotifyInputReceivedL(event); + + if(iDisplay->Roster().HandleEventL(event)) + { + return EKeyWasConsumed; + } + return EKeyWasNotConsumed; + } + + +EXPORT_C void CHuiDisplayCoeControl::HandlePointerEventL(const TPointerEvent& aPointerEvent) + { + THuiEvent event(iDisplay, aPointerEvent); + + // Notify the environment. + iEnv.NotifyInputReceivedL(event); + + iDisplay->Roster().HandleEventL(event); + } + +EXPORT_C void CHuiDisplayCoeControl::DisplayCoeCntrlExtension(const TUid& /*aExtensionUid*/, TAny** /*aExtensionParams*/) + { + } + +EXPORT_C void CHuiDisplayCoeControl::MakeVisible(TBool aVisible) + { + CCoeControl::MakeVisible(aVisible); + } + +EXPORT_C void CHuiDisplayCoeControl::SetDimmed(TBool aDimmed) + { + CCoeControl::SetDimmed(aDimmed); + } + +EXPORT_C void CHuiDisplayCoeControl::ConstructFromResourceL(TResourceReader& aReader) + { + CCoeControl::ConstructFromResourceL(aReader); + } + +EXPORT_C void CHuiDisplayCoeControl::ActivateL() + { + Window().EnableAdvancedPointers(); + CCoeControl::ActivateL(); + } + +EXPORT_C void CHuiDisplayCoeControl::PrepareForFocusLossL() + { + CCoeControl::PrepareForFocusLossL(); + } + +EXPORT_C void CHuiDisplayCoeControl::PrepareForFocusGainL() + { + CCoeControl::PrepareForFocusGainL(); + } + +EXPORT_C TCoeInputCapabilities CHuiDisplayCoeControl::InputCapabilities() const + { + return CCoeControl::InputCapabilities(); + } + +EXPORT_C void CHuiDisplayCoeControl::FocusChanged(TDrawNow aDrawNow) + { + CCoeControl::FocusChanged(aDrawNow); + } + +EXPORT_C void CHuiDisplayCoeControl::PositionChanged() + { + CCoeControl::PositionChanged(); + } + +EXPORT_C void CHuiDisplayCoeControl::SetContainerWindowL(const CCoeControl& aContainer) + { + CCoeControl::SetContainerWindowL(aContainer); + } +