⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oggcontrols.cpp

📁 OggPlay for Symbian 是symbian上的一个媒体播放程序的源码。它支持ogg,wav等等多媒体格式。
💻 CPP
📖 第 1 页 / 共 4 页
字号:
  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 + -