X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ecc08ead918856a70559204f9b5daacc49385eaa..71aba8333cc915afff9e740c944f7fa7247abacb:/wxPython/demo/wxScrolledWindow.py?ds=sidebyside diff --git a/wxPython/demo/wxScrolledWindow.py b/wxPython/demo/wxScrolledWindow.py index ca1f8f6619..67ac26e2fa 100644 --- a/wxPython/demo/wxScrolledWindow.py +++ b/wxPython/demo/wxScrolledWindow.py @@ -3,6 +3,8 @@ from wxPython.wx import * import images +BUFFERED = 1 + #--------------------------------------------------------------------------- class MyCanvas(wxScrolledWindow): @@ -12,15 +14,11 @@ class MyCanvas(wxScrolledWindow): self.lines = [] self.maxWidth = 1000 self.maxHeight = 1000 + self.x = self.y = 0 + self.curLine = [] + self.drawing = False - self.SetBackgroundColour(wxNamedColor("WHITE")) - EVT_LEFT_DOWN(self, self.OnLeftButtonEvent) - EVT_LEFT_UP(self, self.OnLeftButtonEvent) - EVT_MOTION(self, self.OnLeftButtonEvent) - - EVT_PAINT(self, self.OnPaint) - - + self.SetBackgroundColour("WHITE") self.SetCursor(wxStockCursor(wxCURSOR_PENCIL)) bmp = images.getTest2Bitmap() mask = wxMaskColour(bmp, wxBLUE) @@ -29,6 +27,21 @@ class MyCanvas(wxScrolledWindow): self.SetScrollbars(20, 20, self.maxWidth/20, self.maxHeight/20) + if BUFFERED: + # Initialize the buffer bitmap. No real DC is needed at this point. + self.buffer = wxEmptyBitmap(self.maxWidth, self.maxHeight) + dc = wxBufferedDC(None, self.buffer) + dc.SetBackground(wxBrush(self.GetBackgroundColour())) + dc.Clear() + self.DoDrawing(dc) + + EVT_LEFT_DOWN(self, self.OnLeftButtonEvent) + EVT_LEFT_UP(self, self.OnLeftButtonEvent) + EVT_MOTION(self, self.OnLeftButtonEvent) + EVT_PAINT(self, self.OnPaint) + ##EVT_MOUSEWHEEL(self, self.OnWheel) + + def getWidth(self): return self.maxWidth @@ -37,18 +50,27 @@ class MyCanvas(wxScrolledWindow): def OnPaint(self, event): - dc = wxPaintDC(self) - self.PrepareDC(dc) - self.DoDrawing(dc) + if BUFFERED: + # Create a buffered paint DC. It will create the real + # wxPaintDC and then blit the bitmap to it when dc is + # deleted. Since we don't need to draw anything else + # here that's all there is to it. + dc = wxBufferedPaintDC(self, self.buffer) + else: + dc = wxPaintDC(self) + self.PrepareDC(dc) + # since we're not buffering in this case, we have to + # paint the whole window, potentially very time consuming. + self.DoDrawing(dc) - def DoDrawing(self, dc): + def DoDrawing(self, dc, printing=False): dc.BeginDrawing() - dc.SetPen(wxPen(wxNamedColour('RED'))) + dc.SetPen(wxPen('RED')) dc.DrawRectangle(5, 5, 50, 50) dc.SetBrush(wxLIGHT_GREY_BRUSH) - dc.SetPen(wxPen(wxNamedColour('BLUE'), 4)) + dc.SetPen(wxPen('BLUE', 4)) dc.DrawRectangle(15, 15, 50, 50) dc.SetFont(wxFont(14, wxSWISS, wxNORMAL, wxNORMAL)) @@ -56,7 +78,7 @@ class MyCanvas(wxScrolledWindow): te = dc.GetTextExtent("Hello World") dc.DrawText("Hello World", 60, 65) - dc.SetPen(wxPen(wxNamedColour('VIOLET'), 4)) + dc.SetPen(wxPen('VIOLET', 4)) dc.DrawLine(5, 65+te[1], 60+te[0], 65+te[1]) lst = [(100,110), (150,110), (150,160), (100,160)] @@ -66,10 +88,15 @@ class MyCanvas(wxScrolledWindow): dc.SetPen(wxGREEN_PEN) dc.DrawSpline(lst+[(100,100)]) - dc.DrawBitmap(self.bmp, 200, 20, true) + dc.DrawBitmap(self.bmp, 200, 20, True) dc.SetTextForeground(wxColour(0, 0xFF, 0x80)) dc.DrawText("a bitmap", 200, 85) +## dc.SetFont(wxFont(14, wxSWISS, wxNORMAL, wxNORMAL)) +## dc.SetTextForeground("BLACK") +## dc.DrawText("TEST this STRING", 10, 200) +## print dc.GetFullTextExtent("TEST this STRING") + font = wxFont(20, wxSWISS, wxNORMAL, wxNORMAL) dc.SetFont(font) dc.SetTextForeground(wxBLACK) @@ -81,28 +108,40 @@ class MyCanvas(wxScrolledWindow): dc.DrawRectangle(50,500,50,50) dc.DrawRectangle(100,500,50,50) - dc.SetPen(wxPen(wxNamedColour('RED'))) + dc.SetPen(wxPen('RED')) dc.DrawEllipticArc(200, 500, 50, 75, 0, 90) - y = 20 - for style in [wxDOT, wxLONG_DASH, wxSHORT_DASH, wxDOT_DASH, wxUSER_DASH]: - pen = wxPen("DARK ORCHID", 1, style) - if style == wxUSER_DASH: - pen.SetDashes([0, 1, 2, 3, 4, 5, 6, 7, 8]) - pen.SetColour("RED") - - dc.SetPen(pen) - dc.DrawLine(300, y, 400, y) - y = y + 10 - + if not printing: + # This has troubles when used on a print preview in wxGTK, + # probably something to do with the pen styles and the scaling + # it does... + y = 20 + for style in [wxDOT, wxLONG_DASH, wxSHORT_DASH, wxDOT_DASH, wxUSER_DASH]: + pen = wxPen("DARK ORCHID", 1, style) + if style == wxUSER_DASH: + pen.SetCap(wxCAP_BUTT) + pen.SetDashes([1,2]) + pen.SetColour("RED") + dc.SetPen(pen) + dc.DrawLine(300, y, 400, y) + y = y + 10 + + dc.SetBrush(wxTRANSPARENT_BRUSH) + dc.SetPen(wxPen(wxColour(0xFF, 0x20, 0xFF), 1, wxSOLID)) + dc.DrawRectangle(450, 50, 100, 100) + old_pen = dc.GetPen() + new_pen = wxPen("BLACK", 5) + dc.SetPen(new_pen) + dc.DrawRectangle(470, 70, 60, 60) + dc.SetPen(old_pen) + dc.DrawRectangle(490, 90, 20, 20) self.DrawSavedLines(dc) dc.EndDrawing() - def DrawSavedLines(self, dc): - dc.SetPen(wxPen(wxNamedColour('MEDIUM FOREST GREEN'), 4)) + dc.SetPen(wxPen('MEDIUM FOREST GREEN', 4)) for line in self.lines: for coords in line: apply(dc.DrawLine, coords) @@ -119,25 +158,37 @@ class MyCanvas(wxScrolledWindow): def OnLeftButtonEvent(self, event): if event.LeftDown(): + self.SetFocus() self.SetXY(event) self.curLine = [] self.CaptureMouse() + self.drawing = True + + elif event.Dragging() and self.drawing: + if BUFFERED: + # If doing buffered drawing, create the buffered DC, giving it + # it a real DC to blit to when done. + cdc = wxClientDC(self) + self.PrepareDC(cdc) + dc = wxBufferedDC(cdc, self.buffer) + else: + dc = wxClientDC(self) + self.PrepareDC(dc) - elif event.Dragging(): - dc = wxClientDC(self) - self.PrepareDC(dc) dc.BeginDrawing() - dc.SetPen(wxPen(wxNamedColour('MEDIUM FOREST GREEN'), 4)) + dc.SetPen(wxPen('MEDIUM FOREST GREEN', 4)) coords = (self.x, self.y) + self.ConvertEventCoords(event) self.curLine.append(coords) apply(dc.DrawLine, coords) self.SetXY(event) dc.EndDrawing() - elif event.LeftUp(): + + elif event.LeftUp() and self.drawing: self.lines.append(self.curLine) self.curLine = [] self.ReleaseMouse() + self.drawing = False ## This is an example of what to do for the EVT_MOUSEWHEEL event, @@ -149,6 +200,7 @@ class MyCanvas(wxScrolledWindow): ## delta = evt.GetWheelDelta() ## rot = evt.GetWheelRotation() ## linesPer = evt.GetLinesPerAction() +## print delta, rot, linesPer ## ws = self.wheelScroll ## ws = ws + rot ## lines = ws / delta @@ -172,13 +224,14 @@ def runTest(frame, nb, log): +overview = """\ +""" +if __name__ == '__main__': + import sys,os + import run + run.main(['', os.path.basename(sys.argv[0])]) - - - -overview = """\ -"""