diff options
author | Bert Freudenberg <bert@freudenbergs.de> | 2012-11-04 21:45:21 (GMT) |
---|---|---|
committer | Bert Freudenberg <bert@freudenbergs.de> | 2012-11-04 21:45:21 (GMT) |
commit | 505e8c7e890d550f9e0f49574248ad3a109bb03e (patch) | |
tree | f2f8034acbf982abaed890b363e7efb2ef0d0a49 |
Initial commit: version 1
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | activity.py | 118 | ||||
-rw-r--r-- | activity/activity-testmultitouch.svg | 9 | ||||
-rw-r--r-- | activity/activity.info | 7 | ||||
-rwxr-xr-x | setup.py | 3 |
5 files changed, 138 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..849ddff --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +dist/ diff --git a/activity.py b/activity.py new file mode 100644 index 0000000..b09d20f --- /dev/null +++ b/activity.py @@ -0,0 +1,118 @@ +# Copyright (c) 2012 Bert Freudenberg +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +"""TestMultiTouch Activity: An example of using multi-touch in an activity.""" + +from gi.repository import Gtk +from gi.repository import Gdk +from random import random + +from sugar3.activity import activity +from sugar3.graphics.toolbarbox import ToolbarBox +from sugar3.activity.widgets import ActivityButton +from sugar3.activity.widgets import TitleEntry +from sugar3.activity.widgets import StopButton +from sugar3.activity.widgets import ShareButton +from sugar3.activity.widgets import DescriptionItem + +class TestMultiTouchActivity(activity.Activity): + + def __init__(self, handle): + activity.Activity.__init__(self, handle) + self.max_participants = 1 + + toolbar_box = ToolbarBox() + + activity_button = ActivityButton(self) + toolbar_box.toolbar.insert(activity_button, 0) + activity_button.show() + + title_entry = TitleEntry(self) + toolbar_box.toolbar.insert(title_entry, -1) + title_entry.show() + + description_item = DescriptionItem(self) + toolbar_box.toolbar.insert(description_item, -1) + description_item.show() + + share_button = ShareButton(self) + toolbar_box.toolbar.insert(share_button, -1) + share_button.show() + + separator = Gtk.SeparatorToolItem() + separator.props.draw = False + separator.set_expand(True) + toolbar_box.toolbar.insert(separator, -1) + separator.show() + + stop_button = StopButton(self) + toolbar_box.toolbar.insert(stop_button, -1) + stop_button.show() + + self.set_toolbar_box(toolbar_box) + toolbar_box.show() + + # main view + touch_area = TouchArea() + self.set_canvas(touch_area) + touch_area.show() + +class TouchArea(Gtk.DrawingArea): + + def __init__(self): + Gtk.DrawingArea.__init__(self) + self.points = {} + self.colors = {} + self.set_events(Gdk.EventMask.TOUCH_MASK) + self.connect('draw', self.__draw_cb) + self.connect('event', self.__event_cb) + + def __event_cb(self, widget, event): + if event.type in ( + Gdk.EventType.TOUCH_BEGIN, + Gdk.EventType.TOUCH_UPDATE, + Gdk.EventType.TOUCH_CANCEL, + Gdk.EventType.TOUCH_END): + # sequence is a void ptr object identifying the finger + # we make it a string for use as dict key + seq = str(event.touch.sequence) + pos = (event.touch.x, event.touch.y) + if event.type == Gdk.EventType.TOUCH_BEGIN: + self.points[seq] = [pos] + self.colors[seq] = (random(), random(), random()) + elif event.type == Gdk.EventType.TOUCH_UPDATE: + self.points[seq].append(pos) + else: + del self.points[seq] + del self.colors[seq] + self.queue_draw() + + def __draw_cb(self, widget, ctx): + ctx.set_line_width(5) + for seq in self.points: + (r, g, b) = self.colors[seq] + ctx.set_source_rgb(r, g, b) + p = self.points[seq][0] + ctx.move_to(p[0], p[1]) + for p in self.points[seq]: + ctx.line_to(p[0], p[1]) + ctx.stroke() diff --git a/activity/activity-testmultitouch.svg b/activity/activity-testmultitouch.svg new file mode 100644 index 0000000..c74ac2b --- /dev/null +++ b/activity/activity-testmultitouch.svg @@ -0,0 +1,9 @@ +<?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [ + <!ENTITY stroke_color "#010101"> + <!ENTITY fill_color "#FFFFFF"> +]> +<svg viewBox="0 0 55 55" xmlns="http://www.w3.org/2000/svg"> + <path d="M9.263,48.396c0.682,1.152,6.027,0.059,8.246-1.463 c2.102-1.432,3.207-2.596,4.336-2.596c1.133,0,12.54,0.92,20.935-5.715c7.225-5.707,9.773-13.788,4.52-21.437 c-5.252-7.644-13.832-9.08-20.878-8.56C16.806,9.342,4.224,16.91,4.677,28.313c0.264,6.711,3.357,9.143,4.922,10.703 c1.562,1.566,4.545,1.566,2.992,5.588C11.981,46.183,8.753,47.522,9.263,48.396z" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5"/> + <circle cx="20" cy="25" r="5" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" /> + <circle cx="35" cy="30" r="5" fill="&fill_color;" stroke="&stroke_color;" stroke-width="3.5" /> +</svg> diff --git a/activity/activity.info b/activity/activity.info new file mode 100644 index 0000000..d8092fa --- /dev/null +++ b/activity/activity.info @@ -0,0 +1,7 @@ +[Activity] +name = TestMultiTouch +activity_version = 1 +bundle_id = org.sugarlabs.TestMultiTouch +exec = sugar-activity activity.TestMultiTouchActivity +icon = activity-testmultitouch +license = MIT diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..9a141b3 --- /dev/null +++ b/setup.py @@ -0,0 +1,3 @@ +#!/usr/bin/env python +from sugar3.activity import bundlebuilder +bundlebuilder.start() |