processing

The *.pde files get pre-processed to java before compiling, allowing you to write this:-

color c2 = #FFCC00; // this gets pre-processed to `int c2 = 0xffFFCC00`

This is yet another vanilla processing convention that you must learn to get around once you leave the processing ide.

propane / JRubyArt

in ruby we instead support use of quoted web-string (string is at least a valid type in ruby and java)

c2 = color('#FFCC00') # we return a signed java int, note quoted string

For propane we enable a convenience method color (based on processing PGraphics color), and for the most part this method behaves as the processing color method (but it is implemented differently under the hood to work with ruby Numeric/Fixnum). Basically the input can be an Array of Fixnum (approximating to a processing int) an Array of Float (approximating to processing float) or a special hexadecimal string or a hexadecimal number. See / try example sketch.


#!/usr/bin/env jruby -w
# frozen_string_literal: true
# Creating Colors (Homage to Albers).
#
require 'propane'

# Creating variables for colors that may be referred to
# in the program by their name, rather than a number.
class CreatingColors < Propane::App
  attr_reader :redder, :yellower, :orangish
  WEB = %w(#CC6600 #CC9900 #993300)

  def settings
    size 640, 360
  end  

  def setup
    sketch_title 'Homage to Albers'
    palette = web_to_color_array(WEB)
    @redder = palette[0]
    @yellower = palette[1]
    @orangish = palette[2]
    # These statements are equivalent to the statements above.
    # Programmers may use the format they prefer.

    # hex color as a String (NB quotes are required)
    @redder = palette[0]
    @yellower = palette[1]
    @orangish = palette[2]

    # @redder = color '#CC6600'
    # @yellower = color '#CC9900'
    # @orangish = color '#993300'

    # or alternatively as a hexadecimal

    # @redder = color 0xFFCC6600
    # @yellower = color 0xFFCC9900
    # @orangish = color 0xFF993300
    puts int_to_ruby_colors(palette)
  end

  def draw
    no_stroke
    background 51, 0, 0
    push_matrix
    translate 80, 80
    fill orangish
    rect 0, 0, 200, 200
    fill yellower
    rect 40, 60, 120, 120
    fill redder
    rect 60, 90, 80, 80
    pop_matrix
    push_matrix
    translate 360, 80
    fill redder
    rect 0, 0, 200, 200
    fill orangish
    rect 40, 60, 120, 120
    fill yellower
    rect 60, 90, 80, 80
    pop_matrix
  end
end

Making Necessity into a Virtue

Many vanilla processing libraries (eg Hype, Wordcram and ColorHarmony) make use of the vanilla processing conventions to define web colors. But we have gone one better in JRubyArt and propane to use ruby to quickly create arrays of web color and even dictionaries of web colors. Now such lists would be useless unless we could convert the web colors to valid color int for use in processing as we have with the web_to_color_array method.

WEB = %w(#CC6600 #CC9900 #FFFFFF).freeze
web_to_color_array(WEB)
# output = [-3381760, -3368704, -1]

For creation and use of a hash / dictionary of web colors see this Wordcram sketch. If you need to convert an array of color int (say from ColorHarmony) to ruby string, then use p52ruby method that returns a web string of the form ‘%w(#CC6600 #CC9900 #FFFFFF)’ from [-3381760, -3368704, -1]. Or if you are more sophisticated and using the toxiclibs gem to explore color theory, we have created a method to_ruby_string for the ColorList class see palette genertor example