]> git.saurik.com Git - wxWidgets.git/commitdiff
Continued tests of drawing a widget to a DC
authorRobin Dunn <robin@alldunn.com>
Wed, 5 Jan 2005 00:32:40 +0000 (00:32 +0000)
committerRobin Dunn <robin@alldunn.com>
Wed, 5 Jan 2005 00:32:40 +0000 (00:32 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31237 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/misc/drawwidget.py [new file with mode: 0644]
wxPython/src/_misc.i

diff --git a/wxPython/misc/drawwidget.py b/wxPython/misc/drawwidget.py
new file mode 100644 (file)
index 0000000..2355759
--- /dev/null
@@ -0,0 +1,353 @@
+
+
+import wx
+
+testItems = [
+    "", 
+    "BitmapButton",
+    "Button",
+    "CalendarCtrl",
+    "CheckBox",
+    "CheckListBox",
+    "Choice",
+    "ComboBox",
+    "Gauge",
+    "GenericDirCtrl",
+    "ListBox",
+    "ListCtrl",
+    "RadioBox",
+    "RadioButton",
+    "ScrollBar",
+    "Slider",
+    "SpinButton",
+    "SpinCtrl",
+    "StaticBitmap",
+    "StaticBox",
+    "StaticLine",
+    "StaticText",
+    "TextCtrl",
+    "ToggleButton",
+    "TreeCtrl",
+    "--------------",
+    "Panel",
+    "Panel With Border",
+    "Panel With BG",
+    "Panel With Controls",
+    "Panel With RadioBox",
+    "--------------",
+    "GenericButton",
+    
+    ]
+
+import keyword
+testChoices = keyword.kwlist
+
+testChoices2 = "one two three four five six seven eight nine".split()
+
+
+
+
+class Frame(wx.Frame):
+    def __init__(self):
+        wx.Frame.__init__(self, None, title="Draw Widget Test")
+        self.left = wx.Panel(self)
+        self.right = DisplayPanel(self)
+        self.widget = None
+
+        sizer = wx.BoxSizer(wx.HORIZONTAL)
+        sizer.Add(self.left, 1, wx.EXPAND)
+        sizer.Add(self.right, 1, wx.EXPAND)
+        self.SetSizer(sizer)
+        
+        menu = wx.Menu()
+        menu.Append(wx.ID_EXIT, "E&xit\tAlt-X")
+        self.Bind(wx.EVT_MENU, self.OnExit, id=wx.ID_EXIT)
+        mbar = wx.MenuBar()
+        mbar.Append(menu, "&File")
+        self.SetMenuBar(mbar)
+
+        cb = wx.ComboBox(self.left, -1, pos=(20,20),
+                         choices=testItems, style=wx.CB_READONLY)
+        self.Bind(wx.EVT_COMBOBOX, self.OnWidgetChosen, cb)
+
+
+    def OnWidgetChosen(self, evt):
+        item = evt.GetString()
+        item = item.replace(" ", "_")
+        func = getattr(self, "Test"+item, None)
+        if func is not None:
+            func(self.left)
+                    
+    def OnExit(self, evt):
+        self.Close()
+
+
+
+    def DoWidget(self, widget):
+        self.right.Empty()
+        if self.widget is not None:
+            self.widget.Destroy()
+        self.widget = widget
+        if widget is None:
+            return
+
+        visiblePos = (20,80)
+        hiddenPos = (-1000,-1000)
+        
+        widget.SetPosition(visiblePos)
+        widget.Update()
+        self.GetBMP(0)  # Uses just a DC.Blit, so it must be visible
+
+        # the rest should work when the widget is not visible.
+        widget.SetPosition(hiddenPos)
+        widget.Update()
+        self.Update()
+        
+        self.GetBMP(1)
+        self.GetBMP(2)
+        self.GetBMP(4)
+
+        # make it visible again for the user to compare
+        widget.SetPosition(visiblePos)
+
+
+    def GetBMP(self, method):
+        w = self.widget
+        maskClr = wx.Colour(12, 34, 56)
+        sz = w.GetSize()
+        bmp = wx.EmptyBitmap(sz.width, sz.height)
+        dc = wx.MemoryDC()
+        dc.SelectObject(bmp)
+        dc.SetBackground(wx.Brush(maskClr))
+        dc.Clear()
+
+        if method == 0:
+            wdc = wx.WindowDC(w)
+            dc.Blit(0,0, sz.width, sz.height, wdc, 0, 0)
+        else:            
+            wx.DrawWindowOnDC(w, dc, method)
+
+        dc.SelectObject(wx.NullBitmap)
+        bmp.SetMaskColour(maskClr)
+        self.right.SetBMP(bmp, method)
+
+
+
+        
+
+    def Test(self, p):
+        self.DoWidget(None)
+
+    def TestBitmapButton(self, p):
+        self.DoWidget(wx.BitmapButton(p, -1,
+                                      wx.Bitmap("image.png")))
+    def TestButton(self, p):
+        self.DoWidget(wx.Button(p, -1, "A button"))
+
+    def TestCalendarCtrl(self, p):
+        import wx.calendar
+        w = wx.calendar.CalendarCtrl(p, style=wx.calendar.CAL_SEQUENTIAL_MONTH_SELECTION)
+        self.DoWidget(w)
+        
+    def TestCheckBox(self, p):
+        self.DoWidget(wx.CheckBox(p, -1, "checkbox"))
+
+    def TestCheckListBox(self, p):
+        w = wx.CheckListBox(p, -1, choices=testChoices)
+        w.SetSelection(2)        
+        self.DoWidget(w)
+
+    def TestChoice(self, p):
+        w = wx.Choice(p, -1, choices=testChoices)
+        w.SetSelection(2)
+        self.DoWidget(w)
+
+    def TestComboBox(self, p):
+        w = wx.ComboBox(p, -1, choices=testChoices)
+        w.SetSelection(2)
+        self.DoWidget(w)
+    
+    def TestGauge(self, p):
+        w = wx.Gauge(p, -1, 100, size=(150, -1))
+        w.SetValue(65)
+        self.DoWidget(w)
+    
+    def TestGenericDirCtrl(self, p):
+        w = wx.GenericDirCtrl(p, size=(150,200), style=wx.DIRCTRL_DIR_ONLY)
+        self.DoWidget(w)
+    
+    def TestListBox(self, p):
+        w = wx.ListBox(p, -1, choices=testChoices)
+        w.SetSelection(2)        
+        self.DoWidget(w)
+    
+    def TestListCtrl(self, p):
+        w = wx.ListCtrl(p, -1, size=(250, 100), style=wx.LC_REPORT)
+        w.InsertColumn(0, "Col 1")
+        w.InsertColumn(1, "Col 2")
+        w.InsertColumn(2, "Col 3")
+        for x in range(10):
+            w.InsertStringItem(x, str(x))
+            w.SetStringItem(x, 1, str(x))
+            w.SetStringItem(x, 2, str(x))
+        self.DoWidget(w)
+    
+    def TestRadioBox(self, p):
+        w = wx.RadioBox(p, -1, "RadioBox",
+                        choices=testChoices2, majorDimension=3)
+        self.DoWidget(w)
+    
+    def TestRadioButton(self, p):
+        self.DoWidget(wx.RadioButton(p, -1, "RadioButton"))
+    
+    def TestScrollBar(self, p):
+        w = wx.ScrollBar(p, -1, size=(150,-1))
+        w.SetScrollbar(25, 5, 100, 10)
+        self.DoWidget(w)
+    
+    def TestSlider(self, p):
+        w = wx.Slider(p, -1, size=(150,-1))
+        self.DoWidget(w)
+    
+    def TestSpinButton(self, p):
+        w = wx.SpinButton(p, -1)
+        self.DoWidget(w)
+    
+    def TestSpinCtrl(self, p):
+        w = wx.SpinCtrl(p, -1)
+        self.DoWidget(w)
+    
+    def TestStaticBitmap(self, p):
+        w = wx.StaticBitmap(p, -1, wx.Bitmap("image.png"))
+        self.DoWidget(w)
+    
+    def TestStaticBox(self, p):
+        w = wx.StaticBox(p, -1, "StaticBox", size=(150,75))
+        self.DoWidget(w)
+    
+    def TestStaticLine(self, p):
+        w = wx.StaticLine(p, -1, size=(150,-1))
+        self.DoWidget(w)
+    
+    def TestStaticText(self, p):
+        w = wx.StaticText(p, -1, "This is a wx.StaticText")
+        self.DoWidget(w)
+    
+    def TestTextCtrl(self, p):
+        self.DoWidget(wx.TextCtrl(p, -1, "This is a TextCtrl", size=(150,-1)))
+
+    def TestToggleButton(self, p):
+        w = wx.ToggleButton(p, -1, "Toggle Button")
+        self.DoWidget(w)
+    
+    def TestTreeCtrl(self, p):
+        w = wx.TreeCtrl(p, -1, size=(150,200))
+        root = w.AddRoot("The Root Item")
+        for x in range(15):
+            child = w.AppendItem(root, "Item %d" % x)
+        w.Expand(root)
+        self.DoWidget(w)
+    
+    def TestPanel(self, p):
+        w = wx.Panel(p, size=(100,100))
+        self.DoWidget(w)
+    
+    def TestPanel_With_Border(self, p):
+        w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER)
+        self.DoWidget(w)
+
+    def TestPanel_With_BG(self, p):
+        w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER)
+        w.SetBackgroundColour("pink")
+        self.DoWidget(w)
+
+    def TestPanel_With_Controls(self, p):
+        w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER)
+        l1 = wx.StaticText(w, -1, "Name:")
+        l2 = wx.StaticText(w, -1, "Email:")
+        t1 = wx.TextCtrl(w, -1, "", size=(120,-1))
+        t2 = wx.TextCtrl(w, -1, "", size=(120,-1))
+        btn = wx.Button(w, wx.ID_OK)
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        fgs = wx.FlexGridSizer(2,2,5,5)
+        fgs.Add(l1)
+        fgs.Add(t1)
+        fgs.Add(l2)
+        fgs.Add(t2)
+        sizer.Add(fgs, 0, wx.ALL, 10)
+        sizer.Add(btn, 0, wx.ALL, 10)
+        w.SetSizerAndFit(sizer)
+        self.DoWidget(w)
+
+    def TestPanel_With_RadioBox(self, p):
+        w = wx.Panel(p, size=(100,100), style=wx.SUNKEN_BORDER)
+        wx.RadioBox(w, -1, "RadioBox", pos=(10,10),
+                    choices=testChoices2, majorDimension=3)
+        w.Fit()
+        self.DoWidget(w)
+
+    def TestGenericButton(self, p):
+        import wx.lib.buttons as b
+        w = b.GenButton(p, -1, "Generic Button")
+        w.SetFont(wx.Font(20, wx.SWISS, wx.NORMAL, wx.BOLD, False))
+        w.SetBezelWidth(5)
+        w.SetBestSize()
+        w.SetBackgroundColour("Navy")
+        w.SetForegroundColour(wx.WHITE)
+        self.DoWidget(w)
+    
+    def TestT(self, p):
+        self.DoWidget(w)
+    
+    def TestT(self, p):
+        self.DoWidget(w)
+    
+    def TestT(self, p):
+        self.DoWidget(w)
+    
+    def TestT(self, p):
+        self.DoWidget(w)
+    
+
+
+
+
+
+
+class DisplayPanel(wx.Panel):
+    def __init__(self, parent, ID=-1):
+        wx.Panel.__init__(self, parent, ID)
+        self.SetBackgroundColour("sky blue")
+        self.Empty()
+        self.Bind(wx.EVT_PAINT,            self.OnPaint)
+        self.Bind(wx.EVT_ERASE_BACKGROUND, self.OEB)
+
+    def Empty(self):
+        self.bmps = [None] * 5
+        self.Refresh()
+
+    def SetBMP(self, bmp, method):
+        self.bmps[method] = bmp
+        self.Refresh()
+
+    def OEB(self, evt):
+        None
+
+    def OnPaint(self, evt):
+        dc = wx.BufferedPaintDC(self)
+        dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
+        dc.Clear()
+        y = 25
+        for idx, bmp in enumerate(self.bmps):
+            if bmp is not None:
+                dc.DrawText(str(idx), 15, y)
+                dc.DrawBitmap(bmp, 30,y, True)
+                y += bmp.GetHeight() + 15
+
+
+
+app = wx.App(False)
+f = Frame()
+f.SetSize((600,600))
+f.Show()
+app.MainLoop()
index 15d4c69340cbeac570d0e1acca65d0d21ae82141..ac6d122ecee48bf702b9b08b6dec18e8e3c04986 100644 (file)
@@ -279,14 +279,15 @@ void wxDrawWindowOnDC(wxWindow* window, const wxDC& dc, int method)
             }
             if (pfnPrintWindow)
             {
-                printf("Using PrintWindow\n");
+                //printf("Using PrintWindow\n");
                 pfnPrintWindow(GetHwndOf(window), GetHdcOf(dc), 0);
             }
             else
             {
-                printf("Using WM_PRINT\n");
+                //printf("Using WM_PRINT\n");
                 ::SendMessage(GetHwndOf(window), WM_PRINT, (long)GetHdcOf(dc),
-                              PRF_CLIENT | PRF_NONCLIENT | PRF_CHILDREN | PRF_ERASEBKGND | PRF_OWNED );
+                              PRF_CLIENT | PRF_NONCLIENT | PRF_CHILDREN |
+                              PRF_ERASEBKGND | PRF_OWNED );
             }
     }
 #endif