Retired Document
Important: This sample code may not represent best practices for current development. The project may use deprecated symbols and illustrate technologies and techniques that are no longer recommended.
Src/SpinCursor.c
/* SpinCursor.c */ |
/* |
* SpinCursor.c |
* Copyright © 1993 Apple Computer Inc. All rights reserved. |
* This is based on a sample in Think Reference 2.0. |
*/ |
#ifndef THINK_C /* MPW includes */ |
#include <Errors.h> |
#include <Script.h> |
#include <Types.h> |
#include <Files.h> |
#include <Resources.h> |
#include <QuickDraw.h> |
#include <Fonts.h> |
#include <Events.h> |
#include <Windows.h> |
#include <ToolUtils.h> |
#include <Memory.h> |
#include <Menus.h> |
#include <Lists.h> |
#include <Printing.h> |
#include <Dialogs.h> |
#include <StandardFile.h> |
#endif |
#define kAnimationInterval (6) /* Ticks */ |
/* |
* This is used by the animated cursor subroutine. |
*/ |
typedef struct { |
unsigned short nFrames; |
unsigned short nextFrame; |
CursHandle frame[1]; |
} ACUR_Record, *ACUR_Ptr, **ACUR_Handle; |
ACUR_Handle gACUR_Handle; |
#define ACUR (**gACUR_Handle) |
unsigned long gACUR_NextAnimation; |
void SetupAnimatedCursor( |
short acurResID |
); |
void SpinCursor(void); |
/* |
* SetupAnimatedCursor |
* Build the animated cursor handle array (in global gACUR_Handle) |
*/ |
void |
SetupAnimatedCursor( |
short acurResID |
) |
{ |
short cursorID; |
short i; |
gACUR_Handle = (ACUR_Handle) GetResource('acur', acurResID); |
if (gACUR_Handle != NULL) { |
DetachResource((Handle) gACUR_Handle); |
for (i = 0; i < ACUR.nFrames; i++) { |
cursorID = ((unsigned long) ACUR.frame[i]) >> 16; |
ACUR.frame[i] = GetCursor(cursorID); |
if (ACUR.frame[i] == NULL) |
break; |
HNoPurge((Handle) ACUR.frame[i]); |
} |
ACUR.nFrames = i; |
ACUR.nextFrame = 0; |
if (i == 0) { |
DisposeHandle((Handle) gACUR_Handle); |
gACUR_Handle = NULL; |
} |
} |
gACUR_NextAnimation = 0; |
} |
/* |
* SpinCursor |
* This is called repeatedly to change the cursor animation. |
*/ |
void |
SpinCursor(void) |
{ |
unsigned long now; |
if (gACUR_Handle != NULL) { |
now = TickCount(); |
if (now > gACUR_NextAnimation) { |
gACUR_NextAnimation = now + kAnimationInterval; |
if (ACUR.nextFrame >= ACUR.nFrames) |
ACUR.nextFrame = 0; |
SetCursor(*ACUR.frame[ACUR.nextFrame]); |
++ACUR.nextFrame; |
} |
} |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14