From 5d9ffc1b6fe3eeaca1fcf25eaaa0c3e0bd33e3f5 Mon Sep 17 00:00:00 2001 From: camh Date: Sun, 28 Nov 2021 23:25:07 -0800 Subject: [PATCH] code clean up, code review, styling tweaks --- Sample.c | 43 +- build/%NuklearQuickDraw.ad | Bin 332665 -> 332339 bytes build/.rsrc/NuklearQuickDraw.APPL | Bin 332583 -> 332257 bytes build/CMakeFiles/CMakeOutput.log | 144 +-- .../NuklearQuickDraw.dir/Sample.c.obj | Bin 259256 -> 258904 bytes build/NuklearQuickDraw.bin | Bin 332800 -> 332416 bytes build/NuklearQuickDraw.code.bin | Bin 331776 -> 331392 bytes build/NuklearQuickDraw.code.bin.gdb | Bin 441392 -> 441024 bytes build/NuklearQuickDraw.dsk | Bin 819200 -> 819200 bytes coprocessorjs.c | 4 +- nuklear_app.c | 25 +- nuklear_quickdraw.h | 888 ++++++++---------- 12 files changed, 493 insertions(+), 611 deletions(-) diff --git a/Sample.c b/Sample.c index 4cc67a5..93c283c 100644 --- a/Sample.c +++ b/Sample.c @@ -76,23 +76,16 @@ void AlertUser( void ); #define TopLeft(aRect) (* (Point *) &(aRect).top) #define BotRight(aRect) (* (Point *) &(aRect).bottom) -// TODO: -// - IN PROGRESS new message window -- needs to blank out messages, then needs fixes on new mac end -// - chat during the day for a few minutes and figure out small issues -// - start writing blog posts -// - get new messages in other chats and display some sort of alert -// - need timeout on serial messages in case the computer at the other end dies (prevent hard reset) -// - delete doesnt work right (leaves characters at end of string) -// - move app-specific code to distinct file - +// this function, EventLoop, and DoEvent contain all of the business logic necessary +// for our application to run #pragma segment Main void main() { Initialize(); /* initialize the program */ UnloadSeg((Ptr) Initialize); /* note that Initialize must not be in Main! */ - // run our nuklear app one time to render the window telling us to be patient for the coprocessor - // app to load up + // run our nuklear app one time to render the window telling us to be patient for the coprocessor + // app to load up struct nk_context *ctx = initializeNuklearApp(); SysBeep(1); @@ -108,7 +101,6 @@ void main() EventLoop(ctx); /* call the main event loop */ } - #pragma segment Main void EventLoop(struct nk_context *ctx) { @@ -143,16 +135,6 @@ void EventLoop(struct nk_context *ctx) Boolean beganInput = false; - #ifdef MAC_APP_DEBUGGING - - writeSerialPortDebug(boutRefNum, "nk_input_begin"); - #endif - - #ifdef MAC_APP_DEBUGGING - - writeSerialPortDebug(boutRefNum, "nk_input_begin complete"); - #endif - GetGlobalMouse(&mouse); // as far as i can tell, there is no way to event on mouse movement with mac libraries, @@ -164,16 +146,16 @@ void EventLoop(struct nk_context *ctx) #ifdef MAC_APP_DEBUGGING - // writeSerialPortDebug(boutRefNum, "nk_input_motion!"); + writeSerialPortDebug(boutRefNum, "nk_input_motion!"); #endif firstOrMouseMove = true; + beganInput = true; Point tempPoint; SetPt(&tempPoint, mouse.h, mouse.v); GlobalToLocal(&tempPoint); - beganInput = true; nk_input_begin(ctx); nk_input_motion(ctx, tempPoint.h, tempPoint.v); @@ -224,7 +206,7 @@ void EventLoop(struct nk_context *ctx) SystemTask(); - // only re-render if there is an event, prevents screen flickering + // only re-render if there is an event, prevents screen flickering, speeds up app if (beganInput || firstOrMouseMove) { nk_input_end(ctx); @@ -243,10 +225,9 @@ void EventLoop(struct nk_context *ctx) nk_clear(ctx); } - #ifdef MAC_APP_DEBUGGING - // writeSerialPortDebug(boutRefNum, "nk_input_render complete"); + writeSerialPortDebug(boutRefNum, "nk_input_render complete"); #endif } while ( true ); /* loop forever; we quit via ExitToShell */ } /*EventLoop*/ @@ -272,7 +253,7 @@ void DoEvent(EventRecord *event, struct nk_context *ctx) { gotMouseEvent = true; #ifdef MAC_APP_DEBUGGING - // writeSerialPortDebug(boutRefNum, "mouseup"); + writeSerialPortDebug(boutRefNum, "mouseup"); #endif part = FindWindow(event->where, &window); @@ -306,7 +287,6 @@ void DoEvent(EventRecord *event, struct nk_context *ctx) { case inContent: if ( window != FrontWindow() ) { SelectWindow(window); - } nk_quickdraw_handle_event(event, ctx); break; @@ -329,7 +309,6 @@ void DoEvent(EventRecord *event, struct nk_context *ctx) { break; case keyDown: case autoKey: /* check for menukey equivalents */ - #ifdef MAC_APP_DEBUGGING writeSerialPortDebug(boutRefNum, "key"); @@ -485,7 +464,7 @@ void AdjustMenus() EnableItem(menu, iCopy); EnableItem(menu, iClear); EnableItem(menu, iPaste); - } else { /* Ébut we donÕt use it */ + } else { /* but we dont use it */ DisableItem(menu, iUndo); DisableItem(menu, iCut); DisableItem(menu, iCopy); @@ -553,6 +532,8 @@ void DoMenuCommand(menuResult) handledByDA = SystemEdit(menuItem-1); /* since we donÕt do any Editing */ break; case mLight: + // note this was co-opted to send new chats instead of the demo functionality. do the + // same thing for other menu items as necessary sendNewChat = 1; break; diff --git a/build/%NuklearQuickDraw.ad b/build/%NuklearQuickDraw.ad index b5f5c1a8fe1cd1a5d0f3ee8c1f8362c188972d63..2125ec5df538606f2b54e97da057c58ec24b69d1 100644 GIT binary patch delta 6684 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 delta 6952 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 diff --git a/build/.rsrc/NuklearQuickDraw.APPL b/build/.rsrc/NuklearQuickDraw.APPL index 3f3cba074eb59f4e5fc095c8e4152ee2aad834f2..67bdc420d845789361a669551dbc2cdb074363cf 100644 GIT binary patch delta 6617 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 Kv6gWChW`b}7`@;C delta 7055 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 ignore arg [-plugin] ==> ignore arg [/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so] ==> ignore arg [-plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/cc8x2spZ.res] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/ccExJbHq.res] ==> ignore arg [-plugin-opt=-pass-through=-lgcc] ==> ignore arg [-plugin-opt=-pass-through=-lc] ==> ignore arg [-plugin-opt=-pass-through=-lretrocrt] ==> ignore @@ -172,10 +172,10 @@ Parsed C implicit link information from above output: arg [-q] ==> ignore arg [-undefined=_consolewrite] ==> ignore arg [-o] ==> ignore - arg [cmTC_e11fa] ==> ignore + arg [cmTC_46844] ==> ignore arg [-L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0] ==> dir [/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0] arg [-L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib] ==> dir [/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib] - arg [CMakeFiles/cmTC_e11fa.dir/CMakeCCompilerABI.c.obj] ==> ignore + arg [CMakeFiles/cmTC_46844.dir/CMakeCCompilerABI.c.obj] ==> ignore arg [--start-group] ==> ignore arg [-lgcc] ==> lib [gcc] arg [-lc] ==> lib [c] @@ -192,13 +192,13 @@ Parsed C implicit link information from above output: Determining if the CXX compiler works passed with the following output: Change Dir: /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp -Run Build Command(s):/usr/bin/make cmTC_f76ee/fast && /usr/bin/make -f CMakeFiles/cmTC_f76ee.dir/build.make CMakeFiles/cmTC_f76ee.dir/build +Run Build Command(s):/usr/bin/make cmTC_5884e/fast && /usr/bin/make -f CMakeFiles/cmTC_5884e.dir/build.make CMakeFiles/cmTC_5884e.dir/build make[1]: Entering directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_f76ee.dir/testCXXCompiler.cxx.obj -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -o CMakeFiles/cmTC_f76ee.dir/testCXXCompiler.cxx.obj -c /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx -Linking CXX executable cmTC_f76ee -/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f76ee.dir/link.txt --verbose=1 -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ CMakeFiles/cmTC_f76ee.dir/testCXXCompiler.cxx.obj -o cmTC_f76ee +Building CXX object CMakeFiles/cmTC_5884e.dir/testCXXCompiler.cxx.obj +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -o CMakeFiles/cmTC_5884e.dir/testCXXCompiler.cxx.obj -c /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp/testCXXCompiler.cxx +Linking CXX executable cmTC_5884e +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_5884e.dir/link.txt --verbose=1 +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ CMakeFiles/cmTC_5884e.dir/testCXXCompiler.cxx.obj -o cmTC_5884e make[1]: Leaving directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' @@ -206,18 +206,18 @@ make[1]: Leaving directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/b Detecting CXX compiler ABI info compiled with the following output: Change Dir: /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp -Run Build Command(s):/usr/bin/make cmTC_cda93/fast && /usr/bin/make -f CMakeFiles/cmTC_cda93.dir/build.make CMakeFiles/cmTC_cda93.dir/build +Run Build Command(s):/usr/bin/make cmTC_b936c/fast && /usr/bin/make -f CMakeFiles/cmTC_b936c.dir/build.make CMakeFiles/cmTC_b936c.dir/build make[1]: Entering directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' -Building CXX object CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v -o CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp +Building CXX object CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v -o CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp Using built-in specs. COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ Target: m68k-apple-macos Configured with: /home/camh/Retro68/gcc/configure --target=m68k-apple-macos --prefix=/home/camh/Retro68-build/toolchain/ --enable-languages=c,c++ --with-arch=m68k --with-cpu=m68000 --disable-libssp MAKEINFO=missing Thread model: single gcc version 9.1.0 (GCC) -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' - /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1plus -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj -version -o /tmp/ccF02m1E.s +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' + /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1plus -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj -version -o /tmp/ccVxJrO2.s GNU C++14 (GCC) version 9.1.0 (m68k-apple-macos) compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 @@ -235,14 +235,14 @@ GNU C++14 (GCC) version 9.1.0 (m68k-apple-macos) compiled by GNU C version 9.3.0, GMP version 6.2.0, MPFR version 4.0.2, MPC version 1.1.0, isl version none GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072 Compiler executable checksum: 5b31867a30cfa7e65d4bce12c39f8a21 -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' - /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj /tmp/ccF02m1E.s +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' + /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj /tmp/ccVxJrO2.s COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/ LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/ -COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' -Linking CXX executable cmTC_cda93 -/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cda93.dir/link.txt --verbose=1 -/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj -o cmTC_cda93 +COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000' +Linking CXX executable cmTC_b936c +/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b936c.dir/link.txt --verbose=1 +/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj -o cmTC_b936c Using built-in specs. COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ COLLECT_LTO_WRAPPER=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper @@ -252,9 +252,9 @@ Thread model: single gcc version 9.1.0 (GCC) COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/ LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/ -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cda93' '-mcpu=68000' - /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccFpWhb8.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_cda93 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj -lstdc++ -lm --start-group -lgcc -lc -lretrocrt -lInterface --end-group -COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cda93' '-mcpu=68000' +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_b936c' '-mcpu=68000' + /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/cc7wz44u.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_b936c -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj -lstdc++ -lm --start-group -lgcc -lc -lretrocrt -lInterface --end-group +COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_b936c' '-mcpu=68000' make[1]: Leaving directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp' @@ -282,18 +282,18 @@ Parsed CXX implicit link information from above output: link line regex: [^( *|.*[/\])(m68k-apple-macos-ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\]+-)?ld|collect2)[^/\]*( |$)] ignore line: [Change Dir: /home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp] ignore line: [] - ignore line: [Run Build Command(s):/usr/bin/make cmTC_cda93/fast && /usr/bin/make -f CMakeFiles/cmTC_cda93.dir/build.make CMakeFiles/cmTC_cda93.dir/build] + ignore line: [Run Build Command(s):/usr/bin/make cmTC_b936c/fast && /usr/bin/make -f CMakeFiles/cmTC_b936c.dir/build.make CMakeFiles/cmTC_b936c.dir/build] ignore line: [make[1]: Entering directory '/home/camh/Documents/Retro68kApps/NuklearQuickDraw/build/CMakeFiles/CMakeTmp'] - ignore line: [Building CXX object CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj] - ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v -o CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [Building CXX object CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj] + ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v -o CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj -c /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++] ignore line: [Target: m68k-apple-macos] ignore line: [Configured with: /home/camh/Retro68/gcc/configure --target=m68k-apple-macos --prefix=/home/camh/Retro68-build/toolchain/ --enable-languages=c c++ --with-arch=m68k --with-cpu=m68000 --disable-libssp MAKEINFO=missing] ignore line: [Thread model: single] ignore line: [gcc version 9.1.0 (GCC) ] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] - ignore line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1plus -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj -version -o /tmp/ccF02m1E.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] + ignore line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/cc1plus -quiet -v -Wno-trigraphs /usr/share/cmake-3.16/Modules/CMakeCXXCompilerABI.cpp -quiet -dumpbase CMakeCXXCompilerABI.cpp -mcpu=68000 -auxbase-strip CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj -version -o /tmp/ccVxJrO2.s] ignore line: [GNU C++14 (GCC) version 9.1.0 (m68k-apple-macos)] ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version none] ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] @@ -311,14 +311,14 @@ Parsed CXX implicit link information from above output: ignore line: [ compiled by GNU C version 9.3.0 GMP version 6.2.0 MPFR version 4.0.2 MPC version 1.1.0 isl version none] ignore line: [GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072] ignore line: [Compiler executable checksum: 5b31867a30cfa7e65d4bce12c39f8a21] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] - ignore line: [ /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj /tmp/ccF02m1E.s] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] + ignore line: [ /home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/as -mcpu=68000 -o CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj /tmp/ccVxJrO2.s] ignore line: [COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/] ignore line: [LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] - ignore line: [Linking CXX executable cmTC_cda93] - ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_cda93.dir/link.txt --verbose=1] - ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj -o cmTC_cda93 ] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj' '-c' '-mcpu=68000'] + ignore line: [Linking CXX executable cmTC_b936c] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_b936c.dir/link.txt --verbose=1] + ignore line: [/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++ -v CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj -o cmTC_b936c ] ignore line: [Using built-in specs.] ignore line: [COLLECT_GCC=/home/camh/Retro68-build/toolchain/bin/m68k-apple-macos-g++] ignore line: [COLLECT_LTO_WRAPPER=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper] @@ -328,13 +328,13 @@ Parsed CXX implicit link information from above output: ignore line: [gcc version 9.1.0 (GCC) ] ignore line: [COMPILER_PATH=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/bin/] ignore line: [LIBRARY_PATH=/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/:/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib/] - ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_cda93' '-mcpu=68000'] - link line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/ccFpWhb8.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_cda93 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj -lstdc++ -lm --start-group -lgcc -lc -lretrocrt -lInterface --end-group] + ignore line: [COLLECT_GCC_OPTIONS='-v' '-o' 'cmTC_b936c' '-mcpu=68000'] + link line: [ /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2 -plugin /home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so -plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper -plugin-opt=-fresolution=/tmp/cc7wz44u.res -plugin-opt=-pass-through=-lgcc -plugin-opt=-pass-through=-lc -plugin-opt=-pass-through=-lretrocrt -plugin-opt=-pass-through=-lInterface -elf2mac -q -undefined=_consolewrite -o cmTC_b936c -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0 -L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj -lstdc++ -lm --start-group -lgcc -lc -lretrocrt -lInterface --end-group] arg [/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/collect2] ==> ignore arg [-plugin] ==> ignore arg [/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/liblto_plugin.so] ==> ignore arg [-plugin-opt=/home/camh/Retro68-build/toolchain/libexec/gcc/m68k-apple-macos/9.1.0/lto-wrapper] ==> ignore - arg [-plugin-opt=-fresolution=/tmp/ccFpWhb8.res] ==> ignore + arg [-plugin-opt=-fresolution=/tmp/cc7wz44u.res] ==> ignore arg [-plugin-opt=-pass-through=-lgcc] ==> ignore arg [-plugin-opt=-pass-through=-lc] ==> ignore arg [-plugin-opt=-pass-through=-lretrocrt] ==> ignore @@ -343,10 +343,10 @@ Parsed CXX implicit link information from above output: arg [-q] ==> ignore arg [-undefined=_consolewrite] ==> ignore arg [-o] ==> ignore - arg [cmTC_cda93] ==> ignore + arg [cmTC_b936c] ==> ignore arg [-L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0] ==> dir [/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0] arg [-L/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib] ==> dir [/home/camh/Retro68-build/toolchain/lib/gcc/m68k-apple-macos/9.1.0/../../../../m68k-apple-macos/lib] - arg [CMakeFiles/cmTC_cda93.dir/CMakeCXXCompilerABI.cpp.obj] ==> ignore + arg [CMakeFiles/cmTC_b936c.dir/CMakeCXXCompilerABI.cpp.obj] ==> ignore arg [-lstdc++] ==> lib [stdc++] arg [-lm] ==> lib [m] arg [--start-group] ==> ignore diff --git a/build/CMakeFiles/NuklearQuickDraw.dir/Sample.c.obj b/build/CMakeFiles/NuklearQuickDraw.dir/Sample.c.obj index 48c404ff6b613e383d31d0240550ff611291f81d..5d19b2793e0bb8e38444d1616741de9236ad66f7 100644 GIT binary patch delta 8862 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 diff --git a/build/NuklearQuickDraw.bin b/build/NuklearQuickDraw.bin index 9679acd0a17ba4a2aae54df3ac74e00b2b32c91d..aa0b8d34a99b7453108cf613bdd9c6dfe85de3d1 100644 GIT binary patch delta 6629 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 delta 6831 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�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 delta 20549 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 HbSwWCPpj+L diff --git a/build/NuklearQuickDraw.dsk b/build/NuklearQuickDraw.dsk index dedce1cd95003bedda16c7fdaa5403a721c4aaf1..14f448424988211055b93bdfea451fbf7905b074 100644 GIT binary patch delta 6762 zcmai33tUvyx?kU(HN!AXI3j`~;D`vQI5XiR9|!{xA$rh!6m~l{q6d0-f$(uPIWj&X zu5~1V!_qPjDdH&VMe(?aI!0xRMqTvy`(3Z1DUxxl>(!GL;?%z1T6+&Fr_TNP`&j?| zt#5sg|9b4TN4GoP?T)Y4(P1Y){Qe>e5CTLe)fgrdA`wE2givhy>$WyTQHKQXgU|pC zM&rm(KW)Tj7+0|*a#=wCD?}eixDPHB3u%-j{rhIy1|wuX215{|X^6b`F?beWntUl0c4Ny9RRCcpj=ai9^_W7epeibs>{goRlGKz(R;X9KX;< z=WDd8m&wR%WU@+4Zgw^@S*tSHk&R5&awdaW*dnka7E~-=gml)*Naw4ZL1c2C{4c+Q z*&3bSW70Lb&_L0rkGg>>j$?3^$>Fr73 z^t#B6l3to8vS*jWG+Yn0%VC#B^AMK13Nlr$hsdW_LA1dyTTIGA`R8I>RuCwsu0?Jj zkUhT+M*0QVCn94qFp&KJ(?(sv7PVpQgXKaVf{%}NY-wmG`FfY#msPKdHEa3cs;HA^JYA3R} zXJ90Dt~mqip+}bf3J>Y=3<@|0GB(H0!8iR2le-|zo=&1(0V}e#zmR?W-{6%#4`R*d z;gR8P#p}o;#)2Q~OLHv+cj`-Xg801GtW~@&i$J9;=mNY9Wpc>{7y+=I?Q4f8=hrG; z(Oau@bJA;e+ik>{`5vDrF-?J@cfV$JSm}1f3cIF0b_4>1<;R-kN%qu57>`jdU4-H6 zKQ4j|w#$fh0RPE4F2O3e#B7%#nyvd1Qi68{@Q~z{tTIQQ(r!2M5W6O@^IzfwPv>^? zVTUlUx(t*Zx{PzZo%fEax&ou&0*ku>!=Qs@UV#_D%NnmhgjB0z=dQpesdgZHz60W< z+7ayNRj{%n9eCtzXDhBk47=L_uc-J5n8~|Gz)P(2DvTMN?;`MK3dtb3v38r{MG^GW zzRE^*!f)YiR@#Y2Tm$o9Gxns5kn=p{+IDVykG)(%w)16P+ldy9!rfEC?t9kL2{FUC z-*1I^#?1dEX5SM@$tn|OI+pSkF3*=(=~pn@vb&cg&h+kK?D|)bBJG~UY}eo!X?FtK zcn#(ce%i;Rb&}$Z>zd=X6YdMmyw`B$7P8c@k3Sbo;w)XT++@-ngI=9n zV%GgA`K9sk`%~l%{dBg)p>=~?!F=h|g}MSn8|E^IHbQP)s%t8d>a47^M`y!UZtT%j zf>akNXL@yarXokxlW9bN_3_i6Mj6kR^1}8D-Oz`>Ya|b8Ihbh!36 zN8lVbYbp(8A0*HU5O}oOgtEj$I*1*ZO8p-gl_y5!siV-O49#x_NrRX(iH24s(U|+5 zAG;4nu%-t)L**bR^~6YZG4jz|8sryI_o(8{IG}iQqVW9l#>}$D5~FVc)=iXe=F!!9 zc$zI)MqdgaXQy_Z)ke$)Hz6U<+X-K>Pj_dPjd3d9RxPIkM~H1lI{3EBaOV=!5xxi` zV?#FKRR46d-VS^-vdPP7Y%vBg^YL8o>+@jlYq8l?0C~>gdM8hEcE5cHIQ z62FWkUG`*iJ%%*$HXhp~NFtuMHLY3GnuNB3KNX{~MN>nt356R?OL1f|dchUo@pHvMq84@<{*0=)l$eZaMRA8>8)y^X-t zd>?SNwh#CdYJ)Uwpt?IWt}Sg7vE253cf5|gjC@%-JN5Lv?*<@dNmz5xD8=<*4i`p zFWxbTFM8ss_~+f5c?|Z&Y8o=6P0PFutJE@|jRCkpRS^v@K8NTWPe;pn1}F6U9fDAy z&uqHA;{G)6WAQAed|ONTwn+J$)u!BTbK{Yoe7ZTgiv&9Oq@RmK?Jrb-)ZvI1Y?JV#2G$iELI=B6v4k>QGzZ6XDX5I$8 zBC7{cCx-9D@OUEpz3)NPiQ|IB_T?z7Et%V5*+J?ec;LL{`iKH6Ub#B$BqcWqJg@R= zI4`kS*@gqRVUSP^vg}@s;(fLaUGu{^o!cPhhjxaB0}-ccI0$i?hJz71H9QD$iiY{i zDM7;)#EH206YRw{#fcylB^~bqQiY9QY;obJ3^e0_W=sy>gSYxJ(2NNg9nMI!aE!!@ zuC^Q^jpgn!$;t?UF?HmIuyQO1~;{tT~g-D z=rs<#I#_|5hJnKV;HIOdmHVzly9(4R5p|OVWC27_H$)ICbwBuzL>B-aFFAM#Gvd8Y zGP?;OJvoGCR;|UCd@PIRje*TrOUDK4&NysJm&1vr{~ggafo{mx*3#otm%h@%4wldX z0-P+N;R1Y9LPwhSZc@CDrw_+_+TKvv`WlTf;n#WkX8I|-%mT{km;v~y#P4|^KF0V* zOWn&Xvz#u1_3ThN#jEzCtfQQc?EgBqdbot&9r;=~62ZbM=vZ*GSrs%17<-d9HLR_I z4(q?~A8e&cIudQ;DzUfmUayGvIa^SP7jO$(S4lGm)jcYdXZjdjU|p4T{4ZpCfjRz2 zKk>ULMqOk*f25D$uMvq=bef-m>-HJgrYh7$aor$xy^7|-BsQDjuc~r6tKW*cHyIu8 zmne)ASu3Nf@h6J(Ep&nO-d^U}LZ`xFc5MqC4TJ@5r7vI^MO$e&=KI!G^!p;aw3RNC zj@(dvEqRMR0xQ|}x9C+gT=zDuk@mK-*llzsl(CiD=+q?qG9=PxmOZzyLg~X(cscj- z17S~#NPvmI@9^r4GiH_XZ?KxmIc~J-Rx!K1jgFH(DrckKq0eE6jqlK~pvHo%vJ{(g z3-5z1b|ZIu{19t;hguEcMFf;v>^xdA?>lsx^hr5;Ydbw9eR7oL{0Tk8v*UlFDblfQ zW~!!Pp(hgN<2xBYGH`e9naW?gVtq(0Im}s&RK&A2)%5VF6A2cZ@>9BdepwRPlX$-w z4!}1#x*p40eb2zqVchE$sHHZc6 z#QLz!*hx2VecMjDLTagI=`}RNd}>oxnM-&+b(C$dp$B0Xo3)EJ;O`)`mZoz1j9Qu| zo!Z38Yw1R*wUI^arW3K1vvyM_;MUy?QL<$Z-3#pK9y(VlEtT8$(*AyOzKHo4h6n`gNi4ybwiR>J! zpRCh=p1!%+kFA}cA1rT~p#M$}pU7_{=nwkGG)l9lWKWqK8R;m6?;aYxbo5{K_~!!P zpJqq3@enlXZc2@my_lwtH!O;r5*eBz??}_jQgPl{%!ua|LTG-hz4X+U32Y<_5w8>&Zv%*11;z`umEOq`crC|0kv=`8J$d)xH3Ao-5q9ho59>I- zJ67QJ0v8LsLEt)pF+ddc1`3R05l0A&V-b%MSR~|~ATaRcy!ir4i1kvsz&eft`pp#& zR6Gn6STFDpfeiu=6WCAS7=eufkKq_UD7YgvX`Y-uAo;br3_Xeg#Sg`Z;*VlNc}T9y YFwcABpd}4VDXG5y3X)Al<{xzb2XG!LiU0rr delta 7199 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 mouse_x && window.y < mouse_y && window.y + window.h > mouse_y); - } +// UI setup and event handling goes here static void nuklearApp(struct nk_context *ctx) { // prompt the user for the graphql instance @@ -271,7 +278,6 @@ static void nuklearApp(struct nk_context *ctx) { sendNewChat = 0; forceRedraw = 2; - // sendIPAddressToCoprocessor(); sprintf(activeChat, new_message_input_buffer); } @@ -344,12 +350,10 @@ static void nuklearApp(struct nk_context *ctx) { nk_layout_row_begin(ctx, NK_STATIC, 12, 1); { + for (int i = 0; i < activeMessageCounter; i++) { - + nk_layout_row_push(ctx, 305); - // message label - // writeSerialPortDebug(boutRefNum, "create label!"); - // writeSerialPortDebug(boutRefNum, activeChatMessages[i]); nk_label(ctx, activeChatMessages[i], NK_TEXT_ALIGN_LEFT); } @@ -373,19 +377,20 @@ static void nuklearApp(struct nk_context *ctx) { struct nk_context* initializeNuklearApp() { sprintf(activeChat, "no active chat"); - struct nk_context *ctx; + graphql_input_window_size = nk_rect(WINDOW_WIDTH / 4, WINDOW_HEIGHT / 4, WINDOW_WIDTH / 2, 120); chats_window_size = nk_rect(0, 0, 180, WINDOW_HEIGHT); messages_window_size = nk_rect(180, 0, 330, WINDOW_HEIGHT - 36); message_input_window_size = nk_rect(180, WINDOW_HEIGHT - 36, 330, 36); - ctx = nk_quickdraw_init(WINDOW_WIDTH, WINDOW_HEIGHT); + + struct nk_context *ctx = nk_quickdraw_init(WINDOW_WIDTH, WINDOW_HEIGHT); nk_input_begin(ctx); nk_input_end(ctx); nuklearApp(ctx); nk_quickdraw_render(FrontWindow(), ctx); nk_clear(ctx); - sprintf(ip_input_buffer, "http://"); // doesn't work due to bug + sprintf(ip_input_buffer, "http://"); // doesn't work due to bug, see variable definition return ctx; } \ No newline at end of file diff --git a/nuklear_quickdraw.h b/nuklear_quickdraw.h index a206aa9..3646c25 100644 --- a/nuklear_quickdraw.h +++ b/nuklear_quickdraw.h @@ -43,7 +43,7 @@ NK_API NkQuickDrawFont* nk_quickdraw_font_create_from_file(); * * =============================================================== */ - +#define MAX_MEMORY_IN_KB 4 #ifdef NK_QUICKDRAW_IMPLEMENTATION #ifndef NK_QUICKDRAW_TEXT_MAX #define NK_QUICKDRAW_TEXT_MAX 256 @@ -256,6 +256,7 @@ NK_API void nk_quickdraw_del_image(struct nk_image* image) { free(image); } +// NOTE: you will need to generate this yourself! short widthFor12ptFont[128] = { 0, 10, @@ -387,16 +388,9 @@ short widthFor12ptFont[128] = { 8 }; -// note: if this produces a greater value than the actual length of the text, -// the cursor will walk off to the right -// too small, it will precede the end of the text -// TODO: fully convert -// TODO: assuming system font for v1, support other fonts in v2 // doing this in a "fast" way by using a precomputed table for a 12pt font static short nk_quickdraw_font_get_text_width(nk_handle handle, short height, const char *text, short len) { - // // writeSerialPortDebug(boutRefNum, "nk_quickdraw_font_get_text_width"); - if (!text || len == 0) { return 0; @@ -414,8 +408,6 @@ static short nk_quickdraw_font_get_text_width(nk_handle handle, short height, co static int _get_text_width(const char *text, int len) { - // // writeSerialPortDebug(boutRefNum, "nk_quickdraw_font_get_text_width"); - if (!text || len == 0) { return 0; @@ -448,7 +440,7 @@ static int nk_color_to_quickdraw_bw_color(struct nk_color color) { char stringMagicColorNumber[255]; sprintf(stringMagicColorNumber, "stringMagicColorNumber: %f", magicColorNumber); - // writeSerialPortDebug(boutRefNum, stringMagicColorNumber); + writeSerialPortDebug(boutRefNum, stringMagicColorNumber); #endif if (magicColorNumber > 37) { @@ -456,7 +448,7 @@ static int nk_color_to_quickdraw_bw_color(struct nk_color color) { return blackColor; } - return blackColor;//whiteColor; + return blackColor; } // i split this in to a 2nd routine because we can use the various shades of gray when filling rectangles and whatnot @@ -468,8 +460,6 @@ static Pattern nk_color_to_quickdraw_color(struct nk_color color) { uint8_t red; uint8_t blue; uint8_t green; - - float magicColorNumber = color.r * 0.299 + color.g * 0.587 + color.b * 0.114; if (magicColorNumber > 150) { @@ -507,16 +497,6 @@ NK_API NkQuickDrawFont* nk_quickdraw_font_create_from_file() { NK_API void nk_quickdraw_render(WindowPtr window, struct nk_context *ctx) { - long start; - long end; - long total; - start = TickCount(); - - long renderTime1; - long renderTime2; - long renderTime3; - - void *cmds = nk_buffer_memory(&ctx->memory); // do not render if the buffer did not change from the previous rendering run @@ -524,7 +504,7 @@ NK_API void nk_quickdraw_render(WindowPtr window, struct nk_context *ctx) { #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_NOP"); + writeSerialPortDebug(boutRefNum, "NK_COMMAND_NOP"); #endif return; @@ -534,147 +514,93 @@ NK_API void nk_quickdraw_render(WindowPtr window, struct nk_context *ctx) { const struct nk_command *cmd = 0; - // if (!lastEventWasKey) { - OpenPort(&gMainOffScreen.BWPort); - SetPort(&gMainOffScreen.BWPort); - SetPortBits(&gMainOffScreen.BWBits); - // EraseRect(&gMainOffScreen.bounds); - - // int theNum; - // GetFNum('Chicago', theNum); - // // do this twice, once now, and once after the port is switched to the offscreen - // TextFont(theNum); - // TextSize(12); - // } else { - - // SetPort(window); - - // int theNum; - // GetFNum('Chicago', theNum); - // // do this twice, once now, and once after the port is switched to the offscreen - // TextFont(theNum); - // TextSize(12); - // } - - end = TickCount(); - total = end - start; - renderTime1 = total;// / 60.0; - start = TickCount(); + OpenPort(&gMainOffScreen.BWPort); + SetPort(&gMainOffScreen.BWPort); + SetPortBits(&gMainOffScreen.BWBits); nk_foreach(cmd, ctx) { int color; - // ForeColor(blackColor); - // if (lastEventWasKey && cmd->type == NK_COMMAND_TEXT) { + switch (cmd->type) { + case NK_COMMAND_NOP: - // // writeSerialPortDebug(boutRefNum, "FAST INPUT"); + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + writeSerialPortDebug(boutRefNum, "NK_COMMAND_NOP"); + #endif - // const struct nk_command_text *t = (const struct nk_command_text*)cmd; - - // #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + break; + case NK_COMMAND_SCISSOR: { - // // writeSerialPortDebug(boutRefNum, "NK_COMMAND_TEXT"); - // char log[255]; - // sprintf(log, "%f: %c, %d", (int)t->height, &t->string, (int)t->length); - // // writeSerialPortDebug(boutRefNum, log); - // #endif - - // MoveTo((int)t->x + _get_text_width(t->string, (int)t->length - 1), (int)t->y + (int)t->height); - - // // DrawText((const char*)t->string, 0, (int)t->length); - // PenSize(1.0, 1.0); - // DrawChar(t->string[t->length - 1]); - - // } else if (!lastEventWasKey) { - - - // writeSerialPortDebug(boutRefNum, "SLOW INPUT"); - switch (cmd->type) { - - case NK_COMMAND_NOP: - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_NOP"); + writeSerialPortDebug(boutRefNum, "NK_COMMAND_SCISSOR"); #endif + + const struct nk_command_scissor *s =(const struct nk_command_scissor*)cmd; + + Rect quickDrawRectangle; + quickDrawRectangle.top = (int)s->y; + quickDrawRectangle.left = (int)s->x; + quickDrawRectangle.bottom = (int)s->y + (int)s->h; + quickDrawRectangle.right = (int)s->x + (int)s->w; + ClipRect(&quickDrawRectangle); + } - break; - case NK_COMMAND_SCISSOR: { - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + break; + case NK_COMMAND_LINE: { - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_SCISSOR"); - #endif + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - const struct nk_command_scissor *s =(const struct nk_command_scissor*)cmd; + writeSerialPortDebug(boutRefNum, "NK_COMMAND_LINE"); + #endif - Rect quickDrawRectangle; - quickDrawRectangle.top = (int)s->y; - quickDrawRectangle.left = (int)s->x; - quickDrawRectangle.bottom = (int)s->y + (int)s->h; - quickDrawRectangle.right = (int)s->x + (int)s->w; - - ClipRect(&quickDrawRectangle); - } + const struct nk_command_line *l = (const struct nk_command_line *)cmd; - break; - case NK_COMMAND_LINE: { - - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + color = nk_color_to_quickdraw_bw_color(l->color); + // great reference: http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/QuickDraw/QuickDraw-60.html + ForeColor(color); + PenSize((int)l->line_thickness, (int)l->line_thickness); + MoveTo((int)l->begin.x, (int)l->begin.y); + LineTo((int)l->end.x, (int)l->end.y); + } - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_LINE"); - #endif - - const struct nk_command_line *l = (const struct nk_command_line *)cmd; - - color = nk_color_to_quickdraw_bw_color(l->color); - // great reference: http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/QuickDraw/QuickDraw-60.html - // al_draw_line((float)l->begin.x, (float)l->begin.y, (float)l->end.x, (float)l->end.y, color, (float)l->line_thickness); // TODO: look up and convert al_draw_line - ForeColor(color); - PenSize((int)l->line_thickness, (int)l->line_thickness); - MoveTo((int)l->begin.x, (int)l->begin.y); - LineTo((int)l->end.x, (int)l->end.y); - } - - break; - case NK_COMMAND_RECT: { - - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_RECT"); - #endif - - // http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/QuickDraw/QuickDraw-102.html#MARKER-9-372 - // http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/QuickDraw/QuickDraw-103.html#HEADING103-0 - const struct nk_command_rect *r = (const struct nk_command_rect *)cmd; - - color = nk_color_to_quickdraw_bw_color(r->color); - - ForeColor(color); - PenSize((int)r->line_thickness, (int)r->line_thickness); - - Rect quickDrawRectangle; - quickDrawRectangle.top = (int)r->y; - quickDrawRectangle.left = (int)r->x; - quickDrawRectangle.bottom = (int)r->y + (int)r->h; - quickDrawRectangle.right = (int)r->x + (int)r->w; - - FrameRoundRect(&quickDrawRectangle, (float)r->rounding, (float)r->rounding); - } - - break; - case NK_COMMAND_RECT_FILLED: { - + break; + case NK_COMMAND_RECT: { + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_RECT_FILLED"); + writeSerialPortDebug(boutRefNum, "NK_COMMAND_RECT"); + #endif + + // http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/QuickDraw/QuickDraw-102.html#MARKER-9-372 + // http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/QuickDraw/QuickDraw-103.html#HEADING103-0 + const struct nk_command_rect *r = (const struct nk_command_rect *)cmd; + + color = nk_color_to_quickdraw_bw_color(r->color); + + ForeColor(color); + PenSize((int)r->line_thickness, (int)r->line_thickness); + + Rect quickDrawRectangle; + quickDrawRectangle.top = (int)r->y; + quickDrawRectangle.left = (int)r->x; + quickDrawRectangle.bottom = (int)r->y + (int)r->h; + quickDrawRectangle.right = (int)r->x + (int)r->w; + + FrameRoundRect(&quickDrawRectangle, (float)r->rounding, (float)r->rounding); + } + + break; + case NK_COMMAND_RECT_FILLED: { + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_RECT_FILLED"); #endif const struct nk_command_rect_filled *r = (const struct nk_command_rect_filled *)cmd; @@ -697,346 +623,316 @@ NK_API void nk_quickdraw_render(WindowPtr window, struct nk_context *ctx) { FrameRoundRect(&quickDrawRectangle, (float)r->rounding, (float)r->rounding); // http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/QuickDraw/QuickDraw-105.html#HEADING105-0 } - break; - case NK_COMMAND_CIRCLE: { - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_CIRCLE"); - #endif - - const struct nk_command_circle *c = (const struct nk_command_circle *)cmd; - - color = nk_color_to_quickdraw_bw_color(c->color); - - ForeColor(color); - Rect quickDrawRectangle; - quickDrawRectangle.top = (int)c->y; - quickDrawRectangle.left = (int)c->x; - quickDrawRectangle.bottom = (int)c->y + (int)c->h; - quickDrawRectangle.right = (int)c->x + (int)c->w; - - FrameOval(&quickDrawRectangle); // An oval is a circular or elliptical shape defined by the bounding rectangle that encloses it. inside macintosh: imaging with quickdraw 3-25 - } - - break; - case NK_COMMAND_CIRCLE_FILLED: { - - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_CIRCLE_FILLED"); - #endif - - const struct nk_command_circle_filled *c = (const struct nk_command_circle_filled *)cmd; - - color = nk_color_to_quickdraw_bw_color(c->color); - - ForeColor(color); - Pattern colorPattern = nk_color_to_quickdraw_color(c->color); - // BackPat(&colorPattern); // inside macintosh: imaging with quickdraw 3-48 - PenSize(1.0, 1.0); - Rect quickDrawRectangle; - quickDrawRectangle.top = (int)c->y; - quickDrawRectangle.left = (int)c->x; - quickDrawRectangle.bottom = (int)c->y + (int)c->h; - quickDrawRectangle.right = (int)c->x + (int)c->w; - - FillOval(&quickDrawRectangle, &colorPattern); - FrameOval(&quickDrawRectangle);// An oval is a circular or elliptical shape defined by the bounding rectangle that encloses it. inside macintosh: imaging with quickdraw 3-25 - // http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/QuickDraw/QuickDraw-111.html#HEADING111-0 - } - - break; - case NK_COMMAND_TRIANGLE: { - - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_TRIANGLE"); - #endif - - const struct nk_command_triangle *t = (const struct nk_command_triangle*)cmd; - color = nk_color_to_quickdraw_bw_color(t->color); - - ForeColor(color); - PenSize((int)t->line_thickness, (int)t->line_thickness); - - MoveTo((int)t->a.x, (int)t->a.y); - LineTo((int)t->b.x, (int)t->b.y); - LineTo((int)t->c.x, (int)t->c.y); - LineTo((int)t->a.x, (int)t->a.y); - } - - break; - case NK_COMMAND_TRIANGLE_FILLED: { - - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_TRIANGLE_FILLED"); - #endif - - const struct nk_command_triangle_filled *t = (const struct nk_command_triangle_filled *)cmd; - Pattern colorPattern = nk_color_to_quickdraw_color(t->color); - color = nk_color_to_quickdraw_bw_color(t->color); - PenSize(1.0, 1.0); - // BackPat(&colorPattern); // inside macintosh: imaging with quickdraw 3-48 - ForeColor(color); - - PolyHandle trianglePolygon = OpenPoly(); - MoveTo((int)t->a.x, (int)t->a.y); - LineTo((int)t->b.x, (int)t->b.y); - LineTo((int)t->c.x, (int)t->c.y); - LineTo((int)t->a.x, (int)t->a.y); - ClosePoly(); - - FillPoly(trianglePolygon, &colorPattern); - KillPoly(trianglePolygon); - } - - break; - case NK_COMMAND_POLYGON: { - - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_POLYGON"); - #endif - - const struct nk_command_polygon *p = (const struct nk_command_polygon*)cmd; - - color = nk_color_to_quickdraw_bw_color(p->color); - ForeColor(color); - int i; - - for (i = 0; i < p->point_count; i++) { - - if (i == 0) { - - MoveTo(p->points[i].x, p->points[i].y); - } - - LineTo(p->points[i].x, p->points[i].y); - - if (i == p->point_count - 1) { - - - LineTo(p->points[0].x, p->points[0].y); - } - } - } - - break; - case NK_COMMAND_POLYGON_FILLED: { - - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_POLYGON_FILLED"); - #endif - - const struct nk_command_polygon *p = (const struct nk_command_polygon*)cmd; - - Pattern colorPattern = nk_color_to_quickdraw_color(p->color); - color = nk_color_to_quickdraw_bw_color(p->color); - // BackPat(&colorPattern); // inside macintosh: imaging with quickdraw 3-48 -- but might actually need PenPat -- look into this - ForeColor(color); - int i; - - PolyHandle trianglePolygon = OpenPoly(); - for (i = 0; i < p->point_count; i++) { - - if (i == 0) { - - MoveTo(p->points[i].x, p->points[i].y); - } - - LineTo(p->points[i].x, p->points[i].y); - - if (i == p->point_count - 1) { - - - LineTo(p->points[0].x, p->points[0].y); - } - } - - ClosePoly(); - - FillPoly(trianglePolygon, &colorPattern); - KillPoly(trianglePolygon); - } - - break; - case NK_COMMAND_POLYLINE: { - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_POLYLINE"); - #endif - - // this is similar to polygons except the polygon does not get closed to the 0th point - // check out the slight difference in the for loop - const struct nk_command_polygon *p = (const struct nk_command_polygon*)cmd; - - color = nk_color_to_quickdraw_bw_color(p->color); - ForeColor(color); - int i; - - for (i = 0; i < p->point_count; i++) { - - if (i == 0) { - - MoveTo(p->points[i].x, p->points[i].y); - } - - LineTo(p->points[i].x, p->points[i].y); - } - } - - break; - case NK_COMMAND_TEXT: { - - const struct nk_command_text *t = (const struct nk_command_text*)cmd; - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_TEXT"); - char log[255]; - sprintf(log, "%f: %c, %d", (int)t->height, &t->string, (int)t->length); - // writeSerialPortDebug(boutRefNum, log); - #endif - - color = nk_color_to_quickdraw_bw_color(t->foreground); - ForeColor(color); - MoveTo((int)t->x, (int)t->y + (int)t->height); - - PenSize(1.0, 1.0); - DrawText((const char*)t->string, 0, (int)t->length); - - // DrawChar(t->string[t->length - 1]); - } - - break; - case NK_COMMAND_CURVE: { - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_CURVE"); - #endif - - const struct nk_command_curve *q = (const struct nk_command_curve *)cmd; - color = nk_color_to_quickdraw_bw_color(q->color); - ForeColor(color); - Point p1 = { (int)q->begin.x, (int)q->begin.y}; - Point p2 = { (int)q->ctrl[0].x, (int)q->ctrl[0].y}; - Point p3 = { (int)q->ctrl[1].x, (int)q->ctrl[1].y}; - Point p4 = { (int)q->end.x, (int)q->end.y}; - - BezierCurve(p1, p2, p3, p4); - } - - break; - case NK_COMMAND_ARC: { - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_ARC"); - #endif - - const struct nk_command_arc *a = (const struct nk_command_arc *)cmd; - - color = nk_color_to_quickdraw_bw_color(a->color); - ForeColor(color); - Rect arcBoundingBoxRectangle; - // this is kind of silly because the cx is at the center of the arc and we need to create a rectangle around it - // http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/QuickDraw/QuickDraw-60.html#MARKER-2-116 - int x1 = (int)a->cx - (int)a->r; - int y1 = (int)a->cy - (int)a->r; - int x2 = (int)a->cx + (int)a->r; - int y2 = (int)a->cy + (int)a->r; - SetRect(&arcBoundingBoxRectangle, x1, y1, x2, y2); - // SetRect(secondRect,90,20,140,70); - - FrameArc(&arcBoundingBoxRectangle, a->a[0], a->a[1]); - } - - break; - case NK_COMMAND_IMAGE: { - - #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_IMAGE"); - #endif - - const struct nk_command_image *i = (const struct nk_command_image *)cmd; - // al_draw_bitmap_region(i->img.handle.ptr, 0, 0, i->w, i->h, i->x, i->y, 0); // TODO: look up and convert al_draw_bitmap_region - // TODO: consider implementing a bitmap drawing routine. we could iterate pixel by pixel and draw - // here is some super naive code that could work, used for another project that i was working on with a custom format but would be - // easy to modify for standard bitmap files (just need to know how many bytes represent each pixel and iterate from there): - // - // for (int i = 0; i < strlen(string); i++) { - // printf("\nchar: %c", string[i]); - // char pixel[1]; - // memcpy(pixel, &string[i], 1); - // if (strcmp(pixel, "0") == 0) { // white pixel - // MoveTo(++x, y); - // } else if (strcmp(pixel, "1") == 0) { // black pixel - // // advance the pen and draw a 1px x 1px "line" - // MoveTo(++x, y); - // LineTo(x, y); - // } else if (strcmp(pixel, "|") == 0) { // next line - // x = 1; - // MoveTo(x, ++y); - // } else if (strcmp(pixel, "/") == 0) { // end - // } - // } - } - - break; - - // why are these cases not implemented? - case NK_COMMAND_RECT_MULTI_COLOR: - case NK_COMMAND_ARC_FILLED: - default: + break; + case NK_COMMAND_CIRCLE: { #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING - // writeSerialPortDebug(boutRefNum, "NK_COMMAND_RECT_MULTI_COLOR/NK_COMMAND_ARC_FILLED/default"); + writeSerialPortDebug(boutRefNum, "NK_COMMAND_CIRCLE"); #endif - break; - } - // } + + const struct nk_command_circle *c = (const struct nk_command_circle *)cmd; + + color = nk_color_to_quickdraw_bw_color(c->color); + + ForeColor(color); + Rect quickDrawRectangle; + quickDrawRectangle.top = (int)c->y; + quickDrawRectangle.left = (int)c->x; + quickDrawRectangle.bottom = (int)c->y + (int)c->h; + quickDrawRectangle.right = (int)c->x + (int)c->w; + + FrameOval(&quickDrawRectangle); // An oval is a circular or elliptical shape defined by the bounding rectangle that encloses it. inside macintosh: imaging with quickdraw 3-25 + } + + break; + case NK_COMMAND_CIRCLE_FILLED: { + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_CIRCLE_FILLED"); + #endif + + const struct nk_command_circle_filled *c = (const struct nk_command_circle_filled *)cmd; + + color = nk_color_to_quickdraw_bw_color(c->color); + + ForeColor(color); + Pattern colorPattern = nk_color_to_quickdraw_color(c->color); + // BackPat(&colorPattern); // inside macintosh: imaging with quickdraw 3-48 + PenSize(1.0, 1.0); + Rect quickDrawRectangle; + quickDrawRectangle.top = (int)c->y; + quickDrawRectangle.left = (int)c->x; + quickDrawRectangle.bottom = (int)c->y + (int)c->h; + quickDrawRectangle.right = (int)c->x + (int)c->w; + + FillOval(&quickDrawRectangle, &colorPattern); + FrameOval(&quickDrawRectangle);// An oval is a circular or elliptical shape defined by the bounding rectangle that encloses it. inside macintosh: imaging with quickdraw 3-25 + // http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/QuickDraw/QuickDraw-111.html#HEADING111-0 + } + + break; + case NK_COMMAND_TRIANGLE: { + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_TRIANGLE"); + #endif + + const struct nk_command_triangle *t = (const struct nk_command_triangle*)cmd; + color = nk_color_to_quickdraw_bw_color(t->color); + + ForeColor(color); + PenSize((int)t->line_thickness, (int)t->line_thickness); + + MoveTo((int)t->a.x, (int)t->a.y); + LineTo((int)t->b.x, (int)t->b.y); + LineTo((int)t->c.x, (int)t->c.y); + LineTo((int)t->a.x, (int)t->a.y); + } + + break; + case NK_COMMAND_TRIANGLE_FILLED: { + + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_TRIANGLE_FILLED"); + #endif + + const struct nk_command_triangle_filled *t = (const struct nk_command_triangle_filled *)cmd; + Pattern colorPattern = nk_color_to_quickdraw_color(t->color); + color = nk_color_to_quickdraw_bw_color(t->color); + PenSize(1.0, 1.0); + // BackPat(&colorPattern); // inside macintosh: imaging with quickdraw 3-48 + ForeColor(color); + + PolyHandle trianglePolygon = OpenPoly(); + MoveTo((int)t->a.x, (int)t->a.y); + LineTo((int)t->b.x, (int)t->b.y); + LineTo((int)t->c.x, (int)t->c.y); + LineTo((int)t->a.x, (int)t->a.y); + ClosePoly(); + + FillPoly(trianglePolygon, &colorPattern); + KillPoly(trianglePolygon); + } + + break; + case NK_COMMAND_POLYGON: { + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_POLYGON"); + #endif + + const struct nk_command_polygon *p = (const struct nk_command_polygon*)cmd; + + color = nk_color_to_quickdraw_bw_color(p->color); + ForeColor(color); + int i; + + for (i = 0; i < p->point_count; i++) { + + if (i == 0) { + + MoveTo(p->points[i].x, p->points[i].y); + } + + LineTo(p->points[i].x, p->points[i].y); + + if (i == p->point_count - 1) { + + LineTo(p->points[0].x, p->points[0].y); + } + } + } + + break; + case NK_COMMAND_POLYGON_FILLED: { + + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_POLYGON_FILLED"); + #endif + + const struct nk_command_polygon *p = (const struct nk_command_polygon*)cmd; + + Pattern colorPattern = nk_color_to_quickdraw_color(p->color); + color = nk_color_to_quickdraw_bw_color(p->color); + // BackPat(&colorPattern); // inside macintosh: imaging with quickdraw 3-48 -- but might actually need PenPat -- look into this + ForeColor(color); + int i; + + PolyHandle trianglePolygon = OpenPoly(); + for (i = 0; i < p->point_count; i++) { + + if (i == 0) { + + MoveTo(p->points[i].x, p->points[i].y); + } + + LineTo(p->points[i].x, p->points[i].y); + + if (i == p->point_count - 1) { + + + LineTo(p->points[0].x, p->points[0].y); + } + } + + ClosePoly(); + + FillPoly(trianglePolygon, &colorPattern); + KillPoly(trianglePolygon); + } + + break; + case NK_COMMAND_POLYLINE: { + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_POLYLINE"); + #endif + + // this is similar to polygons except the polygon does not get closed to the 0th point + // check out the slight difference in the for loop + const struct nk_command_polygon *p = (const struct nk_command_polygon*)cmd; + + color = nk_color_to_quickdraw_bw_color(p->color); + ForeColor(color); + int i; + + for (i = 0; i < p->point_count; i++) { + + if (i == 0) { + + MoveTo(p->points[i].x, p->points[i].y); + } + + LineTo(p->points[i].x, p->points[i].y); + } + } + + break; + case NK_COMMAND_TEXT: { + + const struct nk_command_text *t = (const struct nk_command_text*)cmd; + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_TEXT"); + char log[255]; + sprintf(log, "%f: %c, %d", (int)t->height, &t->string, (int)t->length); + writeSerialPortDebug(boutRefNum, log); + #endif + + color = nk_color_to_quickdraw_bw_color(t->foreground); + ForeColor(color); + MoveTo((int)t->x, (int)t->y + (int)t->height); + + PenSize(1.0, 1.0); + DrawText((const char*)t->string, 0, (int)t->length); + } + + break; + case NK_COMMAND_CURVE: { + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_CURVE"); + #endif + + const struct nk_command_curve *q = (const struct nk_command_curve *)cmd; + color = nk_color_to_quickdraw_bw_color(q->color); + ForeColor(color); + Point p1 = { (int)q->begin.x, (int)q->begin.y}; + Point p2 = { (int)q->ctrl[0].x, (int)q->ctrl[0].y}; + Point p3 = { (int)q->ctrl[1].x, (int)q->ctrl[1].y}; + Point p4 = { (int)q->end.x, (int)q->end.y}; + + BezierCurve(p1, p2, p3, p4); + } + + break; + case NK_COMMAND_ARC: { + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_ARC"); + #endif + + const struct nk_command_arc *a = (const struct nk_command_arc *)cmd; + + color = nk_color_to_quickdraw_bw_color(a->color); + ForeColor(color); + Rect arcBoundingBoxRectangle; + // this is kind of silly because the cx is at the center of the arc and we need to create a rectangle around it + // http://mirror.informatimago.com/next/developer.apple.com/documentation/mac/QuickDraw/QuickDraw-60.html#MARKER-2-116 + int x1 = (int)a->cx - (int)a->r; + int y1 = (int)a->cy - (int)a->r; + int x2 = (int)a->cx + (int)a->r; + int y2 = (int)a->cy + (int)a->r; + SetRect(&arcBoundingBoxRectangle, x1, y1, x2, y2); + // SetRect(secondRect,90,20,140,70); + + FrameArc(&arcBoundingBoxRectangle, a->a[0], a->a[1]); + } + + break; + case NK_COMMAND_IMAGE: { + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_IMAGE"); + #endif + + const struct nk_command_image *i = (const struct nk_command_image *)cmd; + // al_draw_bitmap_region(i->img.handle.ptr, 0, 0, i->w, i->h, i->x, i->y, 0); // TODO: look up and convert al_draw_bitmap_region + // TODO: consider implementing a bitmap drawing routine. we could iterate pixel by pixel and draw + // here is some super naive code that could work, used for another project that i was working on with a custom format but would be + // easy to modify for standard bitmap files (just need to know how many bytes represent each pixel and iterate from there): + // + // for (int i = 0; i < strlen(string); i++) { + // printf("\nchar: %c", string[i]); + // char pixel[1]; + // memcpy(pixel, &string[i], 1); + // if (strcmp(pixel, "0") == 0) { // white pixel + // MoveTo(++x, y); + // } else if (strcmp(pixel, "1") == 0) { // black pixel + // // advance the pen and draw a 1px x 1px "line" + // MoveTo(++x, y); + // LineTo(x, y); + // } else if (strcmp(pixel, "|") == 0) { // next line + // x = 1; + // MoveTo(x, ++y); + // } else if (strcmp(pixel, "/") == 0) { // end + // } + // } + } + + break; + + // why are these cases not implemented? + case NK_COMMAND_RECT_MULTI_COLOR: + case NK_COMMAND_ARC_FILLED: + default: + + #ifdef NK_QUICKDRAW_GRAPHICS_DEBUGGING + + writeSerialPortDebug(boutRefNum, "NK_COMMAND_RECT_MULTI_COLOR/NK_COMMAND_ARC_FILLED/default"); + #endif + break; + } } + SetPort(window); - end = TickCount(); - total = end - start; - renderTime2 = total;// / 60.0; - start = TickCount(); - - - - // if (!lastEventWasKey) { - SetPort(window); - - - // our offscreen bitmap is the same size as our port rectangle, so we - // get away with using the portRect sizing for source and destination - CopyBits(&gMainOffScreen.bits->portBits, &window->portBits, &window->portRect, &window->portRect, srcCopy, 0L); - // } - - end = TickCount(); - total = end - start; - renderTime3 = total;// / 60.0; - start = TickCount(); - - - // char logx[255]; - // sprintf(logx, "nk_quickdraw_render() renderTime1 (pre-render) %ld, renderTime2 (render loop) %ld, renderTime3 (post-render) %ld ticks to execute\n", renderTime1, renderTime2, renderTime3); - // // writeSerialPortDebug(boutRefNum, logx); - - lastEventWasKey = 0; + // our offscreen bitmap is the same size as our port rectangle, so we + // get away with using the portRect sizing for source and destination + CopyBits(&gMainOffScreen.bits->portBits, &window->portBits, &window->portRect, &window->portRect, srcCopy, 0L); } NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nuklear_context) { @@ -1055,11 +951,11 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl } break; case osEvt: { - // the quicktime osEvts are supposed to cover mouse movement events - // notice that we are actually calling nk_input_motion in the EventLoop for the program - // instead, as handling this event directly does not appear to work for whatever reason - // TODO: research this - // writeSerialPortDebug(boutRefNum, "osEvt"); + // the quicktime osEvts are supposed to cover mouse movement events + // notice that we are actually calling nk_input_motion in the EventLoop for the program + // instead, as handling this event directly does not appear to work for whatever reason + // TODO: research this + // writeSerialPortDebug(boutRefNum, "osEvt"); switch (event->message) { @@ -1067,7 +963,7 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl #ifdef NK_QUICKDRAW_EVENTS_DEBUGGING - // writeSerialPortDebug(boutRefNum, "mouseMovedMessage"); + writeSerialPortDebug(boutRefNum, "mouseMovedMessage"); #endif @@ -1086,13 +982,13 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl case mouseUp: #ifdef NK_QUICKDRAW_EVENTS_DEBUGGING - // writeSerialPortDebug(boutRefNum, "mouseUp!!!"); + writeSerialPortDebug(boutRefNum, "mouseUp!!!"); #endif case mouseDown: { #ifdef NK_QUICKDRAW_EVENTS_DEBUGGING - // writeSerialPortDebug(boutRefNum, "mouseUp/Down"); + writeSerialPortDebug(boutRefNum, "mouseUp/Down"); #endif short part = FindWindow(event->where, &window); @@ -1103,7 +999,7 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl // TODO need to figure this out #ifdef NK_QUICKDRAW_EVENTS_DEBUGGING - // writeSerialPortDebug(boutRefNum, "mouseUp/Down IN DEFAULT ZONE!!!!"); + writeSerialPortDebug(boutRefNum, "mouseUp/Down IN DEFAULT ZONE!!!!"); #endif // this converts the offset of the window to the actual location of the mouse within the window @@ -1115,19 +1011,19 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl #ifdef NK_QUICKDRAW_EVENTS_DEBUGGING - // writeSerialPortDebug(boutRefNum, "no event location for mouse!!!!"); + writeSerialPortDebug(boutRefNum, "no event location for mouse!!!!"); #endif return 1; } int x = tempPoint.h; int y = tempPoint.v; - //#ifdef NK_QUICKDRAW_EVENTS_DEBUGGING + #ifdef NK_QUICKDRAW_EVENTS_DEBUGGING char logx[255]; sprintf(logx, "mouse location at time of click h: %d, v: %d, is mouse down: %d", x, y, event->what == mouseDown); writeSerialPortDebug(boutRefNum, logx); - //#endif + #endif // nk_input_motion(nuklear_context, x, y); // you can enable this if you don't want to use motion tracking // in the Mac event loop handler as in the nuklear quickdraw sample, and this will allow mouse clicks to @@ -1231,10 +1127,10 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl nk_input_key(nuklear_context, NK_KEY_SCROLL_END, isKeyDown); } else { - // #ifdef NK_QUICKDRAW_EVENTS_DEBUGGING + #ifdef NK_QUICKDRAW_EVENTS_DEBUGGING - //writeSerialPortDebug(boutRefNum, "default keydown/autokey event"); - // #endif + writeSerialPortDebug(boutRefNum, "default keydown/autokey event"); + #endif nk_input_char(nuklear_context, charKey); } @@ -1247,7 +1143,7 @@ NK_API int nk_quickdraw_handle_event(EventRecord *event, struct nk_context *nukl default: { #ifdef NK_QUICKDRAW_EVENTS_DEBUGGING - // writeSerialPortDebug(boutRefNum, "default unhandled event"); + writeSerialPortDebug(boutRefNum, "default unhandled event"); #endif return 1; @@ -1286,9 +1182,9 @@ NK_API struct nk_context* nk_quickdraw_init(unsigned int width, unsigned int hei NkQuickDrawFont *quickdrawfont = nk_quickdraw_font_create_from_file(); struct nk_user_font *font = &quickdrawfont->nk; - last = calloc(1, 64 * 1024); - buf = calloc(1, 64 * 1024); - nk_init_fixed(&quickdraw.nuklear_context, buf, 64 * 1024, font); + last = calloc(1, MAX_MEMORY_IN_KB * 1024); + buf = calloc(1, MAX_MEMORY_IN_KB * 1024); + nk_init_fixed(&quickdraw.nuklear_context, buf, MAX_MEMORY_IN_KB * 1024, font); // nk_init_default(&quickdraw.nuklear_context, font); nk_style_push_font(&quickdraw.nuklear_context, font); @@ -1372,7 +1268,7 @@ NK_API struct nk_context* nk_quickdraw_init(unsigned int width, unsigned int hei button->userdata = nk_handle_ptr(0); button->text_alignment = NK_TEXT_LEFT; button->border = 1; - button->rounding = 4; + button->rounding = 10; button->draw_begin = 0; button->draw_end = 0;