OSDN Git Service

tablet detection: workaround for laptop touchpad
[mypaint-anime/master.git] / lib / scratchpad_palette.py
index af079f9..9535773 100644 (file)
@@ -4,7 +4,7 @@ import re, os
 
 from helpers import rgb_to_hsv, hsv_to_rgb
 
-def squiggle(off_x=0.0, off_y=0.0, scale=10.0):
+def squiggle(off_x=0.0, off_y=0.0, scale=20.0):
     events = []
     events.append((0.0, off_x, off_y, 0.0))
     events.append((0.008, off_x, off_y, 0.0))
@@ -19,6 +19,68 @@ def squiggle(off_x=0.0, off_y=0.0, scale=10.0):
     events.append((t, scale*(float(x))+off_x, scale*(float(y))+off_y, 0.0))
     return events
 
+def slash_squiggle(off_x = 0.0, off_y=0.0, scale = 20.0):
+    events = []
+    events.append((0.0, off_x, off_y, 0.0))
+    events.append((0.0, off_x, off_y, 1.0))
+    events.append((0.0, off_x+scale, off_y+scale, 1.0))
+    events.append((0.0, off_x, off_y, 0.0))
+    return events
+
+def box_squiggle(off_x = 0.0, off_y=0.0, scale = 20.0):
+    events = []
+    events.append((0.0, off_x, off_y, 0.0))
+    events.append((0.008, off_x+scale, off_y, 1.0))
+    events.append((0.016, off_x+scale, off_y+scale, 1.0))
+    events.append((0.024, off_x, off_y+scale, 1.0))
+    events.append((0.032, off_x, off_y, 1.0))
+    events.append((0.040, off_x, off_y, 0.0))
+    return events
+
+def hatch_squiggle(off_x = 0.0, off_y=0.0, scale = 20.0):
+    events = []
+    t=0.8
+    events.append((0.0, off_x, off_y, 0.0))
+    slice_width = scale / 3.0 
+    for u in xrange(3):
+        # Horizontal stripes
+        events.append((t, off_x, (u * slice_width) + off_y, 1.0))
+        t += 0.08
+        events.append((t, scale+off_x, (u * slice_width) + off_y, 1.0))
+        t += 0.08
+        events.append((t, scale+off_x, (u * slice_width) + off_y, 0.0))
+        t += 0.08
+        # vertical stripes
+        events.append((t, (u * slice_width) + off_x, off_y, 1.0))
+        t += 0.08
+        events.append((t, (u * slice_width) + off_x, scale + off_y, 1.0))
+        t += 0.08
+        events.append((t, (u * slice_width) + off_x, scale + off_y, 0.0))
+        t += 0.08
+    events.append((t, off_x, off_y, 0.0))
+    return events
+
+def draw_palette(app, palette, doc, columns=8, grid_size = 30.0, scale=13.0,
+                 offset_x = 0.0, offset_y = 0.0,
+                 swatch_method=squiggle):
+    # store the current brush colour:
+    brush_colour = app.brush.get_color_rgb()
+    off_y = offset_y
+    for colour_idx in xrange(len(palette)):
+        off_x = (colour_idx % columns) * grid_size + offset_x
+        if not (colour_idx % columns) and colour_idx:
+            off_y += grid_size
+        gen_events = swatch_method(off_x, off_y, scale=scale)
+        # Set the color
+        app.brush.set_color_rgb(palette.rgb(colour_idx))
+        # simulate strokes on scratchpad
+        for t, x, y, pressure in gen_events:
+            cr = doc.tdw.get_model_coordinates_cairo_context()
+            x, y = cr.device_to_user(x, y)
+            doc.model.stroke_to(0.008, x, y, pressure, 0.0, 0.0)
+        doc.model.split_stroke()
+    app.brush.set_color_rgb(brush_colour)
+
 class GimpPalette(list):
     # loads a given gimp palette and makes it queriable
     # Would 'save' functionality be useful at some stage?
@@ -86,3 +148,24 @@ class GimpPalette(list):
             return None  # should be Exception perhaps?
         else:
             return map(lambda x: x / 255.0, self[index])
+
+    def append_hsv(self, *hsvvals):
+        h,s,v = hsvvals
+        self.append(map(lambda x: int(x * 255), hsv_to_rgb(h,s,v)))
+
+    def append_rgb(self, *rgbvals):
+        self.append(map(lambda x: int(x * 255), rgbvals))
+
+    def append_hue_spectrum(self, rgbbase):
+        h,s,v = rgb_to_hsv(*rgbbase)
+        for hue_idx in xrange(20):
+            hue = (hue_idx*0.05)
+            self.append_hsv(hue, s,v)
+
+    def append_sat_spectrum(self, hsv, number=8):
+        h,s,v = hsv
+        step = 1.0 / float(number)
+        for sat_idx in xrange(number):
+            sat = (sat_idx*step)
+            self.append_hsv(h, sat, v)
+