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.
sources/BoxPaint_main.c
/* main.c |
This is BoxPaint, a sample app designed to show how getting UV data from |
a pick object can be used to draw on a texture. This app does not have |
graceful error handling - it's purpose is to demonstrate UV picking. |
Michael Bishop - August 21 1996 |
Nick Thompson |
Robert Dierkes |
(c)1994-96 Apple Computer Inc., All Rights Reserved |
*/ |
/* system headers */ |
#include <Devices.h> |
#include <Dialogs.h> |
#include <DiskInit.h> |
#include <Events.h> |
#include <Fonts.h> |
#include <Menus.h> |
#include <PictUtils.h> |
#include <QDOffScreen.h> |
#include <QuickDraw.h> |
#include <SegLoad.h> |
#include <StandardFile.h> |
#include <TextEdit.h> |
#include "BoxPaint_main.h" |
#include "BoxPaint_utility.h" |
#include "BoxPaint_menu.h" |
#include "BoxMooV_window.h" |
#include "BoxMooV_event.h" |
#include "BoxMooV_document.h" |
/* ------------------------------------------------------------------------------------------- |
** function prototypes |
*/ |
static void InitToolbox( void ) ; |
static void Main_EventLoop( void ) ; |
static void Main_Init( short mBarResourceID, short numMoremasters); |
static void Main_Destroy( void ); |
/* ------------------------------------------------------------------------------------------- |
** Global Variables |
*/ |
Boolean gQuitFlag = false ; |
Boolean gForeground = true ; |
short gTicks = 1 ; |
/* ------------------------------------------------------------------------------------------- |
** main() |
** entry point for the application, initialize the toolbox, initialize QuickDraw 3D |
** and enter the main event loop. On exit from the main event loop, we want to call |
** the QuickDraw 3D exit function to clean up QuickDraw 3d. |
*/ |
void main( void ) |
{ |
Main_Init( kMBARResID, 5 ) ; /* initialise the toolbox, load our menubar */ |
Main_EventLoop() ; |
/* tear down any we allocated */ |
Main_Destroy() ; |
/* and bail */ |
ExitToShell() ; |
} |
/* ------------------------------------------------------------------------------------------- |
** Main_Init |
** Initialize our environment, pass in the mbar resource ID, and also the number of calls |
** to make to moremasters |
*/ |
void Main_Init( short mBarResourceID, short numMoremasters) |
{ |
Handle menuBar = nil; |
short loopCounter ; |
TQ3Status myStatus ; |
MaxApplZone() ; /* max out the apps heap */ |
for( loopCounter = 0; loopCounter < numMoremasters ; loopCounter++ ) |
MoreMasters() ; |
InitToolbox() ; |
/* initialize anything else we need to */ |
/* init QuickDraw 3D, open a connection to the QuickDraw 3D library */ |
myStatus = Q3Initialize(); |
if ( myStatus == kQ3Failure ) |
DebugStr("\pQ3Initialize returned failure."); |
/* initialize application globals */ |
gQuitFlag = false; |
gForeground = true; |
gTicks = 1; |
/* load the application menu bar */ |
menuBar = GetNewMBar( mBarResourceID ); /* Read menus into menu bar, MBAR res id is 128 */ |
if ( menuBar == nil ) |
ExitToShell(); /* if we dont have it then quit - your app */ |
/* needs a dialog here */ |
SetMenuBar(menuBar); /* Install menus */ |
DisposHandle(menuBar); |
AddResMenu(GetMHandle(mApple), 'DRVR'); /* Add DA names to Apple menu, ID 128 */ |
Menu_Adjust() ; |
DrawMenuBar(); |
} |
void Main_Destroy( void ) |
{ |
Window_DestroyAll(); |
Q3Exit() ; |
} |
/* -------------------------------------------------------------------- |
** InitToolbox |
** Initialize the toolbox managers |
*/ |
void InitToolbox( void ) |
{ |
InitGraf( &qd.thePort ); |
InitFonts(); |
InitWindows(); |
InitCursor(); |
InitDialogs( nil ) ; |
FlushEvents( everyEvent, 0 ) ; |
} |
/* -------------------------------------------------------------------- |
** Main_EventLoop |
** The heart of the app. Handles all interaction |
*/ |
void Main_EventLoop() |
{ |
EventRecord theEvent; |
WindowPtr theWindow; |
short thePart; |
Rect screenRect; |
Point aPoint = {100, 100}; |
Boolean eventPresent = false; |
while( !gQuitFlag ) |
{ |
eventPresent = WaitNextEvent( everyEvent, &theEvent, gTicks, nil ); |
if (eventPresent == true) |
{ |
switch (theEvent.what) { |
case mouseDown: |
thePart = FindWindow( theEvent.where, &theWindow ) ; |
switch( thePart ) { |
case inMenuBar: |
Menu_Adjust() ; |
Menu_HandleCommand(MenuSelect(theEvent.where)); |
break; |
case inDrag: |
screenRect = (**GetGrayRgn()).rgnBBox; |
DragWindow( theWindow, theEvent.where, &screenRect ); |
break ; |
case inContent: |
if (theWindow != FrontWindow()) |
SelectWindow( theWindow ); |
Window_DoContent(theWindow, &theEvent); |
break ; |
case inGoAway: |
if (TrackGoAway( theWindow, theEvent.where )) { |
Document_Delete( Document_GetFromWindow(theWindow) ) ; |
} |
break ; |
default: |
break ; |
} |
break ; |
case updateEvt: |
theWindow = (WindowPtr)theEvent.message; |
Window_Update( theWindow ) ; |
break ; |
case keyDown: |
case autoKey: |
Event_HandleKeyPress(&theEvent); |
break; |
case diskEvt: |
if ( Utility_HiWrd(theEvent.message) != noErr ) |
(void) DIBadMount(aPoint, theEvent.message); |
break; |
case osEvt: |
Event_DoOSEvent(theEvent); |
break; |
case activateEvt: |
break; |
} |
} |
else { |
Event_DoNull(); /* Handle the Null Event */ |
} |
} |
} |
/* -------------------------------------------------------------------- |
** Main_DoAbout |
** Display the About Box |
*/ |
void Main_DoAbout( void ) |
{ |
short itemHit ; |
itemHit = Alert ( 128, nil ) ; |
} |
Copyright © 2003 Apple Computer, Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2003-01-14