Example #1
0
 def _send_keycode(self, key, scancode, sym, modifiers):
     from kivy.core.window import Window
     print("Telenium: send key key={!r} scancode={} sym={!r} modifiers={}".
           format(key, scancode, sym, modifiers))
     if not Window.dispatch("on_key_down", key, scancode, sym, modifiers):
         Window.dispatch("on_keyboard", key, scancode, sym, modifiers)
     Window.dispatch("on_key_up", key, scancode)
     return True
            def process_as_mouse_or_keyboard(tv_sec, tv_usec, ev_type, ev_code, ev_value):

                if ev_type == EV_SYN:
                    if ev_code == SYN_REPORT:
                        process([point])

                elif ev_type == EV_REL:

                    if ev_code == 0:
                        point['x'] = \
                            min(1., max(0., point['x'] + ev_value / 1000.))
                    elif ev_code == 1:
                        point['y'] = \
                            min(1., max(0., point['y'] - ev_value / 1000.))

                elif ev_type == EV_KEY:
                    buttons = {
                        272: 'left',
                        273: 'right',
                        274: 'middle',
                        275: 'side',
                        276: 'extra',
                        277: 'forward',
                        278: 'back',
                        279: 'task'}

                    if ev_code in buttons.keys():
                        if ev_value:
                            if 'button' not in point:
                                point['button'] = buttons[ev_code]
                                point['id'] += 1
                                if '_avoid' in point:
                                    del point['_avoid']
                        elif 'button' in point:
                            if point['button'] == buttons[ev_code]:
                                del point['button']
                                point['id'] += 1
                                point['_avoid'] = True
                    else:
                        if ev_value == 1:
                            l = keyboard_keys[ev_code][-1 if 'shift' in Window._modifiers else 0]
                            if l == 'shift':
                                Window._modifiers.append('shift')
                            print(ev_code, l)
                            Window.dispatch('on_key_down', Keyboard.keycodes[l.lower()], ev_code, keys_str.get(l, l), Window._modifiers)
                        if ev_value == 0:
                            l = keyboard_keys[ev_code][-1 if 'shift' in Window._modifiers else 0]
                            Window.dispatch('on_key_up', Keyboard.keycodes[l.lower()], ev_code, keys_str.get(l, l), Window._modifiers)
                            if l == 'shift':
                                Window._modifiers.remove('shift')
Example #3
0
    def _real_screenshot():
        import tempfile
        from kivy.core.window import Window
        from kivy.utils import platform
        try:
            fd = tempfile.NamedTemporaryFile(suffix=".png", delete=False)
            # XXX hack, Window.screenshot doesn't respect our filename
            screenshot_fn = fd.name.rsplit(".")[-2] + "0001.png"
            fd.close()

            if platform == "ios":
                from kivy.graphics.opengl import glReadPixels, GL_RGBA, GL_UNSIGNED_BYTE
                from kivy.core.image import ImageLoader
                # hacky, as Window don't have correct system size (why, i don't
                # know.)
                width, height = Window._win._get_gl_size()
                Window.dispatch("on_draw")
                data = glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE)
                # save using standard imageloader, but in rgba
                loader = [x for x in ImageLoader.loaders if x.can_save()][0]
                loader.save(screenshot_fn, width, height, "rgba", data, True)
                """
                # strides issue
                data = list(data)
                del data[3::4]
                data = "".join(data)
                Window._win.save_bytes_in_png(screenshot_fn, data, width,
                        height)
                """
            else:
                Window.screenshot(name=fd.name)
            with open(screenshot_fn, "rb") as fd:
                data = fd.read()
            _result[:] = [width, height, base64.encodestring(data)]
        except:
            import traceback
            traceback.print_exc()
        finally:
            try:
                os.unlink(screenshot_fn)
                os.unlink(fd.name)
            except:
                pass
            _event.set()
Example #4
0
        def update(self, dispatch_fn):
            # dispatch all events from threads
            dispatch_queue = self.dispatch_queue
            n = len(dispatch_queue)
            for name, args in dispatch_queue[:n]:
                if name == 'mouse_pos':
                    Window.mouse_pos = args
                elif name == 'key_down':
                    if not Window.dispatch('on_key_down', *args):
                        Window.dispatch('on_keyboard', *args)
                elif name == 'key_up':
                    Window.dispatch('on_key_up', *args)
            del dispatch_queue[:n]

            try:
                while True:
                    event_type, touch = self.queue.popleft()
                    dispatch_fn(event_type, touch)
            except:
                pass
Example #5
0
        def update(self, dispatch_fn):
            # dispatch all events from threads
            dispatch_queue = self.dispatch_queue
            n = len(dispatch_queue)
            for name, args in dispatch_queue[:n]:
                if name == 'mouse_pos':
                    Window.mouse_pos = args
                elif name == 'key_down':
                    if not Window.dispatch('on_key_down', *args):
                        Window.dispatch('on_keyboard', *args)
                elif name == 'key_up':
                    Window.dispatch('on_key_up', *args)
            del dispatch_queue[:n]

            try:
                while True:
                    event_type, touch = self.queue.popleft()
                    dispatch_fn(event_type, touch)
            except:
                pass
Example #6
0
    def _real_screenshot():
        import tempfile
        from kivy.core.window import Window

        try:
            fd = tempfile.NamedTemporaryFile(suffix=".png", delete=False)
            # XXX hack, Window.screenshot doesn't respect our filename
            screenshot_fn = fd.name.rsplit(".")[-2] + "0001.png"
            fd.close()

            """
            width, height = Window.size
            print(width, height)
            Window.screenshot(name=fd.name)
            """

            from kivy.graphics.opengl import glReadPixels, GL_RGBA, GL_UNSIGNED_BYTE
            from kivy.core.image import ImageLoader
            # hacky, as Window don't have correct system size (why, i don't
            # know.)
            width, height = Window._win._get_gl_size()
            Window.dispatch("on_draw")
            data = glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE)
            # save using standard imageloader, but in rgba
            loader = [x for x in ImageLoader.loaders if x.can_save(fmt="png", is_bytesio=False)][0]
            loader.save(screenshot_fn, width, height, "rgba", data, True, "png")

            with open(screenshot_fn, "rb") as fd:
                data = fd.read()
            _result[:] = [width, height, base64.encodestring(data).decode("utf8")]
        except:
            import traceback
            traceback.print_exc()
        finally:
            try:
                os.unlink(screenshot_fn)
                os.unlink(fd.name)
            except:
                pass
            _event.set()
    async def do_keyboard_key(self,
                              key,
                              modifiers=(),
                              duration=.05,
                              num_press=1):
        from kivy.core.window import Window
        if key == ' ':
            key = 'spacebar'
        key_lower = key.lower()
        key_code = Window._system_keyboard.string_to_keycode(key_lower)

        known_modifiers = {'shift', 'alt', 'ctrl', 'meta'}
        if set(modifiers) - known_modifiers:
            raise ValueError('Unknown modifiers "{}"'.format(
                set(modifiers) - known_modifiers))

        special_keys = {
            27: 'escape',
            9: 'tab',
            8: 'backspace',
            13: 'enter',
            127: 'del',
            271: 'enter',
            273: 'up',
            274: 'down',
            275: 'right',
            276: 'left',
            278: 'home',
            279: 'end',
            280: 'pgup',
            281: 'pgdown',
            300: 'numlock',
            301: 'capslock',
            145: 'screenlock',
        }

        text = None
        try:
            text = chr(key_code)
            if key_lower != key:
                text = key
        except ValueError:
            pass

        dt = duration / num_press
        for i in range(num_press):
            await self.async_sleep(dt)

            Window.dispatch('on_key_down', key_code, 0, text, modifiers)
            if (key not in known_modifiers and key_code not in special_keys
                    and not (known_modifiers & set(modifiers))):
                Window.dispatch('on_textinput', text)

            await self.wait_clock_frames(1)
            yield 'down', (key, key_code, 0, text, modifiers)

        Window.dispatch('on_key_up', key_code, 0)
        await self.wait_clock_frames(1)
        yield 'up', (key, key_code, 0, text, modifiers)
Example #8
0
 def test_ime(self):
     empty_ti = TextInput()
     empty_ti.focused = True
     ti = TextInput(text='abc')
     Window.dispatch('on_textedit', 'ㅎ')
     self.assertEqual(empty_ti.text, 'ㅎ')
     self.assertEqual(ti.text, 'abc')
     ti.focused = True
     Window.dispatch('on_textedit', 'ㅎ')
     self.assertEqual(ti.text, 'abcㅎ')
     Window.dispatch('on_textedit', '하')
     self.assertEqual(ti.text, 'abc하')
     Window.dispatch('on_textedit', '핫')
     Window.dispatch('on_textedit', '')
     Window.dispatch('on_textinput', '하')
     Window.dispatch('on_textedit', 'ㅅ')
     Window.dispatch('on_textedit', '세')
     self.assertEqual(ti.text, 'abc하세')
Example #9
0
            def process_as_mouse_or_keyboard(tv_sec, tv_usec, ev_type, ev_code,
                                             ev_value):

                if ev_type == EV_SYN:
                    if ev_code == SYN_REPORT:
                        process([point])
                elif ev_type == EV_REL:
                    if ev_code == 0:
                        assign_rel_coord(point,
                                         min(1., max(-1., ev_value / 1000.)),
                                         invert_x, 'xy')
                    elif ev_code == 1:
                        assign_rel_coord(point,
                                         min(1., max(-1., ev_value / 1000.)),
                                         invert_y, 'yx')
                elif ev_code == ABS_X:
                    val = normalize(ev_value, range_min_abs_x, range_max_abs_x)
                    assign_coord(point, val, invert_x, 'xy')
                elif ev_code == ABS_Y:
                    val = 1. - normalize(ev_value, range_min_abs_y,
                                         range_max_abs_y)
                    assign_coord(point, val, invert_y, 'yx')
                elif ev_code == ABS_PRESSURE:
                    point['pressure'] = normalize(ev_value,
                                                  range_min_abs_pressure,
                                                  range_max_abs_pressure)
                elif ev_type == EV_KEY:
                    buttons = {
                        272: 'left',
                        273: 'right',
                        274: 'middle',
                        275: 'side',
                        276: 'extra',
                        277: 'forward',
                        278: 'back',
                        279: 'task',
                        330: 'touch',
                        320: 'pen'
                    }

                    if ev_code in buttons.keys():
                        if ev_value:
                            if 'button' not in point:
                                point['button'] = buttons[ev_code]
                                point['id'] += 1
                                if '_avoid' in point:
                                    del point['_avoid']
                        elif 'button' in point:
                            if point['button'] == buttons[ev_code]:
                                del point['button']
                                point['id'] += 1
                                point['_avoid'] = True
                    else:
                        if ev_value == 1:
                            l = keyboard_keys[ev_code][-1 if 'shift' in Window.
                                                       _modifiers else 0]
                            if l == 'shift':
                                Window._modifiers.append('shift')
                            print(ev_code, l)
                            Window.dispatch('on_key_down',
                                            Keyboard.keycodes[l.lower()],
                                            ev_code, keys_str.get(l, l),
                                            Window._modifiers)
                        if ev_value == 0:
                            l = keyboard_keys[ev_code][-1 if 'shift' in Window.
                                                       _modifiers else 0]
                            Window.dispatch('on_key_up',
                                            Keyboard.keycodes[l.lower()],
                                            ev_code, keys_str.get(l, l),
                                            Window._modifiers)
                            if l == 'shift':
                                Window._modifiers.remove('shift')
Example #10
0
            def process_as_mouse_or_keyboard(
                tv_sec, tv_usec, ev_type, ev_code, ev_value):

                if ev_type == EV_SYN:
                    if ev_code == SYN_REPORT:
                        process([point])
                elif ev_type == EV_REL:
                    if ev_code == 0:
                        assign_rel_coord(point,
                            min(1., max(-1., ev_value / 1000.)),
                            invert_x, 'xy')
                    elif ev_code == 1:
                        assign_rel_coord(point,
                            min(1., max(-1., ev_value / 1000.)),
                            invert_y, 'yx')
                elif ev_code == ABS_X:
                    val = normalize(ev_value,
                                    range_min_abs_x,
                                    range_max_abs_x)
                    assign_coord(point, val, invert_x, 'xy')
                elif ev_code == ABS_Y:
                    val = 1. - normalize(ev_value,
                                         range_min_abs_y,
                                         range_max_abs_y)
                    assign_coord(point, val, invert_y, 'yx')
                elif ev_code == ABS_PRESSURE:
                    point['pressure'] = normalize(ev_value,
                                                  range_min_abs_pressure,
                                                  range_max_abs_pressure)
                elif ev_type == EV_KEY:
                    buttons = {
                        272: 'left',
                        273: 'right',
                        274: 'middle',
                        275: 'side',
                        276: 'extra',
                        277: 'forward',
                        278: 'back',
                        279: 'task',
                        330: 'touch',
                        320: 'pen'}

                    if ev_code in buttons.keys():
                        if ev_value:
                            if 'button' not in point:
                                point['button'] = buttons[ev_code]
                                point['id'] += 1
                                if '_avoid' in point:
                                    del point['_avoid']
                        elif 'button' in point:
                            if point['button'] == buttons[ev_code]:
                                del point['button']
                                point['id'] += 1
                                point['_avoid'] = True
                    else:
                        if ev_value == 1:
                            l = keyboard_keys[ev_code][-1
                                if 'shift' in Window._modifiers else 0]
                            if l == 'shift':
                                Window._modifiers.append('shift')
                            print(ev_code, l)
                            Window.dispatch(
                                'on_key_down',
                                Keyboard.keycodes[l.lower()],
                                ev_code, keys_str.get(l, l),
                                Window._modifiers)
                        if ev_value == 0:
                            l = keyboard_keys[ev_code][-1
                                if 'shift' in Window._modifiers else 0]
                            Window.dispatch(
                                'on_key_up',
                                Keyboard.keycodes[l.lower()],
                                ev_code,
                                keys_str.get(l, l),
                                Window._modifiers)
                            if l == 'shift':
                                Window._modifiers.remove('shift')
    def update_game_time(self, game_time):
        self.game_time_widget.text = "Time: " + str(
            game_time.day) + '-' + months[str(game_time.month)] + '-' + str(
                game_time.year)

        Window.dispatch("on_resize", 0, 0)
    def handle_menu_transition(self, menu_name):
        self.parent.open_menu_screen()
        game_menu = self.parent.game_menu
        game_menu.screen_manager_game_menu.current = menu_name

        Window.dispatch("on_resize", 0, 0)