📄 oggcontrols.cpp
字号:
iCycle++;
iDrawOffset= (iCycle - iScrollDelay)*iScrollStep;
if (iDrawOffset<0) iDrawOffset= 0;
if (iCycle<iScrollDelay) return;
iRedraw= ETrue;
if ((iCycle-iScrollDelay)*iScrollStep>iTextWidth) {
iHasScrolled= ETrue;
iCycle=0;
iDrawOffset=0;
}
}
void COggText::CycleBorder()
{
iCycle++;
iDrawOffset= (iCycle - iScrollDelay)*iScrollStep;
if (iDrawOffset<0) iDrawOffset= 0;
if (iCycle<iScrollDelay) return;
iRedraw= ETrue;
if ((iw+(iCycle-iScrollDelay)*iScrollStep)>iTextWidth) {
iCycle=0;
}
}
void COggText::CycleBackAndForth()
{
if(iScrollBackward) iCycle--;
else iCycle++;
if(iCycle<0){
iScrollBackward=EFalse;
}
iDrawOffset= (iCycle - iScrollDelay)*iScrollStep;
if (iDrawOffset<0) {
iDrawOffset= 0;
}
if ((iw+(iCycle-iScrollDelay)*iScrollStep)>iTextWidth) {
iDrawOffset=iTextWidth-iw;
}
iRedraw= ETrue;
if ((iw+(iCycle-iScrollDelay)*iScrollStep)>(iTextWidth+iScrollDelay*iScrollStep)) {
iScrollBackward=ETrue;
}
}
void COggText::Draw(CBitmapContext& aBitmapContext)
{
if (!iText) return;
aBitmapContext.UseFont(iFont);
aBitmapContext.SetPenColor(iFontColor);
aBitmapContext.SetPenSize(TSize(2,2));
TRect lineRect(TPoint(ix-iDrawOffset,iy+iLinePadding), TSize(iw+iDrawOffset, iFontHeight));
TPtrC p(*iText);
CGraphicsContext::TTextAlign a= CGraphicsContext::ECenter;
if (iNeedsScrolling) a= CGraphicsContext::ELeft;
aBitmapContext.DrawText(p, lineRect, iFontAscent, a);
}
void COggText::PointerEvent(const TPointerEvent& p)
{
COggControl::PointerEvent(p);
if (p.iType==TPointerEvent::EButton1Down) ScrollNow();
}
TBool COggText::ReadArguments(TOggParser& p)
{
TBool success= COggControl::ReadArguments(p);
if (success && p.iToken==_L("Font")) {
p.Debug(_L("Setting font."));
CFont* aFont= p.ReadFont();
if (aFont) SetFont(aFont, ETrue);
success= aFont!=0;
}
if (success && p.iToken==_L("FontColor")) {
p.Debug(_L("Setting font color."));
TRgb col(0,0,0);
success= p.ReadColor(col);
SetFontColor(col);
}
if (success && p.iToken==_L("Style")) {
p.Debug(_L("Setting text style."));
TInt s;
success= p.ReadToken(s);
if (success) SetScrollStyle(s);
}
if (success && p.iToken==_L("ScrollStep")) {
TInt s;
success= p.ReadToken(s);
if (success) SetScrollStep(s);
}
if (success && p.iToken==_L("ScrollDelay")) {
TInt s;
success= p.ReadToken(s);
if (success) SetScrollDelay(s);
}
return success;
}
// COggIcon
COggIcon::COggIcon() :
COggControl(),
iIcon(0),
iBlinkFrequency(5),
iBlinking(EFalse)
{
}
COggIcon::~COggIcon()
{
if (iIcon) { delete iIcon; iIcon= 0; }
}
void
COggIcon::SetIcon(CGulIcon* anIcon)
{
if (iIcon) delete iIcon;
iIcon= anIcon;
iRedraw= ETrue;
}
void
COggIcon::Blink()
{
iBlinking= ETrue;
iVisible= ETrue;
iCycle= 0;
iRedraw= ETrue;
}
void
COggIcon::Show()
{
iBlinking= EFalse;
iVisible= ETrue;
iRedraw= ETrue;
}
void
COggIcon::Hide()
{
iBlinking= EFalse;
iVisible= EFalse;
iRedraw= ETrue;
}
void
COggIcon::SetBlinkFrequency(TInt aFrequency)
{
iBlinkFrequency= aFrequency;
}
void COggIcon::Cycle()
{
if (!iBlinking) return;
iCycle++;
if (iCycle<iBlinkFrequency) return;
iRedraw= ETrue;
iVisible= !iVisible;
iCycle= 0;
}
void COggIcon::Draw(CBitmapContext& aBitmapContext)
{
if (!iIcon) return;
aBitmapContext.BitBltMasked
(TPoint(ix,iy),
iIcon->Bitmap(),
TRect(TPoint(0,0),iIcon->Bitmap()->SizeInPixels()),
iIcon->Mask(),
ETrue);
}
TBool
COggIcon::ReadArguments(TOggParser& p)
{
TBool success= COggControl::ReadArguments(p);
if (success && p.iToken==_L("BlinkFrequency")) {
p.Debug(_L("Setting blink frequency."));
success= p.ReadToken(iBlinkFrequency);
}
if (success && p.iToken==_L("Icon")) {
p.Debug(_L("Setting icon."));
SetIcon(p.ReadIcon(iBitmapFile));
success= iIcon!=0;
}
return success;
}
/***********************************************************
*
* COggAnimation
*
***********************************************************/
COggAnimation::COggAnimation() :
COggControl(),
iBitmaps(10),
iPause(100),
iFrequency(2),
iFirstBitmap(0),
iStyle(0)
{
}
COggAnimation::~COggAnimation()
{
ClearBitmaps();
}
void
COggAnimation::ClearBitmaps()
{
iBitmaps.ResetAndDestroy();
}
void
COggAnimation::SetBitmaps(TInt aFirstBitmap, TInt aNumBitmaps)
{
ClearBitmaps();
iFirstBitmap= aFirstBitmap;
for (TInt i=0; i<aNumBitmaps; i++)
{
CFbsBitmap* ibitmap= new (ELeave) CFbsBitmap;
ibitmap->Load(iBitmapFile,aFirstBitmap+i);
iBitmaps.AppendL(ibitmap);
}
iRedraw= ETrue;
}
void
COggAnimation::Start()
{
iCycle= 0;
iRedraw= ETrue;
}
void
COggAnimation::Stop()
{
if (iCycle!=-1) {
iCycle= -1;
iRedraw= ETrue;
}
}
void
COggAnimation::SetPause(TInt aPause)
{
if (iPause!=aPause) {
iPause= aPause;
iCycle= 0;
iRedraw= ETrue;
}
}
void
COggAnimation::SetFrequency(TInt aFrequency)
{
if (aFrequency!=iFrequency) {
iFrequency= aFrequency;
iCycle= 0;
iRedraw= ETrue;
}
}
void
COggAnimation::SetStyle(TInt aStyle)
{
if (iStyle!=aStyle) {
iStyle= aStyle;
iRedraw= ETrue;
iCycle= 0;
}
}
void COggAnimation::Cycle()
{
if (iCycle<0) return;
if (!iVisible) return;
#if defined(SERIES60)
if (iBitmaps.Count() <= 1)
return;
#endif
iCycle++;
if (iCycle<iPause) return;
TInt style= 1;
if (iStyle==1) style=2;
if (iCycle-iPause>=iBitmaps.Count()*iFrequency*style) iCycle= 0;
if (iCycle%iFrequency==0) iRedraw= ETrue;
}
void COggAnimation::Draw(CBitmapContext& aBitmapContext)
{
if (iBitmaps.Count() == 0 ) return;
if (iFrequency<1) return;
TInt idx= 0;
if (iCycle>=0 && iCycle-iPause>=0) {
idx= ((iCycle-iPause)/iFrequency)%iBitmaps.Count();
if (iStyle==1 && (iCycle-iPause)/iFrequency>=iBitmaps.Count())
idx= iBitmaps.Count()- idx -1;
}
CFbsBitmap* b= iBitmaps[idx];
aBitmapContext.BitBlt(TPoint(ix,iy),b,TRect(TPoint(0,0),b->SizeInPixels()));
}
TBool
COggAnimation::ReadArguments(TOggParser& p)
{
TBool success= COggControl::ReadArguments(p);
if (success && p.iToken==_L("Frequency")) {
p.Debug(_L("Setting frequency."));
TInt frequency;
success= p.ReadToken(frequency);
if (success) SetFrequency(frequency);
}
if (success && p.iToken==_L("Pause")) {
p.Debug(_L("Setting pause."));
TInt pause(100);
success= p.ReadToken(pause);
if (success) SetPause(pause);
}
if (success && p.iToken==_L("Bitmaps")) {
p.Debug(_L("Settings bitmaps."));
TInt first, num;
success= p.ReadToken(first);
if (success)
{
success= p.ReadToken(num);
if (success)
SetBitmaps(first,num);
}
}
if (success && p.iToken==_L("Style")) {
p.Debug(_L("Setting style."));
TInt s;
success= p.ReadToken(s);
if (success) SetStyle(s);
}
return success;
}
/***********************************************************
*
* COggDigits
*
***********************************************************/
COggDigits::COggDigits() :
COggControl(),
iText(0),
iBitmaps(ENumDigits),
iMasks(ENumDigits)
{
}
COggDigits::~COggDigits()
{
ClearBitmaps();
ClearMasks();
if (iText)
delete iText;
}
void
COggDigits::ClearBitmaps()
{
iBitmaps.ResetAndDestroy();
}
void
COggDigits::ClearMasks()
{
iMasks.ResetAndDestroy();
}
void
COggDigits::SetBitmaps(TInt aFirstBitmap)
{
ClearBitmaps();
for (TInt i=0; i<ENumDigits; i++)
{
iBitmaps.AppendL( new (ELeave) CFbsBitmap) ;
iBitmaps[i]->Load(iBitmapFile,aFirstBitmap+i);
}
iRedraw= ETrue;
}
void
COggDigits::SetMasks(TInt aFirstMask)
{
ClearMasks();
for (TInt i=0; i<ENumDigits; i++)
{
iMasks.AppendL( new (ELeave) CFbsBitmap) ;
iMasks[i]->Load(iBitmapFile,aFirstMask+i);
}
iRedraw= ETrue;
}
void
COggDigits::SetText(const TDesC& aText)
{
if (iText) delete iText;
iText = HBufC::NewLC(aText.Length());
CleanupStack::Pop();
iText->Des().Copy(aText);
iRedraw= ETrue;
}
void COggDigits::Draw(CBitmapContext& aBitmapContext)
{
if (iBitmaps.Count() == 0) return;
if (!iText) return;
TInt x=0;
TBuf<1> zero(_L("0"));
for (TInt i=0; i<iText->Length(); i++) {
TBuf<1> c;
c.Append((*iText)[i]);
CFbsBitmap* b= 0;
CFbsBitmap* m= 0;
TInt idx=-1;
if (c>=_L("0") && c<=_L("9")) {
idx= c[0]-zero[0];
} else if (c==_L(":")) {
idx= EDigitColon;
} else if (c==_L("-")) {
idx= EDigitDash;
} else if (c==_L("/")) {
idx= EDigitSlash;
} else if (c==_L(".")) {
idx= EDigitDot;
}
if (idx>=0) b= iBitmaps[idx];
if (iMasks.Count() >0 )
m= iMasks[idx];
else
m= iBitmaps[idx];
if (!b || !m) continue;
aBitmapContext.BitBltMasked(TPoint(ix+x,iy),b,TRect(TPoint(0,0),b->SizeInPixels()),m,ETrue);
x+= b->SizeInPixels().iWidth;
}
}
TBool
COggDigits::ReadArguments(TOggParser& p)
{
TBool success= COggControl::ReadArguments(p);
if (success && p.iToken==_L("Bitmaps")) {
p.Debug(_L("Settings bitmaps."));
TInt first,num=0;
success= p.ReadToken(first) && p.ReadToken(num);
if (success && num!=ENumDigits) {
success= EFalse;
p.iState= TOggParser::EOutOfRange;
}
if (success) SetBitmaps(first);
}
if (success && p.iToken==_L("Masks")) {
p.Debug(_L("Settings masks."));
TInt first,num=0;
success= p.ReadToken(first) && p.ReadToken(num);
if (success && num!=ENumDigits) {
success= EFalse;
p.iState= TOggParser::EOutOfRange;
}
if (success) SetBitmaps(first);
}
return success;
}
/***********************************************************
*
* COggButton
*
***********************************************************/
COggButton::COggButton() :
COggControl(),
iActiveMask(0),
iNormalIcon(0),
iPressedIcon(0),
iDimmedIcon(0),
iState(0),
iStyle(0)
{
}
COggButton::~COggButton()
{
if (iActiveMask) { iActiveMask->Reset(); delete iActiveMask; iActiveMask= 0; }
if (iNormalIcon) { delete iNormalIcon; iNormalIcon= 0; }
if (iPressedIcon) { delete iPressedIcon; iPressedIcon= 0; }
if (iDimmedIcon) { delete iDimmedIcon; iDimmedIcon= 0; }
}
void
COggButton::SetActiveMask(const TFileName& aFileName, TInt anIdx)
{
iActiveMask = new(ELeave) CFbsBitmap;
int err= iActiveMask->Load(aFileName,anIdx);
if (err!=KErrNone) {
TBuf<256> buf;
CEikonEnv::Static()->ReadResource(buf, R_OGG_ERROR_1);
buf.AppendNum(err);
User::InfoPrint(buf);
delete iActiveMask;
iActiveMask= 0;
}
}
void
COggButton::SetNormalIcon(CGulIcon* anIcon)
{
if (iNormalIcon) delete iNormalIcon;
iNormalIcon= anIcon;
iRedraw= ETrue;
}
void
COggButton::SetPressedIcon(CGulIcon* anIcon)
{
if (iPressedIcon) delete iPressedIcon;
iPressedIcon= anIcon;
iRedraw= ETrue;
}
void
COggButton::SetDimmedIcon(CGulIcon* anIcon)
{
if (iDimmedIcon) delete iDimmedIcon;
iDimmedIcon= anIcon;
iRedraw= ETrue;
}
void
COggButton::SetStyle(TInt aStyle)
{
iStyle= aStyle;
}
void
COggButton::SetState(TInt aState)
{
if (iState!=aState) {
iState= aState;
iRedraw= ETrue;
}
}
void
COggButton::Draw(CBitmapContext& aBitmapContext)
{
if (iDimmed) {
if (iDimmedIcon) DrawCenteredIcon(aBitmapContext,iDimmedIcon);
else if (iNormalIcon) DrawCenteredIcon(aBitmapContext,iNormalIcon);
if (iFocus) DrawFocus(aBitmapContext);
}
else {
if (iState==0) {
if (iFocus) DrawFocus(aBitmapContext);
else if (iNormalIcon) DrawCenteredIcon(aBitmapContext,iNormalIcon);
}
if (iState==1) {
if (iPressedIcon) DrawCenteredIcon(aBitmapContext,iPressedIcon);
else if (iNormalIcon) DrawCenteredIcon(aBitmapContext,iNormalIcon);
}
}
}
void COggButton::PointerEvent(const TPointerEvent& p)
{
if (iDimmed || !iVisible) return;
if (p.iType==TPointerEvent::EButton1Down) {
if (iStyle==0) iState= 1;
else {
if (iState==0) iState= 1; else iState= 0;
}
iRedraw= ETrue;
if (iObserver) iObserver->OggControlEvent(this,0,0);
}
if (p.iType==TPointerEvent::EButton1Up) {
if (iStyle==0) iState= 0;
iRedraw= ETrue;
}
COggControl::PointerEvent(p);
}
TBool
COggButton::ReadArguments(TOggParser& p)
{
TBool success= ETrue;
if (p.iToken==_L("NormalIcon")) {
p.Debug(_L("Setting normal icon."));
CGulIcon* i= p.ReadIcon(iBitmapFile);
success= i!=0;
if (success) SetNormalIcon(i);
}
else if (p.iToken==_L("PressedIcon")) {
p.Debug(_L("Setting pressed icon."));
CGulIcon* i= p.ReadIcon(iBitmapFile);
success= i!=0;
if (success) SetPressedIcon(i);
}
else if (p.iToken==_L("DimmedIcon")) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -