1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
QuartzComposerView : View {
var <path, <inputKeys, <outputKeys;
*qtClass { ^'QcQuartzComposerView' }
start{
this.invokeMethod(\startRendering)
}
stop{
this.setProperty(\stopRendering);
}
path_{|argpath|
path = argpath;
this.invokeMethod(\loadCompositionFromFile, path);
inputKeys = this.getProperty(\inputKeys).collect(_.asSymbol);
outputKeys = this.getProperty(\outputKeys).collect(_.asSymbol);
}
openInQC{ ("open" + path.quote + "-a 'Quartz Composer'").unixCmd }
setInputValue{|key, value|
_QQuartzComposer_SetInputPort
^this.primitiveFailed;
}
getInputValue{|key|
_QQuartzComposer_GetInputPort
^this.primitiveFailed;
}
getOutputValue{|key|
_QQuartzComposer_GetOutputPort
^this.primitiveFailed;
}
maxFPS_{|rate|
this.invokeMethod(\setMaxRenderingFrameRate, rate.asFloat);
}
// check if the method corresponds to a port key
// if not call super
doesNotUnderstand { arg selector ... args;
if(selector.isSetter && inputKeys.includes(selector.asGetter), {
this.setInputValue(selector.asGetter, *args); ^this;},
{
if(outputKeys.includes(selector), {^this.getOutputValue(selector)}, {
if(inputKeys.includes(selector), {^this.getInputValue(selector)})
})
}
);
super.doesNotUnderstand(selector, *args);
}
}
|