aboutsummaryrefslogtreecommitdiff
path: root/pugl_cairo_test.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2019-07-23 19:24:39 +0200
committerDavid Robillard <d@drobilla.net>2019-07-23 20:29:21 +0200
commit41373723a1cea45f08d59830022404defbd43332 (patch)
treece38bc27611993104b6baf5460ed4f36d61e083b /pugl_cairo_test.c
parentface6b1766652f6cdfafafca49655f55875a2b3a (diff)
Test: Move test programs to a subdirectory
Diffstat (limited to 'pugl_cairo_test.c')
-rw-r--r--pugl_cairo_test.c206
1 files changed, 0 insertions, 206 deletions
diff --git a/pugl_cairo_test.c b/pugl_cairo_test.c
deleted file mode 100644
index 524e8b0..0000000
--- a/pugl_cairo_test.c
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- Copyright 2012-2019 David Robillard <http://drobilla.net>
-
- Permission to use, copy, modify, and/or distribute this software for any
- purpose with or without fee is hereby granted, provided that the above
- copyright notice and this permission notice appear in all copies.
-
- THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-*/
-
-/**
- @file pugl_cairo_test.c A simple Pugl test that creates a top-level window.
-*/
-
-#include "pugl/pugl.h"
-
-#include <cairo/cairo.h>
-
-#include <stdint.h>
-#include <stdio.h>
-#include <string.h>
-
-static int quit = 0;
-static bool entered = false;
-
-typedef struct {
- int x;
- int y;
- int w;
- int h;
- bool pressed;
- const char* label;
-} Button;
-
-static Button toggle_button = { 16, 16, 128, 64, false, "Test" };
-
-static void
-roundedBox(cairo_t* cr, double x, double y, double w, double h)
-{
- static const double radius = 10;
- static const double degrees = 3.14159265 / 180.0;
-
- cairo_new_sub_path(cr);
- cairo_arc(cr,
- x + w - radius,
- y + radius,
- radius, -90 * degrees, 0 * degrees);
- cairo_arc(cr,
- x + w - radius, y + h - radius,
- radius, 0 * degrees, 90 * degrees);
- cairo_arc(cr,
- x + radius, y + h - radius,
- radius, 90 * degrees, 180 * degrees);
- cairo_arc(cr,
- x + radius, y + radius,
- radius, 180 * degrees, 270 * degrees);
- cairo_close_path(cr);
-}
-
-static void
-buttonDraw(cairo_t* cr, const Button* but)
-{
- // Draw base
- if (but->pressed) {
- cairo_set_source_rgba(cr, 0.4, 0.9, 0.1, 1);
- } else {
- cairo_set_source_rgba(cr, 0.3, 0.5, 0.1, 1);
- }
- roundedBox(cr, but->x, but->y, but->w, but->h);
- cairo_fill_preserve(cr);
-
- // Draw border
- cairo_set_source_rgba(cr, 0.4, 0.9, 0.1, 1);
- cairo_set_line_width(cr, 4.0);
- cairo_stroke(cr);
-
- // Draw label
- cairo_text_extents_t extents;
- cairo_set_font_size(cr, 32.0);
- cairo_text_extents(cr, but->label, &extents);
- cairo_move_to(cr,
- (but->x + but->w / 2.0) - extents.width / 2,
- (but->y + but->h / 2.0) + extents.height / 2);
- cairo_set_source_rgba(cr, 0, 0, 0, 1);
- cairo_show_text(cr, but->label);
-}
-
-static bool
-buttonTouches(const Button* but, double x, double y)
-{
- return (x >= toggle_button.x && x <= toggle_button.x + toggle_button.w &&
- y >= toggle_button.y && y <= toggle_button.y + toggle_button.h);
-}
-
-static void
-onDisplay(PuglView* view)
-{
- cairo_t* cr = puglGetContext(view);
-
- // Draw background
- int width, height;
- puglGetSize(view, &width, &height);
- if (entered) {
- cairo_set_source_rgb(cr, 0.1, 0.1, 0.1);
- } else {
- cairo_set_source_rgb(cr, 0, 0, 0);
- }
- cairo_rectangle(cr, 0, 0, width, height);
- cairo_fill(cr);
-
- // Draw button
- buttonDraw(cr, &toggle_button);
-}
-
-static void
-onClose(PuglView* view)
-{
- quit = 1;
-}
-
-static void
-onEvent(PuglView* view, const PuglEvent* event)
-{
- switch (event->type) {
- case PUGL_KEY_PRESS:
- if (event->key.character == 'q' ||
- event->key.character == 'Q' ||
- event->key.character == PUGL_CHAR_ESCAPE) {
- quit = 1;
- }
- break;
- case PUGL_BUTTON_PRESS:
- if (buttonTouches(&toggle_button, event->button.x, event->button.y)) {
- toggle_button.pressed = !toggle_button.pressed;
- puglPostRedisplay(view);
- }
- break;
- case PUGL_ENTER_NOTIFY:
- entered = true;
- puglPostRedisplay(view);
- break;
- case PUGL_LEAVE_NOTIFY:
- entered = false;
- puglPostRedisplay(view);
- break;
- case PUGL_EXPOSE:
- onDisplay(view);
- break;
- case PUGL_CLOSE:
- onClose(view);
- break;
- default: break;
- }
-}
-
-int
-main(int argc, char** argv)
-{
- bool ignoreKeyRepeat = false;
- bool resizable = false;
- for (int i = 1; i < argc; ++i) {
- if (!strcmp(argv[i], "-h")) {
- printf("USAGE: %s [OPTIONS]...\n\n"
- " -h Display this help\n"
- " -i Ignore key repeat\n"
- " -r Resizable window\n", argv[0]);
- return 0;
- } else if (!strcmp(argv[i], "-i")) {
- ignoreKeyRepeat = true;
- } else if (!strcmp(argv[i], "-r")) {
- resizable = true;
- } else {
- fprintf(stderr, "Unknown option: %s\n", argv[i]);
- }
- }
-
- PuglView* view = puglInit(NULL, NULL);
- puglInitWindowClass(view, "PuglCairoTest");
- puglInitWindowSize(view, 512, 512);
- puglInitWindowMinSize(view, 256, 256);
- puglInitResizable(view, resizable);
- puglInitContextType(view, PUGL_CAIRO);
-
- puglIgnoreKeyRepeat(view, ignoreKeyRepeat);
- puglSetEventFunc(view, onEvent);
-
- if (puglCreateWindow(view, "Pugl Test")) {
- return 1;
- }
-
- puglShowWindow(view);
-
- while (!quit) {
- puglWaitForEvent(view);
- puglProcessEvents(view);
- }
-
- puglDestroy(view);
- return 0;
-}