aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Magahern <james@magahern.com>2019-01-16 11:23:06 -0800
committerJames Magahern <james@magahern.com>2019-01-16 11:23:06 -0800
commit8e568bb96850b4ed5288c91b50dbaa41e206223b (patch)
tree8e14bc3f058b9ea5d60d986a78b4c0137a13348e
parentSome organization and fading cursor (diff)
Logo via SVG!
-rwxr-xr-xbuild.sh5
-rw-r--r--buzzsaver.c31
-rw-r--r--logo.svg41
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>