added full screen mode for the player

This commit is contained in:
DYefremov
2018-05-19 16:24:20 +03:00
parent 2e1410ca36
commit 8a6dd1da93
4 changed files with 74 additions and 5 deletions

View File

@@ -1,6 +1,6 @@
from app.commons import run_idle from app.commons import run_idle
from app.tools import vlc from app.tools import vlc
from app.ui.uicommons import Gtk from app.ui.uicommons import Gtk, Gdk
MRL = "url" MRL = "url"
@@ -12,15 +12,24 @@ class Player:
handlers = {"on_play": self.on_play, handlers = {"on_play": self.on_play,
"on_stop": self.on_stop, "on_stop": self.on_stop,
"on_drawing_area_realize": self.on_drawing_area_realize, "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} "on_close_window": self.on_close_window}
builder = Gtk.Builder() builder = Gtk.Builder()
builder.add_objects_from_file("player.glade", ("player_main_window",)) builder.add_objects_from_file("player.glade", ("player_main_window",))
builder.connect_signals(handlers) builder.connect_signals(handlers)
self._main_window = builder.get_object("player_main_window") 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._player = Player.get_vlc_instance().media_player_new()
self._is_played = False self._is_played = False
self._url = url self._url = url
self._full_screen = False
@staticmethod @staticmethod
def get_vlc_instance(): def get_vlc_instance():
@@ -39,6 +48,30 @@ class Player:
self._player.stop() self._player.stop()
self._is_played = False 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): def on_drawing_area_realize(self, widget):
win_id = widget.get_window().get_xid() win_id = widget.get_window().get_xid()
if self._player: if self._player:

View File

@@ -7,6 +7,7 @@
<property name="title" translatable="yes">Player</property> <property name="title" translatable="yes">Player</property>
<property name="icon_name">vlc</property> <property name="icon_name">vlc</property>
<signal name="delete-event" handler="on_close_window" swapped="no"/> <signal name="delete-event" handler="on_close_window" swapped="no"/>
<signal name="window-state-event" handler="on_state_changed" swapped="no"/>
<child> <child>
<object class="GtkBox" id="main_box"> <object class="GtkBox" id="main_box">
<property name="visible">True</property> <property name="visible">True</property>
@@ -17,7 +18,10 @@
<property name="width_request">320</property> <property name="width_request">320</property>
<property name="height_request">240</property> <property name="height_request">240</property>
<property name="visible">True</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"/> <signal name="realize" handler="on_drawing_area_realize" swapped="no"/>
</object> </object>
<packing> <packing>
@@ -28,7 +32,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkSeparator" id="separator1"> <object class="GtkSeparator" id="separator">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
</object> </object>

View File

@@ -119,6 +119,8 @@ class MainAppWindow:
"on_iptv": self.on_iptv, "on_iptv": self.on_iptv,
"on_fav_iptv_mode": self.on_fav_iptv_mode, "on_fav_iptv_mode": self.on_fav_iptv_mode,
"on_drawing_area_realize": self.on_drawing_area_realize, "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_new_bouquet": self.on_new_bouquet,
"on_bouquets_edit": self.on_bouquets_edit, "on_bouquets_edit": self.on_bouquets_edit,
"on_create_bouquet_for_current_satellite": self.on_create_bouquet_for_current_satellite, "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._iptv_preview_mode = False
self._player = None self._player = None
self._is_played = False self._is_played = False
self._full_screen = False
builder = Gtk.Builder() builder = Gtk.Builder()
builder.set_translation_domain("demon-editor") builder.set_translation_domain("demon-editor")
@@ -161,7 +164,11 @@ class MainAppWindow:
self._bouquets_model = builder.get_object("bouquets_tree_store") self._bouquets_model = builder.get_object("bouquets_tree_store")
self._status_bar = builder.get_object("status_bar") self._status_bar = builder.get_object("status_bar")
self._player_frame = builder.get_object("player_frame") 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._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._fav_iptv_mode_popup_item = builder.get_object("fav_iptv_mode_popup_item")
self._profile_label = builder.get_object("profile_label") self._profile_label = builder.get_object("profile_label")
self._ip_label = builder.get_object("ip_label") self._ip_label = builder.get_object("ip_label")
@@ -935,7 +942,6 @@ class MainAppWindow:
def on_fav_press(self, menu, event): def on_fav_press(self, menu, event):
self.on_view_popup_menu(menu, event) self.on_view_popup_menu(menu, event)
if self._iptv_preview_mode and event.get_event_type() == Gdk.EventType.DOUBLE_BUTTON_PRESS: if self._iptv_preview_mode and event.get_event_type() == Gdk.EventType.DOUBLE_BUTTON_PRESS:
self.test_iptv() self.test_iptv()
@@ -971,6 +977,30 @@ class MainAppWindow:
self._player.stop() self._player.stop()
self._is_played = False 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): def on_drawing_area_realize(self, widget):
self._drawing_area_xid = widget.get_window().get_xid() self._drawing_area_xid = widget.get_window().get_xid()

View File

@@ -444,6 +444,7 @@
<property name="icon_name">accessories-text-editor</property> <property name="icon_name">accessories-text-editor</property>
<signal name="check-resize" handler="on_resize" swapped="no"/> <signal name="check-resize" handler="on_resize" swapped="no"/>
<signal name="delete-event" handler="on_close_main_window" 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> <child>
<object class="GtkBox" id="main_window_box"> <object class="GtkBox" id="main_window_box">
<property name="visible">True</property> <property name="visible">True</property>
@@ -1842,7 +1843,8 @@
<child> <child>
<object class="GtkDrawingArea" id="player_drawing_area"> <object class="GtkDrawingArea" id="player_drawing_area">
<property name="visible">True</property> <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"/> <signal name="realize" handler="on_drawing_area_realize" swapped="no"/>
</object> </object>
</child> </child>