diff --git a/main b/main index 8859a16..5abd520 100755 Binary files a/main and b/main differ diff --git a/main.c b/main.c index b325cfc..11c15cd 100644 --- a/main.c +++ b/main.c @@ -42,23 +42,6 @@ #define WINDOW_TITLE "Topaz's Pizza Timer" #define WINDOW_CHROME_WIDTH (4) -struct NewWindow winlayout = { - 20, 20, // x, y - WINDOW_WIDTH, WINDOW_HEIGHT, // w, h - 0, 1, // detailpen, blockpen, - // you have to add the different gadget types you're looking for - // http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_2._guide/node0106.html - IDCMP_REFRESHWINDOW | IDCMP_CLOSEWINDOW | BUTTONIDCMP | SLIDERIDCMP | IDCMP_MENUPICK, // IDCMP flags - WFLG_SMART_REFRESH | WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_ACTIVATE, // window flag from Window struct - NULL, // FirstGadget - NULL, // menu checkmark - WINDOW_TITLE, // title - NULL, // default screen - NULL, // bitmap - WINDOW_WIDTH, WINDOW_HEIGHT, // min size - WINDOW_WIDTH, WINDOW_HEIGHT, // max size, - WBENCHSCREEN // screen where you want the window to open -}; struct Screen *screen; struct Window *window; struct Gadget *windowGadgets; @@ -66,22 +49,6 @@ struct Gadget *windowGadgets; #define ABOUT_WINDOW_WIDTH (350) #define ABOUT_WINDOW_HEIGHT (75) -struct NewWindow aboutWindowLayout = { - 40, 40, - ABOUT_WINDOW_WIDTH, ABOUT_WINDOW_HEIGHT, - 0, 1, - IDCMP_CLOSEWINDOW, - WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_ACTIVATE, - NULL, - NULL, - "About Pizza Timer", - NULL, - NULL, - ABOUT_WINDOW_WIDTH, ABOUT_WINDOW_HEIGHT, - ABOUT_WINDOW_WIDTH, ABOUT_WINDOW_HEIGHT, - WBENCHSCREEN -}; - // Fonts! struct TextAttr Topaz80 = { "topaz.font", 8, 0, 0 }; @@ -532,7 +499,18 @@ int openAboutWindow(void) { // nope, false positive, checked with avail before and after running and // the used/free counts are exactly the same: // https://eab.abime.net/showthread.php?t=104360 - aboutWindow = OpenWindow(&aboutWindowLayout); + aboutWindow = OpenWindowTags(NULL, + WA_Left, 40, WA_Top, 40, + WA_Width, ABOUT_WINDOW_WIDTH, WA_Height, ABOUT_WINDOW_HEIGHT, + WA_DetailPen, 0, WA_BlockPen, 1, + WA_IDCMP, IDCMP_CLOSEWINDOW, + WA_DragBar, TRUE, + WA_DepthGadget, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + WA_Title, "Acout Pizza Timer", + TAG_END + ); if (!aboutWindow) { return 1; @@ -743,7 +721,7 @@ void startBellSound(void) { // eventually wait for the sound to stop playing TimerIO->tr_node.io_Command = TR_ADDREQUEST; - TimerIO->tr_time.tv_secs = 3; + TimerIO->tr_time.tv_secs = 2; TimerIO->tr_time.tv_micro = 0; SendIO((struct IORequest *)TimerIO); } @@ -759,6 +737,11 @@ void waitForBellToFinish(void) { if (bellSound) { TimerPort = TimerIO->tr_node.io_Message.mn_ReplyPort; + // TODO: move this into the main event loop, so that + // we can update the UI while the sound is finishing up? + // I'm sure there is a way to add metadata to an IO request. + // or do we need two timer.devices with two separate IOs? + // https://amigadev.elowar.com/read/ADCD_2.1/Devices_Manual_guide/node00C4.html timerSignal = 1L << TimerPort->mp_SigBit; Wait(timerSignal); @@ -776,13 +759,13 @@ void endTimer(void) { uiHours = uiMinutes = uiSeconds = 0; setTimerText(); + waitForBellToFinish(); + timerIsRunning = FALSE; timerStarted = FALSE; clearUI(); renderUI(); - - waitForBellToFinish(); } void handleTimerMessage(void) { @@ -837,7 +820,20 @@ int main() { timerIsRunning = FALSE; // open the empty window - window = OpenWindow(&winlayout); + window = OpenWindowTags(NULL, + WA_Left, 20, WA_Top, 20, + WA_Width, WINDOW_WIDTH, WA_Height, WINDOW_HEIGHT, + WA_DetailPen, 0, WA_BlockPen, 1, + WA_IDCMP, IDCMP_REFRESHWINDOW | IDCMP_CLOSEWINDOW | BUTTONIDCMP | SLIDERIDCMP | IDCMP_MENUPICK, // IDCMP flags + WA_SmartRefresh, TRUE, + WA_DragBar, TRUE, + WA_DepthGadget, TRUE, + WA_CloseGadget, TRUE, + WA_Activate, TRUE, + WA_Title, WINDOW_TITLE, + TAG_END + ); + if (!window) { teardown(); return 1;