예제 #1
0
 def OnPaint(self):
     if not self._win_paint_broken:
         try:
             win = self._win
             dc, ps = win.BeginPaint()
             try:
                 win_update_rect = ps[2]
                 if not empty_rect(win_update_rect):
                     #print "DrawableContainer.OnPaint: win_update_rect =", win_update_rect ###
                     scroll_offset = self._win_scroll_offset()
                     view_update_rect = offset_rect(win_update_rect, scroll_offset)
                     if self._double_buffer:
                         dx, dy = rect_topleft(view_update_rect)
                         width, height = rect_size(view_update_rect)
                         buffer = gdi.Bitmap(width, height)
                         canvas = Canvas._from_win_image(buffer)
                         canvas.translate(-dx, -dy)
                         self.draw(canvas, view_update_rect)
                         graphics = gdi.Graphics.from_dc(dc)
                         src_rect = (0, 0, width, height)
                         graphics.DrawImage_rr(buffer, win_update_rect, src_rect)
                     else:
                         self._win_prepare_dc(dc)
                         canvas = Canvas._from_win_dc(dc)
                         self.draw(canvas, view_update_rect)
             finally:
                 win.EndPaint(ps)
         except Exception:
             self._win_paint_broken = True
             raise
예제 #2
0
    def OnPaint(self):
        if not self._win_paint_broken:
            try:
                win = self._win
                dc, ps = win.BeginPaint()
                try:
                    win_update_rect = ps[2]
                    if not empty_rect(win_update_rect):
                        #print "DrawableContainer.OnPaint: win_update_rect =", win_update_rect ###
                        scroll_offset = self._win_scroll_offset()
                        view_update_rect = offset_rect(win_update_rect,
                                                       scroll_offset)
                        if self._double_buffer:
                            dx, dy = rect_topleft(view_update_rect)
                            width, height = rect_size(view_update_rect)
                            #GDIPlus draw large image in very bad performance
                            #use GDI instead
                            #buffer = gdi.Bitmap(width, height)
                            #canvas = Canvas._from_win_image(buffer)
                            #canvas.translate(-dx, -dy)
                            #self.draw(canvas, view_update_rect)
                            #graphics = gdi.Graphics.from_dc(dc)
                            #src_rect = (0, 0, width, height)
                            #graphics.DrawImage_rr(buffer, win_update_rect, src_rect)

                            c_dc = dc.CreateCompatibleDC(dc)
                            c_dm = ui.CreateBitmap()
                            c_dm.CreateCompatibleBitmap(dc, width, height)
                            old = c_dc.SelectObject(c_dm)
                            c_dc.SetViewportOrg((-dx, -dy))
                            canvas = Canvas._from_win_dc(c_dc)

                            self.draw(canvas, view_update_rect)

                            l, t = rect_topleft(win_update_rect)
                            dc.BitBlt((l, t), (width, height), c_dc, (0, 0),
                                      win32con.SRCCOPY)
                            c_dc.SelectObject(old)
                        else:
                            self._win_prepare_dc(dc)
                            canvas = Canvas._from_win_dc(dc)
                            self.draw(canvas, view_update_rect)
                finally:
                    win.EndPaint(ps)
            except Exception:
                self._win_paint_broken = True
                raise
예제 #3
0
파일: Pixmap.py 프로젝트: mnabeelp/PyGUI
	def with_canvas(self, proc):
		NSGraphicsContext.__class__.saveGraphicsState()
		NSGraphicsContext.setCurrentContext_(self._ns_graphics_context)
		try:
			canvas = Canvas()
			proc(canvas)
		finally:
			NSGraphicsContext.__class__.restoreGraphicsState()
예제 #4
0
 def with_canvas(self, body):
     win = self._win
     dc = win.GetDC()
     self._win_prepare_dc(dc)
     try:
         canvas = Canvas._from_win_dc(dc)
         body(canvas)
     finally:
         win.ReleaseDC(dc)
예제 #5
0
 def _gtk_expose_event_signal(self, gtk_event):
     try:
         #print "View._gtk_expose_event_signal:", self ###
         l, t, w, h = gtk_event.area
         clip = (l, t, l + w, t + h)
         #print "...clip =", clip ###
         gtk_layout = self._gtk_inner_widget
         canvas = Canvas._from_gdk_drawable(gtk_layout.bin_window)
         update = self._draw_background(canvas, clip)
         self.draw(canvas, update)
     except:
         print "------------------ Exception while drawing ------------------"
         traceback.print_exc()
 def _gtk_expose_event_signal(self, gtk_event):
     try:
         #print "View._gtk_expose_event_signal:", self ###
         l, t, w, h = gtk_event.area
         clip = (l, t, l + w, t + h)
         #print "...clip =", clip ###
         gtk_layout = self._gtk_inner_widget
         canvas = Canvas._from_gdk_drawable(gtk_layout.bin_window)
         update = self._draw_background(canvas, clip)
         self.draw(canvas, update)
     except:
         print "------------------ Exception while drawing ------------------"
         traceback.print_exc()
예제 #7
0
파일: Printing.py 프로젝트: mnabeelp/PyGUI
 def print_view(self, page_setup, prompt=True):
     paginator = Paginator(self, page_setup)
     psd = page_setup._win_psd
     pd = wp.PRINTDLG()
     pd.hDevMode = psd.hDevMode
     pd.hDevNames = psd.hDevNames
     pd.nMinPage = 1
     pd.nMaxPage = paginator.num_pages
     pd.nCopies = 1
     if wp.PrintDlg(pd):
         title = self.print_title
         di = wp.DOCINFO()
         di.lpszDocName = title
         devnames = wps.DevNames(psd.hDevNames)
         if devnames.output == "FILE:":
             from FileDialogs import request_new_file
             f = request_new_file("Print '%s' to file:" % title)
             if not f:
                 return
             output_path = f.path
             di.lpszOutput = output_path
         try:
             hdc = pd.hDC
             dx, dy = wp.GetPrintingOffset(hdc)
             print "TODO: Printable: Implement a Cancel dialog"  ###
             #wp.install_abort_proc(hdc)
             wp.StartDoc(hdc, di)
             for page_num in xrange(pd.nFromPage - 1, pd.nToPage):
                 wp.StartPage(hdc)
                 canvas = Canvas._from_win_hdc(hdc, for_printing=True)
                 canvas.translate(-dx, -dy)
                 paginator.draw_page(canvas, page_num)
                 wp.EndPage(hdc)
             wp.EndDoc(hdc)
         finally:
             wp.DeleteDC(hdc)
예제 #8
0
 def print_view(self, page_setup, prompt = True):
     paginator = Paginator(self, page_setup)
     psd = page_setup._win_psd
     pd = wp.PRINTDLG()
     pd.hDevMode = psd.hDevMode
     pd.hDevNames = psd.hDevNames
     pd.nMinPage = 1
     pd.nMaxPage = paginator.num_pages
     pd.nCopies = 1
     if wp.PrintDlg(pd):
         title = self.print_title
         di = wp.DOCINFO()
         di.lpszDocName = title
         devnames = wps.DevNames(psd.hDevNames)
         if devnames.output == "FILE:":
             from FileDialogs import request_new_file
             f = request_new_file("Print '%s' to file:" % title)
             if not f:
                 return
             output_path = f.path
             di.lpszOutput = output_path
         try:
             hdc = pd.hDC
             dx, dy = wp.GetPrintingOffset(hdc)
             print "TODO: Printable: Implement a Cancel dialog" ###
             #wp.install_abort_proc(hdc)
             wp.StartDoc(hdc, di)
             for page_num in xrange(pd.nFromPage - 1, pd.nToPage):
                 wp.StartPage(hdc)
                 canvas = Canvas._from_win_hdc(hdc, for_printing = True)
                 canvas.translate(-dx, -dy)
                 paginator.draw_page(canvas, page_num)
                 wp.EndPage(hdc)
             wp.EndDoc(hdc)
         finally:
             wp.DeleteDC(hdc)
예제 #9
0
파일: Printing.py 프로젝트: tomihasa/pygui
 def draw_page(_, gtk_print_context, page_num):
     cairo_context = gtk_print_context.get_cairo_context()
     canvas = Canvas._from_cairo_context(cairo_context)
     paginator.draw_page(canvas, page_num)
예제 #10
0
 def drawRect_(self, ns_rect):
     (l, t), (w, h) = ns_rect
     rect = (l, t, l + w, t + h)
     self.pygui_component.draw(Canvas(), rect)
예제 #11
0
 def with_canvas(self, proc):
     ns_view = self._ns_view
     ns_view.lockFocus()
     proc(Canvas())
     ns_view.unlockFocus()
예제 #12
0
 def with_canvas(self, proc):
     canvas = Canvas._from_gdk_drawable(self._gdk_pixmap)
     canvas.backcolor = clear
     proc(canvas)
예제 #13
0
 def with_canvas(self, proc):
     hadj, vadj = self._gtk_adjustments()
     clip = rect_sized((hadj.value, vadj.value), self.size)
     canvas = Canvas._from_gdk_drawable(self._gtk_inner_widget.bin_window)
     proc(canvas)
예제 #14
0
파일: Pixmap.py 프로젝트: tomihasa/pygui
 def with_canvas(self, proc):
     proc(Canvas._from_win_image(self._win_image))
 def with_canvas(self, proc):
     hadj, vadj = self._gtk_adjustments()
     clip = rect_sized((hadj.value, vadj.value), self.size)
     canvas = Canvas._from_gdk_drawable(self._gtk_inner_widget.bin_window)
     proc(canvas)
예제 #16
0
 def with_canvas(self, proc):
     canvas = Canvas._from_gdk_drawable(self._gdk_pixmap)
     canvas.backcolor = clear
     proc(canvas)