Code

option to choose (r,g,b) color scale (Bug 186432)
authorAlvin Penner <penner@vaxxine.com>
Sun, 26 Sep 2010 21:38:46 +0000 (17:38 -0400)
committerAlvin Penner <penner@vaxxine.com>
Sun, 26 Sep 2010 21:38:46 +0000 (17:38 -0400)
share/extensions/color_custom.inx
share/extensions/color_custom.py

index bb37f62ff4cfb1051ae9b2046dfd0c86247ad2bc..9cecbab1ab982110519b367e6bf260bbed6cabf2 100644 (file)
@@ -6,21 +6,25 @@
        <dependency type="executable" location="extensions">color_custom.py</dependency>
        <dependency type="executable" location="extensions">simplestyle.py</dependency>
        <param name="tab" type="notebook">
-        <page name="Options" _gui-text="Options">
-               <param name="r" type="string" _gui-text="Red Function:" _gui-description="Function applied to the red channel">r</param>
-               <param name="g" type="string" _gui-text="Green Function:" _gui-description="Function applied to the green channel">g</param>
-               <param name="b" type="string" _gui-text="Blue Function:" _gui-description="Function applied to the blue channel">b</param>
-        </page>
-        <page name="Help" _gui-text="Help">
-            <_param name="instructions" type="description" xml:space="preserve">Allows you to evaluate different functions for each channel.
+               <page name="Options" _gui-text="Options">
+                       <param name="r" type="string" _gui-text="Red Function:">r</param>
+                       <param name="g" type="string" _gui-text="Green Function:">g</param>
+                       <param name="b" type="string" _gui-text="Blue Function:">b</param>
+                       <param name="scale" type="optiongroup" _gui-text="Input (r,g,b) Color Range">
+                               <option value="1">0 - 1</option>
+                               <option value="255">0 - 255</option>
+                       </param>
+               </page>
+               <page name="Help" _gui-text="Help">
+                       <_param name="instructions" type="description" xml:space="preserve">Allows you to evaluate different functions for each channel.
 r, g and b are the normalized values of the red, green and blue channels. The resulting RGB values are automatically clamped.
  
 Example (half the red, swap green and blue):
   Red Function: r*0.5 
   Green Function: b 
   Blue Function: g</_param>
-        </page>
-    </param>    
+               </page>
+       </param>
        <effect>
                <object-type>all</object-type>
                <effects-menu>
index a90102d0f4094e4d5d58cb3eafbecad6388f7294..3eefc3f558a6d869e90e546e13f0a7024d349f53 100644 (file)
@@ -20,22 +20,27 @@ class C(coloreffect.ColorEffect):
             action="store", type="string",
             dest="tab",
             help="The selected UI-tab when OK was pressed")
+        self.OptionParser.add_option("--scale",
+            action="store", type="string",
+            dest="scale",
+            help="The input (r,g,b) range")
 
     def normalize(self, v):
         if v<0:
             return 0.0
-        if v>1:
-            return 1.0
+        if v > float(self.options.scale):
+            return float(self.options.scale)
         return v
 
     def _hexstr(self,r,g,b):
-        return '%02x%02x%02x' % (int(round(r*255)),int(round(g*255)),int(round(b*255)))
-      
+        return '%02x%02x%02x' % (int(round(r)),int(round(g)),int(round(b)))
+
     def colmod(self,_r,_g,_b):
-        r=float(_r)/255
-        g=float(_g)/255
-        b=float(_b)/255
-        
+        factor = 255.0/float(self.options.scale)
+        r=float(_r)/factor
+        g=float(_g)/factor
+        b=float(_b)/factor
+
         # add stuff to be accessible from within the custom color function here.
         safeenv = {'__builtins__':{},'r':r,'g':g,'b':b}
 
@@ -44,8 +49,8 @@ class C(coloreffect.ColorEffect):
             g2=self.normalize(eval(self.options.gFunction,safeenv))
             b2=self.normalize(eval(self.options.bFunction,safeenv))
         except:
-            return self._hexstr(1.0,0.0,0.0)
-        return self._hexstr(r2,g2,b2)
+            return self._hexstr(255.0,0.0,0.0)
+        return self._hexstr(r2*factor,g2*factor,b2*factor)
 
 c = C()
 c.affect()