full screen mode prototype for the stream player

This commit is contained in:
DYefremov
2018-08-31 17:26:36 +03:00
parent 1da72666d7
commit fb0996f94e
2 changed files with 55 additions and 17 deletions

View File

@@ -118,8 +118,11 @@ class MainAppWindow:
"on_player_play": self.on_player_play,
"on_player_stop": self.on_player_stop,
"on_player_close": self.on_player_close,
"on_player_press": self.on_player_press,
"on_full_screen": self.on_full_screen,
"on_player_size_allocate": self.on_player_size_allocate,
"on_drawing_area_realize": self.on_drawing_area_realize,
"on_main_window_state": self.on_main_window_state,
"on_remove_all_unavailable": self.on_remove_all_unavailable,
"on_new_bouquet": self.on_new_bouquet,
"on_bouquets_edit": self.on_bouquets_edit,
@@ -146,6 +149,7 @@ class MainAppWindow:
self._player = None
self._is_played = False
self._full_screen = False
self._drawing_area_xid = None
builder = Gtk.Builder()
builder.set_translation_domain("demon-editor")
@@ -168,7 +172,7 @@ class MainAppWindow:
self._player_box = builder.get_object("player_box")
# enabling events for the drawing area
self._player_drawing_area.set_events(Gdk.ModifierType.BUTTON1_MASK)
self._drawing_area_xid = None
self._player_frame = builder.get_object("player_frame")
self._header_bar = builder.get_object("header_bar")
self._bq_name_label = builder.get_object("bq_name_label")
self._ip_label = builder.get_object("ip_label")
@@ -1005,14 +1009,20 @@ class MainAppWindow:
self.remove_favs(fav_bqt, response, self._fav_model)
# ***************** Player *********************#
@run_idle
def on_play_stream(self, item=None):
self._player_box.set_visible(True)
self.on_player_play()
@run_with_delay(1)
@run_idle
def on_player_play(self, item=None):
self.on_player_stop(None)
if self._player:
self.play()
@run_task
def play(self):
path, column = self._fav_view.get_cursor()
if path:
row = self._fav_model[path][:]
@@ -1021,17 +1031,10 @@ class MainAppWindow:
if not url:
return
if not self._player:
try:
self._player = Player.get_vlc_instance().media_player_new()
except (NameError, AttributeError):
show_dialog(DialogType.ERROR, self._main_window, "No VLC is found. Check that it is installed!")
if self._player:
self._player.set_mrl(url)
self._is_played = True
self._player.play()
self._player.set_xwindow(self._drawing_area_xid)
self._player.set_mrl(url)
self._is_played = True
self._player.play()
GLib.idle_add(self.on_player_size_allocate, self._player_drawing_area, priority=GLib.PRIORITY_LOW)
def on_player_stop(self, item=None):
if self._player:
@@ -1046,7 +1049,7 @@ class MainAppWindow:
self._is_played = False
self._player.release()
self._player = None
GLib.idle_add(self._player_box.set_visible, False, property=GLib.PRIORITY_LOW)
GLib.idle_add(self._player_box.set_visible, False, priority=GLib.PRIORITY_LOW)
def on_player_size_allocate(self, area, rectangle=None):
area.hide()
@@ -1054,6 +1057,41 @@ class MainAppWindow:
def on_drawing_area_realize(self, widget):
self._drawing_area_xid = widget.get_window().get_xid()
if not self._player:
try:
self._player = Player.get_vlc_instance().media_player_new()
except (NameError, AttributeError):
show_dialog(DialogType.ERROR, self._main_window, "No VLC is found. Check that it is installed!")
else:
self._player.set_xwindow(self._drawing_area_xid)
GLib.idle_add(self.play, priority=GLib.PRIORITY_LOW)
def on_player_press(self, area, event):
if event.button == Gdk.BUTTON_PRIMARY:
if event.type == Gdk.EventType.DOUBLE_BUTTON_PRESS:
self.on_full_screen()
elif event.type == Gdk.EventType.BUTTON_PRESS:
if self._player:
self._player.stop() if self._player.is_playing() else self._player.play()
def on_full_screen(self, item=None):
self._full_screen = not self._full_screen
self._main_window.fullscreen() if self._full_screen else self._main_window.unfullscreen()
self.on_player_size_allocate(self._player_drawing_area)
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)
elif 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.on_player_size_allocate(self._player_drawing_area)
self._player.set_xwindow(self._drawing_area_xid)
# ***************** Player end *********************#

View File

@@ -702,6 +702,7 @@ Author: Dmitriy Yefremov
<property name="startup_id">DemonEditor</property>
<signal name="check-resize" handler="on_resize" swapped="no"/>
<signal name="delete-event" handler="on_close_app" swapped="no"/>
<signal name="window-state-event" handler="on_main_window_state" swapped="no"/>
<child type="titlebar">
<object class="GtkHeaderBar" id="header_bar">
<property name="visible">True</property>
@@ -1698,9 +1699,9 @@ Author: Dmitriy Yefremov
<property name="shadow_type">in</property>
<child>
<object class="GtkDrawingArea" id="player_drawing_area">
<property name="height_request">24</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<signal name="button-press-event" handler="on_player_press" swapped="no"/>
<signal name="realize" handler="on_drawing_area_realize" swapped="no"/>
<signal name="size-allocate" handler="on_player_size_allocate" swapped="no"/>
</object>
@@ -1758,12 +1759,11 @@ Author: Dmitriy Yefremov
</child>
<child>
<object class="GtkToolButton" id="player_full_tool_button">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Fullscreen</property>
<property name="use_underline">True</property>
<property name="stock_id">gtk-fullscreen</property>
<signal name="clicked" handler="on_full_screen" swapped="no"/>
</object>
<packing>
<property name="expand">False</property>