From e341cc44cc63d2619ee9cb8759839fd420bc3f6a Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Tue, 16 Sep 2025 12:05:52 -0400 Subject: [PATCH] examples: Added misc/01-power --- examples/CMakeLists.txt | 1 + examples/misc/01-power/README.txt | 1 + examples/misc/01-power/onmouseover.webp | Bin 0 -> 19244 bytes examples/misc/01-power/power.c | 174 ++++++++++++++++++++++++ examples/misc/01-power/thumbnail.png | Bin 0 -> 622 bytes examples/misc/description.txt | 1 + 6 files changed, 177 insertions(+) create mode 100644 examples/misc/01-power/README.txt create mode 100644 examples/misc/01-power/onmouseover.webp create mode 100644 examples/misc/01-power/power.c create mode 100644 examples/misc/01-power/thumbnail.png create mode 100644 examples/misc/description.txt diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 0f6318048c..22826a1788 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -154,6 +154,7 @@ add_sdl_example_executable(input-gamepad-events SOURCES input/04-gamepad-events/ add_sdl_example_executable(camera-read-and-draw SOURCES camera/01-read-and-draw/read-and-draw.c) add_sdl_example_executable(pen-drawing-lines SOURCES pen/01-drawing-lines/drawing-lines.c) add_sdl_example_executable(asyncio-load-bitmaps SOURCES asyncio/01-load-bitmaps/load-bitmaps.c DATAFILES ${CMAKE_CURRENT_SOURCE_DIR}/../test/sample.bmp ${CMAKE_CURRENT_SOURCE_DIR}/../test/gamepad_front.bmp ${CMAKE_CURRENT_SOURCE_DIR}/../test/speaker.bmp ${CMAKE_CURRENT_SOURCE_DIR}/../test/icon2x.bmp) +add_sdl_example_executable(misc-power SOURCES misc/01-power/power.c) add_sdl_example_executable(demo-snake SOURCES demo/01-snake/snake.c) add_sdl_example_executable(demo-woodeneye-008 SOURCES demo/02-woodeneye-008/woodeneye-008.c) add_sdl_example_executable(demo-infinite-monkeys SOURCES demo/03-infinite-monkeys/infinite-monkeys.c) diff --git a/examples/misc/01-power/README.txt b/examples/misc/01-power/README.txt new file mode 100644 index 0000000000..2617ff8ad3 --- /dev/null +++ b/examples/misc/01-power/README.txt @@ -0,0 +1 @@ +This example code reports power status (plugged in, battery level, etc). diff --git a/examples/misc/01-power/onmouseover.webp b/examples/misc/01-power/onmouseover.webp new file mode 100644 index 0000000000000000000000000000000000000000..a99b8d6f819c63d821f9904ceaeb7211d2b006ea GIT binary patch literal 19244 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 Xjnjci#NCi8%=4H#?|bw`zyJUMq5iP- literal 0 HcmV?d00001 diff --git a/examples/misc/01-power/power.c b/examples/misc/01-power/power.c new file mode 100644 index 0000000000..fb3ef5d8ef --- /dev/null +++ b/examples/misc/01-power/power.c @@ -0,0 +1,174 @@ +/* + * This example code reports power status (plugged in, battery level, etc). + * + * This code is public domain. Feel free to use it for any purpose! + */ + +#define SDL_MAIN_USE_CALLBACKS 1 /* use the callbacks instead of main() */ +#include +#include + +#include "../../save-rendering-to-bitmaps.h" + +/* We will use this renderer to draw into this window every frame. */ +static SDL_Window *window = NULL; +static SDL_Renderer *renderer = NULL; + +/* This function runs once at startup. */ +SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) +{ + SDL_SetAppMetadata("Example Misc Power", "1.0", "com.example.misc-power"); + + if (!SDL_Init(SDL_INIT_VIDEO)) { + SDL_Log("Couldn't initialize SDL: %s", SDL_GetError()); + return SDL_APP_FAILURE; + } + + if (!SDL_CreateWindowAndRenderer("examples/misc/power", 640, 480, 0, &window, &renderer)) { + SDL_Log("Couldn't create window/renderer: %s", SDL_GetError()); + return SDL_APP_FAILURE; + } + + return SDL_APP_CONTINUE; /* carry on with the program! */ +} + +/* This function runs when a new event (mouse input, keypresses, etc) occurs. */ +SDL_AppResult SDL_AppEvent(void *appstate, SDL_Event *event) +{ + if (event->type == SDL_EVENT_QUIT) { + return SDL_APP_SUCCESS; /* end the program, reporting success to the OS. */ + } + return SDL_APP_CONTINUE; /* carry on with the program! */ +} + +/* This function runs once per frame, and is the heart of the program. */ +SDL_AppResult SDL_AppIterate(void *appstate) +{ + const SDL_FRect frame = { 100, 200, 440, 80 }; /* the percentage bar dimensions. */ + +static Uint64 start = 0; +Uint64 now = SDL_GetTicks(); +if (!start) { + start = now; +} +now -= start; + + /* Query for battery info */ + int seconds = 0, percent = 0; + //const SDL_PowerState state = SDL_GetPowerInfo(&seconds, &percent); + +SDL_PowerState state; +if (now < 500) { + state = SDL_POWERSTATE_ON_BATTERY; + seconds = 8088 + ((500 / 1000) * 300); + percent = ((int) ((500 / 1500.0f) * 100.0f)); +} else { + state = (now < 1500) ? SDL_POWERSTATE_CHARGING : SDL_POWERSTATE_CHARGED; + seconds = 8088 + ((int) ((SDL_min(now, 1500) / 1500.0) * 10000)); + percent = (now < 1500) ? ((int) ((now / 1500.0f) * 100.0f)) : 100; +} + + /* We set up different drawing details for each power state, then + run it all through the same drawing code. */ + int clearr = 0, clearg = 0, clearb = 0; /* clear window to this color. */ + int textr = 255, textg = 255, textb = 255; /* draw messages in this color. */ + int framer = 255, frameg = 255, frameb = 255; /* draw a percentage bar frame in this color. */ + int barr = 0, barg = 0, barb = 0; /* draw a percentage bar in this color. */ + const char *msg = NULL; + const char *msg2 = NULL; + + switch (state) { + case SDL_POWERSTATE_ERROR: + msg2 = "ERROR GETTING POWER STATE"; + msg = SDL_GetError(); + clearr = 255; /* red background */ + break; + + default: /* in case this does something unexpected later, treat it as unknown. */ + case SDL_POWERSTATE_UNKNOWN: + msg = "Power state is unknown."; + clearr = clearb = clearg = 50; /* grey background */ + break; + + case SDL_POWERSTATE_ON_BATTERY: + msg = "Running on battery."; + barr = 255; /* draw in red */ + break; + + case SDL_POWERSTATE_NO_BATTERY: + msg = "Plugged in, no battery available."; + clearg = 50; /* green background */ + break; + + case SDL_POWERSTATE_CHARGING: + msg = "Charging."; + barb = barg = 255; /* draw in cyan */ + break; + + case SDL_POWERSTATE_CHARGED: + msg = "Charged."; + barg = 255; /* draw in green */ + break; + } + + SDL_SetRenderDrawColor(renderer, clearr, clearg, clearb, 255); + SDL_RenderClear(renderer); + + if (percent >= 0) { + float x, y; + SDL_FRect pctrect; + char remainstr[64]; + char msgbuf[128]; + + SDL_copyp(&pctrect, &frame); + pctrect.w *= percent / 100.0f; + + if (seconds < 0) { + SDL_strlcpy(remainstr, "unknown time", sizeof (remainstr)); + } else { + int hours, minutes; + hours = seconds / (60 * 60); + seconds -= hours * (60 * 60); + minutes = seconds / 60; + seconds -= minutes * 60; + SDL_snprintf(remainstr, sizeof (remainstr), "%02d:%02d:%02d", hours, minutes, seconds); + } + + SDL_snprintf(msgbuf, sizeof (msgbuf), "Battery: %3d percent, %s remaining", percent, remainstr); + x = frame.x + ((frame.w - (SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE * SDL_strlen(msgbuf))) / 2.0f); + y = frame.y + frame.h + SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE; + + SDL_SetRenderDrawColor(renderer, barr, barg, barb, 255); /* draw percent bar. */ + SDL_RenderFillRect(renderer, &pctrect); + SDL_SetRenderDrawColor(renderer, framer, frameg, frameb, 255); /* draw frame on top of bar. */ + SDL_RenderRect(renderer, &frame); + SDL_SetRenderDrawColor(renderer, textr, textg, textb, 255); + SDL_RenderDebugText(renderer, x, y, msgbuf); /* draw text about battery level */ + } + + if (msg) { + const float x = frame.x + ((frame.w - (SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE * SDL_strlen(msg))) / 2.0f); + const float y = frame.y - (SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE * 2); + SDL_SetRenderDrawColor(renderer, textr, textg, textb, 255); + SDL_RenderDebugText(renderer, x, y, msg); + } + + if (msg2) { + const float x = frame.x + ((frame.w - (SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE * SDL_strlen(msg2))) / 2.0f); + const float y = frame.y - (SDL_DEBUG_TEXT_FONT_CHARACTER_SIZE * 4); + SDL_SetRenderDrawColor(renderer, textr, textg, textb, 255); + SDL_RenderDebugText(renderer, x, y, msg2); + } + + /* put the new rendering on the screen. */ + SDL_RenderPresent(renderer); + + return SDL_APP_CONTINUE; /* carry on with the program! */ +} + +/* This function runs once at shutdown. */ +void SDL_AppQuit(void *appstate, SDL_AppResult result) +{ + /* SDL will clean up the window/renderer for us. */ +} + diff --git a/examples/misc/01-power/thumbnail.png b/examples/misc/01-power/thumbnail.png new file mode 100644 index 0000000000000000000000000000000000000000..970bdff6b00b53a7c5f5664d169301f58f952dcc GIT binary patch literal 622 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV0^&D3>5L$Z&D7VI0Jk_T!Hj|Ao~A5T{1-u zs7k@p#WAGf*4sPYd5;`K94=03k8^EX8s(b5=zH+&6Ms4d z-B+DmY)m&C*|JPR^K*8mNG-qHls``n)EFB)H)8sJ!k_=l@&iR;H^S~++x~*xdfu9kGH;U-+1l&vwPblPT!uBJRw=OndO<; z-=H6c6CPSjd3f$r??cY)*w->#0d~h(OWJc~+bjIcUbOGnzpwwz