[gcompris: 71/111] color_mix activity



commit a3c91259c8d16ab4be85eb280bc756e07a449430
Author: serah <serah4291 gmail com>
Date:   Sat Aug 11 03:01:53 2012 +0530

    color_mix activity

 src/color_mix-activity/.gitignore                  |    1 +
 src/color_mix-activity/Makefile.am                 |   34 +++
 src/color_mix-activity/color_mix.py                |  295 ++++++++++++++++++++
 src/color_mix-activity/color_mix.svg               |   59 ++++
 src/color_mix-activity/color_mix.xml.in            |   22 ++
 src/color_mix-activity/gcompris                    |    1 +
 src/color_mix-activity/init_path.sh                |    8 +
 src/color_mix-activity/resources/Makefile.am       |    2 +
 .../resources/color_mix/Makefile.am                |    9 +
 .../resources/color_mix/background.jpg             |  Bin 0 -> 74754 bytes
 .../resources/color_mix/cyan_tube.png              |  Bin 0 -> 27128 bytes
 .../resources/color_mix/magenta_tube.png           |  Bin 0 -> 11040 bytes
 .../resources/color_mix/yellow_tube.png            |  Bin 0 -> 22644 bytes
 13 files changed, 431 insertions(+), 0 deletions(-)
---
diff --git a/src/color_mix-activity/.gitignore b/src/color_mix-activity/.gitignore
new file mode 100644
index 0000000..5c5e130
--- /dev/null
+++ b/src/color_mix-activity/.gitignore
@@ -0,0 +1 @@
+color_mix.xml
diff --git a/src/color_mix-activity/Makefile.am b/src/color_mix-activity/Makefile.am
new file mode 100644
index 0000000..23dff75
--- /dev/null
+++ b/src/color_mix-activity/Makefile.am
@@ -0,0 +1,34 @@
+include $(top_srcdir)/Makefile.activity
+
+SUBDIRS = resources
+
+pythondir = $(PYTHON_PLUGIN_DIR)
+
+dist_python_DATA= 	color_mix.py
+
+
+xmldir = $(pkgdatadir)/@PACKAGE_DATA_DIR@
+
+xml_in_files = \
+	color_mix.xml.in
+
+
+xml_DATA = $(xml_in_files:.xml.in=.xml)
+
+# Do not use the INTLTOOL_XML_RULE, we don't need to embed the translations
+# in the file themselves. GCompris pick the translations from the po file at
+# runtime.
+#
+$(xml_DATA): %.xml: %.xml.in
+	sed -e "s/\(<\{1\}\/*\)_/\1/g" $< > $@
+
+# Use this directive and instead of the one above to embed the translations
+# in the xml files directly, this is needed for the tool gcompris2spip
+# INTLTOOL_XML_RULE@
+
+icondir = $(pkgdatadir)/@PACKAGE_DATA_DIR@
+icon_DATA = color_mix.svg
+
+EXTRA_DIST = $(icon_DATA) ${xml_in_files} init_path.sh
+CLEANFILES = $(xml_DATA)
+
diff --git a/src/color_mix-activity/color_mix.py b/src/color_mix-activity/color_mix.py
new file mode 100644
index 0000000..b85e69c
--- /dev/null
+++ b/src/color_mix-activity/color_mix.py
@@ -0,0 +1,295 @@
+#  gcompris - color_mix.py
+#
+# Copyright (C) 2012 Bruno Coudoin and Matilda Bernard
+#
+#   This program is free software; you can redistribute it and/or modify
+#   it under the terms of the GNU General Public License as published by
+#   the Free Software Foundation; either version 3 of the License, or
+#   (at your option) any later version.
+#
+#   This program is distributed in the hope that it will be useful,
+#   but WITHOUT ANY WARRANTY; without even the implied warranty of
+#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#   GNU General Public License for more details.
+#
+#   You should have received a copy of the GNU General Public License
+#   along with this program; if not, see <http://www.gnu.org/licenses/>.
+#
+# color_mix activity.
+import gtk
+import gtk.gdk
+import random
+import gcompris
+import gcompris.utils
+import gcompris.skin
+import gcompris.bonus
+import goocanvas
+import pango
+
+from gcompris import gcompris_gettext as _
+
+class Gcompris_color_mix:
+  """Empty gcompris python class"""
+
+
+  def __init__(self, gcomprisBoard):
+    self.gcomprisBoard = gcomprisBoard
+    self.game_complete = False
+
+    # Needed to get key_press
+    gcomprisBoard.disable_im_context = True
+
+  def start(self):
+    # Set the buttons we want in the bar
+    gcompris.bar_set(0)
+    gcompris.bar_location(2,-1,0.5)
+
+    # Create our rootitem. We put each canvas item in it so at the end we
+    # only have to kill it. The canvas deletes all the items it contains
+    # automaticaly.
+    self.rootitem = goocanvas.Group(parent =
+                                    self.gcomprisBoard.canvas.get_root_item())
+
+    # Set a background image
+    gcompris.set_background(self.gcomprisBoard.canvas.get_root_item(),
+                            'color_mix/background.jpg')
+
+    text = goocanvas.Text(
+      parent = self.rootitem,
+      x = 250,
+      y = 80,
+      fill_color = "black",
+      font = gcompris.skin.get_font("gcompris/subtitle"),
+      anchor = gtk.ANCHOR_CENTER,
+      alignment = pango.ALIGN_CENTER,
+      text = _("Match the \n color "))
+
+    # Set the points for the sliders
+    c_points = goocanvas.Points( [(245, 212), (130, 175)] )
+    m_points = goocanvas.Points( [(390, 355), (390, 465)] )
+    y_points = goocanvas.Points( [(550, 212), (665, 175)] )
+
+    colors = Colors(self, self.rootitem)
+    cyan_tube = Color_tubes(self.rootitem, colors, 'cyan_tube.png',
+                            1, 80, 120, c_points, 245, 212, 130, 175)
+    magenta_tube = Color_tubes(self.rootitem, colors, 'magenta_tube.png',
+                               2, 350, 290, m_points, 390, 355, 390, 465)
+    yellow_tube = Color_tubes(self.rootitem, colors, 'yellow_tube.png',
+                              3, 460, 120, y_points, 550, 212, 665, 175)
+
+  def game_over(self, result):
+    self.game_complete = True
+    if result == 1:
+      gcompris.bonus.display(gcompris.bonus.WIN, gcompris.bonus.TUX)
+    else:
+      gcompris.bonus.display(gcompris.bonus.LOOSE, gcompris.bonus.TUX)
+
+  def end(self):
+    self.rootitem.remove()
+
+  def ok(self):
+    pass
+
+  def repeat(self):
+    pass
+
+  #mandatory but unused yet
+  def config_stop(self):
+    pass
+
+  # Configuration function.
+  def config_start(self, profile):
+    pass
+
+  def key_press(self, keyval, commit_str, preedit_str):
+    pass
+
+  def pause(self, pause):
+    self.board_paused = pause
+    if pause == False and self.game_complete:
+      self.game_complete = False
+      self.end()
+      self.start()
+
+  def set_level(self, level):
+    pass
+
+class Color_tubes:
+  """ Class containing the three primary color tubes"""
+
+
+  def __init__(self, rootitem, color_instance, image, primary_color, x, y, points, incr_x, incr_y, decr_x, decr_y):
+    self.rootitem = rootitem
+    self.primary_color = primary_color
+    self.color_instance = color_instance
+
+    # Load the tube image
+    image = 'color_mix/' + image
+    pixbuf = gcompris.utils.load_pixmap(image)
+    tube = goocanvas.Image(
+      parent = self.rootitem,
+      pixbuf = pixbuf,
+      x = x,
+      y = y
+      )
+
+    button_width = 20
+    line = goocanvas.Polyline(
+      parent = self.rootitem,
+      points = points,
+      stroke_color = "white",
+      width = 2.0)
+
+    slider_x = (incr_x + decr_x) / 2
+    slider_y = (incr_y + decr_y) / 2
+    self.bar = goocanvas.Polyline(
+      parent = self.rootitem,
+      points = goocanvas.Points([(decr_x + 10, decr_y - 5),
+                                 (decr_x + 10, decr_y + 5)]),
+      stroke_color = "white",
+      line_width = 10.0)
+
+    self.scale_value = 1
+    self.color_button(decr_x, decr_y, button_width, '-', -1)
+    self.color_button(incr_x, incr_y, button_width, '+', 1)
+
+  def color_button(self, x, y, size, text, move):
+    button = goocanvas.Rect(
+      parent = self.rootitem,
+      x = x - size / 2.0,
+      y = y - size / 2.0,
+      width = size,
+      height =  size,
+      line_width = 1.0,
+      stroke_color_rgba= 0xCECECEFFL,
+      fill_color_rgba = 0x333333FFL,
+      radius_x = 15.0,
+      radius_y = 5.0,
+      )
+    gcompris.utils.item_focus_init(button, None)
+
+    text = goocanvas.Text(
+      parent = self.rootitem,
+      x = x,
+      y = y,
+      text = text,
+      font = gcompris.skin.get_font("gcompris/subtitle"),
+      fill_color = "white",
+      anchor = gtk.ANCHOR_CENTER,
+      alignment = pango.ALIGN_CENTER
+      )
+    gcompris.utils.item_focus_init(text, button)
+
+    button.connect("button_press_event", self.move_bar, move)
+    text.connect("button_press_event", self.move_bar, move)
+
+  def move_bar(self, widget, target, event, move):
+    self.scale_value += move
+    # Take care not to bypass bounds
+    if self.scale_value > 255:
+      self.scale_value = 1.0
+      return
+    elif self.scale_value < 0:
+      self.scale_value = 0.0
+      return
+
+    if self.primary_color == 1:
+      self.bar.translate(move * 0.1, move * 0.05)
+    self.set_color(move)
+
+  def set_color(self, change):
+    if self.primary_color == 1:
+      self.color_instance.cyan += int(change * -1)
+      self.color_instance.resultant_color(1)
+    elif self.primary_color == 2:
+      self.color_instance.magenta += int(change * -1)
+      self.color_instance.resultant_color(2)
+    if self.primary_color == 3:
+      self.color_instance.yellow += int(change * -1)
+      self.color_instance.resultant_color(3)
+
+class Colors:
+  """ Class containing all the colors"""
+
+
+  def __init__(self, game, rootitem):
+    self.game = game
+
+    self.color_image = goocanvas.Ellipse(
+      parent = rootitem,
+      center_x = 395,
+      center_y = 230,
+      radius_y = 60,
+      radius_x = 75,
+      stroke_color_rgba = 0xFFFFFFFFL,
+      fill_color_rgba = 0xFFFFFFFFL,
+      line_width = 0.5)
+
+    # Random color to be matched
+    self.r_random = random.randrange(0,256)
+    self.g_random = random.randrange(0,256)
+    self.b_random = random.randrange(0,256)
+    code = self.hex_code(self.r_random, self.g_random, self.b_random)
+    random_color = goocanvas.Rect(
+      parent = rootitem,
+      radius_x = 6,
+      radius_y = 6,
+      x = 350,
+      y = 50,
+      width = 100,
+      height = 70,
+      stroke_color_rgba = long(code, 16),
+      fill_color_rgba = long(code, 16))
+
+
+    # OK Button
+    ok = goocanvas.Svg(parent = rootitem,
+                       svg_handle = gcompris.skin.svg_get(),
+                       svg_id = "#OK"
+                       )
+    ok.translate(0, -130)
+
+    ok.connect("button_press_event", self.ok_event)
+    gcompris.utils.item_focus_init(ok, None)
+
+    # initialise variables
+    self.color_rgb = [255,255,255]
+    self.cyan = self.magenta = self.yellow = 255
+
+  def ok_event(self, widget, target, event):
+    if self.color_rgb[0] - 30 < self.r_random < self.color_rgb[0] + 30 and \
+       self.color_rgb[1] - 30 < self.g_random < self.color_rgb[1] + 30 and \
+       self.color_rgb[2] - 30 < self.b_random < self.color_rgb[2] + 30:
+      self.game.game_over(1)
+    else:
+      self.game.game_over(2)
+
+  def resultant_color(self, change):
+    if -1 < self.cyan < 256 and -1 < self.magenta < 256 and -1 < self.yellow < 256:
+      cyan_cmy  = (255 - self.cyan, 0, 0)
+      magenta_cmy  = (0, 255 - self.magenta, 0)
+      yellow_cmy  = (0, 0, 255 - self.yellow)
+
+      color_cmy = [255 - self.color_rgb[0], 255 - self.color_rgb[1],
+                   255 - self.color_rgb[2]]
+
+      if change == 1:
+        color_cmy[0] = (color_cmy[0] + cyan_cmy[0]) / 2
+      elif change == 2:
+        color_cmy[1] = (color_cmy[1] + magenta_cmy[1]) / 2
+      elif change == 3:
+        color_cmy[2] = (color_cmy[2] + yellow_cmy[2]) / 2
+
+      self.color_rgb[0] = 255 - color_cmy[0]
+      self.color_rgb[1] = 255 - color_cmy[1]
+      self.color_rgb[2] = 255 - color_cmy[2]
+
+      color_code = self.hex_code(self.color_rgb[0], self.color_rgb[1],
+                                 self.color_rgb[2])
+      self.color_image.set_property('fill_color_rgba', long(color_code, 16))
+
+  def hex_code(self, r, g, b):
+    hexchars = "0123456789ABCDEF"
+    return hexchars[r / 16] + hexchars[r % 16] + hexchars[g / 16] + \
+          hexchars[g % 16] + hexchars[b / 16] + hexchars[b % 16] + 'FFL'
+
diff --git a/src/color_mix-activity/color_mix.svg b/src/color_mix-activity/color_mix.svg
new file mode 100644
index 0000000..d9f6549
--- /dev/null
+++ b/src/color_mix-activity/color_mix.svg
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/";
+   xmlns:cc="http://creativecommons.org/ns#";
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";
+   xmlns:svg="http://www.w3.org/2000/svg";
+   xmlns="http://www.w3.org/2000/svg";
+   xmlns:xlink="http://www.w3.org/1999/xlink";
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd";
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape";
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.1 r9760"
+   width="108"
+   height="123"
+   sodipodi:docname="color_mix.svg">
+  <metadata
+     id="metadata8">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage"; />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1366"
+     inkscape:window-height="691"
+     id="namedview4"
+     showgrid="false"
+     inkscape:zoom="2.3414634"
+     inkscape:cx="54"
+     inkscape:cy="54.318899"
+     inkscape:window-x="0"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2" />
+  <image
+     width="103.72917"
+     height="123.42708"
+     xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGwAAAB7CAYAAACRtWXuAAAABHNCSVQICAgIfAhkiAAAHo5JREFU eJztnXmAFMW9x79V3dNzH3tfw+7Awi5yCCgICoociifggUeMiYkneTGamESTpy/JU6Pv6cuhRhKv mIMciEaDF8YoioiKgAegsAu77Dl7zdlz9VH1/uCQhT1mZnsXEubzF/R2VVf3d6r6V7/fr6qBHDly 5MiRI0eOHDly5MiRI0eOHDly5MiRI0eOHCPF2KqSh2t9pa8AoEe7LccLQrYFx1QU3zTVI/3wBIc4 JkjNXcFo7EMjG5ajb0iW5Witr7TnxalFHl3gWLqlq1MTnKPq6+sVQ1uX4wiyGspGlxcvLJYES16T DYV77Di7yuwiqehdw3GtHL0RsynEODn9Cp9FJP59HfQOe75lHfXfUVVWHCRm26ONjY3aqNLSqQLF hTYLLlBUPl7VYJMkRAjBqymF3be3resjQ+/kOCGrIfGE6tK3fjPFc8bEes/BYyFfAst39Wj1ssrA OOUE9ORJRFkwB5basUBFCdDWATzzErSX3wQVBP6YnCK3dXR0xA27m+OArAQb7ytpfWFqcXnhHnuv 41zkSJSmQACYUyKog0FYFoB5RqLXedt3Abf9BIq/i2xLkeSCxsZQKOs7OM7I6r2iaLzYphxpYBKN wNZigbXFAtolgs6SIU1LHnHexBpg9WOQasfySWZieTybNhyvZCxYbWGhQ9eJKPZTko1OgVcoMP+k HdKiCIjI+zzPYQd+dQ8kzrF4VFnZ9EzbcbySsdGh6jqFSQCvVIAmC7hHA4kLQFUKZFISjiuDaQ+0 hfnAGTM53ngHVwLIzePSICsrEQC0qhSslQFYFoehbrfCdGJi8EJ9MGUCpHc34ZRs23G8kfGQuCcY lAGgZ5IMy0VhQEDWYgGAwwpwwj
 2Dn5kDyM7oYJIEORgxpgF7mgFdxw5javv3Jysr0UTRsrd56BcP hoBVLxJFTdFfDb2244OsBEuqePeTz8GGcmFdB+56EBo43mhob397KHUdT2TnmtLI+g2b+Jc4h4Vk MPXmHHhjA5DnAV54Ddr6DxCK6+q12bTheCU7wSTp+Z5QasX6D4AzZqZXpq4B+N79Jny+UwUACAIU RcW8lo6etmzacLySVTwsHA4n3Q6n+uFWcvqSsyFaLQOfv30XcOUtApTyU1Fx9Xch5RUiuutTQaDk w1BUzjmBMyDrAGYoKm+w2RxzXnydVE6dAKG0uP9zl15HoedVo/zym0FNEizlo2EuriCRzzYvznO7 lFAk+k627TjeyFowACitqHomHIznP/MyZjQ0QbeYQcuKAXF/rR3dwGtvAe9/TLQUd1LP9LkHy5qL ymGrrCHhT98/M8/lLAxFoq8O6U6OE7KNOPeisqzsJLPIbgbBxYoKl8VMFE1jos4ILGa0JFJkNSH0 W94vf1u0j5nQq2yybS+af/e/GlOVtwta2xZtBjQj2vTviiFR4Kb29i11zR1fq2vqcJtSqjul0Ckp 8Fp7XqH184aOqr1t/tsIwWPd/3zuiBQCTQ5CTyVFzvT5XRUlZxjRnn9nDOlh6eD1FpQLzLS38qvf F22+WjAlBf+apxHdvgmcMegEN7e0dTwyUu35V2XEBAMA36iy31gqqq8pv+gGqfkP/wdrNICny21o VDR8t13WNE5nNrW3b8mkTq/Xm081bT6lmCxRfqJA6CSNsXIOQGeQ2P6pi4kiLlEaoJQEOOf+hM4+ 1zk+Zpx+IpjN2xobG48M3B2DjKhg1eXlXo3rzQAgiSLeG+OCZX8L7u+Ks7+Gkp0xiBNbW1sDg1RF feUll5kpvTmls9PyLULyxAIzHe0yST6nBK9DhMO0b7S3CgQCJQgpDKGUhlCKoSfJ0BhR2I5gKt4Q 0SSFMdEskBZVJ6
 /pYGtiKnujq6tLHs5nkS0jKhgAVFWUPUOASsrZSQ9VOMV5dhMAQOMcVzdHlc+T +ju72vxnAf27vnylxTdxQlacX+XAl2pcqHKahtQmf1zDZ0EF7/kT2ob2uBZWmGQxkQ+SKv+rwPCn 3R0dnUO6gIEMyazPBrvT9WZzW/sjbqcz+W5MnbvMYxbMhIASgrl2k/BMWKmwO2xiMBpb118dTps9 YDHR2Y1RtbjIKtLxeWbQIfz0HCaK0S4TTi+30S/VuMW55TZSZBG9XQn9zKDGbi9yO2c6bY5QWJZ3 A+g7hD5CjHgPOwRaU1GydZHTPOH+UvtBF9mHcQ3XNIcZB85tbO98baAKfOUlV5gI+WWeWfB8/6R8 aWaJ1fBG7gwpeKkxyl5pimk6I7LK2N2aYPp1S0vLUXnnjXgPOwRutzvf3p1Sl0+2mmiVtK8p5SYK KyVkU1xb4na6/hSS5XB/FYSisW02t+eRhKqy15vip3endJxcZCXiULrbYRRaBJxaaiOXj3UJJTbB +llQmc90/Wan0xH3VlZ91NXVpRt2sTQ4moIhLMtdHqdD3xBTT7/MbRGk/Q96qtWEHYoutGnaotJK 35MDPZRIJKKForG33G7bmj1h7aw3WxKO2WU24YDRYRQiJajxSFhW7RLyLdT6WUBZmIjHvuF02NvC cuxTQy82AEdVMAAIybGNbqd9WavG8hc6JArsG6fPsJno3yOqJxKPeQPR2JpB64nG/YLZ+luV8Wlr 9sq+aYUWodiadcpKv1ACjM8zY9lYl+AwUfvHPaklBS7HQpvF9nYkFgsafsHDOOqCAWB2u/Ot3Smt 19AoUYJZNpOwOpw60eGwN4Tl2CeDVRSPx5VAVP6z3Wa3v9YUmzW5wEzL7MaLBgACASbmm3FelZ02 y1pFa0K72eNy8Opo7N32ASzcIV93uCrOhLAsd3ncDv1duffQWCBSVJgoXRfTLvC4bX8PRWId6dQX km
 P/dLrt6ut7Y2eekG+mXsfQzP6BsIkUC7x2WuM2081dyTlRh+Mip9W+NhyLDUs28zEhGACEorGN Lqd9mV9j+Qv2D40AUGsW0akxUp9kF7hF01PBZDKVVn2R2DsuhyP8ekts0Vi3RIY6VxuMSqcJi30O YW9ULWyOa99wO+11oWhsu9HXOWYEA8CsNsf6ekW7aarVREdJXzRttl0ir8dUa5jQqYGo/Od0KwzJ sfedDof/zdb4+eM8EqkcZtEkgWC+104LLYL4fkfiony3y1c2qupVIy3JY0kwRGKxTrfLTjbEtdmX u80Hh0aBAGfYTcLqSMpnszmUkCxvSLfOsBzb7LE7G99uj104o9hKi4bBEDmcWo+EM8vtdEN7fGJM ji90i6Zn0x0ZBuOYEgwAqqOxDbLDfrlf4wULnNLBCZVTIJhoFoUXo8kFHodzXUiW96ZbZ0iWP/Y4 nOTNtsTs8yrtgrW/hQEG4jELOKfSIWzuTJSGOb3C43D9LRiNDjmb85gTrH3f0Ph2vaLdePjQuO/f hG9NaRfbPZY/RCLxaLr1BqPyWx6XbW5dUPUuqrSPyH2bBYJFVQ5hd0Rxtcjq121u63ORSHwwx/aA HJPLWFs6OraB4Ke3+2NKnPV23S0vtNLpVtFmY+ILJ2eY9aUruGpzd5J93G3I6JQWEiW4e2aReKHP 4bJyYWNFRYV3KPUdcz3sAGOisXdkh+PKLp155h1iNRIAZ9ol4blwqjDksBcEo7G0c0GCsVgsz2Uv VBg/aW65bcTunQCYVWqle6Oa1C6nLs2zOVYGZDmrlafHZA8DgM2AphD9yudCSfpeXO31N7dAsKLC KXGOb1aWll6aSb0ax+6mqDbieSMEwJ3T88WTCi3lVCT/9Pl8gyQH9s0x28OAfe6mPJfT9G5MnXWZ xyyYDkkzLhIpik2UrI+ri91O17OhaLR7sPpGl5fXSBSPLKiwFc4osQ5rpGJtdxLPdid
 Ra6aw7zdy KCE402sT3uuIuyOJVHlPJPZipvUe04IBQEVl1YZ4PH5Fl8by5zmkXg95gkVEs6KjQdUuEG2OJ2Kx 2IGuSKsKC0vcbndNnss+w+NwXFPqcf5M5+y/zyy3u26Zmi8ImeSYZ0hXUsNtqo61t1Rj4+dRVMs6 vOZ9j1ogBDNLbOLze+TJNqv9o3AstiuTuo9mPKxPvF6vRWTMRzgv1jkvBeWlBJhMOa57YpQTs2y9 J78JxnHZ3ghaNJbkgMYBSWVcogTMKQpKvpVqVQ6TNKPEIp1cbIHXPryTZwD4PKjgK5PsaF9cDgCY sLIJP29TMOEQF9m61hh+8mFPREvptY1dXf506z6qglWXlBRrlM8BodPsApnOOD8xqfNySSRankST HrOIUqtAi6yCpT6iUn9Iwd99btgPi3c1KwyXNEVwaY0TS0c7YBYonAaHVzLh0ZYYHlw+Gqp3f0CV A6fdvxO/dUiwHTIH/OnmHmVdW+y1z5r8F6Zb94gLNrq8vIYz7QqLKFyd0NnYYqsYn1ZkFse6TNJY jwSfy4Qiy5HWusaAa99owymCgLuKbUf8/c2Yiltbo3hobikm55tH4lb6ZEsohf9yUnz8zbG9jtOw iqv/dxfu8ToOHpNVhotfbU3GNO2sprautNLVR0yw0eXFZ0tEuCvF2ZwpBZbkWaNsltllVhT2IU5/ 7AwpuHGdH09WODHDdmS5n3fH8UJMxVMLyuExG9vDOIDv7gmj3mkCBWBVGWwah1XjMOmAIgAhkaBx kgt7rxyFvpJMqlc24ck2BdWHDI2r6iJ4Ykf4o89a2qel045hF6yqrGy8mfLHdc5Pu7jaiWXVriHF qB7bHsSbjTE8V+k6YmjUOXBtSxT1jEOUJCRVHXFFQ77dgmK7CRMcHAsrrJiQRQ/8R3cSt80rQHBO YdZtJyrH+T/ejhVe58FjCY1jycstSlLDWeksbBxWK7GqvOQ6gWLNvAr
 7qP85rViY77UTpzS0X/6U QitebpbRlNQw1y71+hslwFyHhFUhBafMPxv3/ewX+Pr1N+CcxRfBN3EK6iIafvnGx2iNc5xWYsko 0+rhjji2frWqz56TNgJBROc4cXcM3v1OaBMlkBVG6sJqcXckOmgkYtjezNUVJXebBbLiR9MLpf+a USAWW435bYgU+MH0QqwKK9gUP3L+mycQ/KLUhn+88jI6OvyoHjsWU6ZOxcWXLsPDv3kc/3x7A3bB jUd39Jvb0yc9JgpugNPYv6AYf4j2XmJwns9Bk7p+ntfrzR+s/LAIVl1RdqdZoN9/9IxScb73SANh qHzUnQIBwQ864zjc1wgA06wivltowXeWL8fexsZef6vy+XDfzx7Cc7ujSOrppxgq3KB0RIGgvsqG YPKLEFmV04QKh5gUNW3xYMUNF8xXVnQOOPvR/80ulmo90uAFMoADePCTMH7foODRJ56Co2IUHgr0 7cj9sseM080cy6/5ChKJ3vuIjKupgabrCKfST71gZuPeHrsuKsfvenqnNc4us9lMAgY17w0VzOv1 WkRKf3fTpDxx0jCY1k/vjOK9sIDnX1mLs885Bw88/Cj+FEphc0Lt8/yfFJqRaG3CXbd/r9fx7ds+ RZ7dguKR8//2Qiu14P3Dnvy0QjMIyJmDlTVUMElXby0wi65l1c7BT86QvVEVqxoSePovqzF6TDUA YMq0abjuhhtxZ7fW59DYoDAkVA2rV69GLBYDAKiqip//9F5cVW3LyEQ2q8YmQvlH2+A/5B1c7ZKQ Yix/sPeYYYJNnDhREgTyvWsnui2CgZm3B/jj7gQuv+rLGH/CCb2Of+f2O2AuKcUDPSkEdY66lI4/ BJP4sj+FK1tknHruBfhg68ew2+3QNA3fv/VbiLbuwSVjMvtR2VRjU+qbZxVgfeiLkaHULkIgYAJX agYqZ1iCQ7SnZ6lDIo6zDpnJG8knQQVLZ516xHFJkvD
 AI49iyfnn4q+BOAghmDhuLBZeuAS/+tJV KCsrAwD0dHfjluU3onH7Vjx0aj4y9Vw5dQ6iMUMsRQBQRtuwOaVh2f7/EwBuSVACKa10oHKGCWYR cfV5lfZ+91EcKg6Roq2t7y09pkybho2bt0IUBNgdDthsX1imuq7jb6tX494f34nRNuDXcwrgyWIu OMEiwtScgDLaPvjJacAtAgKHNcMmUhZQyIAzc0ME8/l8Fk1Jnj3Pa89KrlZZQ4OsotQqYKy7b8vy wgoTVvziZ5g953TU1NYe8fcDPekAoVAIL/ztOTz92AoEuzpxbY0DS8c4snbtzLGLKPg0jHaDBAOA lNC7NYRwABgwEm1MD0smZ5lEgon5mZnxgaSOVcEelIxXUDNJx2e7KJ7ZKOF6b8ERPsYlY5xolEM4 f+F8XHTJJTjngsWYNHky8gsKEIvFEAmH0djYgG2ffooN697AB+9/gGKHGYu9EpZOKe7lJc+GapcJ pdsjB0MmRkCymNsZIhgHmzO5wMoyCQo2xhW8Y+3Gt+9RYd8/gs09jSGwJIn77u7A1/JKUWz5wuwm AG490YMFXivWfLgW/7n2JXRGE9DZF9Zbnt2C0W4zprqBq+YUYlK+2TBnqUgJysI6tjI+NPfUAThg 1XoLFtc45YwM+LEGQwSTBDqt1iOlnaPQEFewvawbt95w5PwpPw/48T0a/uuODvxHSSlch71vJueb D4ZPdM4RTOkQCYVZILCKw+vLXmoRsH5LCNHpeUOuy1wvY6bUex7IOAcZZEg0xEQQKSaUp7ngIK4x vM56cE0fYh3AbgPu/G8Vj7d3Qu9jfnUAgRAUWkR4zHTYxQKAhUVW1P7DmOXOJ/yxCUuLvlgxqnOO sMIkTsiA0WdDBOOAxSqk98D+0h3ATd8e/BMteR7gmltSeLKlZ6jNMwwTBS5IcTh3pp2/egQkxTDh gV24QaC9rNX2uAbGQaVUqn6g8oYMiYz
 DYU9jYrM7moJ3WgJ5ae7wWzsOOPXiBP62JoSLyoZ3W+Co ytAqa1AYR5ldQIFZ7PNV9fUSKxpWNuOd0XZE8vePKhTgNhEcQMIqgFkouEUA3/9MhLCC/KYEinbJ GBNQcGuRDaOLervumqMazJQGdgUCA6ZzGyMY4zZLGj3slXAYP7w8MxfPvHkMfn8UazcLWFRirMvL H9fwcl0MnUENhUyAl5hg4sAnSKJLYCjMo1h6grNXfggBcE+ZHS09KmL+L0aKlM6Q0ve9h8IMkDlH hHBYdSBfJKi0iPA5zTC7+37VN8sqKOV7BmuzIYJRSuIJjQ8YR+lM6CiuUSBlkbR05ZUMT6fCWLuN Y1GJK9tmHkRlwB8/DYH1ECylDowSTH2GcjuCOn7/bhgnVZtxqrf3DgVGZ19tDyhaSsegEWdD3mEC SEtnYuAlUBuDMhYsyn6Z1DXX6DCdEsZTewMYwA4ZlM6EjgfWd+PskAM3m/L2idUPJVTA92g+QnU6 nt85fBvjMA6815FgOvgrg51riGAa53s64v1bfQCwW0+iduyApwzKZZcxzLtGxk/r/GgZ5Hp90ZnQ 8edNYdxFijCOpj/Jv0R0wd5O8dLu4RGtLqwgpXNINufI9LAU47uaZW1A049ajAlPzJjOcffPU3hV 6sRTewNIaOl1t5TOsXJTGN9BAcxZZP0uERxobVKxK2D8Rwjf9ydgEvBOOl84NEQwCvbWlu5UvyOV zjgkm3H7jzgdwB0/0LDkFhk/a2vH5+HBH+JfPongeu7JSqwD/IdYgD99HBlwbpgNLzfJ8bjKfpvO ucYMiYJ5XVzRxT39PLieFEPRAHsCZ0vtOI4Hf6FiLe/qlSNxODsDCsrCIorp0GwsE4AriQurPjPo sxjYl5/SGdeYM79oVTrnGyJYS0tL0iySDz/s7H/7JaNyWA5HEIBbb9PwfHf/uyy8tiuG8wVjpgTT BAtaOnTIBkWgV+2OJHX
 OH92+fXtaY61h0auYxp9cs7fvRWoFZorOtHbYyI6CfCBM+jZCOhM6ihIC jDTCryIuPPtZ9t6OA/QkdbzbFhcBMe1PmRgmGBNMf2yXNba9jywmgRIkI8Ob8ML0vt9NH7QmcCqM TbUbK0poD2jQhtjJHtsRSoqC8Ps9bW1N6ZYxTLCWlpakytmvV9ZF+hwXHZqI4DB96bKzGyikffeh uu4Uxg0w18qWU5kVH3VnvwNffVjB600xpqvs9kzKGRrQV4jplxv9CdosHzk8zbA7sH7D8HjU//48 xfz8ft5ROoU4DIv3Zgk2bB3ClokPfNQT14G76v3+QVeOHoqhgrW2trYAuP/+LYEj3mXTCqx4e63x m5rIMcC/zQKvbfgX6h1KHqUIK9mNic/tlrE7pAY8rf6HMi1reMqMJlru2xVMhda39daMEmCyyYH3 PjD21/7kChMuK+g/lU8zeM50AAUc6Ti8D6c+rODhbQElpfJl2XxUwXDBGhsbkwkN19+7pSfZnezd nkXFLjy7UoRRa/if/auAKZE85Fv6N2jMEkFyGOYU27QUaosyy2FJaBx3bOxKMk5+1NjR8V421x0W 0y0sy3V5Dsf4rZ2pmnOrHAd3dKUEKCcSXtiWwCmzhvYQ179FENngxkz3wHmQYY0h1cNRLhg7HP+e hHHZZCdomu9HnXP88L0upVHWNtW3tGf9zbRhW26kmCzX75GVxkc+DfbqT2OcZhS0u/DSi9lf+rln KXatcWN+3uChltMqrFhLjHXaPqWFMafGinQznDmAB7cGta1dqU5d5RcN5drDNjkKhUKa0+Z4qT6c usEiUnFSvvng3VXbzNj+OUFDTMH48en3NFUDfv0rAa6deTi7KL24mCQQbO5JojZlho0O7ffJADyu hlA8RsDsDJZRrdgWZGsa5KDO6czd7e3tQ2nDsM5mQ7Iccjrtb23uSn3ZaaLioUtVx9rM6Nxjwt82 qpg4hcE
 ySM7Vh1uAX94nYSErwjRPZtud+/Ik/K4lhNNp9hPoHqbjPq0Hp060pi0WB/D4jhBbVReJ JzScvtfvr8u6AfsZkUXpo8vKzqCU/+PbJ+ZJSw5bhBBTGf7SEQArUDDvXA0n1HK493eeqAy8vwl4 4xUTfKodS8vcWacEvrhbRn6TgIViZpm7Kc7xRy2MFouG60/2pL3YXWcc924JaG+2xmSV0QV729oy +qZMf4zYLgKV5SULTYS8dFm1U7xxkocennSa0Dje746jLpVAFDrACOyEYqLdhpkFtowXL/TFym0R jOs24UxhcNHinOElTcYmmsBlk1yYUJj+ere4ynDHxi5le0DxpzQ2d29HR+MQmt2LEd2no6q8aKpE 6D+mFlld95xSKNmOwuYna+tjaGpVcSFzYozYe7Kd5Bzb1RTWkThiVoazx9lxYgZCAcBnAQX/+UGX Ek6xbTFOz0rjwz8ZMeIbq/iKikpNkvhSoZVO+skpRdIJecYuq02HuMbwSn0MDQEVRNu3Ra0OwGKh OKFUwknFloz3+dA5x8qdETyxI8QIJb+wegp+kG7IJBOOytZFY8eOlRCP/Fzn5Karalz4+oQ8ehR3 GhoydWEFD24JKHVhRU5xfnlTW8frw3Wto7rXlK+09AyTSFaWWoXi759UIE3NcPg52oQUhid2hLQX GmQqEvwpzum329raMnLmZspR382tpKTEZhdxL2P41vRiq/bNEz1StWvkh8lMiKsMLzRE8dTnIY1x uk1R2fJsXU2ZctQFO0BVSYnPJJL/0Tm/dIHXzq4Y5xKN3jZiqASSOv5aF8Gze6Ia52hJ6uxHhEBz 5BetHo73VV8cM4IdwFdRNFUi9EcKw+JxLkm5osZlmVdhN8SszwaNcWzqTOLVppi2rjVGTYR+lOL6 3ZzRkIViRZLz8SaQ39e3+786Eu055gQ7wKhRheWiLi4XKb5hosRxRpmNzq2wijOKrTBnEdbI
 BJUB 23qSWNcaZ2ubY1pKZwojdJXO9CcpgWwCvVdl/Lyv5FmwyCnRr7dEtSTntzW2dWQc38qUY1awA5wM iD1lRQsFIl4iUFzMOHNNK7KyKQVmaUK+hPF55iFvZhlKMeyJKNgRVLDRn0juCCRFAiQJxRuKjic1 anqNMnWOheB2lWP+fIfEbiuyilWmfZ69dbKKm1ujGuPkrEa/f50Bt90vx7xgh0F9JSWnQCDnminO YJxPVxgcxRYxWWoXUOYQpXKbiRZZBTgOWdMsiQSEAxGFIaLoCCkMwaTOGmQl2RjRxJjKJIlCFgTy YUJhL4GKb+xta/sIAKssLb2UEP6MmUC7wGXGtQUW0Wc60gW7ojvBfh1MyDqjkxva29NOqsmUfzXB jsDrLRpLNeEkUPgo5xWSQGsEwisZ0CsMTQCAE5kSdKqMtyk693OKnUTHDsr5tobOzj6XVvqKikq5 SNu/U2TDdfn9e6g5gK81R7RPkvpHO1v9M4y8x0P5lxdsJKgsLb3UTPmfn/e5RZ/Uf4Djg7iG61qi yd1tfuO/nrqff2H/wsjR5Pev5iDPfac9pmgDpBtwzkHBh/UjBjnB0kSTkjfuTmmhO/0xrb9tFtfF VCYSktZmy9mSEyxNGhtDoSRls1+NKoHlbVFtd+qLxRcqB54OJLEylNJiOm4bznbk3mEZMqa8vFKE /rAKXDBKFOKFAqF1KqMpxmSFs6sb27vS/nhPNuQEy5LRZWWVnLCpHCgkjOzRRPG9o/X19Bw5cuTI kSNHjhzHO/8PWZZEK9jNQO8AAAAASUVORK5CYII= "
+     id="image10"
+     x="2.5625017"
+     y="-0.42708346" />
+</svg>
diff --git a/src/color_mix-activity/color_mix.xml.in b/src/color_mix-activity/color_mix.xml.in
new file mode 100644
index 0000000..829462a
--- /dev/null
+++ b/src/color_mix-activity/color_mix.xml.in
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<GCompris>
+  <Board
+        name="color_mix"
+        type="python:color_mix"
+        section="/experimental"
+        icon="color_mix.svg"
+        difficulty="1"
+        author="Matilda Bernard"
+        boarddir=""
+        >
+        <_title>Color Mix</_title>
+        <_description>To understand color mixing</_description>
+        <_goal>Match to the given color by using the primary colors</_goal>
+        <_manual xml:space = 'preserve'>
+The activity deals with mixing colors using paint, inks, or dyes. The inks absorb different colors of light, subtracting it from what you see. The more ink you add, the more light is absorbed, and the darker the combined color gets. Just the opposite of mixing color with lights! Again, we can mix just three primary colors to make many new colors. The primary colors for paint/ink are Cyan (a special shade of blue), Magenta (a special shade of pink), and Yellow.
+        </_manual>
+        <_credit>Openclipart.org</_credit>
+  </Board>
+  <Data directory=""/>
+</GCompris>
+
diff --git a/src/color_mix-activity/gcompris b/src/color_mix-activity/gcompris
new file mode 120000
index 0000000..6a7dc8a
--- /dev/null
+++ b/src/color_mix-activity/gcompris
@@ -0,0 +1 @@
+../boards/python/gcompris
\ No newline at end of file
diff --git a/src/color_mix-activity/init_path.sh b/src/color_mix-activity/init_path.sh
new file mode 100755
index 0000000..3c96540
--- /dev/null
+++ b/src/color_mix-activity/init_path.sh
@@ -0,0 +1,8 @@
+# Set the different path for this activity
+# This is sourced by runit.sh
+path=$1
+activity=color_mix
+plugindir=$path/../boards/.libs
+pythonplugindir=$path 
+resourcedir=$path/resources
+section="/experimental"
diff --git a/src/color_mix-activity/resources/Makefile.am b/src/color_mix-activity/resources/Makefile.am
new file mode 100644
index 0000000..230cf10
--- /dev/null
+++ b/src/color_mix-activity/resources/Makefile.am
@@ -0,0 +1,2 @@
+SUBDIRS = color_mix
+
diff --git a/src/color_mix-activity/resources/color_mix/Makefile.am b/src/color_mix-activity/resources/color_mix/Makefile.am
new file mode 100644
index 0000000..3bae896
--- /dev/null
+++ b/src/color_mix-activity/resources/color_mix/Makefile.am
@@ -0,0 +1,9 @@
+imgdir = $(pkgdatadir)/@PACKAGE_DATA_DIR@/color_mix
+img_DATA = \
+	background.jpg \
+	cyan_tube.png \
+	magenta_tube.png \
+	yellow_tube.png
+
+EXTRA_DIST = $(img_DATA)
+
diff --git a/src/color_mix-activity/resources/color_mix/background.jpg b/src/color_mix-activity/resources/color_mix/background.jpg
new file mode 100644
index 0000000..4356d48
Binary files /dev/null and b/src/color_mix-activity/resources/color_mix/background.jpg differ
diff --git a/src/color_mix-activity/resources/color_mix/cyan_tube.png b/src/color_mix-activity/resources/color_mix/cyan_tube.png
new file mode 100644
index 0000000..4c0aec0
Binary files /dev/null and b/src/color_mix-activity/resources/color_mix/cyan_tube.png differ
diff --git a/src/color_mix-activity/resources/color_mix/magenta_tube.png b/src/color_mix-activity/resources/color_mix/magenta_tube.png
new file mode 100644
index 0000000..55e3d3f
Binary files /dev/null and b/src/color_mix-activity/resources/color_mix/magenta_tube.png differ
diff --git a/src/color_mix-activity/resources/color_mix/yellow_tube.png b/src/color_mix-activity/resources/color_mix/yellow_tube.png
new file mode 100644
index 0000000..5b1e0e1
Binary files /dev/null and b/src/color_mix-activity/resources/color_mix/yellow_tube.png differ



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]