summaryrefslogtreecommitdiff
path: root/fdlogo.c
diff options
context:
space:
mode:
Diffstat (limited to 'fdlogo.c')
-rw-r--r--fdlogo.c173
1 files changed, 173 insertions, 0 deletions
diff --git a/fdlogo.c b/fdlogo.c
new file mode 100644
index 0000000..d758376
--- /dev/null
+++ b/fdlogo.c
@@ -0,0 +1,173 @@
+/*
+ * $Id$
+ *
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, 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.
+ */
+
+#include "fdlogo.h"
+
+static void
+draw_boundary (cairo_t *cr)
+{
+ cairo_move_to (cr, 63.000, 36.000);
+
+ cairo_curve_to (cr, 63.000, 43.000,
+ 58.000, 47.000,
+ 51.000, 47.000);
+
+ cairo_line_to (cr, 13.000, 47.000);
+
+ cairo_curve_to (cr, 6.000, 47.000,
+ 1.000, 43.000,
+ 1.000, 36.000);
+
+ cairo_line_to (cr, 1.000, 12.000);
+
+ cairo_curve_to (cr, 1.000, 5.000,
+ 6.000, 1.000,
+ 13.000, 1.000);
+
+ cairo_line_to (cr, 51.000, 1.000);
+
+ cairo_curve_to (cr, 58.000, 1.000,
+ 63.000, 5.000,
+ 63.000, 12.000);
+ cairo_close_path (cr);
+}
+
+static void
+draw_outline (cairo_t *cr)
+{
+ cairo_set_rgb_color (cr, 0.73, 0.73, 0.73);
+ cairo_set_line_width (cr, 2);
+ draw_boundary (cr);
+ cairo_stroke (cr);
+}
+
+static void
+draw_background (cairo_t *cr)
+{
+ cairo_save (cr);
+ cairo_set_rgb_color (cr, 0.231, 0.502, 0.682);
+ cairo_translate (cr, 3.5, 3.5);
+ cairo_scale (cr, 0.887, 0.848);
+ draw_boundary (cr);
+ cairo_fill (cr);
+ cairo_restore (cr);
+}
+
+static void
+draw_window (cairo_t *cr)
+{
+ cairo_move_to (cr, -6.00, -7.125);
+
+ cairo_line_to (cr, 6.00, -7.125);
+
+ cairo_curve_to (cr, 8.00, -7.125,
+ 9.00, -6.125,
+ 9.00, -4.125);
+
+ cairo_line_to (cr, 9.00, 4.125);
+
+ cairo_curve_to (cr, 9.00, 6.125,
+ 8.00, 7.125,
+ 6.00, 7.125);
+
+ cairo_line_to (cr, -6.00, 7.125);
+
+ cairo_curve_to (cr, -8.00, 7.125,
+ -9.00, 6.125,
+ -9.00, 4.125);
+
+ cairo_line_to (cr, -9.00, -4.125);
+
+ cairo_curve_to (cr, -9.00, -6.125,
+ -8.00, -7.125,
+ -6.00, -7.125);
+ cairo_close_path (cr);
+}
+
+static void
+draw_window_at (cairo_t *cr, double x, double y, double scale)
+{
+ cairo_save (cr);
+ {
+ cairo_translate (cr, x, y);
+ cairo_scale (cr, scale, scale);
+ draw_window (cr);
+ cairo_save (cr);
+ {
+ cairo_set_rgb_color (cr, 1, 1, 1);
+ cairo_fill (cr);
+ }
+ cairo_restore (cr);
+ cairo_set_rgb_color (cr, 0.231, 0.502, 0.682);
+ cairo_scale (cr, 1/scale, 1/scale);
+ cairo_stroke (cr);
+ }
+ cairo_restore (cr);
+}
+
+void
+draw_windows (cairo_t *cr)
+{
+ cairo_save (cr);
+ {
+ cairo_move_to (cr, 18.00, 16.125);
+ cairo_line_to (cr, 48.25, 20.375);
+ cairo_line_to (cr, 30.25, 35.825);
+ cairo_close_path (cr);
+ cairo_set_rgb_color (cr, 1, 1, 1);
+ cairo_set_alpha (cr, 0.5);
+ cairo_stroke (cr);
+ }
+ cairo_restore (cr);
+ draw_window_at (cr, 18.00, 16.125, 1);
+ draw_window_at (cr, 48.25, 20.375, 0.8);
+ draw_window_at (cr, 30.25, 35.825, 0.5);
+}
+
+#define FDLOGO_ROT_X_FACTOR 1.086
+#define FDLOGO_ROT_Y_FACTOR 1.213
+#define FDLOGO_WIDTH (64 * FDLOGO_ROT_X_FACTOR)
+#define FDLOGO_HEIGHT (48 * FDLOGO_ROT_Y_FACTOR)
+
+void
+fdlogo_draw (cairo_t *cr, double width, double height)
+{
+ double x_scale, y_scale, scale, x_off, y_off;
+ cairo_save (cr);
+ x_scale = width / FDLOGO_WIDTH;
+ y_scale = height / FDLOGO_HEIGHT;
+ scale = x_scale < y_scale ? x_scale : y_scale;
+ x_off = (width - (scale * FDLOGO_WIDTH)) / 2;
+ y_off = (height - (scale * FDLOGO_HEIGHT)) / 2;
+ cairo_translate (cr, x_off, y_off);
+ cairo_scale (cr, scale, scale);
+
+ cairo_translate (cr, -2.5, 14.75);
+ cairo_rotate (cr, -0.274990703529840);
+
+ draw_outline (cr);
+ draw_background (cr);
+ draw_windows (cr);
+ cairo_restore (cr);
+}