Painting How-To [Screwed up last mail list]

Gmail soutojohn at gmail.com
Mon Dec 3 22:09:15 PST 2007


Skipped content of type multipart/alternative-------------- next part -----=
---------
import wx

ID_TOOL_BRUSH=3Dwx.NewId()
ID_TOOL_LINE=3Dwx.NewId()

class PaintCanvas(wx.Panel):
	def __init__(self, parent):
		wx.Panel.__init__(self, parent, -1)

		self.buffer=3Dwx.EmptyBitmap(256, 256)

		self.left_down=3DFalse
		self.right_down=3DFalse
		self.last_x=3D0
		self.last_y=3D0
		self.selected_x=3D-1
		self.selected_y=3D-1
		self.control_panel=3DControlPanel()

		self.Bind(wx.EVT_PAINT, self.OnPaint)
		self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
		self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp)
		self.Bind(wx.EVT_RIGHT_DOWN, self.OnRightDown)
		self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)
		self.Bind(wx.EVT_MOTION, self.OnMotion)

	def UpdateCoords(self, event):
		self.last_x=3Devent.GetX()
		self.last_y=3Devent.GetY()

	def Draw(self, event, tool=3D-1):
		if tool=3D=3D-1: =

			tool=3Dself.control_panel.selected_tool

		try:
			x, y=3Devent.GetX(), event.GetY()
		except AttributeError, e:
			x, y=3Dself.last_x, self.last_y

		dc=3Dwx.BufferedDC(wx.ClientDC(self), self.buffer)
		dc.DrawBitmap(self.buffer, 0, 0)

		colour=3Dwx.Colour(*self.control_panel.GetColour())
		colour2=3Dwx.Colour(*self.control_panel.GetColour(1))

		if self.right_down and not self.left_down:
			colour, colour2=3Dcolour2, colour

		dc.SetPen(wx.Pen(colour, self.control_panel.line_width))
		dc.SetBrush(wx.Brush(colour))

		if tool=3D=3DID_TOOL_BRUSH:
			dc.DrawLine(self.last_x, self.last_y, x, y)

		elif tool=3D=3DID_TOOL_LINE:
			if self.selected_x=3D=3D-1 or self.selected_y=3D=3D-1:
				self.selected_x=3Dx
				self.selected_y=3Dy
			else:
				#dc.DrawLine(self.selected_x, self.selected_y, self.last_x, self.last_y)
				self.Refresh(True)

	def OnLeftDown(self, event):
		self.left_down=3DTrue
		self.SetFocus()
		self.UpdateCoords(event)
		self.Draw(event)

	def OnLeftUp(self, event):
		self.left_down=3DFalse
		self.UpdateCoords(event)
		self.selected_x=3D-1
		self.selected_y=3D-1

	def OnRightDown(self, event):
		self.right_down=3DTrue
		self.SetFocus()
		self.UpdateCoords(event)
		self.Draw(event)

	def OnRightUp(self, event):
		self.right_down=3DFalse
		self.UpdateCoords(event)
		self.selected_x=3D-1
		self.selected_y=3D-1

	def OnMotion(self, event):
		if self.left_down or self.right_down:
			self.Draw(event)
			self.UpdateCoords(event)
		self.last_x=3Devent.GetX()
		self.last_y=3Devent.GetY()

	def OnPaint(self, event):
		#dc=3Dwx.BufferedPaintDC(self, self.buffer)
		dc=3Dwx.PaintDC(self)
		dc.DrawBitmap(self.buffer, 0, 0)

		colour=3Dwx.Colour(*self.control_panel.GetColour())
		colour2=3Dwx.Colour(*self.control_panel.GetColour(1))

		if self.right_down and not self.left_down:
			colour, colour2=3Dcolour2, colour

		dc.SetPen(wx.Pen(colour, self.control_panel.line_width))
		dc.SetBrush(wx.Brush(colour))

		if self.control_panel.selected_tool=3D=3DID_TOOL_LINE and self.selected_x=
 > -1:
			dc.DrawLine(self.selected_x, self.selected_y, self.last_x, self.last_y)


class ControlPanel:
	def __init__(self):
		self.selected_tool=3DID_TOOL_LINE
		self.line_width=3D4

	def GetColour(self, index=3D0):
		if not index:
			return (255, 0, 0)
		else:
			return (0, 0, 255)


if __name__=3D=3D'__main__':
	a=3Dwx.App(0)
	f=3Dwx.Frame(None, -1, 'Paint Test')
	PaintCanvas(f)
	f.Show()
	a.MainLoop()


More information about the wxpython-users mailing list