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
def _wm_windowposchanged(self, message): # print "Window._wm_windowposchanged" old_size = self._win_old_size new_bounds = self._win_get_actual_bounds() self._bounds = new_bounds new_size = rect_size(new_bounds) # print "...new size =", new_size if old_size != new_size: self._resized(sub_pt(new_size, old_size))
def _wm_windowposchanged(self, message): #print "Window._wm_windowposchanged" old_size = self._win_old_size new_bounds = self._win_get_actual_bounds() self._bounds = new_bounds new_size = rect_size(new_bounds) #print "...new size =", new_size if old_size != new_size: self._resized(sub_pt(new_size, old_size))
def shrink_rect(rect, ratio): left, top, right, bottom = rect k = (1 - ratio) / 2.0 w, h = rect_size(rect) left += k * w right -= k * w top += k * h bottom -= k * h return int(left), int(top), int(right), int(bottom)
def invalidate_frame(self, rect): # Below is a logic to invalidate just the frame, not the whole rect. # This is to fight flicker. A better fix is to use double buffering. # If fixed, all of this could be just: self.invalidate_rect(rect) w, h = rect_size(rect) topleft = rect_topleft(rect) topright = add_pt(topleft, (w-1, 0)) botleft = add_pt(topleft, (0, h-1)) self.invalidate_rect(rect_sized(topleft, (1, h))) self.invalidate_rect(rect_sized(topleft, (w, 1))) self.invalidate_rect(rect_sized(topright, (1, h))) self.invalidate_rect(rect_sized(botleft, (w, 1)))
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
def _wm_windowposchanging(self, message): # print "Window._wm_windowposchanging" self._win_old_size = rect_size(self._bounds)
def _wm_windowposchanging(self, message): #print "Window._wm_windowposchanging" self._win_old_size = rect_size(self._bounds)