Пример #1
1
 def _get_raw_shadow(self):
     target_img = self.target.get_image(self.capture_state)
     r = target_img.get_rect()
     #the shadow will be larger in order to make free space for fadeout.
     r.inflate_ip(2*self.shadow_radius, 2*self.shadow_radius)
     img = Surface(r.size)
     img.fill((255, 255, 255, 255))
     img.blit(target_img, (self.shadow_radius, self.shadow_radius))
     if self.sun_angle <= 0.:
         raise Exception("Sun angle must be greater than zero.")
     elif self.sun_angle != 45. and self.vertical:
         w, h = img.get_size()
         new_h = h / tan(self.sun_angle * pi / 180.)
         screen_size = functions.get_screen().get_size()
         new_h = abs(int(min(new_h, max(screen_size))))
         img = scale(img, (w, new_h))
     if self.angle_mode == "flip":
         img = flip(img, self.mode_value[0], self.mode_value[1])
     elif self.angle_mode == "rotate":
         img = rotate(img, self.mode_value)
     else:
         raise Exception("angle_mode not available: " + str(self.angle_mode))
     shadow = pilgraphics.get_shadow(img,
                                     radius=self.shadow_radius,
                                     black=self.black,
                                     alpha_factor=self.alpha_factor,
                                     decay_mode=self.decay_mode,
                                     color=self.color)
     return shadow
Пример #2
0
 def prelaunch(self): #handles func_before (unblittings, blittings, reactions deactivations)
     if parameters.FILL_SCREEN_AT_SUBMENUS:
         functions.get_screen().fill(parameters.SCREEN_FILL)
         pygame.display.flip()
     if self.func_before is None:
         self.default_func_before()
     else:
         self.func_before()
     self.activate_focus()
Пример #3
0
    def center(self,
               x_shift=None,
               y_shift=None,
               element=None,
               axis=(True, True)):
        """Centers self's center on <element>'s center.

        If <element> = None, center self on self.surface's center.

        Optionnal shift arguments can be passed in order to shift self after
        centering.

        Optionnal axis argument can be passed, on the form (bool, bool), and
        is used to filter the centering. The components whose axis have False
        value will be unchanged.
        """
        if not element:
            center = self.surface.get_rect().center
        elif element == "screen":
            center = functions.get_screen().get_rect().center
        else:
            center = element.get_storer_center()
        x = center[0]
        y = center[1]
        if x_shift is not None:
            x += x_shift
        if y_shift is not None:
            y += y_shift
        if not axis[0]:
            x = None
        if not axis[1]:
            y = None
        self.set_center((x, y))
Пример #4
0
def grid_store(nmax,
               frame,
               elements=None,
               mode="x",
               margin=5,
               gap=5,
               align="center"):
    if frame == "screen":
        frame = get_screen().get_rect()
    if isinstance(frame, Rect):
        rect = frame
        if elements is None:
            elements = []
    else:
        if elements is None:
            elements = frame.get_elements()
        rect = frame.get_storer_rect()
    #
    x = margin
    y = margin
    for e in elements:
        counter = 0
        e.set_topleft((x, y))
        counter += 1
        w, h = e.get_fus_rect().size
        if counter >= nmax:
            y += h + gap
            counter = 0
            x = margin
        else:
            x += w + gap
Пример #5
0
 def _get_raw_shadow(self):
     target_img = self.target.get_image(self.capture_state)
     r = target_img.get_rect()
     #the shadow will be larger in order to make free space for fadeout.
     r.inflate_ip(2 * self.shadow_radius, 2 * self.shadow_radius)
     img = Surface(r.size)
     img.fill((255, 255, 255, 255))
     img.blit(target_img, (self.shadow_radius, self.shadow_radius))
     if self.sun_angle <= 0.:
         raise Exception("Sun angle must be greater than zero.")
     elif self.sun_angle != 45. and self.vertical:
         w, h = img.get_size()
         new_h = h / tan(self.sun_angle * pi / 180.)
         screen_size = functions.get_screen().get_size()
         new_h = abs(int(min(new_h, max(screen_size))))
         img = scale(img, (w, new_h))
     if self.angle_mode == "flip":
         img = flip(img, self.mode_value[0], self.mode_value[1])
     elif self.angle_mode == "rotate":
         img = rotate(img, self.mode_value)
     else:
         raise Exception("angle_mode not available: " +
                         str(self.angle_mode))
     shadow = pilgraphics.get_shadow(img,
                                     radius=self.shadow_radius,
                                     black=self.black,
                                     alpha_factor=self.alpha_factor,
                                     decay_mode=self.decay_mode,
                                     color=self.color)
     return shadow
Пример #6
0
def get_shadow(target_img, shadow_radius=2, black=255, color_format="RGBA",
                alpha_factor=0.85, decay_mode="exponential", color=(0,0,0),
                sun_angle=30., vertical=True, angle_mode="flip", mode_value=(False, True)):
        r = target_img.get_rect()
        #the shadow will be larger in order to make free space for fadeout.
        r.inflate_ip(2*shadow_radius, 2*shadow_radius)
        img = Surface(r.size)
        img.fill((255, 255, 255, 255))
        img.blit(target_img, (shadow_radius, shadow_radius))
        if sun_angle <= 0.:
            raise Exception("Sun angle must be greater than zero.")
        elif sun_angle != 45. and vertical:
            w, h = img.get_size()
            new_h = h / tan(sun_angle * pi / 180.)
            screen_size = functions.get_screen().get_size()
            new_h = abs(int(min(new_h, max(screen_size))))
            img = scale(img, (w, new_h))
        if angle_mode == "flip":
            img = flip(img, mode_value[0], mode_value[1])
        elif self.angle_mode == "rotate":
            img = rotate(img, mode_value)
        else:
            raise Exception("angle_mode not available: " + str(angle_mode))
        shadow =             _pilshadow(img,
                                        radius=shadow_radius,
                                        black=black,
                                        alpha_factor=alpha_factor,
                                        decay_mode=decay_mode,
                                        color=color)
        #
        W, H = functions.get_screen_size()
        shadow.set_alpha(-1, RLEACCEL)
        return shadow.convert_alpha()
Пример #7
0
 def save_screenshot(self, path=None, name=None, note=""):
     from thorpy.miscgui import functions
     if path is None:
         path = self.default_path
     if name is None:
         name = time.asctime().replace(" ", "_").replace(":", "-") + ".png"
     functions.debug_msg("Saving screenshot as " + path + note + name)
     pygame.image.save(functions.get_screen(), path+note+name)
Пример #8
0
 def save_screenshot(self, path=None, name=None, note=""):
     from thorpy.miscgui import functions
     if path is None:
         path = self.default_path
     if name is None:
         name = time.asctime().replace(" ", "_").replace(":", "-") + ".png"
     functions.debug_msg("Saving screenshot as " + path + note + name)
     pygame.image.save(functions.get_screen(), path + note + name)
Пример #9
0
 def __init__(self, hover_zone=None, elements=None, normal_params=None):
     Ghost.__init__(self, elements, normal_params)
     self._hovered = False
     self.set_hover(MOUSEMOTION)
     self._help_element = None
     self._waited = 0
     self._help_wait_time = parameters.HELP_WAIT_TIME
     self._help_pos = None
     self._help_reaction = None
     self._help_blitted = False
     self.visible = False
     if hover_zone:
         self.set_hover_zone(hover_zone)
     self.surface = functions.get_screen()
Пример #10
0
 def __init__(self, hover_zone=None, elements=None, normal_params=None):
     """Ghost element designed to react to mouse hovering - can post hover events
     .
     <hover_zone>: a pygame rect defining the hovering zone."""
     Ghost.__init__(self, elements, normal_params)
     self._hovered = False
     self.set_hover(MOUSEMOTION)
     self._help_element = None
     self._waited = 0
     self._help_wait_time = parameters.HELP_WAIT_TIME
     self._help_pos = None
     self._help_reaction = None
     self._help_blitted = False
     self.visible = False
     if hover_zone:
         self.set_hover_zone(hover_zone)
     self.surface = functions.get_screen()
Пример #11
0
 def __init__(self, hover_zone=None, elements=None, normal_params=None):
     """Ghost element designed to react to mouse hovering - can post hover events
     .
     <hover_zone>: a pygame rect defining the hovering zone."""
     Ghost.__init__(self, elements, normal_params)
     self._hovered = False
     self.set_hover(MOUSEMOTION)
     self._help_element = None
     self._waited = 0
     self._help_wait_time = parameters.HELP_WAIT_TIME
     self._help_pos = None
     self._help_reaction = None
     self._help_blitted = False
     self.visible = False
     if hover_zone:
         self.set_hover_zone(hover_zone)
     self.surface = functions.get_screen()
Пример #12
0
def store(frame,
          elements=None,
          mode="v",
          x="auto",
          y="auto",
          margin=None,
          gap=None,
          align="center"):
    """
    <frame> can be either an element, a pygame.Rect or "screen"
    <elements>=None, None (default) will store the children of <frame>
    <mode>="v", can be either "v" ("vertical") or "h" ("horizontal")
    <x>="auto", x coordinate begin
    <y>="auto", y coordinate begin
    <margin>=None, the margin to be used (this is a single value)
    <gap>=None, the gap to be used (this is a single value)
    <align>="center", "top" or "bottom"
    """
    #frame argument handling
    if frame == "screen":
        frame = get_screen().get_rect()
    if isinstance(frame, Rect):
        rect = frame
        if elements is None:
            elements = []


##    elif frame.__class__.__name__ == "Box":
##        raise Exception("You cannot call store on a Box instance."+\
##                            "The Box element has its own store method.")
    else:
        if elements is None:
            elements = frame.get_elements()
        rect = frame.get_storer_rect()
    #end frame arg handling
    if mode == "v" or mode == "vertical":
        x = None if x == "auto" else x
        size = v_store(rect, elements, x, y, margin, gap, align)
    elif mode == "h" or mode == "horizontal":
        y = None if y == "auto" else y
        size = h_store(rect, elements, y, x, margin, gap, align)
    else:
        raise Exception("Store mode unknown.")
    return size
Пример #13
0
    def reac_func_norestart(event):
        if event.what == constants.LAUNCH_DONE:
            w,h = varset.get_value("screen_w"), varset.get_value("screen_h")
            mdm = MetaDataManager()
            mdm.read_data(fn)
            mdm.data["screen_w"] = w
            mdm.data["screen_h"] = h
            mdm.data["fullscreen"] = varset.get_value("fullscreen")
##            print("writing", mdm.data, fn)
            mdm.write_data(fn)
            #restart script
            flags = functions.get_screen().get_flags()
            if varset.get_value("fullscreen"):
                flags |= pygame.FULLSCREEN
            else:
                flags = 0
            pygame.display.set_mode((w,h), flags)
            functions.get_current_menu()._elements[0].get_oldest_ancester().unblit_and_reblit()
            button.launched.blit()
            button.launched.update()
Пример #14
0
    def reac_func_norestart(event):
        if event.what == constants.LAUNCH_DONE:
            w,h = varset.get_value("screen_w"), varset.get_value("screen_h")
            mdm = MetaDataManager()
            mdm.read_data(fn)
            mdm.data["screen_w"] = w
            mdm.data["screen_h"] = h
            mdm.data["fullscreen"] = varset.get_value("fullscreen")
##            print("writing", mdm.data, fn)
            mdm.write_data(fn)
            #restart script
            flags = functions.get_screen().get_flags()
            if varset.get_value("fullscreen"):
                flags |= pygame.FULLSCREEN
            else:
                flags = 0
            pygame.display.set_mode((w,h), flags)
            functions.get_current_menu()._elements[0].get_oldest_ancester().unblit_and_reblit()
            button.launched.blit()
            button.launched.update()
Пример #15
0
 def get_screen(self): #wrapper
     from thorpy.miscgui import functions
     return functions.get_screen()
Пример #16
0
 def get_screen(self):  #wrapper
     from thorpy.miscgui import functions
     return functions.get_screen()
Пример #17
0
 def __init__(self):
     """Object that is designed to be blitted on the screen."""
     self.surface = functions.get_screen()
     self._old_clips = [None]  # fifo
Пример #18
0
def make_display_options_setter(fn,
                                const_text="",
                                sliders_length=100,
                                limvalsw=(400, None),
                                limvalsh=(400, None),
                                restart_app=True):
    from thorpy.miscgui.reaction import Reaction
    from thorpy.miscgui.metadata import MetaDataManager
    from thorpy.elements.launchers.paramsetterlauncher import ParamSetterLauncher
    from thorpy.miscgui.varset import VarSet
    import os, sys
    varset = VarSet()
    w, h = functions.get_screen_size()
    maxsize = functions.get_current_application().max_screen_size
    if limvalsw[1] is None: limvalsw = (limvalsw[0], maxsize[0])
    if limvalsh[1] is None: limvalsh = (limvalsh[0], maxsize[1])
    fullscreen = bool(functions.get_screen().get_flags() & pygame.FULLSCREEN)
    varset.add("screen_w",
               value=int(w),
               text="Screen width: ",
               limits=limvalsw)
    varset.add("screen_h",
               value=int(h),
               text="Screen height: ",
               limits=limvalsh)
    varset.add("fullscreen", value=fullscreen, text="Fullscreen")
    button = ParamSetterLauncher.make([varset],
                                      const_text,
                                      const_text,
                                      text_ok="Apply")

    def reac_func_norestart(event):
        if event.what == constants.LAUNCH_DONE:
            w, h = varset.get_value("screen_w"), varset.get_value("screen_h")
            mdm = MetaDataManager()
            mdm.read_data(fn)
            mdm.data["screen_w"] = w
            mdm.data["screen_h"] = h
            mdm.data["fullscreen"] = varset.get_value("fullscreen")
            ##            print("writing", mdm.data, fn)
            mdm.write_data(fn)
            #restart script
            flags = functions.get_screen().get_flags()
            if varset.get_value("fullscreen"):
                flags |= pygame.FULLSCREEN
            else:
                flags = 0
            pygame.display.set_mode((w, h), flags)
            functions.get_current_menu()._elements[0].get_oldest_ancester(
            ).unblit_and_reblit()
            button.launched.blit()
            button.launched.update()

    def reac_func_restart(event):
        if event.what == constants.LAUNCH_DONE:
            w, h = varset.get_value("screen_w"), varset.get_value("screen_h")
            mdm = MetaDataManager()
            mdm.read_data(fn)
            mdm.data["screen_w"] = w
            mdm.data["screen_h"] = h
            mdm.data["fullscreen"] = varset.get_value("fullscreen")
            ##            print("writing", mdm.data, fn)
            mdm.write_data(fn)
            #restart script
            python = sys.executable
            os.execl(python, python, *sys.argv)

    reac_func = reac_func_restart if restart_app else reac_func_norestart
    reac = Reaction(constants.THORPY_EVENT, reac_func, {
        "id": constants.EVENT_UNLAUNCH,
        "launcher": button.launcher
    })
    button.add_reaction(reac)
    return button
Пример #19
0
def make_display_options_setter(fn, const_text="",
                                sliders_length=100,
                                limvalsw=(400,None),
                                limvalsh=(400,None),
                                restart_app=True):
    from thorpy.miscgui.reaction import Reaction
    from thorpy.miscgui.metadata import MetaDataManager
    from thorpy.elements.launchers.paramsetterlauncher import ParamSetterLauncher
    from thorpy.miscgui.varset import VarSet
    import os, sys
    varset = VarSet()
    w,h = functions.get_screen_size()
    maxsize = functions.get_current_application().max_screen_size
    if limvalsw[1] is None: limvalsw = (limvalsw[0], maxsize[0])
    if limvalsh[1] is None: limvalsh = (limvalsh[0], maxsize[1])
    fullscreen = bool(functions.get_screen().get_flags()&pygame.FULLSCREEN)
    varset.add("screen_w", value=int(w), text="Screen width: ", limits=limvalsw)
    varset.add("screen_h", value=int(h), text="Screen height: ", limits=limvalsh)
    varset.add("fullscreen", value=fullscreen, text="Fullscreen")
    button = ParamSetterLauncher.make([varset], const_text, const_text,
                                      text_ok="Apply")
    def reac_func_norestart(event):
        if event.what == constants.LAUNCH_DONE:
            w,h = varset.get_value("screen_w"), varset.get_value("screen_h")
            mdm = MetaDataManager()
            mdm.read_data(fn)
            mdm.data["screen_w"] = w
            mdm.data["screen_h"] = h
            mdm.data["fullscreen"] = varset.get_value("fullscreen")
##            print("writing", mdm.data, fn)
            mdm.write_data(fn)
            #restart script
            flags = functions.get_screen().get_flags()
            if varset.get_value("fullscreen"):
                flags |= pygame.FULLSCREEN
            else:
                flags = 0
            pygame.display.set_mode((w,h), flags)
            functions.get_current_menu()._elements[0].get_oldest_ancester().unblit_and_reblit()
            button.launched.blit()
            button.launched.update()

    def reac_func_restart(event):
        if event.what == constants.LAUNCH_DONE:
            w,h = varset.get_value("screen_w"), varset.get_value("screen_h")
            mdm = MetaDataManager()
            mdm.read_data(fn)
            mdm.data["screen_w"] = w
            mdm.data["screen_h"] = h
            mdm.data["fullscreen"] = varset.get_value("fullscreen")
##            print("writing", mdm.data, fn)
            mdm.write_data(fn)
            #restart script
            python = sys.executable
            os.execl(python, python, * sys.argv)

    reac_func=reac_func_restart if restart_app else reac_func_norestart
    reac = Reaction(constants.THORPY_EVENT, reac_func, {"id":constants.EVENT_UNLAUNCH,
                                                        "launcher":button.launcher})
    button.add_reaction(reac)
    return button