From 8cf4a6f24c000ccaede36f4b1b7edd3d0cc7abef Mon Sep 17 00:00:00 2001 From: Andy Stewart Date: Tue, 17 Mar 2020 20:37:06 +0800 Subject: [PATCH] Add new command: toggle_device. --- core/browser.py | 17 +++++++++++++++-- core/buffer.py | 8 ++++++++ core/view.py | 22 ++++++++++++++++++++++ eaf.el | 1 + 4 files changed, 46 insertions(+), 2 deletions(-) diff --git a/core/browser.py b/core/browser.py index 75650de..a33f767 100644 --- a/core/browser.py +++ b/core/browser.py @@ -396,8 +396,10 @@ class BrowserBuffer(Buffer): self.history_list.append(HistoryPage(his_line.group(1), his_line.group(2), his_line.group(3))) # Set User Agent with Firefox's one to make EAF browser can login in Google account. + self.pc_user_agent = "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/72.0" + self.phone_user_agent = "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A5370a Safari/604.1" self.profile = QWebEngineProfile(self.buffer_widget) - self.profile.defaultProfile().setHttpUserAgent("Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/72.0") + self.profile.defaultProfile().setHttpUserAgent(self.pc_user_agent) self.buffer_widget.loadStarted.connect(self.start_progress) self.buffer_widget.loadProgress.connect(self.update_progress) @@ -435,7 +437,7 @@ class BrowserBuffer(Buffer): "open_link", "open_link_new_buffer", "open_link_background_buffer", "history_backward", "history_forward", "new_blank_page", "open_download_manage_page", "refresh_page", "zoom_in", "zoom_out", "zoom_reset", "save_as_bookmark", - "download_youtube_video", "download_youtube_audio"]: + "download_youtube_video", "download_youtube_audio", "toggle_device"]: self.build_insert_or_do(method_name) def handle_fullscreen_request(self, request): @@ -697,6 +699,17 @@ class BrowserBuffer(Buffer): def open_dev_tool_page(self): self.open_dev_tools_tab.emit(self.buffer_widget.web_page) + def toggle_device(self): + user_agent = self.profile.defaultProfile().httpUserAgent() + if user_agent == self.pc_user_agent: + self.profile.defaultProfile().setHttpUserAgent(self.phone_user_agent) + self.set_aspect_ratio(2.0 / 3) + else: + self.profile.defaultProfile().setHttpUserAgent(self.pc_user_agent) + self.set_aspect_ratio(0) + + self.refresh_page() + def download_youtube_video(self): self.download_youtube_file() diff --git a/core/buffer.py b/core/buffer.py index cc267c5..e38abbc 100755 --- a/core/buffer.py +++ b/core/buffer.py @@ -158,6 +158,7 @@ class Buffer(QGraphicsScene): eval_in_emacs = QtCore.pyqtSignal(str) goto_left_tab = QtCore.pyqtSignal() goto_right_tab = QtCore.pyqtSignal() + aspect_ratio_change = QtCore.pyqtSignal() def __init__(self, buffer_id, url, arguments, emacs_var_dict, fit_to_view, background_color): super(QGraphicsScene, self).__init__() @@ -179,6 +180,13 @@ class Buffer(QGraphicsScene): self.current_event_string = "" + self.aspect_ratio = 0 + self.vertical_padding_ratio = 1.0 / 8 + + def set_aspect_ratio(self, aspect_ratio): + self.aspect_ratio = aspect_ratio + self.aspect_ratio_change.emit() + def drawForeground(self, painter, rect): if self.draw_progressbar: painter.setBrush(self.progressbar_color) diff --git a/core/view.py b/core/view.py index daa7a11..679c4bc 100644 --- a/core/view.py +++ b/core/view.py @@ -67,6 +67,8 @@ class View(QWidget): # Resize after show to trigger fit view operation. self.resize(self.width, self.height) + self.buffer.aspect_ratio_change.connect(self.adjust_aspect_ratio) + def resizeEvent(self, event): # Fit content to view rect just when buffer fit_to_view option is enable. if self.buffer.fit_to_view: @@ -74,6 +76,26 @@ class View(QWidget): self.graphics_view.fitInView(self.graphics_view.scene().sceneRect(), Qt.KeepAspectRatio) QWidget.resizeEvent(self, event) + def adjust_aspect_ratio(self): + widget_width = self.width + widget_height = self.height + + if self.buffer.aspect_ratio == 0: + self.buffer.buffer_widget.resize(self.width, self.height) + + self.layout.setContentsMargins(0, 0, 0, 0) + else: + view_height = widget_height * (1 - 2 * self.buffer.vertical_padding_ratio) + view_width = view_height * self.buffer.aspect_ratio + horizontal_padding = (widget_width - view_width) / 2 + vertical_padding = self.buffer.vertical_padding_ratio * widget_height + + self.buffer.buffer_widget.resize(view_width, view_height) + + self.layout.setContentsMargins( + horizontal_padding, vertical_padding, + horizontal_padding, vertical_padding) + def eventFilter(self, obj, event): # Focus emacs buffer when user click view. if event.type() in [QEvent.MouseButtonPress, QEvent.MouseButtonRelease, diff --git a/eaf.el b/eaf.el index 216b202..1ba118a 100644 --- a/eaf.el +++ b/eaf.el @@ -309,6 +309,7 @@ Try not to modify this alist directly. Use `eaf-setq' to modify instead." ("o" . "insert_or_open_url") ("y" . "insert_or_download_youtube_video") ("Y" . "insert_or_download_youtube_audio") + ("p" . "insert_or_toggle_device") ("C-a" . "select_all_or_input_text") ("M-u" . "clear_focus") ("M-i" . "open_download_manage_page")