📄 bitmapscalercontainer.cpp
字号:
/*
* ============================================================================
* Name : CBitmapScalerContainer from BitmapScalerContainer.h
* Part of : BitmapScaler
* Created : 30.01.2006 by ToBeReplacedByAuthor
* Implementation notes:
* Initial content was generated by Series 60 Application Wizard.
* Version :
* Copyright: ToBeReplacedByCopyright
* ============================================================================
*/
// INCLUDE FILES
#include <eikenv.h>
#include <eikappui.h>
#include <eikapp.h>
#include <BitmapScaler.mbg>
#include "BitmapScalerContainer.h"
// ================= MEMBER FUNCTIONS =======================
// ---------------------------------------------------------
// iBitmap用来存储展示的位图。
// iScale用来存储经过扩大或者缩小之后,或者旋转之后的位图。
// BitmapScalerEngine是一个CActive类,每次执行扩大过着缩小或者旋转等操作之后,都调用观察者类BitmapScalerContainer的观察函数
// iObserver.OnCompleteL(iStatus.Int());
// DrawDeferred();
// delete iBitmap;
// iBitmap=NULL;
// iBitmap=iScaled;
// iScaled=NULL;
// 将处理过后的位图重新返回给iBitmap,使iBitmap保存当前显示的图片。
void CBitmapScalerContainer::ConstructL(const TRect& aRect)
{
CreateWindowL();
CEikonEnv* eikonEnv = CEikonEnv::Static();
TFileName mbmFile = eikonEnv->EikAppUi()->Application()->BitmapStoreName();
iBitmap = eikonEnv->CreateBitmapL(mbmFile, EMbmBitmapscalerFace);
iBitmapScalerEngine = CBitmapScalerEngine::NewL(*this);
SetRect(aRect);
ActivateL();
}
// Destructor
CBitmapScalerContainer::~CBitmapScalerContainer()
{
if(iBitmapScalerEngine!=NULL)
{
delete iBitmapScalerEngine;
}
delete iBitmap;
delete iScaled;
}
void CBitmapScalerContainer::DoRotate()
{
const TSize KMinSize(16, 16);
const TSize KMaxSize(80, 80);
if(iScaled==NULL)
{
TSize size = iBitmap->SizeInPixels() - KMinSize;
iScaled = new(ELeave) CFbsBitmap;
User::LeaveIfError(iScaled->Create(size, iBitmap->DisplayMode()));
iBitmapScalerEngine->Rotate(*iBitmap, *iScaled);
}
else
{
TSize size = iScaled->SizeInPixels() - KMinSize;
if(size==iBitmap->SizeInPixels())
{
delete iScaled;
iScaled = NULL;
DrawDeferred();
}
else if(size.iWidth>=KMinSize.iWidth)
{
User::LeaveIfError(iScaled->Resize(size));
iBitmapScalerEngine->Rotate(*iBitmap, *iScaled);
}
}
}
TKeyResponse CBitmapScalerContainer::OfferKeyEventL(
const TKeyEvent& aKeyEvent,TEventCode aType)
{
TKeyResponse response = EKeyWasNotConsumed;
if(aType==EEventKey)
{
const TSize KMinSize(16, 16);
const TSize KMaxSize(80, 80);
response = EKeyWasConsumed;
switch(aKeyEvent.iScanCode)
{
case EStdKeyLeftArrow: // Zoom out
case EStdKeyDownArrow:
{
if(iScaled==NULL)
{
TSize size = iBitmap->SizeInPixels() - KMinSize;
iScaled = new(ELeave) CFbsBitmap;
User::LeaveIfError(iScaled->Create(size, iBitmap->DisplayMode()));
iBitmapScalerEngine->Scale(*iBitmap, *iScaled);
}
break;
}
case EStdKeyRightArrow: // Zoom in
case EStdKeyUpArrow:
{
if(iScaled==NULL)
{
TSize size = iBitmap->SizeInPixels() + KMinSize;
iScaled = new(ELeave) CFbsBitmap;
User::LeaveIfError(iScaled->Create(size, iBitmap->DisplayMode()));
iBitmapScalerEngine->Scale(*iBitmap, *iScaled);
}
break;
}
default:
{
response = EKeyWasNotConsumed;
break;
}
}
}
return response;
}
void CBitmapScalerContainer::OnCompleteL(TInt/*aError*/)
{
DrawDeferred();
delete iBitmap;
iBitmap=NULL;
iBitmap=iScaled;
iScaled=NULL;
}
// ---------------------------------------------------------
// CBitmapScalerContainer::Draw(const TRect& aRect) const
// ---------------------------------------------------------
//
void CBitmapScalerContainer::Draw(const TRect&/* aRect*/) const
{
if(iBitmapScalerEngine->IsActive())
{
return;
}
CWindowGc& gc = SystemGc();
gc.Clear();
/* CFbsBitmap* bitmap = iScaled;
if(bitmap==NULL)
{
bitmap = iBitmap;
}*/
TRect rect = Rect();
TSize size = iBitmap->SizeInPixels();
TPoint pos((rect.Width()-size.iWidth)/2, (rect.Height()-size.iHeight)/2);
gc.BitBlt(pos, iBitmap);
}
// End of File
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -