From ea1c1ca1883a597f82ee7f2c8f7ec66777d698ee Mon Sep 17 00:00:00 2001 From: Joshua Minor Date: Thu, 10 Jan 2008 09:35:01 +0000 Subject: Missed files. --- (limited to 'Speak.activity/glasses.py') diff --git a/Speak.activity/glasses.py b/Speak.activity/glasses.py new file mode 100644 index 0000000..afc68ef --- /dev/null +++ b/Speak.activity/glasses.py @@ -0,0 +1,83 @@ +# Speak.activity +# A simple front end to the espeak text-to-speech engine on the XO laptop +# +# Copyright (C) 2008 Joshua Minor +# This file is part of Speak.activity +# +# Parts of Speak.activity are based on code from Measure.activity +# Copyright (C) 2007 Arjun Sarwal - arjun@laptop.org +# +# Speak.activity 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. +# +# Foobar 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 Foobar. If not, see . + +from eye import * + +class Glasses(Eye): + def __init__(self): + Eye.__init__(self) + + def expose(self, widget, event): + bounds = self.get_allocation() + + mouseX, mouseY = self.get_mouse() + + eyeSize = min(bounds.width, bounds.height) + outlineWidth = eyeSize/20.0 + pupilSize = eyeSize/10.0 + pupilX = max(min(mouseX - bounds.x, bounds.width), 0) + pupilY = max(min(mouseY - bounds.y, bounds.height), 0) + dX = pupilX - bounds.width/2. + dY = pupilY - bounds.height/2. + distance = math.sqrt(dX*dX + dY*dY) + limit = eyeSize/2 - outlineWidth*2 - pupilSize + if distance > limit: + pupilX = bounds.width/2 + dX*limit/distance + pupilY = bounds.height/2 + dY*limit/distance + + self.context = widget.window.cairo_create() + #self.context.set_antialias(cairo.ANTIALIAS_NONE) + + #set a clip region for the expose event. This reduces redrawing work (and time) + self.context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) + self.context.clip() + + # background + self.context.set_source_rgb(.5,.5,.5) + self.context.rectangle(0,0,bounds.width,bounds.height) + self.context.fill() + + def roundrect(x1,y1, x2,y2): + self.context.move_to(x1, (y1+y2)/2.) + self.context.curve_to(x1,y1, x1,y1, (x1+x2)/2.,y1) + self.context.curve_to(x2,y1, x2,y1, x2,(y1+y2)/2.) + self.context.curve_to(x2,y2, x2,y2, (x1+x2)/2.,y2) + self.context.curve_to(x1,y2, x1,y2, x1,(y1+y2)/2.) + + # eye ball + roundrect(outlineWidth,outlineWidth, bounds.width-outlineWidth,bounds.height-outlineWidth) + self.context.set_source_rgb(1,1,1) + self.context.fill() + + # outline + self.context.set_line_width(outlineWidth) + roundrect(outlineWidth,outlineWidth, bounds.width-outlineWidth,bounds.height-outlineWidth) + #roundrect(0,0, bounds.width,bounds.height) + self.context.set_source_rgb(0,0,0) + self.context.stroke() + + # pupil + self.context.arc(pupilX,pupilY,pupilSize,0,360) + self.context.set_source_rgb(0,0,0) + self.context.fill() + + return True -- cgit v0.9.1