mirror of
https://github.com/DYefremov/DemonEditor.git
synced 2025-12-21 07:59:40 +01:00
added full screen mode for the player
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from app.commons import run_idle
|
||||
from app.tools import vlc
|
||||
from app.ui.uicommons import Gtk
|
||||
from app.ui.uicommons import Gtk, Gdk
|
||||
|
||||
MRL = "url"
|
||||
|
||||
@@ -12,15 +12,24 @@ class Player:
|
||||
handlers = {"on_play": self.on_play,
|
||||
"on_stop": self.on_stop,
|
||||
"on_drawing_area_realize": self.on_drawing_area_realize,
|
||||
"on_press": self.on_press,
|
||||
"on_key_release": self.on_key_release,
|
||||
"on_state_changed": self.on_state_changed,
|
||||
"on_close_window": self.on_close_window}
|
||||
|
||||
builder = Gtk.Builder()
|
||||
builder.add_objects_from_file("player.glade", ("player_main_window",))
|
||||
builder.connect_signals(handlers)
|
||||
self._main_window = builder.get_object("player_main_window")
|
||||
self._main_box = builder.get_object("main_box")
|
||||
self._buttonbox = builder.get_object("buttonbox")
|
||||
self._frame = builder.get_object("")
|
||||
self._drawing_area = builder.get_object("drawing_area")
|
||||
self._drawing_area.set_events(Gdk.ModifierType.BUTTON1_MASK)
|
||||
self._player = Player.get_vlc_instance().media_player_new()
|
||||
self._is_played = False
|
||||
self._url = url
|
||||
self._full_screen = False
|
||||
|
||||
@staticmethod
|
||||
def get_vlc_instance():
|
||||
@@ -39,6 +48,30 @@ class Player:
|
||||
self._player.stop()
|
||||
self._is_played = False
|
||||
|
||||
def on_press(self, area, event: Gdk.EventButton):
|
||||
if event.button == Gdk.BUTTON_PRIMARY and event.type == Gdk.EventType.DOUBLE_BUTTON_PRESS:
|
||||
self.change_state()
|
||||
|
||||
def on_state_changed(self, window, event):
|
||||
if event.new_window_state & Gdk.WindowState.FULLSCREEN:
|
||||
if self._main_box in window:
|
||||
window.remove(self._main_box)
|
||||
self._drawing_area.reparent(self._main_window)
|
||||
else:
|
||||
if self._drawing_area in self._main_window:
|
||||
window.remove(self._drawing_area)
|
||||
window.add(self._main_box)
|
||||
self._main_box.pack_start(self._drawing_area, True, True, 0)
|
||||
self._main_box.reorder_child(self._drawing_area, 0)
|
||||
|
||||
def change_state(self):
|
||||
self._full_screen = not self._full_screen
|
||||
self._main_window.fullscreen() if self._full_screen else self._main_window.unfullscreen()
|
||||
|
||||
def on_key_release(self, area, key):
|
||||
if key.keyval in (Gdk.KEY_F, Gdk.KEY_f):
|
||||
self.change_state()
|
||||
|
||||
def on_drawing_area_realize(self, widget):
|
||||
win_id = widget.get_window().get_xid()
|
||||
if self._player:
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
<property name="title" translatable="yes">Player</property>
|
||||
<property name="icon_name">vlc</property>
|
||||
<signal name="delete-event" handler="on_close_window" swapped="no"/>
|
||||
<signal name="window-state-event" handler="on_state_changed" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkBox" id="main_box">
|
||||
<property name="visible">True</property>
|
||||
@@ -17,7 +18,10 @@
|
||||
<property name="width_request">320</property>
|
||||
<property name="height_request">240</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="has_focus">True</property>
|
||||
<signal name="button-press-event" handler="on_press" swapped="no"/>
|
||||
<signal name="key-release-event" handler="on_key_release" swapped="no"/>
|
||||
<signal name="realize" handler="on_drawing_area_realize" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
@@ -28,7 +32,7 @@
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkSeparator" id="separator1">
|
||||
<object class="GtkSeparator" id="separator">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
</object>
|
||||
|
||||
@@ -119,6 +119,8 @@ class MainAppWindow:
|
||||
"on_iptv": self.on_iptv,
|
||||
"on_fav_iptv_mode": self.on_fav_iptv_mode,
|
||||
"on_drawing_area_realize": self.on_drawing_area_realize,
|
||||
"on_player_press": self.on_player_press,
|
||||
"on_main_window_state": self.on_main_window_state,
|
||||
"on_new_bouquet": self.on_new_bouquet,
|
||||
"on_bouquets_edit": self.on_bouquets_edit,
|
||||
"on_create_bouquet_for_current_satellite": self.on_create_bouquet_for_current_satellite,
|
||||
@@ -143,6 +145,7 @@ class MainAppWindow:
|
||||
self._iptv_preview_mode = False
|
||||
self._player = None
|
||||
self._is_played = False
|
||||
self._full_screen = False
|
||||
|
||||
builder = Gtk.Builder()
|
||||
builder.set_translation_domain("demon-editor")
|
||||
@@ -161,7 +164,11 @@ class MainAppWindow:
|
||||
self._bouquets_model = builder.get_object("bouquets_tree_store")
|
||||
self._status_bar = builder.get_object("status_bar")
|
||||
self._player_frame = builder.get_object("player_frame")
|
||||
self._player_drawing_area = builder.get_object("player_drawing_area")
|
||||
# enabling events for the drawing area
|
||||
self._player_drawing_area.set_events(Gdk.ModifierType.BUTTON1_MASK)
|
||||
self._drawing_area_xid = None
|
||||
self._main_window_box = builder.get_object("main_window_box")
|
||||
self._fav_iptv_mode_popup_item = builder.get_object("fav_iptv_mode_popup_item")
|
||||
self._profile_label = builder.get_object("profile_label")
|
||||
self._ip_label = builder.get_object("ip_label")
|
||||
@@ -935,7 +942,6 @@ class MainAppWindow:
|
||||
|
||||
def on_fav_press(self, menu, event):
|
||||
self.on_view_popup_menu(menu, event)
|
||||
|
||||
if self._iptv_preview_mode and event.get_event_type() == Gdk.EventType.DOUBLE_BUTTON_PRESS:
|
||||
self.test_iptv()
|
||||
|
||||
@@ -971,6 +977,30 @@ class MainAppWindow:
|
||||
self._player.stop()
|
||||
self._is_played = False
|
||||
|
||||
def on_player_press(self, area, event):
|
||||
if event.button == Gdk.BUTTON_PRIMARY:
|
||||
if event.type == Gdk.EventType.DOUBLE_BUTTON_PRESS:
|
||||
self._full_screen = not self._full_screen
|
||||
self._main_window.fullscreen() if self._full_screen else self._main_window.unfullscreen()
|
||||
elif event.type == Gdk.EventType.BUTTON_PRESS:
|
||||
if self._player:
|
||||
self._player.stop() if self._player.is_playing() else self._player.play()
|
||||
|
||||
def on_main_window_state(self, window, event):
|
||||
if event.new_window_state & Gdk.WindowState.FULLSCREEN:
|
||||
if self._main_window_box in window:
|
||||
window.remove(self._main_window_box)
|
||||
self._player_drawing_area.reparent(window)
|
||||
if self._player:
|
||||
self._player.set_xwindow(self._player_drawing_area.get_window().get_xid())
|
||||
else:
|
||||
if self._player_drawing_area in window:
|
||||
window.remove(self._player_drawing_area)
|
||||
window.add(self._main_window_box)
|
||||
self._player_frame.add(self._player_drawing_area)
|
||||
if self._player:
|
||||
self._player.set_xwindow(self._player_drawing_area.get_window().get_xid())
|
||||
|
||||
def on_drawing_area_realize(self, widget):
|
||||
self._drawing_area_xid = widget.get_window().get_xid()
|
||||
|
||||
|
||||
@@ -444,6 +444,7 @@
|
||||
<property name="icon_name">accessories-text-editor</property>
|
||||
<signal name="check-resize" handler="on_resize" swapped="no"/>
|
||||
<signal name="delete-event" handler="on_close_main_window" swapped="no"/>
|
||||
<signal name="window-state-event" handler="on_main_window_state" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkBox" id="main_window_box">
|
||||
<property name="visible">True</property>
|
||||
@@ -1842,7 +1843,8 @@
|
||||
<child>
|
||||
<object class="GtkDrawingArea" id="player_drawing_area">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="can_focus">True</property>
|
||||
<signal name="button-press-event" handler="on_player_press" swapped="no"/>
|
||||
<signal name="realize" handler="on_drawing_area_realize" swapped="no"/>
|
||||
</object>
|
||||
</child>
|
||||
|
||||
Reference in New Issue
Block a user