def gui_config(config: Dict[str, Dict[str, str]]): for section, section_settings in config.items(): for option, value in section_settings.items(): if option.startswith('-'): Config.remove_option(section, option[1:]) else: Config.set(section, option, value)
def setUp(self): '''Prepare the graphic test, with: - Window size fixed to 320x240 - Default kivy configuration - Without any kivy input ''' # use default kivy configuration (don't load user file.) from os import environ environ['KIVY_USE_DEFAULTCONFIG'] = '1' # force window size + remove all inputs from kivy.config import Config Config.set('graphics', 'width', '320') Config.set('graphics', 'height', '240') for items in Config.items('input'): Config.remove_option('input', items[0]) # bind ourself for the later screenshot from kivy.core.window import Window self.Window = Window Window.bind(on_flip=self.on_window_flip) # ensure our window is correctly created Window.create_window() Window.register() Window.initialized = True Window.canvas.clear() Window.close = lambda *s: True
import os from kivy.clock import Clock from kivy.config import Config Config.read(os.path.expanduser('~/.kivy/config.ini')) Config.set('graphics', 'width', str(600)) Config.set('graphics', 'height', str(480)) Config.set('kivy', 'keyboard_mode', 'systemanddock') Config.set('input', 'mtdev_%(name)s', 'probesysfs,provider=mtdev') Config.set('input', 'hid_%(name)s', 'probesysfs,provider=hidinput') Config.remove_option('input', '%(name)s') Clock.max_iteration = 20
import os import trio from kivy.config import Config Config.set('graphics', 'width', '1600') Config.set('graphics', 'height', '900') Config.set('modules', 'touchring', '') for items in Config.items('input'): Config.remove_option('input', items[0]) from ceed.main import CeedApp from kivy.tests.async_common import UnitKivyApp class CeedTestApp(CeedApp, UnitKivyApp): def __init__(self, ini_file, **kwargs): self._ini_config_filename = ini_file self._data_path = os.path.dirname(ini_file) super(CeedTestApp, self).__init__(**kwargs) async def async_sleep(self, dt): await trio.sleep(dt) def check_close(self): super(CeedTestApp, self).check_close() return True def handle_exception(self, msg, exc_info=None, level='error', *largs): super(CeedApp, self).handle_exception(msg, exc_info, level, *largs)
async def kivy_app(request, nursery): gc.collect() if apps: last_app, last_request = apps.pop() assert last_app() is None, \ 'Memory leak: failed to release app for test ' + repr(last_request) from os import environ environ['KIVY_USE_DEFAULTCONFIG'] = '1' # force window size + remove all inputs from kivy.config import Config Config.set('graphics', 'width', '320') Config.set('graphics', 'height', '240') for items in Config.items('input'): Config.remove_option('input', items[0]) from kivy.core.window import Window from kivy.context import Context from kivy.clock import ClockBase from kivy.factory import FactoryBase, Factory from kivy.app import App from kivy.lang.builder import BuilderBase, Builder from kivy.base import stopTouchApp from kivy import kivy_data_dir from kivy.logger import LoggerHistory kivy_eventloop = environ.get('KIVY_EVENTLOOP', 'asyncio') if kivy_eventloop == 'asyncio': pytest.importorskip( 'pytest_asyncio', reason='KIVY_EVENTLOOP == "asyncio" but ' '"pytest_asyncio" is not installed') async_lib = 'asyncio' elif kivy_eventloop == 'trio': pytest.importorskip( 'pytest_trio', reason='KIVY_EVENTLOOP == "trio" but ' '"pytest_trio" is not installed') async_lib = 'trio' else: pytest.skip( 'KIVY_EVENTLOOP must be set to either of "asyncio" or ' '"trio" to run async tests') context = Context(init=False) context['Clock'] = ClockBase(async_lib=async_lib) # have to make sure all global kv files are loaded before this because # globally read kv files (e.g. on module import) will not be loaded again # in the new builder, except if manually loaded, which we don't do context['Factory'] = FactoryBase.create_from(Factory) context['Builder'] = BuilderBase.create_from(Builder) context.push() Window.create_window() Window.register() Window.initialized = True Window.canvas.clear() app = request.param[0]() app.set_async_lib(async_lib) if async_lib == 'asyncio': import asyncio loop = asyncio.get_event_loop() loop.create_task(app.async_run()) else: nursery.start_soon(app.async_run) from kivy.clock import Clock Clock._max_fps = 0 ts = time.perf_counter() while not app.app_has_started: await app.async_sleep(.1) if time.perf_counter() - ts >= 10: raise TimeoutError() await app.wait_clock_frames(5) yield app stopTouchApp() ts = time.perf_counter() while not app.app_has_stopped: await app.async_sleep(.1) if time.perf_counter() - ts >= 10: raise TimeoutError() for child in Window.children[:]: Window.remove_widget(child) context.pop() # release all the resources del context LoggerHistory.clear_history() apps.append((weakref.ref(app), request)) del app gc.collect()
print "SETUP KIVY >>" from kivy.logger import Logger import logging Logger.setLevel(logging.DEBUG) from kivy.config import Config Config.remove_option("input", "default") Config.remove_option("input", "mactouch") Config.set("graphics", "fullscreen", "auto") print "SETUP KIVY << done" from kivy.graphics.opengl import * def buildShader(source, shaderType): shaderHandle = glCreateShader(shaderType) glShaderSource(shaderHandle, source) glCompileShader(shaderHandle) compileSuccess = glGetShaderiv(shaderHandle, GL_COMPILE_STATUS) if compileSuccess == GL_FALSE: messages = None glGetShaderInfoLog(shaderHandle, sizeof(messages), 0, messages) print "error compiling shader", messages return shaderHandle
kivyconfig.set('graphics', 'borderless', '1') # ============================================================================== # INITIALISE MOUSE SUPPORT IF OPTION SET in wfpiconsole.ini # ============================================================================== # Enable mouse support on Raspberry Pi 3 if not already set if config['System']['Hardware'] in ['PiB', 'Pi3']: if not config.has_option('modules', 'cursor'): kivyconfig.set('modules', 'cursor', '1') # Initialise mouse support if required if int(config['Display']['Cursor']): kivyconfig.set('graphics', 'show_cursor', '1') if config['System']['Hardware'] == 'Pi4': kivyconfig.set('input', 'mouse', 'mouse') kivyconfig.remove_option('input', 'mtdev_%(name)s') # kivyconfig.remove_option('input', 'hid_%(name)s') else: kivyconfig.set('graphics', 'show_cursor', '0') if config['System']['Hardware'] == 'Pi4': kivyconfig.remove_option('input', 'mouse') # Save wfpiconsole Kivy configuration file kivyconfig.write() # ============================================================================== # IMPORT REQUIRED CORE KIVY MODULES # ============================================================================== from kivy.properties import ConfigParserProperty, StringProperty from kivy.properties import DictProperty, NumericProperty from kivy.core.window import Window
print 'SETUP KIVY >>' from kivy.logger import Logger import logging Logger.setLevel(logging.DEBUG) from kivy.config import Config Config.remove_option('input', 'default') Config.remove_option('input', 'mactouch') Config.set('graphics', 'fullscreen', 'auto') print 'SETUP KIVY << done' try: import kivy kivy.require('1.0.6') from kivy.app import App from kivy.uix.floatlayout import FloatLayout from kivy.graphics import Color, Rectangle, Point from random import random from math import sqrt def calculate_points(x1, y1, x2, y2, steps=5): dx = x2 - x1 dy = y2 - y1 dist = sqrt(dx * dx + dy * dy) if dist < steps: return None o = [] m = dist / steps
def set_kivy_config(self): from kivy.config import Config Config.set('graphics', 'width', str(self.width)) Config.set('graphics', 'height', str(self.height)) for items in Config.items('input'): Config.remove_option('input', items[0])
async def kivy_app(request, nursery): from os import environ environ['KIVY_USE_DEFAULTCONFIG'] = '1' # force window size + remove all inputs from kivy.config import Config Config.set('graphics', 'width', '320') Config.set('graphics', 'height', '240') for items in Config.items('input'): Config.remove_option('input', items[0]) from kivy.core.window import Window from kivy.context import Context from kivy.clock import ClockBase from kivy.lang.builder import BuilderBase, Builder from kivy.base import stopTouchApp from kivy import kivy_data_dir kivy_eventloop = environ.get('KIVY_EVENTLOOP', 'asyncio') if kivy_eventloop == 'asyncio': pytest.importorskip('pytest_asyncio', reason='KIVY_EVENTLOOP == "asyncio" but ' '"pytest_asyncio" is not installed') async_lib = 'asyncio' elif kivy_eventloop == 'trio': pytest.importorskip('pytest_trio', reason='KIVY_EVENTLOOP == "trio" but ' '"pytest_trio" is not installed') async_lib = 'trio' else: pytest.skip( reason='KIVY_EVENTLOOP must be set to either of "asyncio" or ' '"trio" to run async tests') context = Context(init=False) context['Clock'] = ClockBase(async_lib=async_lib) # context['Builder'] = BuilderBase() context.push() # Builder.load_file( # os.path.join(kivy_data_dir, 'style.kv'), rulesonly=True) Window.create_window() Window.register() Window.initialized = True Window.canvas.clear() app = request.param[0]() if async_lib == 'asyncio': import asyncio loop = asyncio.get_event_loop() loop.create_task(app.async_run()) else: nursery.start_soon(app.async_run) ts = time.perf_counter() while not app.app_has_started: await async_sleep(.1) if time.perf_counter() - ts >= 10: raise TimeoutError() await app.wait_clock_frames(5) yield app stopTouchApp() ts = time.perf_counter() while not app.app_has_stopped: await async_sleep(.1) if time.perf_counter() - ts >= 10: raise TimeoutError() for child in Window.children[:]: Window.remove_widget(child) context.pop() gc.collect()