コード例 #1
0
    def render_one(cls, notification):
        notification.show()
        w = 500
        h = 100
        x = START_X
        y = cls.y
        z = 0.9

        y -= h

        gl.glDisable(gl.GL_DEPTH_TEST)
        fs_emu_texturing(False)
        fs_emu_blending(True)
        gl.glBegin(gl.GL_QUADS)
        gl.glColor(1.0, 1.0, 0.5, 0.8)
        gl.glVertex3f(x, y, z)
        gl.glVertex3f(x + w, y, z)
        gl.glVertex3f(x + w, y + h, z)
        gl.glVertex3f(x, y + h, z)
        gl.glEnd()

        lines = notification.text.split("\n")
        y += h - 23
        for line in lines:
            tw, th = Render.get().measure_text(line, cls.font)
            y -= th
            Render.get().text(
                line, cls.font, x + 23, y, color=(0.2, 0.2, 0.0, 1.0)
            )
            y -= 2
        # cls.y += h + 15
        cls.y -= h + 20
        gl.glEnable(gl.GL_DEPTH_TEST)
コード例 #2
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def swap_buffers():
    # global fps_str
    #
    # Render.get().ortho_perspective()
    # #glPushMatrix()
    # #glTranslatef(0.0, 0.0, 0.5)
    #
    # #if not fps_str:
    # #    fps_str = "WHY?"
    #
    # if Render.get().display_fps or True:
    #     if fps_str:
    #         Render.get().text(fps_str, Font.main_path_font,
    #                     -1.74, 0.82, h=0.1, color=(0.25, 0.25, 0.25, 1.0))
    # #glPopMatrix()
    #
    # # FIXME: Why does not minimize from fullscreen work on ATI unless we
    # render
    # # something here?
    # glBindTexture(GL_TEXTURE_2D, 0)
    # glPushMatrix()
    # glTranslate(2000.0, 0.0, 0.0)
    # glBegin(GL_QUADS)
    # glVertex2f(0.0, 0.0)
    # glVertex2f(1.0, 0.0)
    # glVertex2f(1.0, 1.0)
    # glVertex2f(0.0, 1.0)
    # glEnd()
    # glPopMatrix()
    #
    # #fs_emu_blending(False)
    # #glEnable(GL_DEPTH_TEST)
    #
    # #if Render.get().display_sync:
    # #    glFinish()
    #
    # #pygame.display.flip()
    # print("FIXME: not flipping")
    #
    # if Render.get().display_sync:
    #     # give up time slice
    #     time.sleep(0.001)
    #     glFinish()
    #
    # if Render.get().display_fps:
    #     t = get_current_time()
    #     render_times.append(t)
    #     t0 = render_times.popleft()
    #     if t0 > 0 and State.get().frame_number % 5 == 0:
    #         time_diff = t - t0
    #         #print("{0:0.2f}".format(300.0 / time_diff))
    #         fps = FPS_FRAMES / time_diff
    #         if fps >= 100:
    #             fps_str = "FPS:  {0:0.0f}".format(fps)
    #         else:
    #             fps_str = "FPS: {0:0.1f}".format(fps)
    #         #Render.get().text(fps_str, Font.title_font,
    #         #        -1.0, 0.90, 2.0, shadow=True)
    State.get().frame_number += 1
    Render.get().delete_textures()
コード例 #3
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def render_config_menu():
    if not State.get().config_menu:
        return

    Render.get().ortho_perspective()
    config_menu = State.get().config_menu
    # text = config_menu.items[config_menu.index]
    # otw, th = Render.get().text(text, title_font,
    #         -1.0, -0.93, 2.0, color=(1.0, 1.0, 1.0, 0.36 * strength))
    # x = 0.0 + otw / 2 + CONFIG_SEPARATION
    # for i in range(config_menu.index + 1, len(config_menu.items)):
    #     text = config_menu.items[i]
    #     tw, th = Render.get().text(text, title_font,
    #             x, -0.93, color=(1.0, 1.0, 1.0, 0.36 * strength))
    #     x += tw + CONFIG_SEPARATION
    # x = 0.0 - otw / 2 - CONFIG_SEPARATION
    x = -0.55
    y = 0.8
    for i in range(len(config_menu.items)):
        text = config_menu.items[i].upper()
        # tw, th = Render.get().measure_text(text, title_font)
        # x -= tw + CONFIG_SEPARATION
        y -= 0.15
        if i == config_menu.index and config_menu == State.get().navigatable:
            color = (1.0, 1.0, 1.0, 1.0)
        else:
            color = (1.0, 1.0, 1.0, 0.33)
        Render.get().text(text, Font.subtitle_font, x, y, color=color)
コード例 #4
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def render_global_fade():
    t = State.get().time
    if State.get().fade_end >= t >= State.get().fade_start:
        a = (t - State.get().fade_start) / (
            State.get().fade_end - State.get().fade_start)
        if a < 0.0:
            a = 0.0
        elif a > 1.0:
            a = 1.0

        Render.get().hd_perspective()
        gl.glPushMatrix()
        gl.glTranslatef(0.0, 0.0, 0.99999)
        fs_emu_blending(True)
        fs_emu_texturing(True)
        if State.get().fade_splash:
            Texture.splash.render(
                (1920 - Texture.splash.w) // 2,
                (1080 - Texture.splash.h) // 2, Texture.splash.w,
                Texture.splash.h, opacity=(1.0 - a))

        c = [0, 0, 0, (1.0 - a)]
        # for i in range(4):
        #     c[i] = State.get().fade_from[i] + \
        #             (State.get().fade_to[i] - State.get().fade_from[i]) * a
        #  * (a)
        render_fade(*c)
        gl.glPopMatrix()
        Render.get().dirty = True
コード例 #5
0
ファイル: itemmenu.py プロジェクト: jelmer/fs-uae-debian
def render_item_shadows(itemdata, front=False, back=True):
    Render.get().standard_perspective()
    # glEnable(GL_STENCIL_TEST)
    # glStencilFunc(GL_EQUAL, 1, 1)
    if front:
        gl.glPolygonOffset(0.0, -4.0)
        gl.glEnable(gl.GL_POLYGON_OFFSET_FILL)
    elif back:
        gl.glPolygonOffset(0.0, 4.0)
        gl.glEnable(gl.GL_POLYGON_OFFSET_FILL)
    gl.glDepthMask(False)
    fs_emu_blending(True)
    fs_emu_texturing(True)
    gl.glBindTexture(gl.GL_TEXTURE_2D, Texture.shadow2)

    for type_, menu, item_index, pos, rotation, scale, ratio, brightness, \
        area in reversed(itemdata):
        gl.glPushMatrix()
        gl.glTranslate(*pos)
        gl.glRotate(rotation, 0.0, 1.0, 0.0)
        gl.glScalef(scale, scale, 1.0)
        render_item_shadow(ratio=ratio, brightness=brightness, area=area)
        gl.glScalef(1.0, -1.0, 1.0)
        gl.glTranslatef(0.0, 0.5, 0.0)
        # render_item_shadow(ratio=ratio,
        # brightness=brightness * 0.33, area=area)
        render_item_shadow(ratio=ratio, brightness=brightness, area=area)
        gl.glPopMatrix()

    gl.glPolygonOffset(0.0, 0.0)
    gl.glDisable(gl.GL_POLYGON_OFFSET_FILL)
    gl.glDepthMask(True)
コード例 #6
0
def render_item_shadows(itemdata, front=False, back=True):
    Render.get().standard_perspective()
    # glEnable(GL_STENCIL_TEST)
    # glStencilFunc(GL_EQUAL, 1, 1)
    if front:
        gl.glPolygonOffset(0.0, -4.0)
        gl.glEnable(gl.GL_POLYGON_OFFSET_FILL)
    elif back:
        gl.glPolygonOffset(0.0, 4.0)
        gl.glEnable(gl.GL_POLYGON_OFFSET_FILL)
    gl.glDepthMask(False)
    fs_emu_blending(True)
    fs_emu_texturing(True)
    gl.glBindTexture(gl.GL_TEXTURE_2D, Texture.shadow2)

    for type_, menu, item_index, pos, rotation, scale, ratio, brightness, \
        area in reversed(itemdata):
        gl.glPushMatrix()
        gl.glTranslate(*pos)
        gl.glRotate(rotation, 0.0, 1.0, 0.0)
        gl.glScalef(scale, scale, 1.0)
        render_item_shadow(ratio=ratio, brightness=brightness, area=area)
        gl.glScalef(1.0, -1.0, 1.0)
        gl.glTranslatef(0.0, 0.5, 0.0)
        # render_item_shadow(ratio=ratio,
        # brightness=brightness * 0.33, area=area)
        render_item_shadow(ratio=ratio, brightness=brightness, area=area)
        gl.glPopMatrix()

    gl.glPolygonOffset(0.0, 0.0)
    gl.glDisable(gl.GL_POLYGON_OFFSET_FILL)
    gl.glDepthMask(True)
コード例 #7
0
    def render_one(cls, notification):
        notification.show()
        w = 500
        h = 100
        x = 1920 - w
        y = cls.y
        z = 0.9
        fs_emu_texturing(False)
        fs_emu_blending(True)
        gl.glBegin(gl.GL_QUADS)
        gl.glColor(1.0, 1.0, 0.5, 0.8)
        gl.glVertex3f(x, y, z)
        gl.glVertex3f(x + w, y, z)
        gl.glVertex3f(x + w, y + h, z)
        gl.glVertex3f(x, y + h, z)
        gl.glEnd()

        lines = notification.text.split("\n")
        y += h - 23
        for line in lines:
            tw, th = Render.get().measure_text(line, cls.font)
            y -= th
            Render.get().text(line,
                              cls.font,
                              x + 23,
                              y,
                              color=(0.2, 0.2, 0.0, 1.0))
            y -= 2
        cls.y += h + 15
コード例 #8
0
    def render(self):
        Render.get().hd_perspective()
        if self.throbber_start_time == 0:
            self.throbber_start_time = State.get().time
        dt = State.get().time - self.throbber_start_time
        # run animation with 15 fps
        self.throbber_progress = int(dt * 15)

        bg_fade = (State.get().time - State.get().dialog_time) / 0.5
        if bg_fade > 1.0:
            bg_fade = 1.0
        elif bg_fade < 0.0:
            bg_fade = 0.0
        fs_emu_texturing(False)
        fs_emu_blending(True)
        gl.glDisable(gl.GL_DEPTH_TEST)
        gl.glDepthMask(False)

        gl.glBegin(gl.GL_QUADS)
        gl.glColor4f(0.0, 0.0, 0.0, bg_fade)
        gl.glVertex2f(0, 0)
        gl.glVertex2f(1920, 0)
        gl.glVertex2f(1920, 1020)
        gl.glVertex2f(0, 1020)
        gl.glEnd()

        gl.glBegin(gl.GL_QUADS)
        gl.glColor4f(0.0, 0.0, 0.0, bg_fade * 0.5)
        gl.glVertex2f(0, 1020)
        gl.glVertex2f(1920, 1020)
        gl.glVertex2f(1920, 1080)
        gl.glVertex2f(0, 1080)
        gl.glEnd()

        # y = 0.0
        # tw, th = Render.get().text("LAUNCHING GAME", self.title_font,
        #         0.0, y, w=32 / 9, h=self.height,
        #         color=(1.0, 1.0, 1.0, 1.0), halign=0.0)
        #
        fs_emu_blending(True)
        # if bg_fade > 0.5:
        #     self.throbber_opacity = (bg_fade - 0.5) / 0.5
        #     #self.throbber_opacity = bg_fade
        #     self.render_throbber()
        # if bg_fade == 1.0:
        if State.get().time - State.get().dialog_time > 1.0:
            # gradually show over 1/4 second
            self.throbber_opacity = (State.get().time -
                                     State.get().dialog_time - 1.0) * 4
            if self.throbber_opacity > 1.0:
                self.throbber_opacity = 1.0
            self.render_throbber()

        gl.glEnable(gl.GL_DEPTH_TEST)
        gl.glDepthMask(True)
        # fs_emu_texturing(1)
        # fs_emu_blending(0)
        # print("Setting dirty..")
        Render.get().dirty = True
コード例 #9
0
    def render(self):
        Render.get().hd_perspective()
        if self.throbber_start_time == 0:
            self.throbber_start_time = State.get().time
        dt = State.get().time - self.throbber_start_time
        # run animation with 15 fps
        self.throbber_progress = int(dt * 15)

        bg_fade = (State.get().time - State.get().dialog_time) / 0.5
        if bg_fade > 1.0:
            bg_fade = 1.0
        elif bg_fade < 0.0:
            bg_fade = 0.0
        fs_emu_texturing(False)
        fs_emu_blending(True)
        gl.glDisable(gl.GL_DEPTH_TEST)
        gl.glDepthMask(False)

        gl.glBegin(gl.GL_QUADS)
        gl.glColor4f(0.0, 0.0, 0.0, bg_fade)
        gl.glVertex2f(0, 0)
        gl.glVertex2f(1920, 0)
        gl.glVertex2f(1920, 1020)
        gl.glVertex2f(0, 1020)
        gl.glEnd()

        gl.glBegin(gl.GL_QUADS)
        gl.glColor4f(0.0, 0.0, 0.0, bg_fade * 0.5)
        gl.glVertex2f(0, 1020)
        gl.glVertex2f(1920, 1020)
        gl.glVertex2f(1920, 1080)
        gl.glVertex2f(0, 1080)
        gl.glEnd()

        # y = 0.0
        # tw, th = Render.get().text("LAUNCHING GAME", self.title_font,
        #         0.0, y, w=32 / 9, h=self.height,
        #         color=(1.0, 1.0, 1.0, 1.0), halign=0.0)
        #
        fs_emu_blending(True)
        # if bg_fade > 0.5:
        #     self.throbber_opacity = (bg_fade - 0.5) / 0.5
        #     #self.throbber_opacity = bg_fade
        #     self.render_throbber()
        # if bg_fade == 1.0:
        if State.get().time - State.get().dialog_time > 1.0:
            # gradually show over 1/4 second
            self.throbber_opacity = (
                                        State.get().time - State.get().dialog_time - 1.0) * 4
            if self.throbber_opacity > 1.0:
                self.throbber_opacity = 1.0
            self.render_throbber()

        gl.glEnable(gl.GL_DEPTH_TEST)
        gl.glDepthMask(True)
        # fs_emu_texturing(1)
        # fs_emu_blending(0)
        # print("Setting dirty..")
        Render.get().dirty = True
コード例 #10
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def show():
    global current_menu

    # fade_from is used on init_display, so we initialize this
    # color here. Set alpha to 2.0 to force 1 second of solid
    # color in combination with 2 sec. animation below
    if False and windows and not Settings.fullscreen_menu:
        State.get().fade_from = (1.0, 1.0, 1.0, 2.0)
        State.get().fade_to = (1.0, 1.0, 1.0, 0.0)
    else:
        State.get().fade_from = (0.0, 0.0, 0.0, 2.0)
        State.get().fade_to = (0.0, 0.0, 0.0, 0.0)
    init_display()
    if LIGHTING:
        init_lighting()
    init_textures()
    init_fonts()

    if USE_MENU_TRANSITIONS:
        compile_programs()

    InputHandler.open()

    on_resize((Render.get().display_width, Render.get().display_height))
    image_loader = ImageLoader.get()
    image_loader.start()
    new_menu = create_main_menu()
    State.get().history.append(new_menu)

    for platform_id in PlatformHandler.get_platform_ids():
        if "--" + platform_id in sys.argv:
            platform_menu = ItemMenu()
            platform_menu.parent_menu = new_menu

            platform_item = PlatformItem(platform_id)
            platform_menu.items.append(platform_item)
            # platform_menu.set_selected_index(0, immediate=True)

            new_menu = platform_item.activate(platform_menu)
            print(new_menu)
            State.get().history.append(new_menu)
            break

    set_current_menu(new_menu)
    if len(new_menu) == 1:
        # only n/a item showing, possibly
        if len(AllMenuItem().activate(None)) == 0:
            # no games, initiate game scan
            rescan_games()

    State.get().fade_start = get_current_time()
    State.get().fade_end = get_current_time() + 2.000

    # # make a timer so that update events are sent to modules at least once
    # # every second
    # pygame.time.set_timer(IDLE_EVENT, 1000)

    State.get().start_time = get_current_time()
コード例 #11
0
ファイル: launchmenu.py プロジェクト: jelmer/fs-uae-debian
    def render(self):
        Render.get().hd_perspective()
        fs_emu_texturing(True)
        fs_emu_blending(False)
        Texture.sidebar_background.render(0, 0, 1920,
                                          Texture.sidebar_background.h)

        if self.state in [STATE_PREPARING, STATE_WAITRUN]:
            self.throbber.render()
コード例 #12
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def do_render():
    if current_menu is None:
        return

    current_menu.update()

    if RunTransition.value > 0.99:
        # do not render anything when running a game
        return

    if State.get().currently_ingame:
        # print("currently ingame")
        return

    # try to exploit parallelism by uploading texture while rendering
    TextureManager.get().load_textures(1)

    # clear mouseover rects -these will be calculated during rendering
    Mouse.items[:] = []
    Render.get().standard_perspective()

    # scanning = GameScanner.scanning

    data = current_menu.render()
    current_menu.render_transparent(data)

    # if GameScanner.is_scanning():
    if False:
        render_scanning_status()
        State.get().was_scanning = True
    else:
        render_config_menu()
        if State.get().was_scanning:
            print("State.get().was_scanning")
            State.get().was_scanning = False
            # reload current menu

            # if current_menu.parent_menu:
            #     result = current_menu.parent_menu.selected_item.activate(
            #             current_menu.parent_menu)
            #     if isinstance(result, Menu):
            #         #if len(result) == 0:
            #         #    result.append(NoItem())
            #         result.parent_menu = current_menu.parent_menu
            #         print("set new menu (rescanned games)")
            #         set_current_menu(result)
            recreate_main_menu_if_necessary()

    render_top()

    if State.get().dialog:
        State.get().dialog.render()

    render_global_fade()
    NotificationRender.render()
    if RunTransition.value > 0.0:
        render_fade(a=RunTransition.value)
コード例 #13
0
ファイル: launchmenu.py プロジェクト: glaubitz/fs-uae-debian
    def render(self):
        Render.get().hd_perspective()
        fs_emu_texturing(True)
        fs_emu_blending(False)
        Texture.sidebar_background.render(
            0, 0, 1920, Texture.sidebar_background.h)

        if self.state in [STATE_PREPARING, STATE_WAITRUN]:
            self.throbber.render()
コード例 #14
0
 def unload_textures(self):
     print("TextureManager.unload_textures")
     with self.lock:
         for ip in self.image_list:
             texture = self.texture_dict[ip]
             if texture is not None:
                 if texture is not Texture.default_item:
                     Render.get().delete_texture_list.append(texture.texture)
             self.texture_dict[ip] = None
コード例 #15
0
 def unload_textures(self):
     print("TextureManager.unload_textures")
     with self.lock:
         for ip in self.image_list:
             texture = self.texture_dict[ip]
             if texture is not None:
                 if texture is not Texture.default_item:
                     Render.get().delete_texture_list.append(
                         texture.texture)
             self.texture_dict[ip] = None
コード例 #16
0
ファイル: dialog.py プロジェクト: jelmer/fs-uae-debian
 def render(self):
     Render.get().ortho_perspective()
     gl.glDisable(gl.GL_DEPTH_TEST)
     fs_emu_blending(True)
     gl.glPushMatrix()
     gl.glTranslatef(-self.width / 2, -self.height / 2, 0.0)
     self.render_background()
     self.render_content()
     gl.glPopMatrix()
     gl.glEnable(gl.GL_DEPTH_TEST)
     pass
コード例 #17
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def render_fade(r=0.0, g=0.0, b=0.0, a=0.0):
    Render.get().hd_perspective()
    fs_emu_blending(True)
    fs_emu_texturing(False)
    gl.glBegin(gl.GL_QUADS)
    gl.glColor4f(r * a, g * a, b * a, a)
    gl.glVertex2f(0, 0)
    gl.glVertex2f(1920, 0)
    gl.glVertex2f(1920, 1080)
    gl.glVertex2f(0, 1080)
    gl.glEnd()
コード例 #18
0
 def render(cls):
     notifications = Notification.all()
     if len(notifications) == 0:
         return
     Render.get().hd_perspective()
     cls.y = 0
     for i, notification in enumerate(notifications):
         cls.render_one(notification)
         Render.get().dirty = True
         # showing max two notifications
         if i == 1:
             break
コード例 #19
0
 def render(cls):
     notifications = Notification.all()
     if len(notifications) == 0:
         return
     Render.get().hd_perspective()
     cls.y = START_Y
     for i, notification in enumerate(notifications):
         cls.render_one(notification)
         Render.get().dirty = True
         # showing max four notifications
         if i > 4:
             break
コード例 #20
0
def render_bottom_bar_text(item):
    strength = 0.9
    x = 544
    y = 290

    title = item.title.upper()
    if title:
        Render.get().text(title, Font.title_font, x, y, 1920 - x - 170,
                          shadow=True, color=(1.0, 1.0, 1.0, 1.0 * strength))

    year_text = str(getattr(State.get().current_menu.selected_item,
                            "year", "") or "").upper()
    if year_text:
        tw, th = Render.get().measure_text(year_text, Font.title_font)
        Render.get().text(year_text, Font.title_font, 1920 - 30 - tw, y, 0,
                          shadow=True, color=(1.0, 1.0, 1.0, 1.0 * strength))

    color = (0x6e / 0xff, 0x8b / 0xff, 0x96 / 0xff, 1.0)
    y = 258
    text_str = ""
    companies = set()
    publisher_text = (getattr(State.get().current_menu.selected_item,
                              "publisher", "") or "").upper()
    for text in publisher_text.split("/"):
        text = text.strip()
        if text:
            if text not in companies:
                text_str = text_str + u" \u00b7 " + text
                companies.add(text)
    developer_text = (getattr(State.get().current_menu.selected_item,
                              "developer", "") or "").upper()
    for text in developer_text.split("/"):
        text = text.strip()
        if text:
            if text not in companies:
                text_str = text_str + u" \u00b7 " + text
                companies.add(text)
    if len(text_str) > 3:
        text_str = text_str[3:]  # remove initial middle dot
        Render.get().text(text_str, Font.subtitle_font, x, y, 0,
                          shadow=True, color=color)

    platform_str = str(
        getattr(State.get().current_menu.selected_item, "platform", "") or "")
    if platform_str:
        platform_str = PlatformHandler.get_platform_name(platform_str).upper()
    if len(platform_str) >= 3:
        tw, th = Render.get().measure_text(platform_str, Font.subtitle_font)
        Render.get().text(platform_str, Font.subtitle_font, 1920 - 30 - tw, y,
                          0,
                          shadow=True, color=color)
    return
コード例 #21
0
    def render(self):
        # print("GameMenu.render")
        enter_transition.value = 1.0
        if enter_transition.start > 0:
            enter_transition.value = (
                State.get().time - enter_transition.start
            ) / (enter_transition.end - enter_transition.start)
            # prevent render from stopping when animating
            Render.get().dirty = True
        # transition goes from 1.0 ... 0.0
        # enter_transition.value = 1.0 - enter_transition.value
        # finished = 0
        if enter_transition.value >= 1.0:
            enter_transition.value = 1.0
            # finished = 1.0
            enter_transition.start = 0
            # enter_transition.on_finish()
            # return

        exit_transition.value = 0.0
        if exit_transition.start > 0:
            exit_transition.value = (
                State.get().time - exit_transition.start
            ) / (exit_transition.end - exit_transition.start)
            # prevent render from stopping when animating
            Render.get().dirty = True
        # transition goes from 1.0 ... 0.0
        exit_transition.value = 1.0 - exit_transition.value
        # finished = 0
        # if exit_transition.value <= 0.0:
        #     exit_transition.value = 0.0
        #     # finished = 1.0
        #     exit_transition.start = 0
        #     exit_transition.on_finish()
        #     return

        last_menu = State.get().history[-2]
        self.last_menu_data = last_menu.render()

        # self.top_menu_transition = transition

        # glClear(GL_DEPTH_BUFFER_BIT)
        # print(transition)
        # glEnable(GL_DEPTH_TEST)
        # glDepthMask(True)

        # render_wall(transition)
        # render_screen(transition)
        # if finished:
        #     # FIXME: defer to later via an event or similar?
        return None
コード例 #22
0
    def render(self):
        # print("GameMenu.render")
        enter_transition.value = 1.0
        if enter_transition.start > 0:
            enter_transition.value = (State.get().time - enter_transition.start
                                      ) / (enter_transition.end -
                                           enter_transition.start)
            # prevent render from stopping when animating
            Render.get().dirty = True
        # transition goes from 1.0 ... 0.0
        # enter_transition.value = 1.0 - enter_transition.value
        # finished = 0
        if enter_transition.value >= 1.0:
            enter_transition.value = 1.0
            # finished = 1.0
            enter_transition.start = 0
            # enter_transition.on_finish()
            # return

        exit_transition.value = 0.0
        if exit_transition.start > 0:
            exit_transition.value = (State.get().time - exit_transition.start
                                     ) / (exit_transition.end -
                                          exit_transition.start)
            # prevent render from stopping when animating
            Render.get().dirty = True
        # transition goes from 1.0 ... 0.0
        exit_transition.value = 1.0 - exit_transition.value
        # finished = 0
        # if exit_transition.value <= 0.0:
        #     exit_transition.value = 0.0
        #     # finished = 1.0
        #     exit_transition.start = 0
        #     exit_transition.on_finish()
        #     return

        last_menu = State.get().history[-2]
        self.last_menu_data = last_menu.render()

        # self.top_menu_transition = transition

        # glClear(GL_DEPTH_BUFFER_BIT)
        # print(transition)
        # glEnable(GL_DEPTH_TEST)
        # glDepthMask(True)

        # render_wall(transition)
        # render_screen(transition)
        # if finished:
        #     # FIXME: defer to later via an event or similar?
        return None
コード例 #23
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def fade_quit():
    print("fade_quit")
    duration = 0.500
    alpha = 0.0
    start = get_current_time()
    while True:
        alpha = min(1.0, (get_current_time() - start) / duration)

        def render_func():
            render_screen()
            Render.get().ortho_perspective()
            fs_emu_blending(True)
            fs_emu_texturing(False)
            gl.glDisable(gl.GL_DEPTH_TEST)
            gl.glBegin(gl.GL_QUADS)
            gl.glColor4f(0.0, 0.0, 0.0, alpha)
            gl.glVertex2f(-10.0, -1.0)
            gl.glVertex2f(10.0, -1.0)
            gl.glVertex2f(10.0, 1.0)
            gl.glVertex2f(-10.0, 1.0)
            gl.glEnd()
            gl.glEnable(gl.GL_DEPTH_TEST)
            # fs_emu_blending(False)
            fs_emu_texturing(True)
            swap_buffers()
            Render.get().dirty = True

        Render.get().dirty = True
        main_loop_iteration(input_func=None, render_func=render_func)
        if alpha >= 1.0:
            break
コード例 #24
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def render_screen():
    # set Render.get().dirty to False here, so that render functions can
    # request a new render frame by setting dirty
    Render.get().dirty = False
    # glEnable(GL_SCISSOR_TEST)
    # can_idle =
    if SDL_IsMinimized():
        time.sleep(0.01)
        return
    # Render.get().dirty = True
    gl.glClearColor(0.0, 0.0, 0.0, 1.0)
    gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
    do_render()
    if Render.get().display_fps:
        Render.get().dirty = True
    if RENDER_DEBUG_SQUARES:
        render_debug_square()
コード例 #25
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def default_render_func():
    # rendered = False

    time_str = time.strftime("%H:%M")
    if time_str != Render.get().last_time_str:
        # clock must be updated, at least
        Render.get().dirty = True
        Render.get().last_time_str = time_str

    if Render.get().dirty or ALWAYS_RENDER:
        # print(Render.get().frame_number)
        render_screen()
        # rendered = True
        Render.get().twice = False
        # Render.get().twice = True
    else:
        if not Render.get().twice:
            Render.get().twice = True
            render_screen()
            # rendered = True
    if RENDER_DEBUG_SQUARES:
        render_debug_square_2()
    # if not rendered:
    #     pass
    # time.sleep(0.01)
    swap_buffers()
コード例 #26
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def render_debug_square():
    global debug_x
    Render.get().hd_perspective()
    fs_emu_texturing(False)
    gl.glBegin(gl.GL_QUADS)
    gl.glColor3f(1.0, 1.0, 1.0)
    x = debug_x
    debug_x += 1
    if debug_x >= 1920:
        debug_x = 0
    y = 989
    z = 0.99
    gl.glVertex3f(x, y, z)
    gl.glVertex3f(x + 20, y, z)
    gl.glVertex3f(x + 20, y + 20, z)
    gl.glVertex3f(x, y + 20, z)
    gl.glEnd()
    fs_emu_texturing(True)
コード例 #27
0
    def __init__(self, message, backtrace=None):
        Dialog.__init__(self)
        self.width = 16 / 9 * 2
        self.height = 2.0
        self.message = message
        self.backtrace = backtrace
        self.splitted = self.backtrace.split("\n")
        if not self.splitted[-1]:
            self.splitted = self.splitted[:-1]

        self.background_color = (0.0, 0.0, 0.0, 1.0)
        liberation_mono_bold = resources.resource_filename(
            "LiberationMono-Regular.ttf")
        self.detail_font = pygame.font.Font(
            liberation_mono_bold, int(0.021 * Render.get().display_height))
        self.guru_font = pygame.font.Font(
            liberation_mono_bold, int(0.03 * Render.get().display_height))
        self.start_time = time.time()
コード例 #28
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def render_debug_square_2():
    global debug_x_2
    Render.get().hd_perspective()
    fs_emu_texturing(False)
    gl.glBegin(gl.GL_QUADS)
    gl.glColor3f(0.2, 0.2, 0.2)
    x = debug_x_2
    debug_x_2 += 1
    if debug_x_2 >= 1920:
        debug_x_2 = 0
    y = 989 + 5
    z = 0.99
    gl.glVertex3f(x, y, z)
    gl.glVertex3f(x + 20, y, z)
    gl.glVertex3f(x + 20, y + 10, z)
    gl.glVertex3f(x, y + 10, z)
    gl.glEnd()
    fs_emu_texturing(True)
コード例 #29
0
    def __init__(self, message, backtrace=None):
        Dialog.__init__(self)
        self.width = 16 / 9 * 2
        self.height = 2.0
        self.message = message
        self.backtrace = backtrace
        self.splitted = self.backtrace.split("\n")
        if not self.splitted[-1]:
            self.splitted = self.splitted[:-1]

        self.background_color = (0.0, 0.0, 0.0, 1.0)
        liberation_mono_bold = resources.resource_filename(
            "LiberationMono-Regular.ttf")
        self.detail_font = pygame.font.Font(
            liberation_mono_bold, int(0.021 * Render.get().display_height))
        self.guru_font = pygame.font.Font(
            liberation_mono_bold, int(0.03 * Render.get().display_height))
        self.start_time = time.time()
コード例 #30
0
ファイル: dialog.py プロジェクト: jelmer/fs-uae-debian
 def __init__(self):
     self.width = 1.6
     self.height = 1.0
     self.background_texture = None
     self.background_texture_offset = [0, 0]
     self.background_color = (0.4, 0.4, 0.4, 1.0)
     # make sure that the dialog is rendered at least once
     # after being created
     Render.get().dirty = True
コード例 #31
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
 def render_func():
     render_screen()
     Render.get().ortho_perspective()
     fs_emu_blending(True)
     fs_emu_texturing(False)
     gl.glDisable(gl.GL_DEPTH_TEST)
     gl.glBegin(gl.GL_QUADS)
     gl.glColor4f(0.0, 0.0, 0.0, alpha)
     gl.glVertex2f(-10.0, -1.0)
     gl.glVertex2f(10.0, -1.0)
     gl.glVertex2f(10.0, 1.0)
     gl.glVertex2f(-10.0, 1.0)
     gl.glEnd()
     gl.glEnable(gl.GL_DEPTH_TEST)
     # fs_emu_blending(False)
     fs_emu_texturing(True)
     swap_buffers()
     Render.get().dirty = True
コード例 #32
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def render_top():
    Render.get().hd_perspective()
    gl.glPushMatrix()
    transition = State.get().current_menu.top_menu_transition
    gl.glTranslate(0.0, (1.0 - transition) * 90, 0.9)

    gl.glTranslate(0.0, 0.0, 0.05)

    if State.get().top_menu == State.get().navigatable:
        selected_index = State.get().top_menu.get_selected_index()
    else:
        selected_index = -1
    x = State.get().gl_left
    for item in State.get().top_menu.left:
        item.update_size_left()
        item.x = x
        item.y = 1080 - TOP_HEIGHT
        item.h = TOP_HEIGHT
        x += item.w

    index = len(State.get().top_menu.left) - 1
    for item in reversed(State.get().top_menu.left):
        item.render_top_left(selected=(index == selected_index))
        index -= 1

    index = len(State.get().top_menu) - 1
    x = State.get().gl_right
    for item in reversed(State.get().top_menu.right):
        item.update_size_right()
        x -= item.w
        item.x = x
        item.y = 1080 - TOP_HEIGHT
        item.h = TOP_HEIGHT
        if Mouse.focus:
            selected = (Mouse.focus == item)
        else:
            selected = (index == selected_index)
        item.render_top_right(selected=selected)
        Mouse.items.append(item)
        index -= 1
    gl.glPopMatrix()
コード例 #33
0
    def load_images(self, image_paths):
        with self.lock:
            for ip in reversed(image_paths):
                if ip in self.image_dict:
                    self.image_list.remove(ip)
                    # self.image_list.insert(0, ip)
                else:
                    # texture = False means not loaded
                    # texture = None means failure loading
                    self.image_dict[ip] = False, None
                    self.texture_dict[ip] = None
                self.image_list.insert(0, ip)

            for ip in self.image_list[CACHE_SIZE:]:
                texture = self.texture_dict[ip]
                if texture is not None:
                    if texture is not Texture.default_item:
                        Render.get().delete_texture_list.append(texture.texture)
                del self.image_dict[ip]
                del self.texture_dict[ip]
            self.image_list = self.image_list[:CACHE_SIZE]
コード例 #34
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def back_to_menu_from_game():
    print("State.get().currently_ingame = False")
    State.get().currently_ingame = False

    set_items_brightness(0.66, duration=0.500)

    RunTransition.value = 0.0
    RunTransition.anim = None
    LogoStrength.anim = None
    LogoStrength.value = 1.0

    Render.get().zoom = 1.0
    Render.get().offset_x = 0.0
    Render.get().offset_y = 0.0

    State.get().fade_splash = True
    State.get().fade_start = State.get().time
    State.get().fade_end = State.get().time + 2.0
    # Use 2.0 here to force full black for 1 second
    State.get().fade_from = (0.0, 0.0, 0.0, 2.0)
    State.get().fade_to = (0.0, 0.0, 0.0, 0.0)
コード例 #35
0
def render_wall():  # brightness=1.0):
    # glClearColor(0.1, 0.1, 0.1, 1.0)
    # glClear(GL_DEPTH_BUFFER_BIT);
    Render.get().hd_perspective()
    # fs_emu_ortho();
    # fs_emu_blending(FALSE);
    # fs_emu_texturing(FALSE);
    z = -0.999

    # glPushMatrix()
    # glTranslate(0.0, 0.0, 1.0)

    # transition y-coordinate between floor and wall
    split = 361
    fs_emu_blending(False)
    fs_emu_texturing(False)
    gl.glBegin(gl.GL_QUADS)

    gl.glColor3f(39.0 / 255.0, 44.0 / 255.0, 51.0 / 255.0)
    gl.glVertex3f(0, split, z)
    gl.glVertex3f(1920, split, z)
    color = 0
    gl.glColor3f(color, color, color)
    gl.glVertex3f(1920, 1020, z)
    gl.glVertex3f(0, 1020, z)

    gl.glVertex3f(0, 1020, z)
    gl.glVertex3f(1920, 1020, z)
    gl.glVertex3f(1920, 1080, z)
    gl.glVertex3f(0, 1080, z)

    color = 0
    gl.glColor3f(color, color, color)
    gl.glVertex3f(0, 0, z)
    gl.glVertex3f(1920, 0, z)
    gl.glColor3f(20.0 / 255.0, 22.0 / 255.0, 26.0 / 255.0)
    gl.glVertex3f(1920, split, z)
    gl.glVertex3f(0, split, z)

    gl.glEnd()
コード例 #36
0
def render_wall():  # brightness=1.0):
    # glClearColor(0.1, 0.1, 0.1, 1.0)
    # glClear(GL_DEPTH_BUFFER_BIT);
    Render.get().hd_perspective()
    # fs_emu_ortho();
    # fs_emu_blending(FALSE);
    # fs_emu_texturing(FALSE);
    z = -0.999

    # glPushMatrix()
    # glTranslate(0.0, 0.0, 1.0)

    # transition y-coordinate between floor and wall
    splt = 361
    fs_emu_blending(False)
    fs_emu_texturing(False)
    gl.glBegin(gl.GL_QUADS)

    gl.glColor3f(39.0 / 255.0, 44.0 / 255.0, 51.0 / 255.0)
    gl.glVertex3f(0, splt, z)
    gl.glVertex3f(1920, splt, z)
    color = 0
    gl.glColor3f(color, color, color)
    gl.glVertex3f(1920, 1020, z)
    gl.glVertex3f(0, 1020, z)

    gl.glVertex3f(0, 1020, z)
    gl.glVertex3f(1920, 1020, z)
    gl.glVertex3f(1920, 1080, z)
    gl.glVertex3f(0, 1080, z)

    color = 0
    gl.glColor3f(color, color, color)
    gl.glVertex3f(0, 0, z)
    gl.glVertex3f(1920, 0, z)
    gl.glColor3f(20.0 / 255.0, 22.0 / 255.0, 26.0 / 255.0)
    gl.glVertex3f(1920, splt, z)
    gl.glVertex3f(0, splt, z)

    gl.glEnd()
コード例 #37
0
    def load_images(self, image_paths):
        with self.lock:
            for ip in reversed(image_paths):
                if ip in self.image_dict:
                    self.image_list.remove(ip)
                    # self.image_list.insert(0, ip)
                else:
                    # texture = False means not loaded
                    # texture = None means failure loading
                    self.image_dict[ip] = False, None
                    self.texture_dict[ip] = None
                self.image_list.insert(0, ip)

            for ip in self.image_list[CACHE_SIZE:]:
                texture = self.texture_dict[ip]
                if texture is not None:
                    if texture is not Texture.default_item:
                        Render.get().delete_texture_list.append(
                            texture.texture)
                del self.image_dict[ip]
                del self.texture_dict[ip]
            self.image_list = self.image_list[:CACHE_SIZE]
コード例 #38
0
def render_bottom_bar_screens(item):
    global last_item_id
    global item_time
    if id(item) != last_item_id:
        last_item_id = id(item)
        item_time = State.get().time

    gl.glColor3f(1.0, 1.0, 1.0)
    fs_emu_texturing(True)
    fs_emu_blending(False)

    for i in range(3, -1, -1):
        if State.get().time - item_time > 0.1 + 0.05 * i:
            texture = item.get_screen_texture(2 + i)
        else:
            texture = None
        if texture:
            # coords = (0, texture.w, texture.h, 0)
            coords = COORDS
        else:
            texture, coords = static()
            # While rendering static, we must continue rendering.
            Render.get().dirty = True

        texture.bind()
        texture_rectangle(4 + 539 + 345 * i, 34, 308, 193, 0.2, *coords)
    if State.get().time - item_time > 0.1:
        texture = item.get_screen_texture(1)
    else:
        texture = None
    if texture:
        coords = COORDS
    else:
        texture, coords = static()
        # While rendering static, we must continue rendering.
        Render.get().dirty = True
    texture.bind()

    texture_rectangle(34, 34, 472, 295, 0.2, *coords)
コード例 #39
0
ファイル: bottombar.py プロジェクト: jelmer/fs-uae-debian
def render_bottom_bar_screens(item):
    global last_item_id
    global item_time
    if id(item) != last_item_id:
        last_item_id = id(item)
        item_time = State.get().time

    gl.glColor3f(1.0, 1.0, 1.0)
    fs_emu_texturing(True)
    fs_emu_blending(False)

    for i in range(3, -1, -1):
        if State.get().time - item_time > 0.1 + 0.05 * i:
            texture = item.get_screen_texture(2 + i)
        else:
            texture = None
        if texture:
            # coords = (0, texture.w, texture.h, 0)
            coords = COORDS
        else:
            texture, coords = static()
            # While rendering static, we must continue rendering.
            Render.get().dirty = True

        texture.bind()
        texture_rectangle(4 + 539 + 345 * i, 34, 308, 193, 0.2, *coords)
    if State.get().time - item_time > 0.1:
        texture = item.get_screen_texture(1)
    else:
        texture = None
    if texture:
        coords = COORDS
    else:
        texture, coords = static()
        # While rendering static, we must continue rendering.
        Render.get().dirty = True
    texture.bind()

    texture_rectangle(34, 34, 472, 295, 0.2, *coords)
コード例 #40
0
    def render_transparent(self, data):
        last_menu = State.get().history[-2]
        last_menu.render_transparent(self.last_menu_data)

        if Transition.value < 1.0:
            opacity = 1.0 - Transition.value
            opacity *= 1.25
            if opacity > 1.0:
                opacity = 1.0
            Render.get().hd_perspective()
            gl.glDisable(gl.GL_DEPTH_TEST)
            fs_emu_texturing(False)
            fs_emu_blending(True)
            gl.glBegin(gl.GL_QUADS)
            gl.glColor4f(0.0, 0.0, 0.0, opacity)
            gl.glVertex2f(0.0, 0.0)
            gl.glVertex2f(1920.0, 0.0)
            gl.glVertex2f(1920.0, 1020.0)
            gl.glVertex2f(0.0, 1020.0)
            gl.glEnd()
            gl.glEnable(gl.GL_DEPTH_TEST)

        self.config_list.render(Transition.value)
コード例 #41
0
    def render_transparent(self, data):
        last_menu = State.get().history[-2]
        last_menu.render_transparent(self.last_menu_data)

        if Transition.value < 1.0:
            opacity = 1.0 - Transition.value
            opacity *= 1.25
            if opacity > 1.0:
                opacity = 1.0
            Render.get().hd_perspective()
            gl.glDisable(gl.GL_DEPTH_TEST)
            fs_emu_texturing(False)
            fs_emu_blending(True)
            gl.glBegin(gl.GL_QUADS)
            gl.glColor4f(0.0, 0.0, 0.0, opacity)
            gl.glVertex2f(0.0, 0.0)
            gl.glVertex2f(1920.0, 0.0)
            gl.glVertex2f(1920.0, 1020.0)
            gl.glVertex2f(0.0, 1020.0)
            gl.glEnd()
            gl.glEnable(gl.GL_DEPTH_TEST)

        self.config_list.render(Transition.value)
コード例 #42
0
ファイル: window.py プロジェクト: EdwardBetts/fs-uae-launcher
def set_current_menu(menu):
    if not isinstance(menu, SearchResultsMenu):
        menu.search_text = ""

    global current_menu
    if len(menu) == 0:
        menu.append(NoItem())
    current_menu = menu
    State.get().current_menu = menu
    if menu.navigatable:
        State.get().navigatable = menu.navigatable
    else:
        State.get().navigatable = menu
    State.get().top_menu = menu.top
    State.get().down_navigatable = None
    Render.get().dirty = True
コード例 #43
0
ファイル: itemmenu.py プロジェクト: bopopescu/fs-uae-debian
def render_menu(menu, what=None, skip_center_item=False):
    if what is None:
        what = ["ITEMS", "SHADOWS"]
    Render.get().standard_perspective()
    item_data = _render_menu(menu, what, skip_center_item)
    return item_data
コード例 #44
0
    def load(cls,
             im,
             mipmap=False,
             min_filter=None,
             wrap_s=gl.GL_CLAMP_TO_EDGE,
             wrap_t=gl.GL_CLAMP_TO_EDGE,
             target=gl.GL_TEXTURE_2D,
             size=None,
             out_data=None):
        if size is None:
            size = [0, 0]
        # type = "RGB"
        # gl_type = gl.GL_RGB
        # if im.mode == "RGBA":
        #     # convert to premultiplied alpha
        #     #pix = im.load()
        #     #for x in range(im.size[0]):
        #     #    for y in range(im.size[1]):
        #     #        r, g, b, a = pix[x, y]
        #     #        if a:
        #     #            pix[x, y] = r * 255 // a, g * 255 // a, \
        #     #                 b * 255 // a, a
        #     #        else:
        #     #            pix[x, y] = 0, 0, 0, 0
        #     a = numpy.fromstring(im.tostring(), dtype=numpy.uint8)
        #     alpha_layer = a[3::4] / 255.0
        #     a[0::4] *= alpha_layer
        #     a[1::4] *= alpha_layer
        #     a[2::4] *= alpha_layer
        #     #im = Image.fromstring("RGBA", im.size, a.tostring())
        #     im_data = a.tostring()
        #     # type = "RGBA"
        #     gl_type = gl.GL_RGBA
        # else:
        #     im_data = im.tostring("raw", "RGB")
        #
        # size[0] = im.size[0]
        # size[1] = im.size[1]
        # #texture = glGenTextures(1)

        internal_format = gl.GL_RGBA
        texture_format = gl.GL_BGRA

        if im.format() != QImage.Format_ARGB32_Premultiplied:
            im = im.convertToFormat(QImage.Format_ARGB32_Premultiplied)

        bits = im.bits()
        try:
            pixels = bits.tobytes()
        except AttributeError:
            bits.setsize(im.byteCount())
            pixels = bytes(bits)
        size[0] = im.width()
        size[1] = im.height()

        from arcade.glui.render import Render
        texture = Render.get().create_texture()
        gl.glBindTexture(target, texture)
        gl.glTexImage2D(target, 0, internal_format, size[0], size[1], 0,
                        texture_format, gl.GL_UNSIGNED_BYTE, pixels)
        if mipmap:
            gl.glGenerateMipmap(target)
            if min_filter is None:
                min_filter = gl.GL_LINEAR_MIPMAP_LINEAR
        else:
            if min_filter is None:
                min_filter = gl.GL_LINEAR
        gl.glTexParameteri(target, gl.GL_TEXTURE_MIN_FILTER, min_filter)
        gl.glTexParameteri(target, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR)
        gl.glTexParameteri(target, gl.GL_TEXTURE_WRAP_S, wrap_s)
        gl.glTexParameteri(target, gl.GL_TEXTURE_WRAP_T, wrap_t)
        if out_data is not None:
            out_data["im_data"] = pixels
            out_data["type"] = internal_format
        return texture
コード例 #45
0
    def render(self):
        if self.first_shown_at == 0:
            self.first_shown_at = State.get().time
        # FIXME:
        # from .gamemenu import render_wall, render_screen
        # glClear(GL_DEPTH_BUFFER_BIT)
        # render_wall()
        # render_screen()

        Render.get().hd_perspective()
        if len(self.controller.ports) == 0:
            color = (1.0, 0.0, 0.0, 1.0)
            text = "No input configuration needed"
            Render.get().text(text,
                              Font.main_path_font,
                              200,
                              730,
                              400,
                              color=color,
                              halign=0)
            text = "Press enter or primary key to start game"
            Render.get().text(text,
                              Font.main_path_font,
                              200,
                              670,
                              400,
                              color=color,
                              halign=0)
            return

        if self.device_list_version != InputDevices.device_list_version:
            print(" -- device list version changed")
            # self.devices, info = InputDevice.get_input_devices("", 0, 100,
            # version=2)
            self.devices = DeviceManager.instance().get_devices()
            self.device_list_version = InputDevices.device_list_version
            # [{"index": 0} for x in self.devices]
            device_ids = set()
            for device in self.devices:
                device_ids.add(device.id)
                try:
                    self.device_data[device.id]["device"] = device
                except KeyError:
                    print(" -- add device info for", device.id)
                    self.device_data[device.id] = {"port": 0, "device": device}
                    self.check_device(self.device_data[device.id])
            for data_key in self.device_data.keys():
                if not data_key in device_ids:
                    print(" -- removing device_data for", data_key)
                    del self.device_data[data_key]
            for input in self.controller.ports:
                if not input["device_id"] in device_ids:
                    print(" -- removing device from input", input.device_id)
                    input["device_id"] = None

        for port, input in enumerate(self.controller.ports):
            center_x = 400 + 400 * port

            text = input.name.upper()
            color = (1.0, 0.0, 0.0, 1.0)
            Render.get().text(text,
                              Font.main_path_font,
                              center_x - 200,
                              760,
                              400,
                              color=color,
                              halign=0)
            text = input.description.upper()
            color = (1.0, 0.0, 0.0, 1.0)
            Render.get().text(text,
                              Font.main_path_font,
                              center_x - 200,
                              730,
                              400,
                              color=color,
                              halign=0)
            if input.device_id:
                device = self.device_data[input.device_id]["device"]
                color = (1.0, 0.5, 0.5, 1.0)
                text = device.name.upper()
                Render.get().text(text,
                                  Font.main_path_font,
                                  center_x - 200,
                                  680,
                                  400,
                                  color=color,
                                  halign=0)

            for j, device in enumerate(self.devices):
                device_data = self.device_data[device.id]
                # print(1, repr(device))
                if device_data["port"] != port:
                    continue
                text = device.name.upper()
                if device_data["ok"]:
                    color = (1.0, 1.0, 1.0, 1.0)
                else:
                    color = (0.5, 0.5, 0.5, 1.0)
                Render.get().text(text,
                                  Font.main_path_font,
                                  center_x - 200,
                                  600 - j * 40,
                                  400,
                                  color=color,
                                  halign=0)

        fade = 1.0 - (State.get().time - self.first_shown_at) * 3.0
        if fade > 0.0:
            Render.get().dirty = True
            fs_emu_blending(True)
            fs_emu_texturing(False)
            gl.glDisable(gl.GL_DEPTH_TEST)
            Render.get().hd_perspective()
            gl.glBegin(gl.GL_QUADS)
            gl.glColor4f(0.0, 0.0, 0.0, fade)
            gl.glVertex2f(0, 0)
            gl.glVertex2f(1920, 0)
            gl.glVertex2f(1920, 1080)
            gl.glVertex2f(0, 1080)
            gl.glEnd()
            gl.glEnable(gl.GL_DEPTH_TEST)
コード例 #46
0
    def render(self, transition=1.0):
        Render.get().hd_perspective()

        # w = 560
        # h = 92
        # x = 1920 - w * transition
        # y = 1080 - 60 - h
        # y = 1080 - 60 - h - 44
        # z = -0.9

        # item_top = 1080 - 90 - 50
        # item_left = 1920 - 560 + 40

        dx = Texture.sidebar_background_shadow.w * (1.0 - transition)

        gl.glPushMatrix()
        gl.glTranslate(0.0, 0.0, 0.7)
        # glTranslated((1.0 - transition) * g_tex_sidebar_background->width,
        # 0, 0)
        # fs_emu_set_texture(g_tex_sidebar_background)
        # fs_emu_render_texture_with_size(g_tex_sidebar_background,
        #         1920 - g_tex_sidebar_background->width,
        #         0, g_tex_sidebar_background->width,
        #         g_tex_sidebar_background->height)
        # fs_emu_render_sidebar()
        fs_emu_blending(True)
        fs_emu_texturing(True)
        gl.glDepthMask(False)
        Texture.sidebar_background_shadow.render(
            1920 - Texture.sidebar_background_shadow.w * transition,
            0,
            Texture.sidebar_background_shadow.w,
            Texture.sidebar_background_shadow.h,
        )
        if transition > 1.0:
            padding = 1920
            Texture.sidebar_background.render(
                1920 - Texture.sidebar_background_shadow.w * transition +
                Texture.sidebar_background_shadow.w,
                0,
                1920 + padding,
                Texture.sidebar_background.h,
            )
        gl.glDepthMask(True)
        gl.glPopMatrix()

        y = SIDEBAR_START_Y
        for i, item in enumerate(self.items):
            if item.group:
                if i > 0:
                    y -= GROUP_SPACING
            selected = i == self.index and State.get().navigatable == self
            # z = 0.71
            fs_emu_texturing(False)
            gl.glDisable(gl.GL_DEPTH_TEST)

            if selected:
                fg_color = [1.0, 1.0, 1.0, 1.0]
                # gl.glBegin(gl.GL_QUADS)
                #
                # gl.glColor3f(0.00, 0x99 / 0xff, 0xcc / 0xff)
                # gl.glVertex3f(x, y - 18, z)
                # gl.glVertex3f(x + w, y - 18, z)
                # gl.glVertex3f(x + w, y + h - 4, z)
                # gl.glVertex3f(x, y + h - 4, z)
                # # glColor3f(0.6, 0.6, 0.6)
                # # glVertex3f(x, y + 4, z)
                # # glVertex3f(x + w, y + 4, z)
                # # glVertex3f(x + w, y + h, z)
                # # glVertex3f(x, y + h, z)
                # gl.glEnd()
                fs_emu_blending(True)
                fs_emu_texturing(True)
                gl.glDepthMask(False)
                Texture.item_background.render(1920 - 540 + 13 + dx, y - 18)
                gl.glDepthMask(True)
            else:
                fg_color = [1.0, 1.0, 1.0, 1.0]

            # glBegin(GL_QUADS)
            # glColor3f(0.4, 0.4, 0.4)
            # glVertex3f(x, y, z)
            # glVertex3f(x + w, y, z)
            # glVertex3f(x + w, y + 4, z)
            # glVertex3f(x, y + 4, z)
            # glEnd()
            # fs_emu_texturing(True)

            if i > 0:
                fg_color[3] *= 0.35

            text = item.title

            # FIXME: REMOVE
            # fs_emu_blending(False)
            # fs_emu_blending(True)

            if item.group:
                BitmapFont.menu_font.render(
                    text,
                    HEADING_TEXT_LEFT + dx,
                    y + 14,
                    r=0.0,
                    g=0x99 / 0xFF,
                    b=0xCC / 0xFF,
                )
                x, _ = BitmapFont.menu_font.measure(text)
                x += HEADING_TEXT_LEFT + 12
                fs_emu_blending(True)
                fs_emu_texturing(True)
                # gl.glDepthMask(False)
                Texture.heading_strip.render(x + dx, y + 14, 1920 - x, 32)
            else:
                BitmapFont.menu_font.render(text, ITEM_TEXT_LEFT + dx, y + 14)
            gl.glEnable(gl.GL_DEPTH_TEST)
            # text = item.title.upper()
            # tw, th = Render.get().text(text, Font.main_path_font,
            #         x + 40, y + 43, color=fg_color)
            # text = item.subtitle.upper()
            # fg_color[3] = fg_color[3] * 0.4
            # text = item.title.upper()
            # tw, th = Render.get().text(text, Font.list_subtitle_font,
            #         x + 40, y + 18, color=fg_color)
            y -= 54

        # Gradually erase menu items when transitioning
        if transition > 1.0:
            gl.glDisable(gl.GL_DEPTH_TEST)
            # tr = (transition - 1.0) / 3.0
            alpha = max(0.0, (transition - 1.0) / 2.0)
            Texture.sidebar_background.render(
                1920 - Texture.sidebar_background_shadow.w * transition + 200,
                0,
                1920,
                Texture.sidebar_background.h,
                opacity=alpha,
            )
            gl.glEnable(gl.GL_DEPTH_TEST)
コード例 #47
0
ファイル: bottombar.py プロジェクト: jelmer/fs-uae-debian
def render_bottom_bar_text(item):
    strength = 0.9
    x = 544
    y = 290

    title = item.title.upper()
    title = title.strip()
    if "[" in title:
        title, subtitle = title.rsplit("[", 1)
        title = title.strip()
        subtitle = subtitle.strip()
        if subtitle.endswith("]"):
            subtitle = subtitle[:-1]
    else:
        subtitle = ""
    if title:
        Render.get().text(title,
                          Font.title_font,
                          x,
                          y,
                          1920 - x - 170,
                          shadow=True,
                          color=(1.0, 1.0, 1.0, 1.0 * strength))
        if subtitle:
            color = (0x6e / 0xff, 0x8b / 0xff, 0x96 / 0xff, 0.75)
            tw, th = Render.get().measure_text(title, Font.title_font)
            Render.get().text(subtitle,
                              Font.title_font,
                              x + tw + 20,
                              y,
                              1920 - x - 170,
                              shadow=True,
                              color=color)

    color = (0xc4 / 0xff, 0xd7 / 0xff, 0xde / 0xff, 1.0)
    year_text = str(
        getattr(State.get().current_menu.selected_item, "year", "")
        or "").upper()
    if year_text:
        tw, th = Render.get().measure_text(year_text, Font.title_font)
        Render.get().text(year_text,
                          Font.title_font,
                          1920 - 30 - tw,
                          y,
                          0,
                          shadow=True,
                          color=color)
    color = (0x6e / 0xff, 0x8b / 0xff, 0x96 / 0xff, 1.0)
    y = 258
    text_str = ""
    companies = set()
    publisher_text = (getattr(State.get().current_menu.selected_item,
                              "publisher", "") or "").upper()
    for text in publisher_text.split("/"):
        text = text.strip()
        if text:
            if text not in companies:
                text_str = text_str + u" \u00b7 " + text
                companies.add(text)
    developer_text = (getattr(State.get().current_menu.selected_item,
                              "developer", "") or "").upper()
    for text in developer_text.split("/"):
        text = text.strip()
        if text:
            if text not in companies:
                text_str = text_str + u" \u00b7 " + text
                companies.add(text)
    if len(text_str) > 3:
        text_str = text_str[3:]  # remove initial middle dot
        tw, th = Render.get().measure_text(text_str, Font.subtitle_font)
        Render.get().text(text_str,
                          Font.subtitle_font,
                          1920 - 30 - tw,
                          y,
                          0,
                          shadow=True,
                          color=color)

    platform_str = str(
        getattr(State.get().current_menu.selected_item, "platform", "") or "")
    if platform_str:
        platform_str = PlatformHandler.get_platform_name(platform_str).upper()
    if len(platform_str) >= 3:
        # tw, th = Render.get().measure_text(platform_str, Font.subtitle_font)
        Render.get().text(platform_str,
                          Font.subtitle_font,
                          x,
                          y,
                          0,
                          shadow=True,
                          color=color)
    return
コード例 #48
0
    def render_transparent(self, data):
        # print("GameMenu.render_transparent")
        last_menu = State.get().history[-2]
        last_menu.render_transparent(self.last_menu_data)

        if exit_transition.value < 1.0:
            opacity = 1.0 - exit_transition.value
            opacity *= 1.25
            if opacity > 1.0:
                opacity = 1.0
            Render.get().hd_perspective()
            gl.glDisable(gl.GL_DEPTH_TEST)
            fs_emu_texturing(False)
            fs_emu_blending(True)
            gl.glBegin(gl.GL_QUADS)
            gl.glColor4f(0.0, 0.0, 0.0, opacity)
            gl.glVertex2f(0.0, 0.0)
            gl.glVertex2f(1920.0, 0.0)
            gl.glVertex2f(1920.0, 1020.0)
            gl.glVertex2f(0.0, 1020.0)
            gl.glEnd()
            gl.glEnable(gl.GL_DEPTH_TEST)

        alpha = enter_transition.value * 0.75

        Render.get().hd_perspective()
        gl.glDisable(gl.GL_DEPTH_TEST)
        fs_emu_texturing(False)
        fs_emu_blending(True)
        gl.glBegin(gl.GL_QUADS)
        gl.glColor4f(0.0, 0.0, 0.0, alpha)
        # Covers, left
        gl.glVertex2f(0.0, 366.0)
        gl.glVertex2f(746.0, 366.0)
        gl.glVertex2f(746.0, 1020.0)
        gl.glVertex2f(0.0, 1020.0)
        # Covers, right
        gl.glVertex2f(1920.0 - 746.0, 366.0)
        gl.glVertex2f(1920.0, 366.0)
        gl.glVertex2f(1920.0, 1020.0)
        gl.glVertex2f(1920.0 - 746.0, 1020.0)
        # Bottom
        gl.glColor4f(0.0, 0.0, 0.0, 0.50)
        gl.glVertex2f(0.0, 0.0)
        gl.glVertex2f(1920.0, 0.0)
        gl.glVertex2f(1920.0, 366.0)
        gl.glVertex2f(0.0, 366.0)
        gl.glEnd()
        gl.glEnable(gl.GL_DEPTH_TEST)

        transition = enter_transition.value
        if exit_transition.value < 1.0:
            # transition = exit_transition.value
            transition = 1.0 + 3.0 - exit_transition.value * 3.0
        # print("render, transition = ", transition)
        self.config_list.render(transition)

        if exit_transition.value <= 0.0:
            exit_transition.value = 0.0
            # finished = 1.0
            exit_transition.start = 0
            exit_transition.on_finish()
コード例 #49
0
ファイル: bottombar.py プロジェクト: jelmer/fs-uae-debian
def render_bottom_bar_transparent():
    Render.get().hd_perspective()
    fs_emu_blending(True)
    Texture.bottom_bar.render(0, 0, 1920, 380, 0.3, opacity=1.0)
    item = State.get().current_menu.selected_item
    render_bottom_bar_text(item)
コード例 #50
0
    def render_content(self):
        Render.get().dirty = True

        # #x1 = -16 / 9 + 0.1
        # x1 = 0.1
        # #x2 = 16 / 9 - 0.1
        # x2 = self.width - 0.1
        # #y1 = 0.7
        # #y2 = 0.9
        # y1 = 1.6
        # y2 = 1.9
        x1 = 0
        x2 = self.width
        y1 = 1.7
        y2 = 2.0
        w = 0.03

        # t = (pygame.time.get_ticks() - self.start_time) // 1000
        alert_color = (1.0, 0.8, 0.0)
        t = int((time.time() - self.start_time * 1.6))
        if t % 2 == 0:
            gl.glBegin(gl.GL_QUADS)
            gl.glColor3f(*alert_color)
            gl.glVertex2f(x1, y1)
            gl.glVertex2f(x2, y1)
            gl.glVertex2f(x2, y2)
            gl.glVertex2f(x1, y2)
            gl.glColor3f(0.0, 0.0, 0.0)
            gl.glVertex2f(x1 + w, y1 + w)
            gl.glVertex2f(x2 - w, y1 + w)
            gl.glVertex2f(x2 - w, y2 - w)
            gl.glVertex2f(x1 + w, y2 - w)
            gl.glEnd()

        text = "Software Failure.  Press BACKSPACE or back button to continue."
        Render.get().text(text, self.guru_font, 0.2, 1.85, color=alert_color)
        text = self.splitted[-1]
        text = "Guru Meditation #{0}".format(text)
        Render.get().text(text, self.guru_font, 0.2, 1.77, color=alert_color)

        x = 0.2
        y = 0.15

        tw, th = Render.get().measure_text("M", self.detail_font)
        y += th
        lines = []
        max_line_size = 129
        for line in self.splitted:
            line = line.rstrip()
            while len(line) > max_line_size:
                lines.append(line[:max_line_size])
                line = line[max_line_size:]
            lines.append(line)

        for i, line in enumerate(reversed(lines)):
            if i == MAX_LINE:
                break
            s = (MAX_LINE - i) / MAX_LINE
            tw, th = Render.get().text(
                line, self.detail_font, x, y, color=(s, s, s, 1.0)
            )
            y += th
コード例 #51
0
ファイル: bottombar.py プロジェクト: jelmer/fs-uae-debian
def render_bottom_bar():
    Render.get().hd_perspective()
    item = State.get().current_menu.selected_item
    render_bottom_bar_screens(item)
コード例 #52
0
    def render(self, transition=1.0):
        Render.get().hd_perspective()

        # w = 560
        # h = 92
        # x = 1920 - w * transition
        # y = 1080 - 60 - h
        # y = 1080 - 60 - h - 44
        # z = -0.9

        item_top = 1080 - 90
        item_left = 1920 - 560 + 40

        item_left += Texture.sidebar_background_shadow.w * (1.0 - transition)

        gl.glPushMatrix()
        gl.glTranslate(0.0, 0.0, 0.7)
        # glTranslated((1.0 - transition) * g_tex_sidebar_background->width,
        # 0, 0)
        # fs_emu_set_texture(g_tex_sidebar_background)
        # fs_emu_render_texture_with_size(g_tex_sidebar_background,
        #         1920 - g_tex_sidebar_background->width,
        #         0, g_tex_sidebar_background->width,
        #         g_tex_sidebar_background->height)
        # fs_emu_render_sidebar()
        fs_emu_blending(True)
        fs_emu_texturing(True)
        gl.glDepthMask(False)
        Texture.sidebar_background_shadow.render(
            1920 - Texture.sidebar_background_shadow.w * transition, 0,
            Texture.sidebar_background_shadow.w,
            Texture.sidebar_background_shadow.h)
        gl.glDepthMask(True)
        gl.glPopMatrix()

        # x = x + 70
        # w = w - 70
        x = item_left
        y = item_top - 60
        w = 560 - 40 - 40
        h = 60

        for i, item in enumerate(self.items):
            if item.group:
                if i > 0:
                    # skip one half row before group heading
                    y -= h / 2
            selected = i == self.index and State.get().navigatable == self
            z = 0.71
            fs_emu_texturing(False)

            if selected:
                fg_color = [1.0, 1.0, 1.0, 1.0]
                gl.glBegin(gl.GL_QUADS)

                gl.glColor3f(0.00, 0x99 / 0xff, 0xcc / 0xff)
                gl.glVertex3f(x, y + 4, z)
                gl.glVertex3f(x + w, y + 4, z)
                gl.glVertex3f(x + w, y + h - 4, z)
                gl.glVertex3f(x, y + h - 4, z)
                # glColor3f(0.6, 0.6, 0.6)
                # glVertex3f(x, y + 4, z)
                # glVertex3f(x + w, y + 4, z)
                # glVertex3f(x + w, y + h, z)
                # glVertex3f(x, y + h, z)
                gl.glEnd()
            else:
                fg_color = [1.0, 1.0, 1.0, 1.0]

            # glBegin(GL_QUADS)
            # glColor3f(0.4, 0.4, 0.4)
            # glVertex3f(x, y, z)
            # glVertex3f(x + w, y, z)
            # glVertex3f(x + w, y + 4, z)
            # glVertex3f(x, y + 4, z)
            # glEnd()
            # fs_emu_texturing(True)

            if i > 0:
                fg_color[3] *= 0.35

            text = item.title

            # FIXME: REMOVE
            # fs_emu_blending(False)
            # fs_emu_blending(True)

            gl.glDisable(gl.GL_DEPTH_TEST)
            if item.group:
                BitmapFont.menu_font.render(text,
                                            x + 20,
                                            y + 14,
                                            r=0.0,
                                            g=0x99 / 0xff,
                                            b=0xcc / 0xff)
            else:
                BitmapFont.menu_font.render(text, x + 20, y + 14)
            gl.glEnable(gl.GL_DEPTH_TEST)
            # text = item.title.upper()
            # tw, th = Render.get().text(text, Font.main_path_font,
            #         x + 40, y + 43, color=fg_color)
            # text = item.subtitle.upper()
            # fg_color[3] = fg_color[3] * 0.4
            # text = item.title.upper()
            # tw, th = Render.get().text(text, Font.list_subtitle_font,
            #         x + 40, y + 18, color=fg_color)
            y -= h