--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputarc/src/peninputlayoutcontrol/peninputlayouthwrwindow.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,1532 @@
+/*
+* Copyright (c) 2005-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 hwr window base and transparent window
+*
+*/
+
+
+
+#include <coemain.h>
+#include "peninputlayouthwrwnd.h"
+#include "peninputlayoutrootctrl.h"
+#include "peninputlayouttimer.h"
+#include "peninputlayout.h"
+
+#include <settingsinternalcrkeys.h>
+
+#include "peninputpentracedecorator.h"
+
+const TUint8 KDefaultTransparency = 128;
+const TInt KDefaultPenSize = 3;
+const TInt KFadeAreaCount = 30;
+
+/******************** start of CHwrWndBase **********************************/
+// Implementation of Class CHwrWndBase
+//
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::CHwrWndBase
+// C++ default constructor
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHwrWndBase::CHwrWndBase(const TRect& aRect,CFepUiLayout* aUiLayout,TInt aControlId):
+ CFepUiBaseCtrl(aRect,aUiLayout,aControlId),
+ iHasNewTrace(EFalse),
+ iSubmitted(ETrue)
+ {
+ const TTimeIntervalMicroSeconds32 KDefaultCharDelay = 1000*500; //1/2 seconds
+ const TTimeIntervalMicroSeconds32 KDefaultStrokeDelay = 1000*300; //1/10 seconds
+
+
+ SetControlType(ECtrlHwrWnd);
+ SetPenColor(KRgbBlack);
+ SetPenSize(TSize(KDefaultPenSize,KDefaultPenSize));
+ iStrokeEndMark=TPoint(0xffff,0);
+ iStrokeDelay = KDefaultStrokeDelay;
+ iCharDelay = KDefaultCharDelay;
+ iDirtyRect.SetRect(0,0,0,0);
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::~CHwrWndBase
+// Destructor
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CHwrWndBase::~CHwrWndBase()
+ {
+
+ iListOfPoints.Close();
+ delete iCharacterTimer;
+ iCharacterTimer = NULL;
+ delete iStrokeTimer;
+ iStrokeTimer = NULL;
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::ClearStroke
+// Clear the stroke
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHwrWndBase::ClearStroke()
+ {
+ iDirtyRect.Intersection(iRect);
+
+ ClearRect( iRect );
+
+ iListOfPoints.Reset();
+
+ iHasNewTrace=EFalse;
+ iSubmitted = ETrue;
+
+ if(AbleToDraw())
+ {
+ RootControl()->DrawRect(iRect);
+ UpdateArea(iRect, EFalse);
+ }
+
+ iDirtyRect.SetRect(0,0,0,0);
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::AddGuidingLine
+// Add a guilding line.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHwrWndBase::AddGuidingLine(const TPoint& /*aStart*/, const TPoint& /*aEnd*/)
+ {
+ //not implemented
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::EndStrokeL
+// Do recognition after a stroke is ended.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CHwrWndBase::EndStrokeL(TBool aCharacterTimerFlag)
+ {
+ if(iHasNewTrace) //only do this when we have new trace
+ {
+ if(aCharacterTimerFlag)
+ {
+ iCharacterTimer->SetTimer(iCharDelay); //set character timer
+ //only send finish event when character timer starter,
+ //otherwise, send charater timer out event.
+ ReportEvent(EEventHwrStrokeFinished);
+ iSubmitted = EFalse;
+ }
+ else
+ {
+ ReportEvent(EEventHwrCharacterTimerOut);
+ iSubmitted = ETrue;
+ }
+
+ iHasNewTrace=EFalse; //Current stroke is ended,reset the flag.
+
+ }
+ else
+ {
+ //no new trace, no need to update the candidate content, just show it.
+ if(!aCharacterTimerFlag)
+ {
+ ReportEvent(EEventHwrCharacterTimerOut);
+ iSubmitted = ETrue;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::CancelCharWriting
+// Cancel current drawing. Clears the stroke and stops the timer
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHwrWndBase::CancelCharWriting()
+ {
+ SetPointerDown(EFalse);
+
+ //cancel timer
+ iCharacterTimer->Cancel();
+ iStrokeTimer->Cancel();
+
+ //reset the stroke
+ ClearStroke();
+ ReportEvent(EEventHwrStrokeCanceled);
+ }
+// ---------------------------------------------------------------------------
+// CHwrWndBase::Draw
+// Draw the window and stroke
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHwrWndBase::Draw()
+ {
+ if(!AbleToDraw())
+ return;
+
+ //draw back ground
+ DrawBackground();
+ DrawStroke(ETrue);
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::DrawLine
+// Draw a line
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TRect CHwrWndBase::DrawLine(const TPoint& aPt1,const TPoint& aPt2,TBool /*aDrawFlag*/)
+ {
+ //do nothing
+ return TRect(aPt1,aPt2);
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::HandlePointerDownEventL
+// handle pointer down event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CHwrWndBase::HandlePointerDownEventL( const TPoint& aPt)
+ {
+ CFepUiBaseCtrl::HandlePointerDownEventL(aPt);
+
+ iPtPrev = aPt;
+
+ iListOfPoints.AppendL(aPt- Rect().iTl);
+ iStrokeTimer->Cancel();
+ iCharacterTimer->Cancel();
+
+ iHasNewTrace=ETrue;
+ iSubmitted = EFalse;
+
+ TRect rect;
+ rect = DrawPoint(aPt,ETrue);
+ if(iDirtyRect.IsEmpty())
+ iDirtyRect = rect;
+ else
+ {
+ iDirtyRect.BoundingRect(rect);
+ }
+
+ UpdateArea(rect,EFalse);
+
+ ReportEvent(EEventHwrStrokeStarted);
+ return this;
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::HanldePointerUpEventL
+// handle pointer up event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CHwrWndBase::HandlePointerUpEventL( const TPoint& aPoint)
+ {
+ iListOfPoints.AppendL(iStrokeEndMark);
+ iStrokeTimer->SetTimer(iStrokeDelay);
+ CFepUiBaseCtrl::HandlePointerUpEventL(aPoint);
+ // For EKZG-7JCBGW
+ // iCtrlWithPointerDown of its CControlGroup must be set to NULL
+ // when its up event occurs.
+ CFepUiBaseCtrl* parent = ParentCtrl();
+ while ( parent )
+ {
+ parent->CancelPointerDownL();
+ parent = parent->ParentCtrl();
+ }
+ return this;
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::HandleButtonMoveEventL
+// Handle button move event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CHwrWndBase::HandlePointerMoveEventL(const TPoint& aPoint)
+ {
+ if(!PointerDown())
+ return this;
+
+ iListOfPoints.AppendL(aPoint - Rect().iTl);
+
+ TRect rect=DrawLine(iPtPrev,aPoint,ETrue);
+
+ /*if(!rect.IsEmpty())
+ {
+ TRect& drawrect = DirtyRect();
+ drawrect.BoundingRect(rect); //find the bounding rect and set the rect
+ } */
+ UpdateArea(rect,EFalse);
+ iPtPrev=aPoint;
+ return this;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::CancelPointerDownL
+// Cancel the pointer down event in HWR window
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CHwrWndBase::CancelPointerDownL()
+ {
+ if( !PointerDown() )
+ {
+ return;
+ }
+ //allow pen up in other control. Do us normal pen up
+ if( iListOfPoints.Count() > 0 )
+ {
+ iListOfPoints.AppendL(iStrokeEndMark);
+ iStrokeTimer->SetTimer(iStrokeDelay);
+ }
+
+ SetPointerDown(EFalse);
+ CFepUiBaseCtrl::CancelPointerDownL();
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::UpdateRegion
+// Updates the area where other control made dirty
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CHwrWndBase::UpdateRegion(CFepUiBaseCtrl* aCtrl)
+ {
+ if(aCtrl)
+ {
+ TRect rect;
+ if(iDirtyRect.Intersects(aCtrl->Rect()))
+ {
+ DrawStroke(ETrue);
+ rect.Intersection(iDirtyRect);
+ UpdateArea(rect,EFalse);
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::HandleTimerOut
+// Handle timer out event.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHwrWndBase::HandleTimerOut(TInt aTimeType)
+ {
+ switch(aTimeType)
+ {
+ case CLayoutTimer::ECharacterTimer:
+ {
+ TRAP_IGNORE(EndStrokeAndClearL());
+ }
+ break;
+ case CLayoutTimer::EStrokeTimer:
+ {
+ TRAP_IGNORE(EndStrokeL(ETrue));
+ }
+ break;
+ default:
+ //Do nothing
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::ConstructL
+// Symbian second phrase constructor
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHwrWndBase::ConstructL()
+ {
+ BaseConstructL();
+ iCharacterTimer = CLayoutTimer::NewL(this,CLayoutTimer::ECharacterTimer);
+ iStrokeTimer = CLayoutTimer::NewL(this);
+ }
+
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::DrawStroke
+// Draw stroke
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TRect CHwrWndBase::DrawStroke(TBool /*aDrawFlag*/)
+ {
+ //not implemented
+ return TRect();
+ }
+
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::EndStrokeAndClearL
+// Called when character timer out. Not implemented, it's for derivated class.
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CHwrWndBase::EndStrokeAndClearL()
+ {
+ EndStrokeL(EFalse);
+ ClearStroke();
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::OnDeActivate
+// Response to layout de activation event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHwrWndBase::OnDeActivate()
+ {
+ CFepUiBaseCtrl::OnDeActivate();
+ iStrokeTimer->Cancel();
+ iCharacterTimer->Cancel();
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::OnLayoutDraggingStart
+// Response to layout dragging start event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHwrWndBase::OnLayoutDraggingStart()
+ {
+ if ( iHasNewTrace )
+ {
+ ReportEvent(EEventHwrStrokeFinished);
+ iHasNewTrace=EFalse;
+ }
+ iStrokeTimer->Cancel();
+
+ if ( !iSubmitted )
+ {
+ ReportEvent(EEventHwrCharacterTimerOut);
+ iSubmitted = ETrue;
+ }
+ iCharacterTimer->Cancel();
+ iListOfPoints.Reset();
+ }
+
+// ---------------------------------------------------------------------------
+// CHwrWndBase::OnLayoutDraggingEnd
+// Response to layout dragging end event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CHwrWndBase::OnLayoutDraggingEnd()
+ {
+ }
+
+/******************** end of CHwrWndBase **********************************/
+
+
+
+
+//class CTransparentHwrWnd
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::CTransparentHwrWnd
+// C++ default constructor
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CTransparentHwrWnd::CTransparentHwrWnd(const TRect& aRect,
+ CFepUiLayout* aUiLayout,TInt aCtrlId,
+ TBool aFullScreenFlag)
+ :CHwrWndBase(aRect,aUiLayout,aCtrlId),
+ iIsFullScreen(aFullScreenFlag),
+ iTraceOutsideWindowFlag(EFalse),
+ iTransparencyFactor(KDefaultTransparency)
+ {
+ SetControlType(ECtrlTransparentHwrWnd);
+
+ const TRgb KDefaultMaskCol(200,200,200);
+
+ if(iIsFullScreen)
+ {
+ SetMaskBkCol( TRgb(KTransparentColor)); //full transparent
+ }
+ else
+ SetMaskBkCol(KDefaultMaskCol);
+
+ SetBorderColor(TRgb(KOpaqueColor));
+ //transparent window allow dragging on top of it
+ SetAllowOverlap(ETrue);
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::~CTransparentHwrWnd
+// Destructor
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CTransparentHwrWnd::~CTransparentHwrWnd()
+ {
+ if(iTraceOutsideWindowFlag)
+ {
+ TRAP_IGNORE(RequireRegionUpdateL(EFalse));
+ }
+
+ if ( iPenTraceDecorator )
+ {
+ delete iPenTraceDecorator;
+ iPenTraceDecorator = NULL;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::NewL
+// Factory function
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CTransparentHwrWnd* CTransparentHwrWnd::NewL(const TRect& aRect,
+ CFepUiLayout* aUiLayout,TInt aCtrlId,
+ TBool aFullScreenFlag)
+ {
+ CTransparentHwrWnd* wnd=new(ELeave) CTransparentHwrWnd(aRect,aUiLayout,
+ aCtrlId,aFullScreenFlag);
+ CleanupStack::PushL(wnd);
+ wnd->ConstructL ();
+ CleanupStack::Pop(wnd);
+ return wnd;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::SetWndTransparencyFactor
+// Set the transparency factor
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void EXPORT_C CTransparentHwrWnd::SetWndTransparencyFactor(TUint8 aFactor)
+ {
+ if(iTransparencyFactor != aFactor)
+ {
+ //change mask col
+ TUint8 col = aFactor;
+
+ SetMaskBkCol(TRgb( 255- col, 255 - col, 255 - col));
+
+ iTransparencyFactor = aFactor;
+ Draw();
+ UpdateArea(Rect(),ETrue);
+ UiLayout()->LayoutOwner()->FlushUi();
+ }
+ }
+
+
+// -----------------------------------------------------------------------------
+// CTransparentHwrWnd::EnableTraceOutsideWindow
+// Enable/disable trace outside of hwr window.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWnd::EnableTraceOutsideWindow(TBool aFlag)
+ {
+ iTraceOutsideWindowFlag = aFlag;
+ TRAP_IGNORE(RequireRegionUpdateL(aFlag));
+ }
+
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::Draw
+// Draw hwr window
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWnd::Draw()
+ {
+ if(!AbleToDraw())
+ return;
+
+ if(iIsFullScreen)
+ {
+ DrawStroke(ETrue);
+ return;
+ }
+
+ CFbsBitGc* gc= static_cast<CFbsBitGc*> (BitGc());
+
+ DrawMaskBackground();
+ // ----- draw bitmaps -----
+ DrawBackground();
+ DrawFrame( Rect() );
+ //draw stroke
+ gc->SetPenSize( PenSize() );
+ gc->SetPenColor( PenColor() );
+
+ if ( PenTraceDecorationActivated() )
+ {
+ //clear decoration buffer
+ if ( StrokeList().Count() > 0 )
+ {
+ iPenTraceDecorator->Clear();
+ }
+ }
+
+ DrawStroke(ETrue);
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::DrawStroke
+// Draw stroke
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TRect CTransparentHwrWnd::DrawStroke(TBool aDrawFlag)
+ {
+ TRect DirtyRect;
+ TRect rect;
+ TPoint pt;
+ TPoint prevPt;
+
+ //rect = DrawPoint(pt,aDrawFlag);
+ //DirtyRect = rect;
+ TBool bBeginStroke = ETrue;
+ for(TInt i = 0; i < StrokeList().Count(); ++i)
+ {
+ pt = StrokeList()[i] ;
+ //skip the stroke end mark, plot the start point for the stroke
+ if(pt == StrokeEndMark())
+ {
+ bBeginStroke = ETrue;
+ continue;
+ }
+
+ pt += Rect().iTl;
+ if(bBeginStroke)
+ {
+ //plot the start point for the new line
+ rect = DrawPoint(pt,aDrawFlag);
+ bBeginStroke = EFalse;
+ }
+ else
+ {
+ rect = DrawLine(prevPt,pt,aDrawFlag);
+ }
+ DirtyRect.BoundingRect(rect); //find the bounding rect
+ prevPt = pt;
+ }
+
+ return DirtyRect;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::DrawPoint
+// Draw a point
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TRect CTransparentHwrWnd::DrawPoint(const TPoint& aPoint,TBool aDrawFlag)
+ {
+ TRect affectedRect(0,0,0,0);
+
+ if ( PenTraceDecorationActivated( ) )
+ {
+ TRect wndRect = Rect();
+
+ TPoint pt1 = aPoint - wndRect.iTl; //decorator's coordinate system
+ TRect changedRect = iPenTraceDecorator->DrawPoint( pt1 ); //decorator's coordinate system
+ TPoint drawpos = changedRect.iTl + wndRect.iTl;
+
+ CFbsBitGc* gc = static_cast<CFbsBitGc*>( BitGc() );
+
+ gc->Activate( BitmapDevice() );
+ gc->SetBrushColor( BkColor() );
+ gc->SetBrushStyle( CGraphicsContext::ESolidBrush );
+
+ gc->BitBltMasked( drawpos, iPenTraceDecorator->BitsBitmap(),
+ changedRect, iPenTraceDecorator->MaskBitmap(), EFalse );
+
+ gc->RectDrawnTo( affectedRect ); //get the affected rect since last draw
+
+ //gc->Activate( MaskBitmapDevice() );
+ //gc->BitBlt( drawpos, iPenTraceDecorator->MaskBitmap(), changedRect );
+ }
+ else
+ {
+ CFbsBitGc* gc= static_cast<CFbsBitGc*> (BitGc());
+
+ gc->Activate( BitmapDevice() );
+ gc->SetPenSize( PenSize());
+ if(aDrawFlag)
+ gc->SetPenColor( PenColor() );
+ else //erase the point
+ gc->SetPenColor( BkColor());
+ gc->Plot( aPoint );
+ gc->RectDrawnTo(affectedRect); //get the affected rect since last draw
+
+ TRect maskRect;
+
+ gc->Activate( MaskBitmapDevice());
+ gc->SetPenColor( KOpaqueColor );
+ //use same color to get opague point
+ gc->Plot( aPoint );
+ gc->RectDrawnTo(maskRect);
+
+ affectedRect.BoundingRect(maskRect); //find the bounding rect
+ if(!iTraceOutsideWindowFlag)
+ affectedRect.Intersection(iRect); //drawing not allowed outside of
+
+ }
+ return affectedRect;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::DrawLine
+// Draw a line
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TRect CTransparentHwrWnd::DrawLine(const TPoint& aPt1,const TPoint& aPt2,TBool aDrawFlag)
+ {
+ TRect affectedRect(0,0,0,0);
+
+ if ( PenTraceDecorationActivated() )
+ {
+ TRect wndRect = Rect();
+
+ TPoint pt1 = aPt1 - wndRect.iTl; //decorator's coordinate system
+ TPoint pt2 = aPt2 - wndRect.iTl; //decorator's coordinate system
+
+ TRect changedRect = iPenTraceDecorator->DrawNextLine( pt1, pt2 ); //decorator's coordinate system
+
+ TPoint drawpos = changedRect.iTl + wndRect.iTl;
+
+ CFbsBitGc* gc= static_cast<CFbsBitGc*>( BitGc() );
+
+ gc->Activate( BitmapDevice() );
+ gc->SetBrushColor( BkColor() );
+ gc->SetBrushStyle( CGraphicsContext::ESolidBrush );
+
+ gc->BitBltMasked( drawpos, iPenTraceDecorator->BitsBitmap(),
+ changedRect, iPenTraceDecorator->MaskBitmap(), EFalse );
+
+ gc->RectDrawnTo( affectedRect ); //get the affected rect since last draw
+
+ //gc->Activate( MaskBitmapDevice() );
+ //gc->BitBlt( drawpos, iPenTraceDecorator->MaskBitmap(), changedRect );
+ }
+
+ else
+ {
+ CFbsBitGc* gc= static_cast<CFbsBitGc*> (BitGc());
+
+ gc->Activate( BitmapDevice() );
+ SetClipRegion();
+ gc->SetPenSize( PenSize());
+ if(aDrawFlag)
+ gc->SetPenColor( PenColor() );
+ else
+ gc->SetPenColor( BkColor());
+ gc->SetPenStyle(CGraphicsContext::ESolidPen);
+ gc->DrawLine( aPt1,aPt2 );
+
+ gc->RectDrawnTo(affectedRect); //get the affected rect since last draw
+ CancelClipRegion();
+
+ TRect maskRect;
+
+ gc->Activate( MaskBitmapDevice() );
+ SetClipRegion();
+ gc->SetPenColor( KOpaqueColor );
+
+ //use same color as in bitmap to get opague line
+ //gc->SetPenStyle(CGraphicsContext::ESolidPen);
+ gc->DrawLine( aPt1,aPt2 );
+ gc->RectDrawnTo(maskRect);
+
+ //affectedRect.BoundingRect(maskRect); //find the bounding rect
+/* if(!iTraceOutsideWindowFlag)
+ {
+ TRect r = affectedRect;
+ affectedRect.Intersection(iRect); //drawing not allowed outside of
+
+ }*/
+ CancelClipRegion();
+ }
+ return affectedRect;
+ }
+
+void CTransparentHwrWnd::DrawFrame( const TRect& aFrameRect )
+ {
+ CFbsBitGc* gc= static_cast<CFbsBitGc*> ( BitGc() );
+
+ gc->Activate( MaskBitmapDevice() );
+ gc->SetPenColor( KOpaqueColor );
+ gc->SetPenSize( BorderSize() );
+ gc->SetPenStyle( CGraphicsContext::ESolidPen );
+ gc->SetBrushStyle( CGraphicsContext::ENullBrush );
+ gc->DrawRect( aFrameRect );
+
+ gc->Activate( BitmapDevice() );
+ gc->SetPenColor( BorderColor() );
+ gc->SetPenSize( BorderSize() );
+ gc->SetPenStyle(CGraphicsContext::ESolidPen);
+ gc->SetBrushStyle( CGraphicsContext::ENullBrush );
+ gc->DrawRect( aFrameRect );
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::HandlePointerDownL
+// handle pointer down event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CTransparentHwrWnd::HandlePointerDownEventL(const TPoint& aPoint)
+ {
+ if ( PenTraceDecorationActivated() )
+ {
+ iPenTraceDecorator->SetPenTraceColor( PenColor() );
+ iPenTraceDecorator->SetDisplayModeL( BitmapDevice()->DisplayMode(), EFalse );
+ iPenTraceDecorator->ResizeL( Rect().Size() );
+ }
+
+ // handle drawing in first box
+ //capture pointer
+ CHwrWndBase::HandlePointerDownEventL(aPoint);
+ CapturePointer();
+ return this;
+ }
+
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::HandlePointerUpL
+// Handle point up event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CTransparentHwrWnd::HandlePointerUpEventL(
+ const TPoint& aPoint)
+ {
+ //release capture
+ CHwrWndBase::HandlePointerUpEventL(aPoint);
+ CapturePointer(EFalse);
+ return this;
+ }
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::HandlePointerMoveEventL
+// Handle point move event
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CTransparentHwrWnd::HandlePointerMoveEventL(
+ const TPoint& aPoint)
+ {
+ if(!PointerDown())
+ return this;
+
+ //ignore events outside of window if it's TraceOutSideWindow flag is not set
+ TRect r;
+ TSize s(PenSize());
+ TSize s2(3*s.iWidth/2,3*s.iHeight/2);
+
+ r.SetRect(TPoint(aPoint-TSize(s.iWidth/2,s.iHeight/2)),s2);
+ TRect r1 = r;
+ r.Intersection(Rect());
+ TBool inside = (r == r1);
+
+ //if(iTraceOutsideWindowFlag || inside)//Rect().Contains(aPoint))
+ if(iTraceOutsideWindowFlag || Rect().Contains(aPoint))
+ {
+ return CHwrWndBase::HandlePointerMoveEventL(aPoint);
+ }
+
+ return this;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::UpdateValidRegion
+// Update the valid region when one control hiden or shown
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWnd::UpdateValidRegion(CFepUiBaseCtrl* aCtrl,
+ TBool aRemovedFlag)
+ {
+ RRegion region(8);
+ region.Copy(Region());
+ if(iTraceOutsideWindowFlag) //Ignore if trace can not be outside of hwr window
+ {
+ if(aCtrl)
+ {
+ if(aCtrl->Hiden() || aRemovedFlag)
+ {
+ region.Union(aCtrl->Region());
+ }
+ else
+ region.SubRegion(aCtrl->Region());
+
+ }
+ else // recalculate the region
+ {
+
+ region.Clear();
+ region.AddRect(UiLayout()->Rect());
+ CFepUiBaseCtrl* ctrl;
+ for(TInt i = 0; i < RootControl()->ControlList().Count(); i++)
+ {
+ ctrl = RootControl()->ControlList()[i];
+ if(ctrl->Ready() && !ctrl->Hiden() &&
+ !ctrl->IsKindOfControl(ECtrlTransparentHwrWnd))
+ {
+ region.SubRect(ctrl->Rect());
+ }
+ }
+ }
+ }
+ else
+ {
+ region.Clear();
+ region.AddRect(Rect());
+ }
+
+ SetRegion(region);
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::ClearStroke
+// Clear all strokes.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWnd::ClearStroke()
+ {
+ if ( PenTraceDecorationActivated() )
+ {
+ iPenTraceDecorator->Clear();
+ }
+
+ CHwrWndBase::ClearStroke();
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::InstallPenTraceDecoratorL
+// Install a new pen trace decorator.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CTransparentHwrWnd::InstallPenTraceDecoratorL(const TDesC& /*aDecoratorName*/, TBool aEnable )
+ {
+ if ( iPenTraceDecorator )
+ {
+ delete iPenTraceDecorator;
+ iPenTraceDecorator = NULL;
+ }
+
+ iPenTraceDecorator = CPeninputPenTraceDecorator::NewL();
+ if ( aEnable )
+ {
+ iPenTraceDecorator->Enable();
+ }
+ return ETrue;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::SupportPenTraceDecoration
+// Test whether this window support trace decoration.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CTransparentHwrWnd::SupportPenTraceDecoration()
+ {
+ return iPenTraceDecorator ? ETrue : EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::PenTraceDecorationActivated
+// Test whether pen trace decoration is activated.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TBool CTransparentHwrWnd::PenTraceDecorationActivated()
+ {
+ if ( iPenTraceDecorator )
+ {
+ return iPenTraceDecorator->Enabled();
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWnd::ActivatePenTraceDecoration
+// Activate/deactivate pen trace decoration.
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWnd::ActivatePenTraceDecoration(TBool aActive, TBool aReleaseBuffer )
+ {
+ if ( iPenTraceDecorator )
+ {
+ if ( aActive )
+ {
+ iPenTraceDecorator->Enable();
+ }
+ else
+ {
+ iPenTraceDecorator->Disable( aReleaseBuffer );
+ }
+ }
+ }
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::CTransparentHwrWndExt
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CTransparentHwrWndExt::CTransparentHwrWndExt( const TRect& aRect,
+ CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TBool aFullScreenFlag,
+ TBool aShowGuideLine )
+ :CTransparentHwrWnd( aRect, aUiLayout, aControlId, aFullScreenFlag ),
+ iShowGuideLine( aShowGuideLine ), iGuideLineStyle( EGuideLineNone ),
+ iGuideLineColor( TRgb(0) ), iGuideLineWidth( 1 ), iEnableFade( EFalse )
+ {
+
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::~CTransparentHwrWndExt
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CTransparentHwrWndExt* CTransparentHwrWndExt::NewL( const TRect& aRect,
+ CFepUiLayout* aUiLayout,
+ TInt aControlId,
+ TBool aFullScreenFlag,
+ TBool aShowGuideLine )
+ {
+ CTransparentHwrWndExt* wnd=new (ELeave) CTransparentHwrWndExt( aRect,
+ aUiLayout,
+ aControlId,
+ aFullScreenFlag,
+ aShowGuideLine );
+ CleanupStack::PushL(wnd);
+ wnd->ConstructL ();
+ CleanupStack::Pop(wnd);
+ return wnd;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::ConstructL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWndExt::ConstructL()
+ {
+ iStrokeEndMark=TPoint(0xffff,0);
+ iFadeTimer = CPeriodic::NewL( CActive::EPriorityStandard );
+ // Construct GS CenRep
+ if(iGSRepository == NULL)
+ {
+ TRAP_IGNORE(iGSRepository
+ = CRepository::NewL(KCRUidPersonalizationSettings) );
+ }
+ TInt newValue = 3;
+ if ( iGSRepository )
+ {
+ iGSRepository->Get( KSettingsWritingSpeed, newValue );
+ }
+ SetFadingSpeed(newValue);
+ iFadeBeginPos = Rect().iTl.iX;
+ iFadeEndPos = Rect().iTl.iX;
+ CHwrWndBase::ConstructL();
+ }
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::~CTransparentHwrWndExt
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CTransparentHwrWndExt::~CTransparentHwrWndExt()
+ {
+ iListOfShownPoints.Close();
+ delete iFadeTimer;
+ delete iGSRepository;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::HideGuideLine
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWndExt::HideGuideLine( TBool aHideFlag )
+ {
+ iShowGuideLine = aHideFlag;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::SetTopGuideLinePosition
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWndExt::SetTopGuideLinePosition( const TPoint& aLeftTop,
+ const TPoint& aRightBottom )
+ {
+ iTlOfTopGuideLine = aLeftTop;
+ iBrOfTopGuideLine = aRightBottom;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::SetBottomGuideLinePosition
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWndExt::SetBottomGuideLinePosition( const TPoint& aLeftTop,
+ const TPoint& aRightBottom )
+ {
+ iTlOfBottomGuideLine = aLeftTop;
+ iBrOfBottomGuideLine = aRightBottom;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::SetGuideLineStyle
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWndExt::SetGuideLineStyle( TInt aGuideLineStyle )
+ {
+ iGuideLineStyle = aGuideLineStyle;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::RefreshUI
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWndExt::RefreshUI()
+ {
+ if( !Hiden() )
+ {
+ Draw();
+ UpdateArea(Rect(), ETrue);
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::SetGuideLineColor
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWndExt::SetGuideLineColor( const TRgb& aColor )
+ {
+ iGuideLineColor = aColor;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::SetGuideLineWidth
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWndExt::SetGuideLineWidth( TInt aWidth )
+ {
+ iGuideLineWidth = aWidth;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::Draw
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWndExt::Draw()
+ {
+ //if(Hiden() || !Ready() || !UiLayout()->LayoutReady())
+ // return;
+ if(!AbleToDraw())
+ return;
+ CTransparentHwrWnd::Draw();
+
+ if ( iShowGuideLine && iShowGuideLine != EGuideLineNone )
+ {
+ DrawGuidingLine();
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::DrawStroke
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TRect CTransparentHwrWndExt::DrawStroke(TBool aDrawFlag)
+ {
+ TRect DirtyRect;
+ if(iListOfShownPoints.Count())
+ {
+ TRect rect;
+ TPoint pt;
+ TPoint prevPt;
+
+ TBool beginStroke = ETrue;
+ for(TInt i=0;i<iListOfShownPoints.Count();i++)
+ {
+ pt=iListOfShownPoints[i] ;
+
+ if(pt == StrokeEndMark() )
+ {
+ beginStroke = ETrue;
+ continue;
+ }
+ else
+ {
+ if ( beginStroke )
+ {
+ rect = DrawPoint(pt,aDrawFlag);
+ beginStroke = EFalse;
+ }
+ else
+ {
+ rect = DrawLine(prevPt,pt,aDrawFlag);
+ }
+
+ DirtyRect.BoundingRect(rect);
+ prevPt=pt;
+ }
+ }
+ }
+ return DirtyRect;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::DrawPoint
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TRect CTransparentHwrWndExt::DrawPoint(const TPoint& aPoint,TBool aDrawFlag)
+ {
+ TRect affectedRect(0,0,0,0);
+ {
+ CFbsBitGc* gc= static_cast<CFbsBitGc*> (BitGc());
+
+ gc->Activate( BitmapDevice() );
+ gc->SetPenSize( PenSize());
+ if(aDrawFlag)
+ gc->SetPenColor( PenColor() );
+ else //erase the point
+ gc->SetPenColor( BkColor());
+ gc->Plot( aPoint );
+ gc->RectDrawnTo(affectedRect); //get the affected rect since last draw
+
+ TRect maskRect;
+
+ gc->Activate( MaskBitmapDevice());
+ if ( ( aPoint.iX > iFadeBeginPos ) && ( aPoint.iX <= iFadeEndPos ) )
+ {
+
+ TRgb rgb( 128 - TransparencyFactor()/2,
+ 128 - TransparencyFactor()/2,
+ 128 - TransparencyFactor()/2 );
+ gc->SetPenColor( rgb );
+ }
+ else
+ {
+ gc->SetPenColor( KOpaqueColor );
+ }
+ //use same color to get opague point
+ gc->Plot( aPoint );
+ gc->RectDrawnTo(maskRect);
+
+ affectedRect.BoundingRect(maskRect); //find the bounding rect
+ //if(!TraceOutsideWindowFlag())
+ affectedRect.Intersection(iRect); //drawing not allowed outside of
+
+ }
+ return affectedRect;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::DrawLine
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TRect CTransparentHwrWndExt::DrawLine(const TPoint& aPt1,const TPoint& aPt2,TBool aDrawFlag)
+ {
+ TRect affectedRect(0,0,0,0);
+ {
+ CFbsBitGc* gc= static_cast<CFbsBitGc*> (BitGc());
+
+ gc->Activate( BitmapDevice() );
+ gc->SetClippingRect(Rect());
+ gc->SetPenSize( PenSize());
+ if(aDrawFlag)
+ gc->SetPenColor( PenColor() );
+ else
+ gc->SetPenColor( BkColor());
+ gc->SetPenStyle(CGraphicsContext::ESolidPen);
+ gc->DrawLine( aPt1,aPt2 );
+
+ gc->RectDrawnTo(affectedRect); //get the affected rect since last draw
+ gc->CancelClippingRect();
+
+ TRect maskRect;
+
+ gc->Activate( MaskBitmapDevice() );
+ gc->SetClippingRect(Rect());
+ if ( ( Min(aPt1.iX, aPt2.iX) > iFadeBeginPos ) &&
+ ( Max(aPt1.iX, aPt2.iX) <= iFadeEndPos ) )
+ {
+ TRgb rgb( 128 - TransparencyFactor()/2,
+ 128 - TransparencyFactor()/2,
+ 128 - TransparencyFactor()/2 ) ;
+ gc->SetPenColor( rgb );
+// gc->SetPenColor( KRgbRed );
+ }
+ else
+ {
+ gc->SetPenColor( KOpaqueColor );
+ }
+
+ //use same color as in bitmap to get opague line
+ //gc->SetPenStyle(CGraphicsContext::ESolidPen);
+ gc->DrawLine( aPt1,aPt2 );
+ gc->RectDrawnTo(maskRect);
+
+ //affectedRect.BoundingRect(maskRect); //find the bounding rect
+/* if(!iTraceOutsideWindowFlag)
+ {
+ TRect r = affectedRect;
+ affectedRect.Intersection(iRect); //drawing not allowed outside of
+
+ }*/
+ gc->CancelClippingRect();
+ }
+ return affectedRect;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::OnDeActivate
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWndExt::OnDeActivate()
+ {
+ CHwrWndBase::OnDeActivate();
+ iFadeTimer->Cancel();
+ iListOfShownPoints.Reset();
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::OnLayoutDraggingStart
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void CTransparentHwrWndExt::OnLayoutDraggingStart()
+ {
+ iFadeTimer->Cancel();
+ iListOfShownPoints.Reset();
+ CHwrWndBase::OnLayoutDraggingStart();
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::EndStrokeAndClearL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CTransparentHwrWndExt::EndStrokeAndClearL()
+ {
+ iFadeTimer->Cancel();
+ iListOfShownPoints.Reset();
+ iFadeBeginPos = Rect().iTl.iX;
+ iFadeEndPos = Rect().iTl.iX;
+ CHwrWndBase::EndStrokeAndClearL();
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::CancelPointerDownL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CTransparentHwrWndExt::CancelPointerDownL()
+ {
+ if( !PointerDown() )
+ {
+ return;
+ }
+ //allow pen up in other control. Do us normal pen up
+ if( iListOfShownPoints.Count() > 0 )
+ {
+ iListOfShownPoints.AppendL(iStrokeEndMark);
+ iFadeTimer->Cancel();
+ }
+
+ CHwrWndBase::CancelPointerDownL();
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::HandlePointerDownEventL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CTransparentHwrWndExt::HandlePointerDownEventL(const TPoint& aPoint)
+ {
+ iListOfShownPoints.AppendL(aPoint);
+ iFadeMaxPos = aPoint.iX;
+
+ if ( aPoint.iX < iFadeEndPos )
+ {
+ iFadeTimer->Cancel();
+ EndStrokeAndClearL();
+ }
+ if( !iFadeTimer->IsActive() && iEnableFade)
+ {
+ iFadeTimer->Start( iFadeBeginTime, iFadeIntervalTime, TCallBack( UpdateShownArea, this ) );
+ }
+
+ return CTransparentHwrWnd::HandlePointerDownEventL(aPoint);
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::HandlePointerMoveEventL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CTransparentHwrWndExt::HandlePointerMoveEventL(const TPoint& aPoint)
+ {
+ if(!PointerDown())
+ return this;
+
+ iListOfShownPoints.AppendL(aPoint);
+
+ if( aPoint.iX < iFadeMaxPos )
+ {
+ iFadeMaxPos = aPoint.iX;
+ }
+
+ return CTransparentHwrWnd::HandlePointerMoveEventL(aPoint);
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::HandlePointerUpEventL
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+EXPORT_C CFepUiBaseCtrl* CTransparentHwrWndExt::HandlePointerUpEventL(const TPoint& aPoint)
+ {
+ iListOfShownPoints.AppendL(iStrokeEndMark);
+ iFadeMaxPos = Rect().iBr.iX;
+ return CTransparentHwrWnd::HandlePointerUpEventL(aPoint);
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::UpdateShownArea
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+TInt CTransparentHwrWndExt::UpdateShownArea( TAny* aAny )
+ {
+ CTransparentHwrWndExt* self = static_cast<CTransparentHwrWndExt*>(aAny);
+ self->DoUpdateShownArea();
+
+ return KErrNone;
+ }
+
+// ---------------------------------------------------------------------------
+// CTransparentHwrWndExt::DoUpdateShownArea
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CTransparentHwrWndExt::DoUpdateShownArea()
+ {
+ iFadeBeginPos = iFadeEndPos > iFadeMaxPos ? iFadeMaxPos : iFadeEndPos;
+ iFadeEndPos = iFadeBeginPos + Rect().Width()/KFadeAreaCount;
+ iFadeEndPos = iFadeEndPos > iFadeMaxPos ? iFadeMaxPos : iFadeEndPos;
+
+ TRect eraseRect(Rect());
+ eraseRect.iTl.iX = eraseRect.iBr.iX = iFadeBeginPos;
+
+ for( TInt i = iListOfShownPoints.Count()-1; i >= 0; i-- )
+ {
+ if ( iListOfShownPoints[i].iX <= iFadeBeginPos )
+ {
+ if( iListOfShownPoints[i].iX < eraseRect.iTl.iX )
+ {
+ eraseRect.iTl.iX = iListOfShownPoints[i].iX;
+ }
+ iListOfShownPoints.Remove(i);
+ }
+ }
+ eraseRect.iTl.iX -= PenSize().iWidth;
+ eraseRect.iBr.iX += PenSize().iWidth;
+ Draw();
+ UpdateArea( eraseRect, EFalse );
+ }
+
+EXPORT_C void CTransparentHwrWndExt::CancelCharWriting()
+ {
+ iFadeTimer->Cancel();
+ iListOfShownPoints.Reset();
+ iFadeBeginPos = Rect().iTl.iX;
+ iFadeEndPos = Rect().iTl.iX;
+ CHwrWndBase::CancelCharWriting();
+ }
+
+void CTransparentHwrWndExt::DrawGuidingLine()
+ {
+ CFbsBitGc* gc= static_cast<CFbsBitGc*> ( BitGc() );
+
+ gc->Activate( MaskBitmapDevice() );
+ gc->SetPenSize( TSize( iGuideLineWidth, iGuideLineWidth ) );
+ gc->SetPenColor( KOpaqueColor );
+ gc->SetPenStyle(CGraphicsContext::ESolidPen);
+
+ switch ( iGuideLineStyle )
+ {
+ case EGuideLineTop:
+ {
+ gc->DrawLine( iTlOfTopGuideLine, iBrOfTopGuideLine );
+ }
+ break;
+ case EGuideLineBottom:
+ {
+ gc->DrawLine( iTlOfBottomGuideLine, iBrOfBottomGuideLine );
+ }
+ break;
+ case EGuideLineBoth:
+ {
+ gc->DrawLine( iTlOfTopGuideLine, iBrOfTopGuideLine );
+ gc->DrawLine( iTlOfBottomGuideLine, iBrOfBottomGuideLine );
+ }
+ break;
+ default:
+ // Do nothing
+ break;
+ }
+
+ gc->Activate( BitmapDevice() );
+ gc->SetPenSize( TSize( iGuideLineWidth, iGuideLineWidth ) );
+ gc->SetPenColor( iGuideLineColor );
+ gc->SetPenStyle(CGraphicsContext::ESolidPen);
+
+ switch ( iGuideLineStyle )
+ {
+ case EGuideLineTop:
+ {
+ gc->DrawLine( iTlOfTopGuideLine, iBrOfTopGuideLine );
+ }
+ break;
+ case EGuideLineBottom:
+ {
+ gc->DrawLine( iTlOfBottomGuideLine, iBrOfBottomGuideLine );
+ }
+ break;
+ case EGuideLineBoth:
+ {
+ gc->DrawLine( iTlOfTopGuideLine, iBrOfTopGuideLine );
+ gc->DrawLine( iTlOfBottomGuideLine, iBrOfBottomGuideLine );
+ }
+ break;
+ default:
+ // Do nothing
+ break;
+ }
+ }
+// end of file
+