From 6b217d8c62b75491576682f998acf07af45bcb86 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sat, 17 Aug 2013 23:52:09 -0400 Subject: Create color module. --- 2d/color.scm | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 2d/color.scm diff --git a/2d/color.scm b/2d/color.scm new file mode 100644 index 0000000..2e7cba9 --- /dev/null +++ b/2d/color.scm @@ -0,0 +1,87 @@ +;;; guile-2d +;;; Copyright (C) 2013 David Thompson +;;; +;;; Guile-2d is free software: you can redistribute it and/or modify it +;;; under the terms of the GNU Lesser General Public License as +;;; published by the Free Software Foundation, either version 3 of the +;;; License, or (at your option) any later version. +;;; +;;; Guile-2d is distributed in the hope that it will be useful, but +;;; WITHOUT ANY WARRANTY; without even the implied warranty of +;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;;; Lesser General Public License for more details. +;;; +;;; You should have received a copy of the GNU Lesser General Public +;;; License along with this program. If not, see +;;; . + +;;; Commentary: +;; +;; Color. +;; +;;; Code: + +(define-module (2d color) + #:use-module (figl gl) + #:use-module (srfi srfi-9) + #:use-module (srfi srfi-1) + #:export ( + make-color + color? + color-r + color-g + color-b + color-a + apply-color + rgba + rgb + white + black + red + green + blue + magenta)) + +(define-record-type + (make-color r g b a) + color? + (r color-r) + (g color-g) + (b color-b) + (a color-a)) + +(define (apply-color color) + (gl-color (color-r color) + (color-g color) + (color-b color) + (color-a color))) + +(define (color-component color-code offset) + (let ((mask (ash #xff offset))) + (/ (ash (logand mask color-code) + (- offset)) + 255.0))) + +(define (rgba color-code) + "Translates an RGBA format color code into a color object. For +example: #xffffffff will return a color with RGBA values 1, 1, 1, 1." + (make-color (color-component color-code 24) + (color-component color-code 16) + (color-component color-code 8) + (color-component color-code 0))) + +(define (rgb color-code) + "Translates an RGB format color code into a color object. For +example: #xffffff will return a color with RGBA values 1, 1, 1, 1." + (make-color (color-component color-code 16) + (color-component color-code 8) + (color-component color-code 0) + 1)) + +;; Pre-defined colors. +(define white (rgb #xffffff)) +(define black (rgb #x000000)) +(define red (rgb #xff0000)) +(define green (rgb #x00ff00)) +(define blue (rgb #x0000ff)) +(define magenta (rgb #xff00ff)) -- cgit v1.2.3