aboutsummaryrefslogtreecommitdiffstats
path: root/examples/pugl_cairo_demo.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/pugl_cairo_demo.c')
-rw-r--r--examples/pugl_cairo_demo.c66
1 files changed, 31 insertions, 35 deletions
diff --git a/examples/pugl_cairo_demo.c b/examples/pugl_cairo_demo.c
index 6608bab..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,31 +209,27 @@ 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;
break;
case PUGL_POINTER_IN:
app->entered = true;
- puglPostRedisplay(view);
+ puglObscureView(view);
break;
case PUGL_POINTER_OUT:
app->entered = false;
- puglPostRedisplay(view);
+ puglObscureView(view);
break;
case PUGL_UPDATE:
if (app->opts.continuous) {
- puglPostRedisplay(view);
+ puglObscureView(view);
}
break;
case PUGL_EXPOSE: