# sri, oct 15, 2006
# under mit license
# used Nokia's ball.py example as reference implementation;
# Menu Key: allows you to select type of brush
# Exit: exit app
# Hash Key (#): take a pic
# Star Key (*): for fun!
import appuifw, graphics, e32
from key_codes import *
class Keyboard:
def __init__(self):
self.state = {}
self.downs = {}
def handle_event(self, event):
code = event.get("scancode", False)
if event["type"] == appuifw.EEventKeyDown:
if not self.is_down(code):
self.downs[code] = self.downs.get(code, 0) + 1
self.state[code] = 1
elif event["type"] == appuifw.EEventKeyUp:
self.state[code] = 0
def is_down(self, scancode):
return self.state.get(scancode, 0)
def pressed(self, scancode):
if self.downs.get(scancode, 0):
self.downs[scancode] -= 1
return True
return False
# --------------------------------------------------------------------
gravitate = False # brush it a bouncing ball
justpaint = False # brush is a brush, OK?
def do_gravitate():
global gravitate, justpaint
gravitate = True
justpaint = False
def do_justpaint():
global justpaint, gravitate
justpaint = True
gravitate = False
appuifw.app.menu = [
(u"Gravitate", do_gravitate),
(u"Just paint", do_justpaint)
]
keyboard = Keyboard()
running = True
def quit():
global running
running = False
appuifw.app.exit_key_handler = quit
appuifw.app.screen = "full"
appuifw.app.body = c = appuifw.Canvas(
event_callback=keyboard.handle_event)
call_me_bob_ross = 0
radius = min(c.size)/2
xcenter, ycenter = c.size[0]/2, c.size[1]/2
topleft = (xcenter-radius,
ycenter-radius)
bottomright = (xcenter+radius,
ycenter+radius)
# ball stuff:
position = [0, 0]
velocity = [0, 0]
acceleration = 0.05
gravity = 0.03
c_size = c.size
#oldposition = position
# ball color stuff:
coloridx = 0
allcolors = []
tmp = (0, 32, 64, 128, 255)
for r in tmp:
for g in tmp:
for b in tmp:
allcolors.append((r, g, b))
allcolors_len = len(allcolors)
# --------------------------------------------------------------------
while running:
coloridx += 1
if coloridx >= allcolors_len:
coloridx = 0
c.point(position,
allcolors[coloridx],
width=15)
if call_me_bob_ross%2 != 0:
c.ellipse(((0,0), c.size),
outline=(255, 0, 0), # red,
width=1)
e32.ao_yield()
if gravitate:
# -----------------------------------------------------
velocity[0] *= 0.999
velocity[1] *= 0.999
velocity[1] += gravity
oldposition = position
position[0] += velocity[0]
position[1] += velocity[1]
if position[0] > c_size[0]:
position[0] = c_size[0] - (position[0] - c_size[0])
velocity[0] = -1.00 * velocity[0]
velocity[1] = 1.00 * velocity[1]
if position[0] < 0:
position[0] = -position[0]
velocity[0] = -1.00 * velocity[0]
velocity[1] = 1.00 * velocity[1]
if position[1] > c_size[1]:
position[1] = c_size[1] - (position[1] - c_size[1])
velocity[0] = 1.00 * velocity[0]
velocity[1] = -1.00 * velocity[1]
if position[1] < 0:
position[1] = -position[1]
velocity[0] = 1.00 * velocity[0]
velocity[1] = -1.00 * velocity[1]
if keyboard.is_down(EScancodeLeftArrow):
velocity[0] -= acceleration
if keyboard.is_down(EScancodeRightArrow):
velocity[0] += acceleration
if keyboard.is_down(EScancodeDownArrow):
velocity[1] += acceleration
if keyboard.is_down(EScancodeUpArrow):
velocity[1] -= acceleration
# -----------------------------------------------------
else:
# just paint
if keyboard.is_down(EScancodeLeftArrow):
position[0] -= 1
if keyboard.is_down(EScancodeRightArrow):
position[0] += 1
if keyboard.is_down(EScancodeDownArrow):
position[1] += 1
if keyboard.is_down(EScancodeUpArrow):
position[1] -= 1
# common actions:
if keyboard.pressed(EScancodeHash):
if call_me_bob_ross%2 != 0:
c.ellipse(((0,0), c.size),
outline=(255, 255, 255),
width=100)
img = graphics.screenshot()
img = img.resize((174, 143), keepaspect=1)
img.save(u"E:\\screenshot.jpg")
elif keyboard.pressed(EScancodeStar):
c.clear()
elif keyboard.pressed(EScancode0):
call_me_bob_ross += 1
15 October 2006
flowering.py
I've been playing with a Paint-like program on my 6600 (with Python for Series 60). The cool things is after I paint a picture, I can take a screenshot of it and use that image as the background for my phone. To paint the second pic (the first one is similar), you first gravitate (bounce ball), then pretend you are Bob Ross (hit zero key) (remember Bob Ross's paintings? occasionally, before starting, he would put an oval cut out over the actual canvas he was painting on — after he was done, he would remove the cutout and all of a sudden the painting itself would be oval shaped..), then realize that you really don't need to be him (hit zero key again) and finally start gravitating once again. Here are some flowerings:
The program, flowering.py isn't well polished:



