diff options
author | James Magahern <james@magahern.com> | 2019-01-16 11:23:06 -0800 |
---|---|---|
committer | James Magahern <james@magahern.com> | 2019-01-16 11:23:06 -0800 |
commit | 8e568bb96850b4ed5288c91b50dbaa41e206223b (patch) | |
tree | 8e14bc3f058b9ea5d60d986a78b4c0137a13348e | |
parent | Some organization and fading cursor (diff) |
Logo via SVG!
-rwxr-xr-x | build.sh | 5 | ||||
-rw-r--r-- | buzzsaver.c | 31 | ||||
-rw-r--r-- | logo.svg | 41 |
3 files changed, 77 insertions, 0 deletions
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 <cairo/cairo.h> #include <cairo-xlib.h> +#include <librsvg/rsvg.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> @@ -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 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="348.316" height="228.437" viewBox="0 0 348.316 228.437"> + <metadata><?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> +<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c138 79.159824, 2016/09/14-01:09:01 "> + <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> + <rdf:Description rdf:about=""/> + </rdf:RDF> +</x:xmpmeta> + + + + + + + + + + + + + + + + + + + + + +<?xpacket end="w"?></metadata> +<defs> + <style> + .cls-1 { + fill: none; + stroke: #000; + stroke-width: 10.84px; + fill-rule: evenodd; + } + </style> + </defs> + <path id="logo" class="cls-1" d="M698,526l52.881-111.9h55.875l52.881-111.9L806.756,414.1h55.875l17.627-37.3-17.627,37.3h55.875l17.627-37.3-17.627,37.3h55.875l45.569-37.3,16.2,64.24" transform="translate(-693.094 -299.875)"/> +</svg> |