Applied patch 1, to provide a syborg specific minigui oby file.
Need to compare this with the "stripped" version currently in the tree.
This supplied version applies for Nokia builds, but need to repeat the
test for SF builds to see if pruning is needed, or if the file needs to
be device-specific.
// Copyright (c) 1995-2009 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:
// Window redraw code, three sorts of redrawing are supported
// Sending a redraw message to the client (see redrawmsgwindow.cpp)
// Drawing from backup bitmap
// Simply clearing the window
//
//
#include "wnredraw.h"
#include "server.h"
#include "playbackgc.h"
#include "wstop.h"
#include "ANIM.H"
#include "EVQUEUE.H"
#include "offscreenbitmap.h"
#include <s32mem.h>
#include <gdi.h>
#include "panics.h"
#include "inifile.h"
#include "rootwin.h"
#include "EVENT.H"
#include "wstypes.h"
struct TFadingParams
{
TUint8 blackMap;
TUint8 whiteMap;
};
CWsWindowRedraw::CWsWindowRedraw(CWsWindow *aWin) : iWsWin(aWin)
{
}
CWsWindowRedraw::~CWsWindowRedraw()
{
if (iWsWin->WsOwner())
{
iWsWin->WsOwner()->RedrawQueue()->RemoveInvalid(this);
}
}
void CWsWindowRedraw::ConstructL()
{
}
void CWsWindowRedraw::ClipInvalidRegion(const TRect &)
{
}
void CWsWindowRedraw::Resize(const TSize &, const TSize &)
{
}
void CWsWindowRedraw::SetReply(TInt aReply)
{
iWsWin->WsOwner()->SetReply(aReply);
}
void CWsWindowRedraw::OwnerPanic(TClientPanic aPanic)
{
iWsWin->OwnerPanic(aPanic);
}
CWsBackedUpWindow *CWsWindowRedraw::Backup() const
{
return(NULL);
}
void CWsWindowRedraw::Scroll(const TRect &, const TPoint &,const TRect &)
{
}
void CWsWindowRedraw::UpdateAnimArea()
{
}
void CWsWindowRedraw::PrepareForResizeL(const TSize &, TSize &)
{
}
TBool CWsWindowRedraw::DrawCommand(CWsGc*,const TAny*)
{
return ETrue;
}
void CWsWindowRedraw::GcAttributeChange(CWsGc*,const TAny*)
{
}
void CWsWindowRedraw::GcDeactivate(CWsGc*)
{
}
CFbsDevice* CWsWindowRedraw::OutputDevice() const
{
return iWsWin->Screen()->GetFbsDevice();
}
void CWsWindowRedraw::ClientExposing()
{
}
void CWsWindowRedraw::ClearRedrawStore(TBool)
{}
void CWsWindowRedraw::PreDrawWindow(CFbsBitGc* aGc, const TRegion &aRegion)
{
WS_ASSERT_DEBUG(iGlobalRedrawRegion == NULL, EWsPanicScheduledRedraw);
iGlobalRedrawRegion = &aRegion;
CPlaybackGc::Instance()->SetTargetRegion(iGlobalRedrawRegion);
CWsClient::iCurrentCommand.iOpcode=0; // Andy - urgh - loose me please
CPlaybackGc::Instance()->Activate(CliWin(), aGc, iGlobalRedrawRegion);
}
void CWsWindowRedraw::PostDrawWindow(CFbsBitGc* aGc)
{
if(CWsTop::IsFadeEnabled() && iWsWin->FadeCount()>0 && !iWsWin->IsNonFading())
{
//x86gcc compiler needs this syntax to perform
//multiple inheritance duplicate common base class declaration resolution
//combined with the template resolution.
MWsGc* objectInterfaceResolver=CPlaybackGc::Instance();
MWsFader* fader = objectInterfaceResolver->ObjectInterface<MWsFader>();
if(fader)
{
TFadingParams parameters;
iWsWin->GetFadingParams(parameters.blackMap,parameters.whiteMap);
TPckgBuf<TFadingParams> buf(parameters);
fader->SetFadingParameters(buf);
// Only fade the region that hasn't been faded before
STACK_REGION fdRgn;
fdRgn.Copy( *iGlobalRedrawRegion );
fdRgn.Intersect( iWsWin->FadableRegion() );
fader->FadeArea( aGc, &fdRgn );
fdRgn.Close();
}
}
CPlaybackGc::Instance()->Deactivate();
WS_ASSERT_DEBUG(iGlobalRedrawRegion, EWsPanicScheduledRedraw);
DrawAnims(aGc, *iGlobalRedrawRegion);
CPlaybackGc::Instance()->SetTargetRegion(NULL);
iGlobalRedrawRegion = 0;
}
void CWsWindowRedraw::DrawAnims(CFbsBitGc * aGc, const TRegion& aRegion)
{
if (iWsWin->iAnimList)
{
// If an anim panics, it will leave and set the panic flag on the client
// The client itself won't actually panic yet, and we don't want to leave from here.
TRAP_IGNORE(DrawAnimsL(aGc, aRegion));
}
// Draw standard text cursor if required
RWsTextCursor* const cursor = CWsTop::CurrentTextCursor();
if (cursor && cursor->Win() == iWsWin && cursor->IsStandardCursorActive())
{
// Standard text cursor is active on this window
const TBool flashing = cursor->IsFlashing();
TFlashState flashState = EFlashOff;
if (flashing)
{
flashState = Screen()->SpriteManager()->CurrentCursorFlashState();
}
if (flashState == EFlashOn || !flashing)
{
// Cursor should be visible, so draw it
aGc->Reset();
cursor->Draw(aGc, aRegion);
}
if (flashing)
{
// Reschedule to flash the standard cursor on or off
Screen()->ScheduleAnimation(cursor->RectRelativeToScreen(), Screen()->SpriteManager()->NextCursorFlashStateChange(), 0, 0);
}
}
for (CWsSpriteBase * sprite = iWsWin->iSpriteList; sprite; sprite = sprite->Next())
{
aGc->Reset();
sprite->Redraw(aGc, aRegion);
}
}
void CWsWindowRedraw::DrawAnimsL(CFbsBitGc * aGc, const TRegion& aRegion)
{
for (CWsAnim * anim = iWsWin->iAnimList; anim; anim = anim->Next())
{
// This can leave
TRAPD(err,anim->Redraw(aGc, &aRegion));
if(err!=KErrNone)
{
anim->Panic(EWservPanicAnimLeave);
}
}
}
TBool CWsWindowRedraw::Contains(const TArray<TGraphicDrawerId>& /*aDrawers*/,const TRegion& aRegion) const
{
// if in doubt, assume we do
return !aRegion.IsEmpty();
}
TInt CWsWindowRedraw::DrawBackgroundColor(const TRegion* aRegion)
{
if(Screen()->BltOffScreen())
{
return KErrNone;
}
TRgb col = BackColor();
if (col.Alpha() == 0)
{
return KErrNone;
}
TRect abs(CliWin()->AbsRect());
abs.Move(-CliWin()->Origin());
TBuf8<sizeof(TRect)> cmd;
cmd.Copy(reinterpret_cast<TUint8*>(&abs),sizeof(TRect));
CPlaybackGc::Instance()->BitGc().SetClippingRegion(aRegion);
CPlaybackGc::Instance()->BitGc().SetBrushColor(col);
CPlaybackGc::Instance()->BitGc().SetBrushStyle(CGraphicsContext::ESolidBrush);
CPlaybackGc::Instance()->BitGc().SetPenStyle(CGraphicsContext::ENullPen);
// Andy - this is pretty ridiculous - can't we just draw using the gc?
TRAPD(err,CPlaybackGc::Instance()->CommandL(EWsGcOpDrawRect, cmd)); //Should not leave ###
CPlaybackGc::Instance()->BitGc().SetDrawMode(CGraphicsContext::EDrawModePEN);
CPlaybackGc::Instance()->BitGc().CancelClippingRegion();
return err;
}
TBool CWsWindowRedraw::ReleaseMemory(MWsMemoryRelease::TMemoryReleaseLevel)
{
return EFalse;
}
void CWsWindowRedraw::VisibleRegionChange()
{
}
TBool CWsWindowRedraw::ReadyToDraw() const
{
return ETrue;
}
void CWsWindowRedraw::WindowClosing()
{}
//
// Blank up window //
//
CWsBlankWindow::CWsBlankWindow(CWsWindow *aWin) : CWsWindowRedraw(aWin), iColor(iWsWin->RootWindow()->DefaultBackgroundColor()), iNoColor(EFalse)
{
}
CWsBlankWindow::~CWsBlankWindow()
{
}
void CWsBlankWindow::SetColor(TRgb aColor)
{
iColor=aColor;
iNoColor=EFalse;
Screen()->AddRedrawRegion(iWsWin->VisibleRegion());
}
TBool CWsBlankWindow::CommandL(TInt aOpcode, TWsWinCmdUnion &aCmd)
{
switch(aOpcode)
{
case EWsWinOpSetColor:
SetColor(*aCmd.rgb);
break;
case EWsWinOpSetNoBackgroundColor:
SetBackgroundClear();
break;
default:
return(EFalse);
}
return(ETrue);
}
TRgb CWsBlankWindow::BackColor() const
{
return(iColor);
}
TBool CWsBlankWindow::GetRedrawRect(TRect &) const
{
if (!iNoColor || iWsWin->iAnimList)
iWsWin->Screen()->AddRedrawRegion(iWsWin->VisibleRegion());
return(EFalse);
}
TBool CWsBlankWindow::NeedsRedraw() const
{
return(EFalse);
}
void CWsBlankWindow::DrawWindow()
{
if (!iNoColor)
{
DrawBackgroundColor(iGlobalRedrawRegion);
}
}