All pastes #793600 Raw Edit

Unnamed

public python v1 · immutable
·published 2007-11-22 12:37 UTC
rendered paste body
 from id import * class PaintPage(wx.Panel):	def __init__(self, parent):		wx.Panel.__init__(self, parent, -1)		self.buffer=wx.EmptyBitmap(64, 64)		self.width=self.buffer.GetWidth()		self.widthf=float(self.width)		self.height=self.buffer.GetHeight()		self.heightf=float(self.height)		self.drawing=False		self.SetBackgroundColour("GRAY")		self.zoom_levels=[0.5, 1, 2, 4, 8]		self.zoom=1		self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftMouseDown)		self.Bind(wx.EVT_LEFT_UP, self.OnLeftMouseUp)		self.Bind(wx.EVT_MOTION, self.OnMouseMotion)		self.Bind(wx.EVT_PAINT, self.OnPaint)		self.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheel)		self.InitTest()	def InitTest(self):		dc=wx.BufferedDC(wx.ClientDC(self), self.buffer)		switch=0		pens=[wx.Pen('WHITE', 1.0), wx.Pen('GRAY', 1.0)]		for x in xrange(self.width):			if switch: switch=0			else: switch=1			for y in xrange(self.height):				if switch: switch=0				else: switch=1				dc.SetPen(pens[switch])				dc.DrawPoint(x, y)		self.Refresh(False)	def OnPaint(self, event):		blowup=self.buffer.ConvertToImage().Scale(self.width * self.zoom_levels[self.zoom], self.height * self.zoom_levels[self.zoom]).ConvertToBitmap()		dc=wx.BufferedPaintDC(self, blowup)#, wx.BUFFER_CLIENT_AREA)	def OnLeftMouseDown(self, event):		if event.LeftDown():			self.SetFocus()			self.SetXY(event)			self.CaptureMouse()			self.drawing=True			self.OnMouseMotion(event, True)	def OnLeftMouseUp(self, event):		if not event.LeftDown() and self.drawing:			self.ReleaseMouse()			self.drawing=False	def OnMouseMotion(self, event, override=False):		if (event.Dragging() or override) and self.drawing:			dc=wx.BufferedDC(wx.ClientDC(self), self.buffer)			dc.BeginDrawing()			dc.SetPen(wx.Pen('BLUE', 1.0 * (self.width * self.zoom_levels[self.zoom] / self.widthf)))			dc.SetUserScale(1.0 / (self.width * self.zoom_levels[self.zoom] / self.widthf), 1.0 / (self.height * self.zoom_levels[self.zoom] / self.heightf))			coordinates=(self.x, self.y) + (event.GetX(), event.GetY())			dc.DrawLine(*coordinates)			dc.EndDrawing()			self.SetXY(event)			self.Refresh(False)	def OnMouseWheel(self, event):		if event.GetWheelRotation() > 0:			if self.zoom < len(self.zoom_levels)-1:				self.zoom+=1				self.Refresh()		else:			if self.zoom > 0:				self.zoom-=1				self.Refresh()	def SetXY(self, event):		self.x, self.y=event.GetX(), event.GetY()