def render(self, width, height, st, at): child = self.style.child if child is None: child = self.child self.parent_width = width self.parent_height = height cr = render(child, width, height, st, at) cw, ch = cr.get_size() rv = Render(cw, ch) rv.blit(cr, (0, 0)) self.w = cw self.h = ch position = (self.style.xpos, self.style.ypos, self.style.xanchor, self.style.yanchor, self.style.xoffset, self.style.yoffset) # If we don't have a position, then look for it in a drag group. if (self.x is None) and (self.drag_group is not None) and (self.drag_name is not None): if self.drag_name in self.drag_group.positions: dgp = self.drag_group.positions[self.drag_name] if len(dgp) == 3: self.x, self.y, self.old_position = dgp else: self.x, self.y = dgp self.old_position = position if self.old_position != position: place = True elif self.x is None: place = True else: place = False # If we don't have a position, run the placement code and use # that to compute our placement. if place: # This is required to get get_placement to work properly. self.x = None place_x, place_y = self.place(None, 0, 0, width, height, rv) self.x = int(place_x) self.y = int(place_y) self.target_x = None self.old_position = position if self.target_x is None: self.target_x = self.x self.target_y = self.y self.target_at = at # Determine if we need to do the snap animation. if at >= self.target_at: self.x = self.target_x self.y = self.target_y else: done = (at - self.at) / (self.target_at - self.at) self.x = absolute(self.x + done * (self.target_x - self.x)) self.y = absolute(self.y + done * (self.target_y - self.y)) redraw(self, 0) if self.draggable or self.clicked is not None: fx, fy, fw, fh = self.drag_handle if isinstance(fx, float): fx = int(fx * cw) if isinstance(fy, float): fy = int(fy * ch) if isinstance(fw, float): fw = int(fw * cw) if isinstance(fh, float): fh = int(fh * ch) rv.add_focus(self, None, fx, fy, fw, fh, fx, fy, cr.subsurface((fx, fy, fw, fh))) self.last_x = self.x self.last_y = self.y self.at = at return rv
def render(self, width, height, st, at): child = self.style.child if child is None: child = self.child self.parent_width = width self.parent_height = height cr = render(child, width, height, st, at) cw, ch = cr.get_size() rv = Render(cw, ch) rv.blit(cr, (0, 0)) self.w = cw self.h = ch # If we don't have a position, then look for it in a drag group. if (self.x is None) and (self.drag_group is not None) and (self.drag_name is not None): if self.drag_name in self.drag_group.positions: self.x, self.y = self.drag_group.positions[self.drag_name] # If we don't have a position, run the placement code and use # that to compute our placement. if self.x is None: self.x, self.y = self.place(None, 0, 0, width, height, rv) self.x = int(self.x) self.y = int(self.y) if self.target_x is None: self.target_x = self.x self.target_y = self.y self.target_at = at # Determine if we need to do the snap animation. if at >= self.target_at: self.x = self.target_x self.y = self.target_y else: done = (at - self.at) / (self.target_at - self.at) self.x = absolute(self.x + done * (self.target_x - self.x)) self.y = absolute(self.y + done * (self.target_y - self.y)) redraw(self, 0) if self.draggable or self.clicked is not None: fx, fy, fw, fh = self.drag_handle if isinstance(fx, float): fx = int(fx * cw) if isinstance(fy, float): fy = int(fy * ch) if isinstance(fw, float): fw = int(fw * cw) if isinstance(fh, float): fh = int(fh * ch) rv.add_focus(self, None, fx, fy, fw, fh, fx, fy, cr.subsurface((fx, fy, fw, fh))) self.last_x = self.x self.last_y = self.y self.at = at return rv
def render(self, width, height, st, at): child = self.style.child if child is None: child = self.child self.parent_width = renpy.display.render.render_width self.parent_height = renpy.display.render.render_height cr = render(child, width, height, st, at) cw, ch = cr.get_size() rv = Render(cw, ch) rv.blit(cr, (0, 0)) self.w = cw self.h = ch position = (self.style.xpos, self.style.ypos, self.style.xanchor, self.style.yanchor, self.style.xoffset, self.style.yoffset) # If we don't have a position, then look for it in a drag group. if (self.x is None) and (self.drag_group is not None) and (self.drag_name is not None): if self.drag_name in self.drag_group.positions: dgp = self.drag_group.positions[self.drag_name] if len(dgp) == 3: self.x, self.y, self.old_position = dgp else: self.x, self.y = dgp self.old_position = position if self.old_position != position: place = True elif self.x is None: place = True else: place = False # If we don't have a position, run the placement code and use # that to compute our placement. if place: # This is required to get get_placement to work properly. self.x = None place_x, place_y = self.place(None, 0, 0, width, height, rv) self.x = int(place_x) self.y = int(place_y) self.target_x = None self.old_position = position if self.target_x is None: self.target_x = self.x self.target_y = self.y self.target_at = at # Determine if we need to do the snap animation. if self.target_at_delay: # Snap starts now self.target_at = at + self.target_at_delay self.target_at_delay = 0 redraw(self, 0) elif at >= self.target_at: # Snap complete self.x = self.target_x self.y = self.target_y else: # Snap in progress done = (at - self.at) / (self.target_at - self.at) self.x = absolute(self.x + done * (self.target_x - self.x)) self.y = absolute(self.y + done * (self.target_y - self.y)) redraw(self, 0) if self.draggable or self.clicked is not None: fx, fy, fw, fh = self.drag_handle if isinstance(fx, float): fx = int(fx * cw) if isinstance(fy, float): fy = int(fy * ch) if isinstance(fw, float): fw = int(fw * cw) if isinstance(fh, float): fh = int(fh * ch) mask = self.style.focus_mask if mask is True: mask = cr.subsurface((fx, fy, fw, fh)) elif mask is not None: try: mask = renpy.display.render.render(mask, fw, fh, st, at) except: if callable(mask): mask = mask else: raise Exception( "Focus_mask must be None, True, a displayable, or a callable." ) if mask is not None: fmx = 0 fmy = 0 else: fmx = None fmy = None rv.add_focus(self, None, fx, fy, fw, fh, fmx, fmy, mask) self.last_x = self.x self.last_y = self.y self.at = at return rv
def render(self, width, height, st, at): child = self.style.child if child is None: child = self.child self.parent_width = width self.parent_height = height cr = render(child, width, height, st, at) cw, ch = cr.get_size() rv = Render(cw, ch) rv.blit(cr, (0, 0)) self.w = cw self.h = ch position = (self.style.xpos, self.style.ypos, self.style.xanchor, self.style.yanchor, self.style.xoffset, self.style.yoffset) # If we don't have a position, then look for it in a drag group. if (self.x is None) and (self.drag_group is not None) and (self.drag_name is not None): if self.drag_name in self.drag_group.positions: dgp = self.drag_group.positions[self.drag_name] if len(dgp) == 3: self.x, self.y, self.old_position = dgp else: self.x, self.y = dgp self.old_position = position if self.old_position != position: place = True elif self.x is None: place = True else: place = False # If we don't have a position, run the placement code and use # that to compute our placement. if place: # This is required to get get_placement to work properly. self.x = None place_x, place_y = self.place(None, 0, 0, width, height, rv) self.x = int(place_x) self.y = int(place_y) self.target_x = None self.old_position = position if self.target_x is None: self.target_x = self.x self.target_y = self.y self.target_at = at # Determine if we need to do the snap animation. if self.target_at_delay: # Snap starts now self.target_at = at + self.target_at_delay self.target_at_delay = 0 redraw(self, 0) elif at >= self.target_at: # Snap complete self.x = self.target_x self.y = self.target_y else: # Snap in progress done = (at - self.at) / (self.target_at - self.at) self.x = absolute(self.x + done * (self.target_x - self.x)) self.y = absolute(self.y + done * (self.target_y - self.y)) redraw(self, 0) if self.draggable or self.clicked is not None: fx, fy, fw, fh = self.drag_handle if isinstance(fx, float): fx = int(fx * cw) if isinstance(fy, float): fy = int(fy * ch) if isinstance(fw, float): fw = int(fw * cw) if isinstance(fh, float): fh = int(fh * ch) mask = self.style.focus_mask if mask is True: mask = cr.subsurface((fx, fy, fw, fh)) elif mask is not None: try: mask = renpy.display.render.render(mask, fw, fh, st, at) except: if callable(mask): mask = mask else: raise Exception("Focus_mask must be None, True, a displayable, or a callable.") if mask is not None: fmx = 0 fmy = 0 else: fmx = None fmy = None rv.add_focus(self, None, fx, fy, fw, fh, fmx, fmy, mask) self.last_x = self.x self.last_y = self.y self.at = at return rv