diff options
Diffstat (limited to 'examples/pugl_cairo_demo.c')
-rw-r--r-- | examples/pugl_cairo_demo.c | 60 |
1 files changed, 28 insertions, 32 deletions
diff --git a/examples/pugl_cairo_demo.c b/examples/pugl_cairo_demo.c index 2859ff0..109149d 100644 --- a/examples/pugl_cairo_demo.c +++ b/examples/pugl_cairo_demo.c @@ -2,10 +2,11 @@ // SPDX-License-Identifier: ISC #include "demo_utils.h" -#include "test/test_utils.h" -#include "pugl/cairo.h" -#include "pugl/pugl.h" +#include <puglutil/test_utils.h> + +#include <pugl/cairo.h> +#include <pugl/pugl.h> #include <cairo.h> @@ -49,9 +50,9 @@ static const Button buttons[] = {{128, 128, 64, 64, "1"}, static ViewScale getScale(const PuglView* const view) { - const PuglRect frame = puglGetFrame(view); - const ViewScale scale = {(frame.width - (512.0 / frame.width)) / 512.0, - (frame.height - (512.0 / frame.height)) / 512.0}; + const PuglArea size = puglGetSizeHint(view, PUGL_CURRENT_SIZE); + const ViewScale scale = {(size.width - (512.0 / size.width)) / 512.0, + (size.height - (512.0 / size.height)) / 512.0}; return scale; } @@ -100,8 +101,8 @@ buttonDraw(PuglTestApp* app, cairo_t* cr, const Button* but, const double time) cairo_set_font_size(cr, 32.0); cairo_text_extents(cr, but->label, &extents); cairo_move_to(cr, - (but->w / 2.0) - extents.width / 2, - (but->h / 2.0) + extents.height / 2); + (but->w / 2.0) - (extents.width / 2), + (but->h / 2.0) + (extents.height / 2)); cairo_set_source_rgba(cr, 0, 0, 0, 1); cairo_show_text(cr, but->label); @@ -114,13 +115,12 @@ postButtonRedisplay(PuglView* view) const ViewScale scale = getScale(view); for (const Button* b = buttons; b->label; ++b) { - const double span = sqrt(b->w * b->w + b->h * b->h); - const PuglRect rect = {(PuglCoord)((b->x - span) * scale.x), - (PuglCoord)((b->y - span) * scale.y), - (PuglSpan)ceil(span * 2.0 * scale.x), - (PuglSpan)ceil(span * 2.0 * scale.y)}; - - puglPostRedisplayRect(view, rect); + const double span = sqrt((b->w * b->w) + (b->h * b->h)); + puglObscureRegion(view, + (int)((b->x - span) * scale.x), + (int)((b->y - span) * scale.y), + (unsigned)ceil(span * 2.0 * scale.x), + (unsigned)ceil(span * 2.0 * scale.y)); } } @@ -172,18 +172,17 @@ onClose(PuglView* view) app->quit = 1; } -static PuglRect -mouseCursorViewBounds(const PuglView* const view, - const double mouseX, - const double mouseY) +static PuglStatus +obscureMouseCursor(PuglView* const view, + const ViewScale scale, + const double mouseX, + const double mouseY) { - const ViewScale scale = getScale(view); - const PuglRect rect = {(PuglCoord)floor(mouseX - (10.0 * scale.x)), - (PuglCoord)floor(mouseY - (10.0 * scale.y)), - (PuglSpan)ceil(20.0 * scale.x), - (PuglSpan)ceil(20.0 * scale.y)}; - - return rect; + return puglObscureRegion(view, + (int)floor(mouseX - (10.0 * scale.x)), + (int)floor(mouseY - (10.0 * scale.y)), + (unsigned)ceil(20.0 * scale.x), + (unsigned)ceil(20.0 * scale.y)); } static PuglStatus @@ -193,6 +192,7 @@ onEvent(PuglView* view, const PuglEvent* event) printEvent(event, "Event: ", app->opts.verbose); + const ViewScale scale = getScale(view); switch (event->type) { case PUGL_KEY_PRESS: if (event->key.key == 'q' || event->key.key == PUGL_KEY_ESCAPE) { @@ -209,16 +209,12 @@ onEvent(PuglView* view, const PuglEvent* event) break; case PUGL_MOTION: // Redisplay to clear the old cursor position - puglPostRedisplayRect( - view, - mouseCursorViewBounds(view, app->lastDrawnMouseX, app->lastDrawnMouseY)); + obscureMouseCursor(view, scale, app->lastDrawnMouseX, app->lastDrawnMouseY); // Redisplay to show the new cursor position app->currentMouseX = event->motion.x; app->currentMouseY = event->motion.y; - puglPostRedisplayRect( - view, - mouseCursorViewBounds(view, app->currentMouseX, app->currentMouseY)); + obscureMouseCursor(view, scale, app->currentMouseX, app->currentMouseY); app->lastDrawnMouseX = app->currentMouseX; app->lastDrawnMouseY = app->currentMouseY; |