statictransition.c

来自「Brew 下一个字自动滚动的实例」· C语言 代码 · 共 70 行

C
70
字号
#include "AEETransition.h"
#include "StaticTransition.h"
#include "Transition.h"
#include "AEEWProperties.h"
#include "AEEStaticWidget.h"
#include "wutil.h"

typedef struct 
{
   Transition base;

   AECHAR *txt;
   uint16 start;
   uint16 len;

} StaticTransition;

#define DECLARE_STATICTRANSITION StaticTransition *me = (StaticTransition *)po

static void StaticTransition_Step(StaticTransition *me)
{
   int val = me->len * me->base.elapsedTime / me->base.totalTime;

   if ( (val - 1) > me->start) {
      me->start = val - 1;
   }
   if (me->start >= me->len) {
      me->start = 0;
   }
   IWIDGET_SetText(me->base.piWidget, &me->txt[me->start], FALSE);
}

void StaticTransition_Start(ITransition *po, TransitionDesc *pDesc, long msecs, PFNNOTIFY pfnDone, void *pfnCxt)
{
   DECLARE_STATICTRANSITION;
   StaticTransitionDesc *pd = (StaticTransitionDesc *)pDesc;

   me->txt = pd->txt;
   me->start = 0;
   me->len = WSTRLEN(me->txt);

   Transition_Start(po, pDesc, msecs, pfnDone, pfnCxt);
}

void StaticTransition_Ctor(StaticTransition *me, AEEVTBL(ITransition) *pvt, AEECLSID clsid, IShell *piShell, IModule *piModule)
{
   Transition_Ctor(&me->base, pvt, clsid, piShell, piModule);

   pvt->Start = StaticTransition_Start;

   me->base.pfnStep = (PFNNOTIFY)StaticTransition_Step;
}

int StaticTransition_New(ITransition **ppo, IShell *piShell, IModule *piModule)
{
   StaticTransition *me = MALLOCREC_VTBL(StaticTransition, ITransition);

   if (!me) {
      return ENOMEMORY;
   }

   *ppo = (ITransition *)me;

   StaticTransition_Ctor(me, GETVTBL(me, ITransition), AEECLSID_FADER, piShell, piModule);

   return SUCCESS;
}


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?