mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-08 20:47:44 +00:00
685 lines
20 KiB
C
685 lines
20 KiB
C
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
*
|
|
* The contents of this file are subject to the Netscape Public License
|
|
* Version 1.0 (the "NPL"); you may not use this file except in
|
|
* compliance with the NPL. You may obtain a copy of the NPL at
|
|
* http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the NPL is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
|
|
* for the specific language governing rights and limitations under the
|
|
* NPL.
|
|
*
|
|
* The Initial Developer of this code under the NPL is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
|
|
* Reserved.
|
|
*/
|
|
/*-----------------------------------------*/
|
|
/* */
|
|
/* Name: <Xfe/Logo.c> */
|
|
/* Description: XfeLogo widget source. */
|
|
/* Author: Ramiro Estrugo <ramiro@netscape.com> */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
|
|
#include <Xfe/LogoP.h>
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* Warnings and messages */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
#define MESSAGE1 "Cannot obtain geometry for pixmap number %d."
|
|
#define MESSAGE2 "Pixmap %d is invalid."
|
|
#define MESSAGE3 "Pixmap %d needs to have the same depth as the Logo widget."
|
|
#define MESSAGE4 "Pixmap %d needs to have the dimensions as pixmap 0."
|
|
#define MESSAGE5 "XmNpixmap & XmNanimationPixmaps must have same dimensions."
|
|
#define MESSAGE6 "XmNanimationRunning is a read-only resource."
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* Core Class methods */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
static void Initialize (Widget,Widget,ArgList,Cardinal *);
|
|
static void Destroy (Widget);
|
|
static Boolean SetValues (Widget,Widget,Widget,ArgList,Cardinal *);
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* XfePrimitive Class methods */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
static void PreferredGeometry (Widget,Dimension *,Dimension *);
|
|
static void PrepareComponents (Widget,int);
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* XfeButton class methods */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
static void DrawPixmap (Widget,XEvent *,Region,XRectangle *);
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* Misc XfeLogo functions */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
static void AnimationPrepare (Widget);
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* Misc animation functions */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
static void AnimationTimeout (XtPointer,XtIntervalId *);
|
|
static void RemoveTimeout (Widget);
|
|
static void AddTimeout (Widget);
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* XfeLogo Resources */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
static XtResource resources[] =
|
|
{
|
|
/* Callback resources */
|
|
{
|
|
XmNanimationCallback,
|
|
XmCCallback,
|
|
XmRCallback,
|
|
sizeof(XtCallbackList),
|
|
XtOffsetOf(XfeLogoRec , xfe_logo . animation_callback),
|
|
XmRImmediate,
|
|
(XtPointer) NULL
|
|
},
|
|
|
|
/* Resources */
|
|
{
|
|
XmNanimationInterval,
|
|
XmCAnimationInterval,
|
|
XmRInt,
|
|
sizeof(int),
|
|
XtOffsetOf(XfeLogoRec , xfe_logo . animation_interval),
|
|
XmRImmediate,
|
|
(XtPointer) XfeDEFAULT_ANIMATION_INTERVAL
|
|
},
|
|
{
|
|
XmNanimationRunning,
|
|
XmCReadOnly,
|
|
XmRBoolean,
|
|
sizeof(Boolean),
|
|
XtOffsetOf(XfeLogoRec , xfe_logo . animation_running),
|
|
XmRImmediate,
|
|
(XtPointer) False
|
|
},
|
|
{
|
|
XmNcurrentPixmapIndex,
|
|
XmCCurrentPixmapIndex,
|
|
XmRCardinal,
|
|
sizeof(Cardinal),
|
|
XtOffsetOf(XfeLogoRec , xfe_logo . current_pixmap_index),
|
|
XmRImmediate,
|
|
(XtPointer) 0
|
|
},
|
|
{
|
|
XmNanimationPixmaps,
|
|
XmCAnimationPixmaps,
|
|
XmRPixmapTable,
|
|
sizeof(XfePixmapTable),
|
|
XtOffsetOf(XfeLogoRec , xfe_logo . animation_pixmaps),
|
|
XmRImmediate,
|
|
(XtPointer) NULL
|
|
},
|
|
{
|
|
XmNnumAnimationPixmaps,
|
|
XmCNumAnimationPixmaps,
|
|
XmRCardinal,
|
|
sizeof(Cardinal),
|
|
XtOffsetOf(XfeLogoRec , xfe_logo . num_animation_pixmaps),
|
|
XmRImmediate,
|
|
(XtPointer) 0
|
|
},
|
|
{
|
|
XmNresetWhenIdle,
|
|
XmCResetWhenIdle,
|
|
XmRBoolean,
|
|
sizeof(Boolean),
|
|
XtOffsetOf(XfeLogoRec , xfe_logo . reset_when_idle),
|
|
XmRImmediate,
|
|
(XtPointer) True
|
|
},
|
|
|
|
/* Force XmNbuttonLayout to XmBUTTON_PIXMAP_ONLY */
|
|
{
|
|
XmNbuttonLayout,
|
|
XmCButtonLayout,
|
|
XmRButtonLayout,
|
|
sizeof(unsigned char),
|
|
XtOffsetOf(XfeLogoRec , xfe_button . button_layout),
|
|
XmRImmediate,
|
|
(XtPointer) XmBUTTON_PIXMAP_ONLY
|
|
},
|
|
};
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* XfeLogo widget class record initialization */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
_XFE_WIDGET_CLASS_RECORD(logo,Logo) =
|
|
{
|
|
{
|
|
/* Core Part */
|
|
(WidgetClass) &xfeButtonClassRec, /* superclass */
|
|
"XfeLogo", /* class_name */
|
|
sizeof(XfeLogoRec), /* widget_size */
|
|
NULL, /* class_initialize */
|
|
NULL, /* class_part_initiali */
|
|
FALSE, /* class_inited */
|
|
Initialize, /* initialize */
|
|
NULL, /* initialize_hook */
|
|
XtInheritRealize, /* realize */
|
|
NULL, /* actions */
|
|
0, /* num_actions */
|
|
resources, /* resources */
|
|
XtNumber(resources), /* num_resources */
|
|
NULLQUARK, /* xrm_class */
|
|
TRUE, /* compress_motion */
|
|
XtExposeCompressMaximal, /* compress_exposure */
|
|
TRUE, /* compress_enterleave */
|
|
FALSE, /* visible_interest */
|
|
Destroy, /* destroy */
|
|
XtInheritResize, /* resize */
|
|
XtInheritExpose, /* expose */
|
|
SetValues, /* set_values */
|
|
NULL, /* set_values_hook */
|
|
XtInheritSetValuesAlmost, /* set_values_almost */
|
|
NULL, /* get_values_hook */
|
|
NULL, /* accept_focus */
|
|
XtVersion, /* version */
|
|
NULL, /* callback_private */
|
|
XtInheritTranslations, /* tm_table */
|
|
XtInheritQueryGeometry, /* query_geometry */
|
|
XtInheritDisplayAccelerator, /* display accel */
|
|
NULL, /* extension */
|
|
},
|
|
|
|
/* XmPrimitive Part */
|
|
{
|
|
XmInheritBorderHighlight, /* border_highlight */
|
|
XmInheritBorderUnhighlight, /* border_unhighlight */
|
|
XtInheritTranslations, /* translations */
|
|
XmInheritArmAndActivate, /* arm_and_activate */
|
|
NULL, /* syn resources */
|
|
0, /* num syn_resources */
|
|
NULL, /* extension */
|
|
},
|
|
|
|
/* XfePrimitive Part */
|
|
{
|
|
XfeInheritBitGravity, /* bit_gravity */
|
|
PreferredGeometry, /* preferred_geometry */
|
|
XfeInheritMinimumGeometry, /* minimum_geometry */
|
|
XfeInheritUpdateRect, /* update_rect */
|
|
PrepareComponents, /* prepare_components */
|
|
XfeInheritLayoutComponents, /* layout_components */
|
|
XfeInheritDrawBackground, /* draw_background */
|
|
XfeInheritDrawShadow, /* draw_shadow */
|
|
XfeInheritDrawComponents, /* draw_components */
|
|
NULL, /* extension */
|
|
},
|
|
|
|
/* XfeLabel Part */
|
|
{
|
|
XfeInheritLayoutString, /* layout_string */
|
|
XfeInheritDrawString, /* draw_string */
|
|
XfeInheritDrawSelection, /* draw_selection */
|
|
XfeInheritGetLabelGC, /* get_label_gc */
|
|
XfeInheritGetSelectionGC, /* get_selection_gc */
|
|
NULL, /* extension */
|
|
},
|
|
|
|
/* XfeButton Part */
|
|
{
|
|
XfeInheritLayoutPixmap, /* layout_pixmap */
|
|
DrawPixmap, /* draw_pixmap */
|
|
XfeInheritDrawRaiseBorder, /* draw_raise_border */
|
|
XfeInheritArmTimeout, /* arm_timeout */
|
|
NULL, /* extension */
|
|
},
|
|
|
|
/* XfeLogo Part */
|
|
{
|
|
NULL, /* extension */
|
|
},
|
|
};
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* xfeLogoWidgetClass declaration. */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
_XFE_WIDGET_CLASS(logo,Logo);
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* Core Class methods */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
static void
|
|
Initialize(Widget rw,Widget nw,ArgList args,Cardinal *nargs)
|
|
{
|
|
XfeLogoPart * lp = _XfeLogoPart(nw);
|
|
|
|
/* Allocate the copy GC */
|
|
lp->copy_GC = XfeAllocateCopyGc(nw);
|
|
|
|
/* Initialize private members */
|
|
lp->timer_id = 0;
|
|
|
|
/* Finish of initialization */
|
|
_XfePrimitiveChainInitialize(rw,nw,xfeLogoWidgetClass);
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
static void
|
|
Destroy(Widget w)
|
|
{
|
|
XfeLogoPart * lp = _XfeLogoPart(w);
|
|
|
|
/* Release GCs */
|
|
XtReleaseGC(w,lp->copy_GC);
|
|
|
|
/* Remove the timeout if needed */
|
|
RemoveTimeout(w);
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
static Boolean
|
|
SetValues(Widget ow,Widget rw,Widget nw,ArgList args,Cardinal *nargs)
|
|
{
|
|
XfeLogoPart * np = _XfeLogoPart(nw);
|
|
XfeLogoPart * op = _XfeLogoPart(ow);
|
|
|
|
/* animation_running */
|
|
if (np->animation_running != op->animation_running)
|
|
{
|
|
np->animation_running = op->animation_running;
|
|
|
|
_XfeWarning(nw,MESSAGE6);
|
|
}
|
|
|
|
/* current_pixmap_index */
|
|
if (np->current_pixmap_index != op->current_pixmap_index)
|
|
{
|
|
_XfeConfigFlags(nw) |= XfeConfigExpose;
|
|
}
|
|
|
|
/* animation_pixmaps */
|
|
if (np->animation_pixmaps != op->animation_pixmaps)
|
|
{
|
|
_XfeConfigFlags(nw) |= XfeConfigGLE;
|
|
|
|
_XfePrepareFlags(nw) |= _XFE_PREPARE_LOGO_ANIMATION;
|
|
|
|
np->current_pixmap_index = 0;
|
|
}
|
|
|
|
/* num_animation_pixmaps */
|
|
if (np->num_animation_pixmaps != op->num_animation_pixmaps)
|
|
{
|
|
if (!np->animation_running)
|
|
{
|
|
_XfeConfigFlags(nw) |= XfeConfigExpose;
|
|
}
|
|
|
|
np->current_pixmap_index = 0;
|
|
}
|
|
|
|
return _XfePrimitiveChainSetValues(ow,rw,nw,xfeLogoWidgetClass);
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* XfePrimitive methods */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
static void
|
|
PreferredGeometry(Widget w,Dimension *width,Dimension *height)
|
|
{
|
|
XfeButtonPart * bp = _XfeButtonPart(w);
|
|
XfeLogoPart * lp = _XfeLogoPart(w);
|
|
|
|
Dimension pixmap_width_save = bp->pixmap_rect.width;
|
|
Dimension pixmap_height_save = bp->pixmap_rect.height;
|
|
|
|
Dimension pixmap_width;
|
|
Dimension pixmap_height;
|
|
|
|
XfeButtonWidgetClass bwc = (XfeButtonWidgetClass) xfeButtonWidgetClass;
|
|
|
|
/* The first pixmap determines the dimensions */
|
|
if (lp->animation_pixmaps && lp->num_animation_pixmaps
|
|
&& lp->animation_width && lp->animation_height)
|
|
{
|
|
pixmap_width = lp->animation_width;
|
|
pixmap_height = lp->animation_height;
|
|
}
|
|
else
|
|
{
|
|
pixmap_width = bp->pixmap_rect.width;
|
|
pixmap_height = bp->pixmap_rect.height;
|
|
}
|
|
|
|
bp->pixmap_rect.width = pixmap_width;
|
|
bp->pixmap_rect.height = pixmap_height;
|
|
|
|
/* Explicit invoke of XfeButton's preferred_geometry() method */
|
|
(*bwc->xfe_primitive_class.preferred_geometry)(w,width,height);
|
|
|
|
bp->pixmap_rect.width = pixmap_width_save;
|
|
bp->pixmap_rect.height = pixmap_height_save;
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
static void
|
|
PrepareComponents(Widget w,int flags)
|
|
{
|
|
if (flags & _XFE_PREPARE_LOGO_ANIMATION)
|
|
{
|
|
AnimationPrepare(w);
|
|
}
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* XfeButton class methods */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
static void
|
|
DrawPixmap(Widget w,XEvent * event,Region region,XRectangle * clip_rect)
|
|
{
|
|
XfeButtonPart * bp = _XfeButtonPart(w);
|
|
XfeLogoPart * lp = _XfeLogoPart(w);
|
|
Pixmap pixmap = XmUNSPECIFIED_PIXMAP;
|
|
Pixmap pixmap_save = bp->pixmap;
|
|
|
|
XfeButtonWidgetClass bwc = (XfeButtonWidgetClass) xfeButtonWidgetClass;
|
|
|
|
/* Determine which pixmap to use */
|
|
|
|
|
|
/* If animation running, try to use one of the animation pixmaps */
|
|
if (lp->animation_running || !lp->reset_when_idle)
|
|
{
|
|
if (lp->animation_pixmaps &&
|
|
(lp->current_pixmap_index < lp->num_animation_pixmaps))
|
|
{
|
|
pixmap = lp->animation_pixmaps[lp->current_pixmap_index];
|
|
}
|
|
else
|
|
{
|
|
pixmap = bp->pixmap;
|
|
}
|
|
}
|
|
/* If animation not running, try to use the XfeButton's pixmap */
|
|
else
|
|
{
|
|
if (_XfePixmapGood(bp->pixmap))
|
|
{
|
|
pixmap = bp->pixmap;
|
|
}
|
|
else if (lp->animation_pixmaps &&
|
|
(lp->current_pixmap_index < lp->num_animation_pixmaps))
|
|
{
|
|
pixmap = lp->animation_pixmaps[lp->current_pixmap_index];
|
|
}
|
|
}
|
|
|
|
/* temporary replacement to fool the superclass' draw_pixmap() */
|
|
bp->pixmap = pixmap;
|
|
|
|
/* Explicit invoke of XfeButton's draw_pixmap() method */
|
|
(*bwc->xfe_button_class.draw_pixmap)(w,event,region,clip_rect);
|
|
|
|
bp->pixmap = pixmap_save;
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* Misc XfeLogo functions */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
static void
|
|
AnimationPrepare(Widget w)
|
|
{
|
|
XfeLogoPart * lp = _XfeLogoPart(w);
|
|
XfeButtonPart * bp = _XfeButtonPart(w);
|
|
|
|
lp->animation_width = 0;
|
|
lp->animation_height = 0;
|
|
|
|
/* Check pixmaps only if they exist */
|
|
if (lp->animation_pixmaps && lp->num_animation_pixmaps)
|
|
{
|
|
Cardinal depth;
|
|
Cardinal i;
|
|
Dimension width;
|
|
Dimension height;
|
|
|
|
for(i = 0; i < lp->num_animation_pixmaps; i++)
|
|
{
|
|
/* Check geometry of good pixmaps only */
|
|
if (_XfePixmapGood(lp->animation_pixmaps[i]))
|
|
{
|
|
/* Obtain geometry info for the pixmap */
|
|
if (XfePixmapExtent(XtDisplay(w),lp->animation_pixmaps[i],
|
|
&width,&height,&depth))
|
|
{
|
|
/* Make sure all pixmaps have the same depth */
|
|
if (depth != _XfeDepth(w))
|
|
{
|
|
_XfeArgWarning(w,MESSAGE3,i);
|
|
}
|
|
|
|
/* The first pixmap determines the animation geomerty */
|
|
if (i == 0)
|
|
{
|
|
lp->animation_width = width;
|
|
lp->animation_height = height;
|
|
}
|
|
/* All other pixmaps must have the same geometry */
|
|
else
|
|
{
|
|
if ((width != lp->animation_width) ||
|
|
(height != lp->animation_height))
|
|
{
|
|
_XfeArgWarning(w,MESSAGE4,i);
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
/* Mark the pixmap unusable since no info was obtainable */
|
|
else
|
|
{
|
|
lp->animation_pixmaps[i] = XmUNSPECIFIED_PIXMAP;
|
|
|
|
_XfeArgWarning(w,MESSAGE1,i);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_XfeArgWarning(w,MESSAGE2,i);
|
|
}
|
|
}
|
|
|
|
if (lp->animation_width && lp->animation_height)
|
|
{
|
|
if (_XfePixmapGood(bp->pixmap))
|
|
{
|
|
if ((bp->pixmap_rect.width != lp->animation_width) ||
|
|
(bp->pixmap_rect.height != lp->animation_height))
|
|
{
|
|
bp->pixmap_rect.width = lp->animation_width;
|
|
bp->pixmap_rect.height = lp->animation_height;
|
|
|
|
_XfeWarning(w,MESSAGE5);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
bp->pixmap = lp->animation_pixmaps[0];
|
|
|
|
bp->pixmap_rect.width = lp->animation_width;
|
|
bp->pixmap_rect.height = lp->animation_height;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* Misc animation functions */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
static void
|
|
AnimationTimeout(XtPointer closure,XtIntervalId * id)
|
|
{
|
|
Widget w = (Widget) closure;
|
|
XfeLogoPart * lp = _XfeLogoPart(w);
|
|
Cardinal i;
|
|
|
|
/*
|
|
* Always clear timer_id, so we don't kill someone else's timer
|
|
* by accident later.
|
|
*/
|
|
lp->timer_id = 0;
|
|
|
|
/* Make sure the widget is still alive */
|
|
if (!_XfeIsAlive(w))
|
|
{
|
|
return;
|
|
}
|
|
|
|
/* Make sure the animation is running */
|
|
if (!lp->animation_running)
|
|
{
|
|
return;
|
|
}
|
|
|
|
XtVaGetValues(w,XmNcurrentPixmapIndex,&i,NULL);
|
|
|
|
i++;
|
|
|
|
if (i == lp->num_animation_pixmaps)
|
|
{
|
|
i = 0;
|
|
}
|
|
|
|
XtVaSetValues(w,XmNcurrentPixmapIndex,i,NULL);
|
|
|
|
/* Invoke animation Callbacks */
|
|
_XfeInvokeCallbacks(w,lp->animation_callback,XmCR_ANIMATION,NULL,True);
|
|
|
|
/* Add the timeout again */
|
|
AddTimeout(w);
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
static void
|
|
AddTimeout(Widget w)
|
|
{
|
|
XfeLogoPart * lp = _XfeLogoPart(w);
|
|
|
|
assert( _XfeIsAlive(w) );
|
|
|
|
lp->timer_id = XtAppAddTimeOut(XtWidgetToApplicationContext(w),
|
|
lp->animation_interval,
|
|
AnimationTimeout,
|
|
(XtPointer) w);
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
static void
|
|
RemoveTimeout(Widget w)
|
|
{
|
|
XfeLogoPart * lp = _XfeLogoPart(w);
|
|
|
|
if (lp->timer_id)
|
|
{
|
|
XtRemoveTimeOut(lp->timer_id);
|
|
|
|
lp->timer_id = 0;
|
|
}
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
|
|
|
|
/*----------------------------------------------------------------------*/
|
|
/* */
|
|
/* XfeLogo Public Methods */
|
|
/* */
|
|
/*----------------------------------------------------------------------*/
|
|
Widget
|
|
XfeCreateLogo(Widget parent,char *name,Arg *args,Cardinal nargs)
|
|
{
|
|
return (XtCreateWidget(name,xfeLogoWidgetClass,parent,args,nargs));
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
void
|
|
XfeLogoAnimationStart(Widget w)
|
|
{
|
|
XfeLogoPart * lp = _XfeLogoPart(w);
|
|
|
|
assert( _XfeIsAlive(w) );
|
|
assert( XfeIsLogo(w) );
|
|
|
|
/* Make sure the animation is not already running */
|
|
if (lp->animation_running)
|
|
{
|
|
return;
|
|
}
|
|
|
|
lp->animation_running = True;
|
|
|
|
/* Add the timeout */
|
|
AddTimeout(w);
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
void
|
|
XfeLogoAnimationStop(Widget w)
|
|
{
|
|
XfeLogoPart * lp = _XfeLogoPart(w);
|
|
|
|
assert( _XfeIsAlive(w) );
|
|
assert( XfeIsLogo(w) );
|
|
|
|
/* Make sure the animation is running */
|
|
if (!lp->animation_running)
|
|
{
|
|
return;
|
|
}
|
|
|
|
lp->animation_running = False;
|
|
|
|
/* Remove the timeout if needed */
|
|
RemoveTimeout(w);
|
|
|
|
/* Redraw the widget */
|
|
XfeExpose(w,NULL,NULL);
|
|
}
|
|
/*----------------------------------------------------------------------*/
|
|
void
|
|
XfeLogoAnimationReset(Widget w)
|
|
{
|
|
assert( _XfeIsAlive(w) );
|
|
assert( XfeIsLogo(w) );
|
|
|
|
XtVaSetValues(w,XmNcurrentPixmapIndex,0,NULL);
|
|
}
|
|
/*----------------------------------------------------------------------*/
|