View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide

Color-addons

Home   How To   Code Pool   Public Library   Theory   Events
+ Color {
	test {|bounds(Rect(30,300, 100, 30))|
		var window;
		var extent = bounds.extent.asArray;
		window = GUI.window.new("ColorTest", bounds, false);
		window.drawHook = {
			3.do{|i|
				GUI.pen.color = Color.gray(i * 0.5);
				GUI.pen.fillRect(Rect.fromArray([i*(extent.first/3),0] ++ (extent * [1/3, 1])));
			};
			GUI.pen.color = this;
			GUI.pen.fillRect(Rect.fromArray(extent*0.1 ++ extent * 0.8));
			window.front;
		}
	}
	autoTest {|bounds(Rect(30,300, 100, 30)), dt = 0.5, fullScreen = false|
		var window, border = true;
		var extent;
		bounds = fullScreen.if({
			border = false;
			GUI.window.screenBounds;
		}, {
			bounds;
		});
		extent = bounds.extent.asArray;
		window = GUI.window.new("ColorTest", bounds, false, border);
		window.drawHook = {
			3.do{|i|
				GUI.pen.color = Color.gray(i * 0.5);
				GUI.pen.fillRect(Rect.fromArray([i*(extent.first/3),0] ++ (extent * [1/3, 1])));
			};
			GUI.pen.color = this;
			GUI.pen.fillRect(Rect.fromArray(extent*0.1 ++ extent * 0.8));
			window.front;
			fullScreen.if{window.fullScreen};
			{window.close}.defer(dt);
		}
	}
	
	
	// math support
	+ { arg aNumber, adverb; ^aNumber.performBinaryOpOnColor('+', this, adverb) }
	- { arg aNumber, adverb; ^aNumber.performBinaryOpOnColor('-', this, adverb) }
	* { arg aNumber, adverb; ^aNumber.performBinaryOpOnColor('*', this, adverb) }
	/ { arg aNumber, adverb; ^aNumber.performBinaryOpOnColor('/', this, adverb) }
	
	
	
	performBinaryOpOnSeqColl { arg aSelector, anArray; 
		^this.performBinaryOpOnColor(aSelector, this.class.fromArray(anArray))
	}
	performBinaryOpOnSimpleNumber { arg aSelector, aNumber; 
		^this.class.fromArray(this.asArray.collect({ arg item; 
			aNumber.perform(aSelector, item)
		})) 
	}
	performBinaryOpOnColor {|aSelector, aColor|
		var that = aColor.asArray;
		^this.class.fromArray(this.asArray.collect({ arg item, i; 
			that[i].perform(aSelector, item)
		})) 
	}
	
	multiply { arg that, opacity=1.0;
		^this.blend(this * that, opacity)
	}
	divide { arg that, opacity=1.0;
		^this.blend(this / that, opacity)
	}
	subtract { arg that, opacity=1.0;
		^this.blend(this - that, opacity)
	}
	add { arg that, opacity=1.0;
		^this.blend(this + that, opacity)
	}

}


+ Object {
	performBinaryOpOnColor {|aSelector, aColor|
		^Color.fromArray(this.performBinaryOpOnSeqColl(aSelector, aColor.asArray))
	}
}


LFSaw.de

Link to this Page