From 8e568bb96850b4ed5288c91b50dbaa41e206223b Mon Sep 17 00:00:00 2001 From: James Magahern Date: Wed, 16 Jan 2019 11:23:06 -0800 Subject: Logo via SVG! --- build.sh | 5 +++++ buzzsaver.c | 31 +++++++++++++++++++++++++++++++ logo.svg | 41 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+) create mode 100755 build.sh create mode 100644 logo.svg diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..691ac2a --- /dev/null +++ b/build.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +# TODO: Makefile? This will end up in the xsecurelock project anyway... +clang $(pkg-config --libs --cflags x11 cairo librsvg-2.0) -o buzzsaver buzzsaver.c + diff --git a/buzzsaver.c b/buzzsaver.c index 163c95e..94f08db 100644 --- a/buzzsaver.c +++ b/buzzsaver.c @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -23,6 +24,8 @@ static const double kLogoBackgroundWidth = 300.0; typedef struct { cairo_t *ctx; + RsvgHandle *logo_svg_handle; + double cursor_opacity; double cursor_fade_direction; } saver_state_t; @@ -61,10 +64,38 @@ int poll_events(Display *display, Window window) void draw_logo(saver_state_t *state) { + if (state->logo_svg_handle == NULL) { + GError *error = NULL; + state->logo_svg_handle = rsvg_handle_new_from_file("logo.svg", &error); + if (error != NULL) { + fprintf(stderr, "Error loading logo SVG\n"); + } + } + cairo_t *cr = state->ctx; + + cairo_save(cr); cairo_set_source_rgb(cr, (208.0 / 255.0), (69.0 / 255.0), (255.0 / 255.0)); cairo_rectangle(cr, 0, 0, kLogoBackgroundWidth, __height); cairo_fill(cr); + + cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); + + // Scale and draw logo + RsvgDimensionData dimensions; + rsvg_handle_get_dimensions(state->logo_svg_handle, &dimensions); + + const double padding = 10.0; + double scale_factor = ((kLogoBackgroundWidth - (padding * 2.0)) / dimensions.width); + cairo_scale(cr, scale_factor, scale_factor); + + double scaled_height = (dimensions.height * scale_factor); + double y_position = (__height - scaled_height) / 2.0; + + cairo_translate(cr, padding, y_position); + rsvg_handle_render_cairo(state->logo_svg_handle, cr); + + cairo_restore(cr); } void draw_password_field(saver_state_t *state) diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..27ef712 --- /dev/null +++ b/logo.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3