Advertisement
Guest User

Untitled

a guest
Aug 4th, 2024
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.18 KB | None | 0 0
  1. class MyApp(App):
  2.     def build(self):
  3.         self.root = Root()
  4.         return self.root
  5.  
  6.     def _run_prepare(self):
  7.         from kivy.graphics import RenderContext, Canvas
  8.         from kivy.core.window import Window
  9.         canvas2 = Canvas()
  10.         render_context2 = RenderContext()
  11.         render_context2.add(canvas2)
  12.         render_context2['projection_mat'] = Window.render_context['projection_mat']
  13.         render_context2['modelview_mat'] = Window.render_context['modelview_mat']
  14.         render_context2['frag_modelview_mat'] = Window.render_context['frag_modelview_mat']
  15.         Window.apply_property(canvas2=ObjectProperty(canvas2))
  16.         Window.apply_property(render_context2=ObjectProperty(render_context2))
  17.         Window.update_viewport = types.MethodType(update_viewport, Window)
  18.         Window.on_draw = types.MethodType(on_draw, Window)
  19.         Window.on_draw2 = types.MethodType(on_draw2, Window)
  20.         if not self.built:
  21.             self.load_config()
  22.             self.load_kv(filename=self.kv_file)
  23.             root = self.build()
  24.             if root:
  25.                 self.root = root
  26.         if self.root:
  27.             Window.add_widget(self.root)
  28.  
  29.         # Check if the window is already created
  30.         from kivy.base import EventLoop
  31.         window = EventLoop.window
  32.         if window:
  33.             self._app_window = window
  34.             window.set_title(self.get_application_name())
  35.             icon = self.get_application_icon()
  36.             if icon:
  37.                 window.set_icon(icon)
  38.             self._install_settings_keys(window)
  39.         else:
  40.             Logger.critical("Application: No window is created."
  41.                             " Terminating application run.")
  42.             return
  43.         self.dispatch('on_start')
  44.  
  45. def update_viewport(self):
  46.     from kivy.graphics.opengl import glViewport
  47.     from kivy.graphics.transformation import Matrix
  48.     from math import radians
  49.  
  50.     w, h = self._get_effective_size()
  51.  
  52.     smode = self.softinput_mode
  53.     target = self._system_keyboard.target
  54.     targettop = max(0, target.to_window(0, target.y)[1]) if target else 0
  55.     kheight = self._kheight
  56.  
  57.     w2, h2 = w / 2., h / 2.
  58.     r = radians(self.rotation)
  59.  
  60.     y = 0
  61.     _h = h
  62.     if smode == 'pan':
  63.         y = kheight
  64.     elif smode == 'below_target':
  65.         y = 0 if kheight < targettop else (kheight - targettop)
  66.     if smode == 'scale':
  67.         _h -= kheight
  68.  
  69.     # prepare the viewport
  70.     glViewport(0, 0, w, _h)
  71.  
  72.     # do projection matrix
  73.     projection_mat = Matrix()
  74.     projection_mat.view_clip(0.0, w, 0.0, h, -1.0, 1.0, 0)
  75.     self.render_context['projection_mat'] = projection_mat
  76.     self.render_context2['projection_mat'] = projection_mat
  77.  
  78.     # do modelview matrix
  79.     modelview_mat = Matrix().translate(w2, h2, 0)
  80.     modelview_mat = modelview_mat.multiply(Matrix().rotate(r, 0, 0, 1))
  81.  
  82.     w, h = self.size
  83.     w2, h2 = w / 2., h / 2. - y
  84.     modelview_mat = modelview_mat.multiply(Matrix().translate(-w2, -h2, 0))
  85.     self.render_context['modelview_mat'] = modelview_mat
  86.     self.render_context2['modelview_mat'] = modelview_mat
  87.     frag_modelview_mat = Matrix()
  88.     frag_modelview_mat.set(flat=modelview_mat.get())
  89.     self.render_context['frag_modelview_mat'] = frag_modelview_mat
  90.     self.render_context2['frag_modelview_mat'] = frag_modelview_mat
  91.  
  92.     # redraw canvas
  93.     self.canvas.ask_update()
  94.     self.canvas2.ask_update()
  95.  
  96.     # and update childs
  97.     self.update_childsize()
  98.  
  99. def on_draw(self):
  100.     self.clear()
  101.     self.render_context.draw()
  102.     self.render_context2.draw()
  103.  
  104. def on_draw2(self):
  105.     self.render_context2.draw()
  106.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement