def focus(self, default=False): super(Drag, self).focus(default) rv = None if not default: rv = run(self.hovered) return rv
def focus(self, default=False): super(Drag, self).focus(default) # Update state back after restart_interaction if default and self.drag_moved: self.update_style_prefix() rv = None if not default: rv = run(self.hovered) return rv
def event(self, ev, x, y, st): if not self.is_focused(): return self.child.event(ev, x, y, st) # if not self.draggable: # return self.child.event(ev, x, y, st) # Mouse, in parent-relative coordinates. par_x = int(self.last_x + x) par_y = int(self.last_y + y) grabbed = (renpy.display.focus.get_grab() is self) if grabbed: joined_offsets = self.drag_joined(self) joined = [ i[0] for i in joined_offsets ] elif self.draggable and map_event(ev, "drag_activate"): joined_offsets = self.drag_joined(self) joined = [ i[0] for i in joined_offsets ] if not joined: raise renpy.display.core.IgnoreEvent() renpy.display.focus.set_grab(self) self.grab_x = x self.grab_y = y # If we're not the only thing we're joined with, we # might need to adjust our grab point. for i, xo, yo in joined_offsets: if i is self: self.grab_x += xo self.grab_y += yo break self.drag_moved = False self.start_x = par_x self.start_y = par_y grabbed = True # Handle clicking on droppables. if not grabbed: if self.clicked is not None and map_event(ev, "drag_deactivate"): rv = run(self.clicked) if rv is not None: return rv raise renpy.display.core.IgnoreEvent() return self.child.event(ev, x, y, st) # Handle moves by moving things relative to the grab point. if ev.type in (pygame.MOUSEMOTION, pygame.MOUSEBUTTONUP, pygame.MOUSEBUTTONDOWN): if not self.drag_moved and (self.start_x != par_x or self.start_y != par_y): self.drag_moved = True # We may not be in the drag_joined group. self.set_style_prefix("idle_", True) # Set the style. for i in joined: i.set_style_prefix("selected_hover_", True) # Raise the joined items. if self.drag_raise and self.drag_group is not None: self.drag_group.raise_children(joined) if self.drag_moved: for i, xo, yo in joined_offsets: new_x = int(par_x - self.grab_x + xo) new_y = int(par_y - self.grab_y + yo) new_x = max(new_x, 0) new_x = min(new_x, int(i.parent_width - i.w)) new_y = max(new_y, 0) new_y = min(new_y, int(i.parent_height - i.h)) if i.drag_group is not None and i.drag_name is not None: i.drag_group.positions[i.drag_name] = (new_x, new_y, self.old_position) i.x = new_x i.y = new_y i.target_x = new_x i.target_y = new_y i.target_at = self.at redraw(i, 0) if (self.drag_group is not None) and self.drag_moved: drop = self.drag_group.get_best_drop(joined) else: drop = None if drop is not self.last_drop: if self.last_drop is not None: self.last_drop.set_style_prefix("idle_", True) if drop is not None: drop.set_style_prefix("selected_idle_", True) self.last_drop = drop if map_event(ev, 'drag_deactivate'): renpy.display.focus.set_grab(None) if drop is not None: drop.set_style_prefix("idle_", True) for i in joined: i.set_style_prefix("idle_", True) self.set_style_prefix("hover_", True) self.grab_x = None self.grab_y = None self.last_drop = None if self.drag_moved: # Call the drag callback. drag = joined[0] if drag.dragged is not None: rv = run(drag.dragged, joined, drop) if rv is not None: return rv # Call the drop callback. if drop is not None and drop.dropped is not None: rv = run(drop.dropped, drop, joined) if rv is not None: return rv else: # Call the clicked callback. if self.clicked: rv = run(self.clicked) if rv is not None: return rv raise renpy.display.core.IgnoreEvent()
def unfocus(self, default=False): super(Drag, self).unfocus(default) if not default: run_unhovered(self.hovered) run(self.unhovered)
def event(self, ev, x, y, st): if not self.is_focused(): return self.child.event(ev, x, y, st) # if not self.draggable: # return self.child.event(ev, x, y, st) # Mouse, in parent-relative coordinates. par_x = self.last_x + x par_y = self.last_y + y grabbed = (renpy.display.focus.get_grab() is self) if grabbed: joined_offsets = self.drag_joined(self) joined = [i[0] for i in joined_offsets] elif self.draggable and map_event(ev, "drag_activate"): joined_offsets = self.drag_joined(self) joined = [i[0] for i in joined_offsets] if not joined: raise renpy.display.core.IgnoreEvent() renpy.display.focus.set_grab(self) self.grab_x = x self.grab_y = y # If we're not the only thing we're joined with, we # might need to adjust our grab point. for i, xo, yo in joined_offsets: if i is self: self.grab_x += xo self.grab_y += yo break self.drag_moved = False self.start_x = par_x self.start_y = par_y grabbed = True # Handle clicking on droppables. if not grabbed: if self.clicked is not None and map_event(ev, "drag_deactivate"): rv = run(self.clicked) if rv is not None: return rv raise renpy.display.core.IgnoreEvent() return self.child.event(ev, x, y, st) # Handle moves by moving things relative to the grab point. if ev.type in (pygame.MOUSEMOTION, pygame.MOUSEBUTTONUP, pygame.MOUSEBUTTONDOWN): if not self.drag_moved and (self.start_x != par_x or self.start_y != par_y): self.drag_moved = True # We may not be in the drag_joined group. self.set_style_prefix("idle_", True) # Set the style. for i in joined: i.set_style_prefix("selected_hover_", True) # Raise the joined items. if self.drag_raise and self.drag_group is not None: self.drag_group.raise_children(joined) if self.drag_moved: for i, xo, yo in joined_offsets: new_x = par_x - self.grab_x + xo new_y = par_y - self.grab_y + yo new_x = max(new_x, 0) new_x = min(new_x, int(i.parent_width - i.w)) new_y = max(new_y, 0) new_y = min(new_y, int(i.parent_height - i.h)) if i.drag_group is not None and i.drag_name is not None: i.drag_group.positions[i.drag_name] = (new_x, new_y) i.x = new_x i.y = new_y i.target_x = new_x i.target_y = new_y i.target_at = self.at redraw(i, 0) if (self.drag_group is not None) and self.drag_moved: drop = self.drag_group.get_best_drop(joined) else: drop = None if drop is not self.last_drop: if self.last_drop is not None: self.last_drop.set_style_prefix("idle_", True) if drop is not None: drop.set_style_prefix("selected_idle_", True) self.last_drop = drop if map_event(ev, 'drag_deactivate'): renpy.display.focus.set_grab(None) if drop is not None: drop.set_style_prefix("idle_", True) for i in joined: i.set_style_prefix("idle_", True) self.set_style_prefix("hover_", True) self.grab_x = None self.grab_y = None self.last_drop = None if self.drag_moved: # Call the drag callback. drag = joined[0] if drag.dragged is not None: rv = run(drag.dragged, joined, drop) if rv is not None: return rv # Call the drop callback. if drop is not None and drop.dropped is not None: rv = run(drop.dropped, drop, joined) if rv is not None: return rv else: # Call the clicked callback. if self.clicked: rv = run(self.clicked) if rv is not None: return rv raise renpy.display.core.IgnoreEvent()
def unfocus(self, default=False): super(Drag, self).unfocus(default) if not default: run(self.unhovered)
def event(self, ev, x, y, st): if not self.is_focused(): return self.child.event(ev, x, y, st) # Mouse, in parent-relative coordinates. par_x = int(self.last_x + x) par_y = int(self.last_y + y) grabbed = (renpy.display.focus.get_grab() is self) if (self.alternate is not None) and renpy.display.touch and map_event( ev, "drag_activate"): self.click_time = st renpy.game.interface.timeout(renpy.config.longpress_duration) if grabbed: joined_offsets = self.drag_joined(self) joined = [i[0] for i in joined_offsets] elif self.draggable and map_event(ev, "drag_activate"): joined_offsets = self.drag_joined(self) joined = [i[0] for i in joined_offsets] if not joined: raise renpy.display.core.IgnoreEvent() renpy.display.focus.set_grab(self) run(joined[0].activated, joined) self.grab_x = x self.grab_y = y # If we're not the only thing we're joined with, we # might need to adjust our grab point. for i, xo, yo in joined_offsets: if i is self: self.grab_x += xo self.grab_y += yo break self.drag_moved = False self.start_x = par_x self.start_y = par_y grabbed = True elif (self.alternate is not None) and map_event( ev, "button_alternate"): rv = run(self.alternate) if rv is not None: return rv raise renpy.display.core.IgnoreEvent() if ((self.alternate is not None) and renpy.display.touch and (self.click_time is not None) and ((st - self.click_time) > renpy.config.longpress_duration)): self.click_time = None rv = run(self.alternate) if rv is not None: return rv renpy.exports.vibrate(renpy.config.longpress_vibrate) # Handle clicking on droppables. if not grabbed: if self.clicked is not None and map_event(ev, "drag_deactivate"): self.click_time = None rv = run(self.clicked) if rv is not None: return rv raise renpy.display.core.IgnoreEvent() return self.child.event(ev, x, y, st) # Handle moves by moving things relative to the grab point. if ev.type in (pygame.MOUSEMOTION, pygame.MOUSEBUTTONUP, pygame.MOUSEBUTTONDOWN): handled = True if (not self.drag_moved) and (self.start_x != par_x or self.start_y != par_y): self.drag_moved = True self.click_time = None # Raise the joined items. if self.drag_raise and self.drag_group is not None: self.drag_group.raise_children(joined) if self.drag_moved: for i, xo, yo in joined_offsets: new_x = int(par_x - self.grab_x + xo) new_y = int(par_y - self.grab_y + yo) if not self.drag_offscreen: new_x = max(new_x, 0) new_x = min(new_x, int(i.parent_width - i.w)) new_y = max(new_y, 0) new_y = min(new_y, int(i.parent_height - i.h)) if i.drag_group is not None and i.drag_name is not None: i.drag_group.positions[i.drag_name] = ( new_x, new_y, self.old_position) i.x = new_x i.y = new_y i.target_x = new_x i.target_y = new_y i.target_at = self.at redraw(i, 0) else: handled = False if (self.drag_group is not None) and self.drag_moved: if self.mouse_drop: drop = self.drag_group.get_drop_at(joined, par_x, par_y) else: drop = self.drag_group.get_best_drop(joined) else: drop = None if drop is not self.last_drop: if self.last_drop is not None: self.last_drop.set_style_prefix("idle_", True) self.last_drop = drop if self.drag_moved: self.update_style_prefix() if map_event(ev, 'drag_deactivate'): self.click_time = None renpy.display.focus.set_grab(None) if drop is not None: drop.set_style_prefix("idle_", True) for i in joined: i.set_style_prefix("idle_", True) self.set_style_prefix("hover_", True) self.grab_x = None self.grab_y = None self.last_drop = None if self.drag_moved: # Call the drag callback. drag = joined[0] if drag.dragged is not None: rv = run(drag.dragged, joined, drop) if rv is not None: return rv # Call the drop callback. if drop is not None and drop.dropped is not None: rv = run(drop.dropped, drop, joined) if rv is not None: return rv else: # Call the clicked callback. if self.clicked: rv = run(self.clicked) if rv is not None: return rv if handled: raise renpy.display.core.IgnoreEvent()