Browse Source

Ready. Set. Go!

rexim 6 years ago
commit
80f8313d54
5 changed files with 72 additions and 0 deletions
  1. 12 0
      TODO.org
  2. 2 0
      cairo-probe/.gitignore
  3. 7 0
      cairo-probe/Makefile
  4. 10 0
      cairo-probe/default.nix
  5. 41 0
      cairo-probe/main.c

+ 12 - 0
TODO.org

@@ -0,0 +1,12 @@
+- [-] Vector Graphics
+  - [X] cairo
+    - [X] [[https://www.cairographics.org/][cairographics.org]]
+      - [X] bezier curve
+        - [X] They work quite well
+  - [ ] 
+- [ ] Fast feedback loop preview
+  - [ ] SDL
+    - [ ] [[https://www.libsdl.org/download-2.0.php][Simple DirectMedia Layer - SDL version 2.0.9 (stable)]]
+- [ ] Functional Programming
+- [ ] Static typing
+- [ ] Quick video rendering

+ 2 - 0
cairo-probe/.gitignore

@@ -0,0 +1,2 @@
+cairo-probe
+hello.png

+ 7 - 0
cairo-probe/Makefile

@@ -0,0 +1,7 @@
+hello.png: cairo-probe
+	./cairo-probe
+
+cairo-probe: main.c
+	gcc -Wall -Werror $(shell pkg-config --cflags cairo) \
+		-o cairo-probe main.c \
+		$(shell pkg-config --libs cairo)

+ 10 - 0
cairo-probe/default.nix

@@ -0,0 +1,10 @@
+with import <nixpkgs> {}; {
+    cairoprobeEnv = stdenv.mkDerivation {
+        name = "cairoprobe-env";
+        buildInputs = [ stdenv
+                        gcc
+                        pkgconfig
+                        cairo
+                      ];
+    };
+}

+ 41 - 0
cairo-probe/main.c

@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <cairo.h>
+
+#define SCREEN_WIDTH 240
+#define SCREEN_HEIGHT 80
+
+int main(int argc, char *argv[])
+{
+    cairo_surface_t *surface =
+        cairo_image_surface_create(
+            CAIRO_FORMAT_ARGB32,
+            SCREEN_WIDTH,
+            SCREEN_HEIGHT);
+    cairo_t *cr = cairo_create(surface);
+
+    cairo_select_font_face(
+
+        cr, "serif",
+        CAIRO_FONT_SLANT_NORMAL,
+        CAIRO_FONT_WEIGHT_BOLD);
+    cairo_set_font_size(cr, 32.0);
+    cairo_set_source_rgb(cr, 0.0, 1.0, 1.0);
+    cairo_move_to(cr, 10.0, 50.0);
+    cairo_show_text(cr, "4HEad");
+
+    cairo_set_source_rgbz(cr, 1.0, 0.0, 0.0);
+    cairo_move_to(cr, 0.0, 0.0);
+    cairo_curve_to(cr, 0.0, SCREEN_HEIGHT,
+                   SCREEN_WIDTH, SCREEN_HEIGHT,
+                   SCREEN_WIDTH, 0.0);
+    cairo_set_line_width(cr, 5);
+    cairo_stroke(cr);
+
+    cairo_destroy(cr);
+    cairo_surface_write_to_png(surface, "hello.png");
+    cairo_surface_destroy(surface);
+
+    return 0;
+}