gecko-dev/cmd/xfe/XfeWidgets/tests/Xfe/LogoTest.c

244 строки
6.5 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: LogoTest.c */
/* Description: Test for XfeLogo widget. */
/* Author: Ramiro Estrugo <ramiro@netscape.com> */
/* */
/*----------------------------------------------------------------------*/
#include <Xfe/XfeTest.h>
static void animation_callback (Widget,XtPointer,XtPointer);
static void init_animations (void);
static void set_animation (Cardinal);
static void logo_activate_callback (Widget,XtPointer,XtPointer);
static void start_callback (Widget,XtPointer,XtPointer);
static void stop_callback (Widget,XtPointer,XtPointer);
static void reset_callback (Widget,XtPointer,XtPointer);
static void tick_callback (Widget,XtPointer,XtPointer);
#define NUM_ANIMATIONS 4
#define ANIMATION_INTERVAL 100
static XfePixmapTable _animation_pixmaps[NUM_ANIMATIONS];
static Cardinal _animation_frame_counts[NUM_ANIMATIONS];
static Cardinal _current_animation = 0;
static String _animation_names[NUM_ANIMATIONS] =
{
"Transparent Large",
"Transparent Small",
"Main Large",
"Main Small"
};
static Widget _logo = NULL;
static Widget _progress_bar = NULL;
/*----------------------------------------------------------------------*/
int
main(int argc,char *argv[])
{
Widget form;
Widget frame;
Widget tool_bar;
Widget start;
Widget stop;
Widget reset;
Widget tick;
XfeAppCreateSimple("LogoTest",&argc,argv,"MainFrame",&frame,&form);
_logo = XtVaCreateManagedWidget("Logo",
xfeLogoWidgetClass,
form,
NULL);
_progress_bar = XtVaCreateManagedWidget("ProgressBar",
xfeProgressBarWidgetClass,
form,
NULL);
tool_bar = XtVaCreateManagedWidget("ToolBar",
xfeToolBarWidgetClass,
form,
NULL);
start = XtVaCreateManagedWidget("Start",
xfeButtonWidgetClass,
tool_bar,
NULL);
stop = XtVaCreateManagedWidget("Stop",
xfeButtonWidgetClass,
tool_bar,
NULL);
tick = XtVaCreateManagedWidget("Tick",
xfeButtonWidgetClass,
tool_bar,
NULL);
reset = XtVaCreateManagedWidget("Reset",
xfeButtonWidgetClass,
tool_bar,
NULL);
init_animations();
XtVaSetValues(_logo,
XmNbuttonLayout, XmBUTTON_LABEL_ON_BOTTOM,
NULL);
XtAddCallback(_logo,XmNactivateCallback,logo_activate_callback,NULL);
XtAddCallback(_logo,XmNanimationCallback,animation_callback,NULL);
XtAddCallback(start,XmNactivateCallback,start_callback,NULL);
XtAddCallback(stop,XmNactivateCallback,stop_callback,NULL);
XtAddCallback(reset,XmNactivateCallback,reset_callback,NULL);
XtAddCallback(tick,XmNactivateCallback,tick_callback,NULL);
set_animation(0);
XtPopup(frame,XtGrabNone);
XfeAppMainLoop();
return 0;
}
/*----------------------------------------------------------------------*/
static void
set_animation(Cardinal i)
{
assert( i < NUM_ANIMATIONS );
assert( _animation_pixmaps != NULL );
assert( _animation_pixmaps[i] != NULL );
assert( _animation_frame_counts != NULL );
XtVaSetValues(_logo,
XmNanimationPixmaps, _animation_pixmaps[i],
XmNnumAnimationPixmaps, _animation_frame_counts[i],
NULL);
}
/*----------------------------------------------------------------------*/
static void
animation_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
Cardinal i;
char buf[1024];
XtVaGetValues(_logo,XmNcurrentPixmapIndex,&i,NULL);
sprintf(buf,"%s\n%d",_animation_names[_current_animation],i);
XfeSetXmStringPSZ(_logo,XmNlabelString,XmFONTLIST_DEFAULT_TAG,buf);
}
/*----------------------------------------------------------------------*/
static void
logo_activate_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
_current_animation++;
if (_current_animation == NUM_ANIMATIONS)
{
_current_animation = 0;
}
set_animation(_current_animation);
}
/*----------------------------------------------------------------------*/
static void
start_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
XfeLogoAnimationStart(_logo);
XfeProgressBarCylonStart(_progress_bar);
}
/*----------------------------------------------------------------------*/
static void
stop_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
XfeLogoAnimationStop(_logo);
XfeProgressBarCylonStop(_progress_bar);
}
/*----------------------------------------------------------------------*/
static void
reset_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
XfeLogoAnimationReset(_logo);
XfeProgressBarCylonReset(_progress_bar);
}
/*----------------------------------------------------------------------*/
static void
tick_callback(Widget w,XtPointer client_data,XtPointer call_data)
{
XfeProgressBarCylonTick(_progress_bar);
}
/*----------------------------------------------------------------------*/
static void
init_animations()
{
XfePixmapTable pixmaps = NULL;
Cardinal num_pixmaps = 0;
/* Transparent 40x40 */
pixmaps = NULL;
num_pixmaps = 0;
XfeGetTransparent40x40Animation(_logo,&pixmaps,&num_pixmaps);
_animation_pixmaps[0] = pixmaps;
_animation_frame_counts[0] = num_pixmaps;
/* Transparent 20x20 */
pixmaps = NULL;
num_pixmaps = 0;
XfeGetTransparent20x20Animation(_logo,&pixmaps,&num_pixmaps);
_animation_pixmaps[1] = pixmaps;
_animation_frame_counts[1] = num_pixmaps;
/* Main 40x40 */
pixmaps = NULL;
num_pixmaps = 0;
XfeGetMain40x40Animation(_logo,&pixmaps,&num_pixmaps);
_animation_pixmaps[2] = pixmaps;
_animation_frame_counts[2] = num_pixmaps;
/* Main 20x20 */
pixmaps = NULL;
num_pixmaps = 0;
XfeGetMain20x20Animation(_logo,&pixmaps,&num_pixmaps);
_animation_pixmaps[3] = pixmaps;
_animation_frame_counts[3] = num_pixmaps;
}
/*----------------------------------------------------------------------*/