diff options
author | David Robillard <d@drobilla.net> | 2019-07-23 19:24:39 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2019-07-23 20:29:21 +0200 |
commit | 41373723a1cea45f08d59830022404defbd43332 (patch) | |
tree | ce38bc27611993104b6baf5460ed4f36d61e083b /pugl_cairo_test.c | |
parent | face6b1766652f6cdfafafca49655f55875a2b3a (diff) | |
download | pugl-41373723a1cea45f08d59830022404defbd43332.tar.gz pugl-41373723a1cea45f08d59830022404defbd43332.tar.bz2 pugl-41373723a1cea45f08d59830022404defbd43332.zip |
Test: Move test programs to a subdirectory
Diffstat (limited to 'pugl_cairo_test.c')
-rw-r--r-- | pugl_cairo_test.c | 206 |
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; -} |