From 4b146f69e6c73f14957bb56301467b4a48646f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Sat, 23 Mar 2019 17:05:02 +0000 Subject: [PATCH 01/14] Fix preview flash on toggle While WebKit2 is loading, it renders a blank (white) page. This causes it to flash briefly, while the content is not yet loaded. Waiting for it to finish using the load-change event fixes the issue. Fixes #112 --- uberwriter/UberwriterWindow.py | 36 ++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index 0b3fa87..f011c9d 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -30,7 +30,7 @@ from gettext import gettext as _ import gi gi.require_version('Gtk', '3.0') gi.require_version('WebKit2', '4.0') # pylint: disable=wrong-import-position -from gi.repository import Gtk, Gdk, GObject, GLib, Gio +from gi.repository import Gtk, Gdk, GObject, GLib, Gio from gi.repository import WebKit2 as WebKit from gi.repository import Pango # pylint: disable=E0611 @@ -150,7 +150,7 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.alignment_padding = 40 self.editor_viewport = self.builder.get_object('editor_viewport') - # some people seems to have performance problems with the overlay. + # some people seems to have performance problems with the overlay. # Let them disable it if self.settings.get_value("gradient-overlay"): @@ -877,22 +877,32 @@ class UberwriterWindow(Gtk.ApplicationWindow): # begin_del.backward_chars(30) # self.TextBuffer.delete(begin_del, cursor_iter) - self.scrolled_window.remove(self.text_editor) - self.scrolled_window.add(self.preview_webview) - self.preview_webview.show() + # Show preview once the load is finished + self.preview_webview.connect("load-changed", self.on_preview_load_change) # This saying that all links will be opened in default browser, \ # but local files are opened in appropriate apps: self.preview_webview.connect("decide-policy", self.on_click_link) else: - self.scrolled_window.remove(self.preview_webview) - self.preview_webview.destroy() - self.scrolled_window.add(self.text_editor) - self.text_editor.show() + self.show_text_editor() - self.queue_draw() return True + def show_text_editor(self): + if self.scrolled_window.get_child() != self.text_editor: + self.scrolled_window.remove(self.preview_webview) + self.scrolled_window.add(self.text_editor) + self.preview_webview.destroy() + self.text_editor.show() + self.queue_draw() + + def show_preview(self): + if self.scrolled_window.get_child() != self.preview_webview: + self.scrolled_window.remove(self.text_editor) + self.scrolled_window.add(self.preview_webview) + self.preview_webview.show() + self.queue_draw() + def toggle_dark_mode(self, state): """Toggle the dark mode, both for the window and for the CSD @@ -1125,6 +1135,12 @@ class UberwriterWindow(Gtk.ApplicationWindow): base_path = "/" self.settings.set_value("open-file-path", GLib.Variant("s", base_path)) + def on_preview_load_change(self, webview, event): + """swaps text editor with preview once the load is complete + """ + if event == WebKit.LoadEvent.FINISHED: + self.show_preview() + def on_click_link(self, web_view, decision, _decision_type): """provide ability for self.webview to open links in default browser """ From 928254e9927a7bd28ae3cddd9dd401437e456058 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Sun, 24 Mar 2019 03:31:42 +0000 Subject: [PATCH 02/14] Fix, cleanup and improve preview CSS Fixes #121. Additional, fixes include: * Light tables, title/hr underlines, code and quote blocks on the dark theme * Scrollbar not rendering on top of content Cleanup includes: * Removal of css rules that are internal to github (eg. octicon) * Merging of duplicate or overridden declarations * De-duplicating light and dark theme using import + custom properties Improvements include: * Using Fira / Fira Mono for rendering (as is done in the text editor) * Using relative units as much as possible, making it much easier to use a responsive design in the future * Using the same background color for a more seamless experience * Adjusting color contrast for the background changes, ensuring proper accessibility while still using GitHub's style --- data/media/github-md-dark.css | 587 ++-------------------------------- data/media/github-md.css | 400 ++++++++++------------- 2 files changed, 181 insertions(+), 806 deletions(-) diff --git a/data/media/github-md-dark.css b/data/media/github-md-dark.css index 2dfd3eb..928f3ca 100644 --- a/data/media/github-md-dark.css +++ b/data/media/github-md-dark.css @@ -1,567 +1,20 @@ -@font-face { - font-family: octicons-link; - src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); -} - -body { - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - line-height: 1.5; - color: #EDEDED; - background-color: #31373D; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 16px; - line-height: 1.5; - word-wrap: break-word; -} - -a { - background-color: transparent; -} - -a:active, -a:hover { - outline-width: 0; -} - -strong { - font-weight: inherit; -} - -strong { - font-weight: bolder; -} - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -img { - border-style: none; -} - -code, -kbd, -pre { - font-family: monospace, monospace; - font-size: 1em; -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -input { - font: inherit; - margin: 0; -} - -input { - overflow: visible; -} - -[type="checkbox"] { - box-sizing: border-box; - padding: 0; -} - -* { - box-sizing: border-box; -} - -input { - font-family: inherit; - font-size: inherit; - line-height: inherit; -} - -a { - color: #0366d6; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - -strong { - font-weight: 600; -} - -hr { - height: 0; - margin: 15px 0; - overflow: hidden; - background: transparent; - border: 0; - border-bottom: 1px solid #dfe2e5; -} - -hr::before { - display: table; - content: ""; -} - -hr::after { - display: table; - clear: both; - content: ""; -} - -table { - border-spacing: 0; - border-collapse: collapse; -} - -td, -th { - padding: 0; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 0; - margin-bottom: 0; -} - -h1 { - font-size: 32px; - font-weight: 600; -} - -h2 { - font-size: 24px; - font-weight: 600; -} - -h3 { - font-size: 20px; - font-weight: 600; -} - -h4 { - font-size: 16px; - font-weight: 600; -} - -h5 { - font-size: 14px; - font-weight: 600; -} - -h6 { - font-size: 12px; - font-weight: 600; -} - -p { - margin-top: 0; - margin-bottom: 10px; -} - -blockquote { - margin: 0; -} - -ul, -ol { - padding-left: 0; - margin-top: 0; - margin-bottom: 0; -} - -ol ol, -ul ol { - list-style-type: lower-roman; -} - -ul ul ol, -ul ol ol, -ol ul ol, -ol ol ol { - list-style-type: lower-alpha; -} - -dd { - margin-left: 0; -} - -code { - font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 12px; -} - -pre { - margin-top: 0; - margin-bottom: 0; - font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 12px; -} - -.octicon { - vertical-align: text-bottom; -} - -.pl-0 { - padding-left: 0 !important; -} - -.pl-1 { - padding-left: 4px !important; -} - -.pl-2 { - padding-left: 8px !important; -} - -.pl-3 { - padding-left: 16px !important; -} - -.pl-4 { - padding-left: 24px !important; -} - -.pl-5 { - padding-left: 32px !important; -} - -.pl-6 { - padding-left: 40px !important; -} - -.markdown-body::before { - display: table; - content: ""; -} - -.markdown-body::after { - display: table; - clear: both; - content: ""; -} - -.markdown-body>*:first-child { - margin-top: 0 !important; -} - -.markdown-body>*:last-child { - margin-bottom: 0 !important; -} - -a:not([href]) { - color: inherit; - text-decoration: none; -} - -.anchor { - float: left; - padding-right: 4px; - margin-left: -20px; - line-height: 1; -} - -.anchor:focus { - outline: none; -} - -p, -blockquote, -ul, -ol, -dl, -table, -pre { - margin-top: 0; - margin-bottom: 16px; -} - -hr { - height: 0.25em; - padding: 0; - margin: 24px 0; - background-color: #e1e4e8; - border: 0; -} - -blockquote { - padding: 0 1em; - color: #6a737d; - border-left: 0.25em solid #dfe2e5; -} - -blockquote>:first-child { - margin-top: 0; -} - -blockquote>:last-child { - margin-bottom: 0; -} - -kbd { - display: inline-block; - padding: 3px 5px; - font-size: 11px; - line-height: 10px; - color: #444d56; - vertical-align: middle; - background-color: #fafbfc; - border: solid 1px #c6cbd1; - border-bottom-color: #959da5; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #959da5; -} - -h1, -h2, -h3, -h4, -h5, -h6 { - margin-top: 24px; - margin-bottom: 16px; - font-weight: 600; - line-height: 1.25; -} - -h1 .octicon-link, -h2 .octicon-link, -h3 .octicon-link, -h4 .octicon-link, -h5 .octicon-link, -h6 .octicon-link { - color: #1b1f23; - vertical-align: middle; - visibility: hidden; -} - -h1:hover .anchor, -h2:hover .anchor, -h3:hover .anchor, -h4:hover .anchor, -h5:hover .anchor, -h6:hover .anchor { - text-decoration: none; -} - -h1:hover .anchor .octicon-link, -h2:hover .anchor .octicon-link, -h3:hover .anchor .octicon-link, -h4:hover .anchor .octicon-link, -h5:hover .anchor .octicon-link, -h6:hover .anchor .octicon-link { - visibility: visible; -} - -h1 { - padding-bottom: 0.3em; - font-size: 2em; - border-bottom: 1px solid #eaecef; -} - -h2 { - padding-bottom: 0.3em; - font-size: 1.5em; - border-bottom: 1px solid #eaecef; -} - -h3 { - font-size: 1.25em; -} - -h4 { - font-size: 1em; -} - -h5 { - font-size: 0.875em; -} - -h6 { - font-size: 0.85em; - color: #6a737d; -} - -ul, -ol { - padding-left: 2em; -} - -ul ul, -ul ol, -ol ol, -ol ul { - margin-top: 0; - margin-bottom: 0; -} - -li { - word-wrap: break-all; -} - -li>p { - margin-top: 16px; -} - -li+li { - margin-top: 0.25em; -} - -dl { - padding: 0; -} - -dl dt { - padding: 0; - margin-top: 16px; - font-size: 1em; - font-style: italic; - font-weight: 600; -} - -dl dd { - padding: 0 16px; - margin-bottom: 16px; -} - -table { - display: block; - width: 100%; - overflow: auto; -} - -table th { - font-weight: 600; -} - -table th, -table td { - padding: 6px 13px; - border: 1px solid #dfe2e5; -} - -table tr { - background-color: #fff; - border-top: 1px solid #c6cbd1; -} - -table tr:nth-child(2n) { - background-color: #f6f8fa; -} - -img { - max-width: 100%; - box-sizing: content-box; - background-color: #fff; -} - -img[align=right] { - padding-left: 20px; -} - -img[align=left] { - padding-right: 20px; -} - -code { - padding: 0.2em 0.4em; - margin: 0; - font-size: 85%; - background-color: #fafbfc9d; - color: #1b1f23; - border-radius: 3px; -} - -pre { - word-wrap: normal; -} - -pre>code { - padding: 0; - margin: 0; - font-size: 100%; - word-break: normal; - white-space: pre; - background: transparent; - border: 0; -} - -.highlight { - margin-bottom: 16px; -} - -.highlight pre { - margin-bottom: 0; - word-break: normal; -} - -.highlight pre, -pre { - padding: 16px; - overflow: auto; - font-size: 85%; - line-height: 1.45; - background-color: #f6f8faf1; - border-radius: 3px; -} - -pre code { - display: inline; - max-width: auto; - padding: 0; - margin: 0; - overflow: visible; - line-height: inherit; - word-wrap: normal; - background-color: transparent; - border: 0; -} - -.full-commit .btn-outline:not(:disabled):hover { - color: #005cc5; - border-color: #005cc5; -} - -kbd { - display: inline-block; - padding: 3px 5px; - font: 11px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; - line-height: 10px; - color: #444d56; - vertical-align: middle; - background-color: #fafbfc; - border: solid 1px #d1d5da; - border-bottom-color: #c6cbd1; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #c6cbd1; -} - -:checked+.radio-label { - position: relative; - z-index: 1; - border-color: #0366d6; -} - -.task-list-item { - list-style-type: none; -} - -.task-list-item+.task-list-item { - margin-top: 3px; -} - -.task-list-item input { - margin: 0 0.2em 0.25em -1.6em; - vertical-align: middle; -} - -hr { - border-bottom-color: #eee; -} +@import url("github-md.css"); + +:root { + --text-color: #dbdbdb; + --background-color: #353535; + --alt-background-color: #3a3a3a; + --link-color: #4388d6; + --blockquote-text-color: #959595; + --blockquote-border-color: #525252; + --header-border-color: #474747; + --hr-background-color: #505050; + --hr-border-color: #464646; + --code-background-color: #3e3e3e; + --table-td-border-color: #525252; + --table-tr-border-color: #696969; + --kbd-text-color: #bbbbbb; + --kbd-background-color: #3c3c3c; + --kbd-border-color: #696969; + --kbd-shadow-color: #979797; +} \ No newline at end of file diff --git a/data/media/github-md.css b/data/media/github-md.css index c014dd6..dde07c6 100644 --- a/data/media/github-md.css +++ b/data/media/github-md.css @@ -1,88 +1,62 @@ @font-face { - font-family: octicons-link; - src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); + font-family: fira-sans; + src: url('fonts/fira-sans-v9-greek_latin-ext_latin_cyrillic-ext_cyrillic_greek-ext_vietnamese-regular.woff2') format('woff2'); } -body { - -ms-text-size-adjust: 100%; - -webkit-text-size-adjust: 100%; - line-height: 1.5; - color: #31373D; - background-color: #EDEDED; - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 16px; - line-height: 1.5; - word-wrap: break-word; +@font-face { + font-family: fira-mono; + src: url('fonts/fira-mono-v7-greek_latin-ext_latin_cyrillic-ext_cyrillic_greek-ext-regular.woff2') format('woff2'); } -a { - background-color: transparent; +@font-face { + font-family: "color-emoji"; + src: local("Noto Color Emoji"), local("Apple Color Emoji"), local("Segoe UI Emoji"), local("Segoe UI Symbol"); } -a:active, -a:hover { - outline-width: 0; -} - -strong { - font-weight: inherit; -} - -strong { - font-weight: bolder; -} - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -img { - border-style: none; -} - -code, -kbd, -pre { - font-family: monospace, monospace; - font-size: 1em; -} - -hr { - box-sizing: content-box; - height: 0; - overflow: visible; -} - -input { - font: inherit; - margin: 0; -} - -input { - overflow: visible; -} - -[type="checkbox"] { - box-sizing: border-box; - padding: 0; +:root { + --text-color: #242424; + --background-color: #f6f5f4; + --alt-background-color: #ebebeb; + --link-color: #0366d6; + --blockquote-text-color: #606060; + --blockquote-border-color: #d8d8d8; + --header-border-color: #e2e2e2; + --hr-background-color: #dadada; + --hr-border-color: #e4e4e4; + --code-background-color: #eeeeee; + --table-td-border-color: #d8d8d8; + --table-tr-border-color: #c1c1c1; + --kbd-text-color: #444444; + --kbd-background-color: #f2f2f2; + --kbd-border-color: #c1c1c1; + --kbd-shadow-color: #939393; } * { box-sizing: border-box; } -input { - font-family: inherit; - font-size: inherit; - line-height: inherit; +body { + color: var(--text-color); + background-color: var(--background-color); + font-family: fira-sans, sans-serif, color-emoji; + line-height: 1.5; + text-size-adjust: 100%; + word-wrap: break-word; + padding: 2em; } a { - color: #0366d6; + background-color: transparent; + color: var(--link-color); text-decoration: none; } +a:active, +a:hover { + outline-width: 0; +} + a:hover { text-decoration: underline; } @@ -91,13 +65,19 @@ strong { font-weight: 600; } +img { + border-style: none; +} + hr { - height: 0; - margin: 15px 0; + box-sizing: content-box; + height: 0.25em; + padding: 0; + margin: 1.5em 0; overflow: hidden; - background: transparent; + background-color: var(--hr-background-color); border: 0; - border-bottom: 1px solid #dfe2e5; + border-bottom: 1px solid var(--hr-border-color); } hr::before { @@ -111,6 +91,19 @@ hr::after { content: ""; } +input { + font-family: inherit; + font-size: inherit; + line-height: inherit; + margin: 0; + overflow: visible; +} + +[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + table { border-spacing: 0; border-collapse: collapse; @@ -127,43 +120,37 @@ h3, h4, h5, h6 { - margin-top: 0; - margin-bottom: 0; + font-weight: 600; + margin: 0; } h1 { - font-size: 32px; - font-weight: 600; + font-size: 2em; } h2 { - font-size: 24px; - font-weight: 600; + font-size: 1.5em; } h3 { - font-size: 20px; - font-weight: 600; + font-size: 1.25em; } h4 { - font-size: 16px; - font-weight: 600; + font-size: 1em; } h5 { - font-size: 14px; - font-weight: 600; + font-size: 0.875em; } h6 { - font-size: 12px; - font-weight: 600; + font-size: 0.85em; } p { margin-top: 0; - margin-bottom: 10px; + margin-bottom: 0.625em; } blockquote { @@ -193,20 +180,66 @@ dd { margin-left: 0; } +code, +kbd, +pre { + font-family: fira-mono, monospace, color-emoji; + background-color: var(--code-background-color); + font-size: 1em; + word-wrap: normal; +} + code { - font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 12px; + border-radius: 0.1875em; + font-size: 0.85em; + padding: 0.2em 0.4em; + margin: 0; } pre { margin-top: 0; margin-bottom: 0; - font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; - font-size: 12px; + font-size: 0.75em; } -.octicon { - vertical-align: text-bottom; +pre>code { + padding: 0; + margin: 0; + font-size: 1em; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.highlight { + margin-bottom: 1em; +} + +.highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.highlight pre, +pre { + padding: 1em; + overflow: auto; + font-size: 0.85em; + line-height: 1.5; + background-color: var(--alt-background-color); + border-radius: 0.1875em; +} + +pre code { + background-color: transparent; + border: 0; + display: inline; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; } .pl-0 { @@ -214,27 +247,27 @@ pre { } .pl-1 { - padding-left: 4px !important; + padding-left: 0.25em !important; } .pl-2 { - padding-left: 8px !important; + padding-left: 0.5em !important; } .pl-3 { - padding-left: 16px !important; + padding-left: 1em !important; } .pl-4 { - padding-left: 24px !important; + padding-left: 1.5em !important; } .pl-5 { - padding-left: 32px !important; + padding-left: 2em !important; } .pl-6 { - padding-left: 40px !important; + padding-left: 2.5em !important; } .markdown-body::before { @@ -263,8 +296,8 @@ a:not([href]) { .anchor { float: left; - padding-right: 4px; - margin-left: -20px; + padding-right: 0.25em; + margin-left: -1.25em; line-height: 1; } @@ -280,21 +313,13 @@ dl, table, pre { margin-top: 0; - margin-bottom: 16px; -} - -hr { - height: 0.25em; - padding: 0; - margin: 24px 0; - background-color: #e1e4e8; - border: 0; + margin-bottom: 1em; } blockquote { padding: 0 1em; - color: #6a737d; - border-left: 0.25em solid #dfe2e5; + color: var(--blockquote-text-color); + border-left: 0.25em solid var(--blockquote-border-color); } blockquote>:first-child { @@ -307,16 +332,16 @@ blockquote>:last-child { kbd { display: inline-block; - padding: 3px 5px; - font-size: 11px; - line-height: 10px; - color: #444d56; + padding: 0.1875em 0.3125em; + font-size: 0.6875em; + line-height: 1; + color: var(--kbd-text-color); vertical-align: middle; - background-color: #fafbfc; - border: solid 1px #c6cbd1; - border-bottom-color: #959da5; + background-color: var(--kbd-background-color); + border: solid 1px var(--kbd-border-color); + border-bottom-color: var(--kbd-shadow-color); border-radius: 3px; - box-shadow: inset 0 -1px 0 #959da5; + box-shadow: inset 0 -1px 0 var(--kbd-shadow-color);; } h1, @@ -325,23 +350,12 @@ h3, h4, h5, h6 { - margin-top: 24px; - margin-bottom: 16px; + margin-top: 1.5em; + margin-bottom: 1em; font-weight: 600; line-height: 1.25; } -h1 .octicon-link, -h2 .octicon-link, -h3 .octicon-link, -h4 .octicon-link, -h5 .octicon-link, -h6 .octicon-link { - color: #1b1f23; - vertical-align: middle; - visibility: hidden; -} - h1:hover .anchor, h2:hover .anchor, h3:hover .anchor, @@ -351,25 +365,16 @@ h6:hover .anchor { text-decoration: none; } -h1:hover .anchor .octicon-link, -h2:hover .anchor .octicon-link, -h3:hover .anchor .octicon-link, -h4:hover .anchor .octicon-link, -h5:hover .anchor .octicon-link, -h6:hover .anchor .octicon-link { - visibility: visible; -} - h1 { padding-bottom: 0.3em; font-size: 2em; - border-bottom: 1px solid #eaecef; + border-bottom: 1px solid var(--header-border-color); } h2 { padding-bottom: 0.3em; font-size: 1.5em; - border-bottom: 1px solid #eaecef; + border-bottom: 1px solid var(--header-border-color); } h3 { @@ -386,7 +391,7 @@ h5 { h6 { font-size: 0.85em; - color: #6a737d; + opacity: 0.67; } ul, @@ -403,11 +408,11 @@ ol ul { } li { - word-wrap: break-all; + overflow-wrap: break-word; } li>p { - margin-top: 16px; + margin-top: 1em; } li+li { @@ -420,15 +425,15 @@ dl { dl dt { padding: 0; - margin-top: 16px; + margin-top: 1em; font-size: 1em; font-style: italic; font-weight: 600; } dl dd { - padding: 0 16px; - margin-bottom: 16px; + padding: 0 1em; + margin-bottom: 1em; } table { @@ -443,109 +448,30 @@ table th { table th, table td { - padding: 6px 13px; - border: 1px solid #dfe2e5; + padding: 0.375em 0.8125em; + border: 1px solid var(--table-td-border-color); } table tr { - background-color: #fff; - border-top: 1px solid #c6cbd1; + background-color: var(--background-color); + border-top: 1px solid var(--table-tr-border-color); } table tr:nth-child(2n) { - background-color: #f6f8fa; + background-color: var(--alt-background-color); } img { max-width: 100%; box-sizing: content-box; - background-color: #fff; } img[align=right] { - padding-left: 20px; + padding-left: 1.25em; } img[align=left] { - padding-right: 20px; -} - -code { - padding: 0.2em 0.4em; - margin: 0; - font-size: 85%; - background-color: rgba(27,31,35,0.05); - border-radius: 3px; -} - -pre { - word-wrap: normal; -} - -pre>code { - padding: 0; - margin: 0; - font-size: 100%; - word-break: normal; - white-space: pre; - background: transparent; - border: 0; -} - -.highlight { - margin-bottom: 16px; -} - -.highlight pre { - margin-bottom: 0; - word-break: normal; -} - -.highlight pre, -pre { - padding: 16px; - overflow: auto; - font-size: 85%; - line-height: 1.45; - background-color: #f6f8fa; - border-radius: 3px; -} - -pre code { - display: inline; - max-width: auto; - padding: 0; - margin: 0; - overflow: visible; - line-height: inherit; - word-wrap: normal; - background-color: transparent; - border: 0; -} - -.full-commit .btn-outline:not(:disabled):hover { - color: #005cc5; - border-color: #005cc5; -} - -kbd { - display: inline-block; - padding: 3px 5px; - font: 11px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; - line-height: 10px; - color: #444d56; - vertical-align: middle; - background-color: #fafbfc; - border: solid 1px #d1d5da; - border-bottom-color: #c6cbd1; - border-radius: 3px; - box-shadow: inset 0 -1px 0 #c6cbd1; -} - -:checked+.radio-label { - position: relative; - z-index: 1; - border-color: #0366d6; + padding-right: 1.25em; } .task-list-item { @@ -553,14 +479,10 @@ kbd { } .task-list-item+.task-list-item { - margin-top: 3px; + margin-top: 0.1875em; } .task-list-item input { margin: 0 0.2em 0.25em -1.6em; vertical-align: middle; } - -hr { - border-bottom-color: #eee; -} From 174e027076a930fd400842c33f034d0a3c97714f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Sun, 24 Mar 2019 04:57:06 +0000 Subject: [PATCH 03/14] Revert "add debug flag to webview" This reverts commit 43c9584369fdbf37a530d3dec67a6c22c62d70bc. --- uberwriter/UberwriterWindow.py | 3 +-- uberwriter_lib/AppWindow.py | 6 +----- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index f011c9d..1d86dda 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -818,7 +818,7 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.present() return False - def toggle_preview(self, state, opts): + def toggle_preview(self, state): """Toggle the preview mode Arguments: @@ -868,7 +868,6 @@ class UberwriterWindow(Gtk.ApplicationWindow): webview_settings = self.preview_webview.get_settings() webview_settings.set_allow_universal_access_from_file_urls( True) - webview_settings.set_enable_developer_extras(opts.debug) self.preview_webview.load_html(output.decode("utf-8"), 'file://localhost/') # Delete the cursor-scroll mark again diff --git a/uberwriter_lib/AppWindow.py b/uberwriter_lib/AppWindow.py index 060dbc5..d25161a 100644 --- a/uberwriter_lib/AppWindow.py +++ b/uberwriter_lib/AppWindow.py @@ -202,10 +202,6 @@ class Application(Gtk.Application): "-e", "--experimental-features", help=_("Use experimental features"), action='store_true' ) - parser.add_argument( - "-d", "--debug", help=_("Debug options"), action='store_true', - dest="debug" - ) (self.options, self.args) = parser.parse_known_args() set_up_logging(self.options) @@ -257,7 +253,7 @@ class Application(Gtk.Application): def on_preview(self, action, value): action.set_state(value) - self.window.toggle_preview(value, self.options) + self.window.toggle_preview(value) def on_search(self, _action, _value): self.window.open_search_and_replace() From 6a2de711cf757bcd9dd3f60b0e39dae5564796b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Sun, 24 Mar 2019 05:25:51 +0000 Subject: [PATCH 04/14] Reload preview when theme changes --- uberwriter/UberwriterWindow.py | 87 ++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index 1d86dda..c51f828 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -113,7 +113,7 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.accel_group = Gtk.AccelGroup() self.add_accel_group(self.accel_group) - # Setup light background + # Setup text editor self.text_editor = TextEditor() self.text_editor.set_name('UberwriterEditor') self.get_style_context().add_class('uberwriter_window') @@ -143,6 +143,9 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.text_editor.show() self.text_editor.grab_focus() + # Setup preview webview + self.preview_webview = None + self.editor_alignment = self.builder.get_object('editor_alignment') self.scrolled_window = self.builder.get_object('editor_scrolledwindow') self.scrolled_window.props.width_request = 600 @@ -826,7 +829,28 @@ class UberwriterWindow(Gtk.ApplicationWindow): """ if state.get_boolean(): + self.show_preview() + else: + self.show_text_editor() + return True + + def show_text_editor(self): + print(self.scrolled_window.get_child()) + self.scrolled_window.remove(self.scrolled_window.get_child()) + self.scrolled_window.add(self.text_editor) + self.text_editor.show() + self.preview_webview.destroy() + self.preview_webview = None + self.queue_draw() + + def show_preview(self, loaded=False): + if loaded: + self.scrolled_window.remove(self.scrolled_window.get_child()) + self.scrolled_window.add(self.preview_webview) + self.preview_webview.show() + self.queue_draw() + else: # Insert a tag with ID to scroll to # self.TextBuffer.insert_at_cursor('') # TODO @@ -863,45 +887,25 @@ class UberwriterWindow(Gtk.ApplicationWindow): text = bytes(self.get_text(), "utf-8") output = proc.communicate(text)[0] - # Load in Webview and scroll to #ID - self.preview_webview = WebKit.WebView() - webview_settings = self.preview_webview.get_settings() - webview_settings.set_allow_universal_access_from_file_urls( - True) + if self.preview_webview is None: + self.preview_webview = WebKit.WebView() + self.preview_webview.get_settings().set_allow_universal_access_from_file_urls(True) + + # Delete the cursor-scroll mark again + # cursor_iter = self.TextBuffer.get_iter_at_mark(self.TextBuffer.get_insert()) + # begin_del = cursor_iter.copy() + # begin_del.backward_chars(30) + # self.TextBuffer.delete(begin_del, cursor_iter) + + # Show preview once the load is finished + self.preview_webview.connect("load-changed", self.on_preview_load_change) + + # This saying that all links will be opened in default browser, \ + # but local files are opened in appropriate apps: + self.preview_webview.connect("decide-policy", self.on_click_link) + self.preview_webview.load_html(output.decode("utf-8"), 'file://localhost/') - # Delete the cursor-scroll mark again - # cursor_iter = self.TextBuffer.get_iter_at_mark(self.TextBuffer.get_insert()) - # begin_del = cursor_iter.copy() - # begin_del.backward_chars(30) - # self.TextBuffer.delete(begin_del, cursor_iter) - - # Show preview once the load is finished - self.preview_webview.connect("load-changed", self.on_preview_load_change) - - # This saying that all links will be opened in default browser, \ - # but local files are opened in appropriate apps: - self.preview_webview.connect("decide-policy", self.on_click_link) - else: - self.show_text_editor() - - return True - - def show_text_editor(self): - if self.scrolled_window.get_child() != self.text_editor: - self.scrolled_window.remove(self.preview_webview) - self.scrolled_window.add(self.text_editor) - self.preview_webview.destroy() - self.text_editor.show() - self.queue_draw() - - def show_preview(self): - if self.scrolled_window.get_child() != self.preview_webview: - self.scrolled_window.remove(self.text_editor) - self.scrolled_window.add(self.preview_webview) - self.preview_webview.show() - self.queue_draw() - def toggle_dark_mode(self, state): """Toggle the dark mode, both for the window and for the CSD @@ -910,7 +914,6 @@ class UberwriterWindow(Gtk.ApplicationWindow): """ # Save state for saving settings later - if state: # Dark Mode is on self.get_style_context().add_class("dark_mode") @@ -922,6 +925,10 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.headerbar.hb_container.get_style_context().remove_class("dark_mode") self.markup_buffer.dark_mode(False) + # Reload preview if it exists + if self.preview_webview: + self.show_preview() + # Redraw contents of window (self) self.queue_draw() @@ -1138,7 +1145,7 @@ class UberwriterWindow(Gtk.ApplicationWindow): """swaps text editor with preview once the load is complete """ if event == WebKit.LoadEvent.FINISHED: - self.show_preview() + self.show_preview(loaded=True) def on_click_link(self, web_view, decision, _decision_type): """provide ability for self.webview to open links in default browser From da7bf940f3ee6b54760b9e7468170003886bf174 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Sun, 24 Mar 2019 21:37:05 +0000 Subject: [PATCH 05/14] Uniformize font-face font-family declarations --- data/media/github-md.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/media/github-md.css b/data/media/github-md.css index dde07c6..e0af22e 100644 --- a/data/media/github-md.css +++ b/data/media/github-md.css @@ -9,7 +9,7 @@ } @font-face { - font-family: "color-emoji"; + font-family: color-emoji; src: local("Noto Color Emoji"), local("Apple Color Emoji"), local("Segoe UI Emoji"), local("Segoe UI Symbol"); } From bbc4cec04927b7080a7986238819890d89d84793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Sun, 24 Mar 2019 21:52:52 +0000 Subject: [PATCH 06/14] Add font assets --- ...llic_greek-ext_latin-ext_greek-regular.woff2 | Bin 0 -> 60012 bytes ...llic_greek-ext_latin-ext_greek-regular.woff2 | Bin 0 -> 98664 bytes data/media/github-md.css | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 data/media/fonts/fira-mono-v7-latin_cyrillic-ext_cyrillic_greek-ext_latin-ext_greek-regular.woff2 create mode 100644 data/media/fonts/fira-sans-v9-vietnamese_latin_cyrillic-ext_cyrillic_greek-ext_latin-ext_greek-regular.woff2 diff --git a/data/media/fonts/fira-mono-v7-latin_cyrillic-ext_cyrillic_greek-ext_latin-ext_greek-regular.woff2 b/data/media/fonts/fira-mono-v7-latin_cyrillic-ext_cyrillic_greek-ext_latin-ext_greek-regular.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..7762d8391d30630d69d7494eaa758d90ec8671f8 GIT binary patch literal 60012 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 Date: Sun, 24 Mar 2019 22:07:43 +0000 Subject: [PATCH 07/14] Make preview responsive Uses the same breakpoints as the text editor. --- data/media/github-md.css | 16 ++++++++++++++++ uberwriter/UberwriterWindow.py | 6 +++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/data/media/github-md.css b/data/media/github-md.css index 571fe4a..4fa2463 100644 --- a/data/media/github-md.css +++ b/data/media/github-md.css @@ -36,6 +36,22 @@ box-sizing: border-box; } +html { + font-size: 16px; +} + +@media screen and (max-width: 799px) { + html { + font-size: 14px; + } +} + +@media screen and (min-width: 1000px) { + html { + font-size: 18px; + } +} + body { color: var(--text-color); background-color: var(--background-color); diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index c51f828..43e7111 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -487,8 +487,8 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.window_height = widget.get_allocation().height w_width = widget.get_allocation().width # Calculate left / right margin - width_request = 600 if w_width < 900: + width_request = 600 self.markup_buffer.set_multiplier(8) self.current_font_size = 12 self.alignment_padding = 30 @@ -498,8 +498,8 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.get_style_context().add_class("small") elif w_width < 1400: - self.markup_buffer.set_multiplier(10) width_request = 800 + self.markup_buffer.set_multiplier(10) self.current_font_size = 15 self.alignment_padding = 40 lm = 7 * 10 @@ -508,9 +508,9 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.get_style_context().add_class("medium") else: + width_request = 1000 self.markup_buffer.set_multiplier(13) self.current_font_size = 17 - width_request = 1000 self.alignment_padding = 60 lm = 7 * 13 self.get_style_context().remove_class("medium") From e7359c5776b6b10ac3b1fbafe8c70646294c744a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Tue, 26 Mar 2019 14:18:19 +0000 Subject: [PATCH 08/14] Encapsulate theme handling The Theme class encapsulates theme handling, by listing default themes and providing means to access their gtk/web css. Besides cleaning things up, it makes it easy to support custom themes in the future. The user just needs to provide two CSS files, and we'll be able to instantiate and use a Theme from that. --- data/media/adwaita_style.css | 4 - data/media/arc_style.css | 4 - data/media/{style.css => css/_gtk_base.css} | 79 +++++------------ .../{github-md.css => css/_web_base.css} | 39 ++++---- data/media/css/gtk_adwaita.css | 5 ++ data/media/css/gtk_adwaita_dark.css | 5 ++ data/media/css/web_adwaita.css | 19 ++++ .../web_adwaita_dark.css} | 14 ++- data/media/uberwriter.css | Bin 2432 -> 0 bytes data/media/uberwriter_dark.css | Bin 2486 -> 0 bytes uberwriter/Theme.py | 49 +++++++++++ uberwriter/UberwriterExportDialog.py | 5 +- uberwriter/UberwriterWindow.py | 83 +++++++----------- uberwriter_lib/helpers.py | 31 ++++--- 14 files changed, 175 insertions(+), 162 deletions(-) delete mode 100644 data/media/adwaita_style.css delete mode 100644 data/media/arc_style.css rename data/media/{style.css => css/_gtk_base.css} (73%) rename data/media/{github-md.css => css/_web_base.css} (86%) create mode 100644 data/media/css/gtk_adwaita.css create mode 100644 data/media/css/gtk_adwaita_dark.css create mode 100644 data/media/css/web_adwaita.css rename data/media/{github-md-dark.css => css/web_adwaita_dark.css} (62%) delete mode 100644 data/media/uberwriter.css delete mode 100644 data/media/uberwriter_dark.css create mode 100644 uberwriter/Theme.py diff --git a/data/media/adwaita_style.css b/data/media/adwaita_style.css deleted file mode 100644 index 6e1b8ed..0000000 --- a/data/media/adwaita_style.css +++ /dev/null @@ -1,4 +0,0 @@ -@define-color dark_bg #353535; -@define-color light_bg #F6F5F4; - -@import url("style.css"); diff --git a/data/media/arc_style.css b/data/media/arc_style.css deleted file mode 100644 index 0fce002..0000000 --- a/data/media/arc_style.css +++ /dev/null @@ -1,4 +0,0 @@ -@define-color dark_bg #31373D; -@define-color light_bg #EDEDED; - -@import url("style.css"); diff --git a/data/media/style.css b/data/media/css/_gtk_base.css similarity index 73% rename from data/media/style.css rename to data/media/css/_gtk_base.css index 43aea46..399e8c2 100644 --- a/data/media/style.css +++ b/data/media/css/_gtk_base.css @@ -27,19 +27,8 @@ .uberwriter_window { -gtk-key-bindings: window-bindings; /*border-radius: 7px 7px 3px 3px;*/ - background: @light_bg; - caret-color: @dark_bg; -} - -.uberwriter_window.dark_mode { - background: @dark_bg; - caret-color: @light_bg; -} - -.uberwriter_window.dark_mode .uberwriter-editor text{ - background: @dark_bg; - caret-color: @light_bg; - color: @light_bg; + background: @background_color; + caret-color: @foreground_color; } .uberwriter_window.small .uberwriter-editor { @@ -47,12 +36,7 @@ font-size: 12px; } .uberwriter_window grid { - background-color: @light_bg; -} - -.uberwriter_window.dark_mode grid, -.uberwriter_window.dark_mode scrolledwindow { - background-color: @dark_bg; + background-color: @background_color; } #UberwriterWindow.medium .uberwriter-editor { @@ -75,25 +59,22 @@ } #titlebar_container { - background: @light_bg; -} - -#titlebar_container.dark_mode { - background: @dark_bg; + background: @background_color; } .uberwriter-editor { border: none; background-color: transparent; - color: #222; + text-decoration-color: #ff0000; /*-GtkWidget-cursor-color: shade(#4D9FCE, 0.9);*/ /*-GtkWidget-cursor-aspect-ratio: 0.1;*/ -gtk-key-bindings: editor-bindings; } .uberwriter-editor text { - background-color: @light_bg; - color: #222; + background-color: @background_color; + color: @foreground_color; + caret-color: @foreground_color; } .uberwriter-editor:selected { @@ -120,7 +101,7 @@ .status_bar_box button { /* finding reset */ - background-color: @light_bg; + background-color: @background_color; text-shadow: inherit; /*icon-shadow: inherit;*/ box-shadow: initial; @@ -146,13 +127,13 @@ .status_bar_box button:hover, .status_bar_box button:checked { transition: 0s ease-in; - color: @light_bg; + color: @background_color; background-color: #666; } .status_bar_box button:hover label, .status_bar_box button:checked label { - color: @light_bg; + color: @background_color; } .status_bar_box button:active { @@ -161,22 +142,7 @@ background-image: none; box-shadow: 0 0 2px rgba(0,0,0,0.4) } -.dark_mode .status_bar_box button { - background-color: @dark_bg; -} -.dark_mode .status_bar_box label { - color: @light_bg; -} -.dark_mode .status_bar_box button:hover, -.dark_mode .status_bar_box button:checked { - background-color: @light_bg; - color: #666; -} -.dark_mode .status_bar_box button:hover label, -.dark_mode .status_bar_box button:checked label{ - color: #666; -} .status_bar_box separator { border-color: #999; border-right: none; @@ -198,9 +164,9 @@ /*font: serif 10;*/ font-family: serif; font-size: 10px; - background: @light_bg; + background: @background_color; border-radius: 4px; - border-color: @light_bg; + border-color: @background_color; margin: 5px; padding: 5px; } @@ -211,7 +177,7 @@ border: 1px solid #333; background: @ligth_bg; border-radius: 3px; - border-color: @light_bg; + border-color: @background_color; } */ #LexikonBubble label { @@ -219,9 +185,8 @@ } #LexikonBubble { - background-color: @light_bg; - border: 5px solid @light_bg; - border-color: @light_bg + background-color: @background_color; + border: 5px solid @background_color; } #LexikonBubble .lexikon_heading { @@ -240,15 +205,15 @@ } .QuickPreviewPopup { - background-color: @light_bg; + background-color: @background_color; } .QuickPreviewPopup grid { - background-color: @light_bg; - color: @dark_bg; - border-color: @light_bg; + background-color: @background_color; + color: @foreground_color; + border-color: @background_color; } .QuickPreviewPopup label { - color: @dark_bg; -} + color: @foreground_color; +} \ No newline at end of file diff --git a/data/media/github-md.css b/data/media/css/_web_base.css similarity index 86% rename from data/media/github-md.css rename to data/media/css/_web_base.css index 4fa2463..3dd9ecc 100644 --- a/data/media/github-md.css +++ b/data/media/css/_web_base.css @@ -1,11 +1,11 @@ @font-face { font-family: fira-sans; - src: url("fonts/fira-sans-v9-vietnamese_latin_cyrillic-ext_cyrillic_greek-ext_latin-ext_greek-regular.woff2") format("woff2"); + src: url("../fonts/fira-sans-v9-vietnamese_latin_cyrillic-ext_cyrillic_greek-ext_latin-ext_greek-regular.woff2") format("woff2"); } @font-face { font-family: fira-mono; - src: url("fonts/fira-mono-v7-latin_cyrillic-ext_cyrillic_greek-ext_latin-ext_greek-regular.woff2") format("woff2"); + src: url("../fonts/fira-mono-v7-latin_cyrillic-ext_cyrillic_greek-ext_latin-ext_greek-regular.woff2") format("woff2"); } @font-face { @@ -14,22 +14,21 @@ } :root { - --text-color: #242424; - --background-color: #f6f5f4; - --alt-background-color: #ebebeb; + /* This is GitHub's default color scheme, which should be overridden per theme. */ + --text-color: #24292e; + --background-color: #ffffff; + --alt-background-color: #f6f8fa; --link-color: #0366d6; - --blockquote-text-color: #606060; - --blockquote-border-color: #d8d8d8; - --header-border-color: #e2e2e2; - --hr-background-color: #dadada; - --hr-border-color: #e4e4e4; - --code-background-color: #eeeeee; - --table-td-border-color: #d8d8d8; - --table-tr-border-color: #c1c1c1; - --kbd-text-color: #444444; - --kbd-background-color: #f2f2f2; - --kbd-border-color: #c1c1c1; - --kbd-shadow-color: #939393; + --blockquote-text-color: #6a737d; + --blockquote-border-color: #dfe2e5; + --header-border-color: #eaecef; + --hr-background-color: #e1e4e8; + --table-tr-border-color: #c6cbd1; + --table-td-border-color: #dfe2e5; + --kbd-text-color: #444d56; + --kbd-background-color: #fafbfc; + --kbd-border-color: #c6cbd1; + --kbd-shadow-color: #959da5; } * { @@ -55,7 +54,7 @@ html { body { color: var(--text-color); background-color: var(--background-color); - font-family: fira-sans, sans-serif, color-emoji; + font-family: "Fira Sans", fira-sans, sans-serif, color-emoji; line-height: 1.5; text-size-adjust: 100%; word-wrap: break-word; @@ -93,7 +92,6 @@ hr { overflow: hidden; background-color: var(--hr-background-color); border: 0; - border-bottom: 1px solid var(--hr-border-color); } hr::before { @@ -199,8 +197,7 @@ dd { code, kbd, pre { - font-family: fira-mono, monospace, color-emoji; - background-color: var(--code-background-color); + font-family: "Fira Mono", fira-mono, monospace, color-emoji; font-size: 1em; word-wrap: normal; } diff --git a/data/media/css/gtk_adwaita.css b/data/media/css/gtk_adwaita.css new file mode 100644 index 0000000..f75dcde --- /dev/null +++ b/data/media/css/gtk_adwaita.css @@ -0,0 +1,5 @@ +@define-color foreground_color #2e3436; +@define-color background_color #f6f5f4; +@define-color math_text_color #00364c; + +@import url("_gtk_base.css"); diff --git a/data/media/css/gtk_adwaita_dark.css b/data/media/css/gtk_adwaita_dark.css new file mode 100644 index 0000000..a41d20c --- /dev/null +++ b/data/media/css/gtk_adwaita_dark.css @@ -0,0 +1,5 @@ +@define-color foreground_color #eeeeec; +@define-color background_color #353535; +@define-color math_text_color #ffc9b3; + +@import url("_gtk_base.css"); diff --git a/data/media/css/web_adwaita.css b/data/media/css/web_adwaita.css new file mode 100644 index 0000000..ecfde17 --- /dev/null +++ b/data/media/css/web_adwaita.css @@ -0,0 +1,19 @@ +@import url("_web_base.css"); + +:root { + --text-color: #2e3436; + --background-color: #f6f5f4; + --alt-background-color: #edeeef; + --link-color: #0d71de; + --blockquote-text-color: #747e85; + --blockquote-border-color: #d6d8da; + --header-border-color: #e1e2e4; + --hr-background-color: #d8dadd; + --table-tr-border-color: #bdc1c6; + --table-td-border-color: #d6d8da; + --kbd-text-color: #4e585e; + --kbd-background-color: #f1f1f1; + --kbd-border-color: #bdc1c6; + --kbd-shadow-color: #8c939a; + +} \ No newline at end of file diff --git a/data/media/github-md-dark.css b/data/media/css/web_adwaita_dark.css similarity index 62% rename from data/media/github-md-dark.css rename to data/media/css/web_adwaita_dark.css index 928f3ca..320a657 100644 --- a/data/media/github-md-dark.css +++ b/data/media/css/web_adwaita_dark.css @@ -1,19 +1,17 @@ -@import url("github-md.css"); +@import url("_web_base.css"); :root { - --text-color: #dbdbdb; + --text-color: #eeeeec; --background-color: #353535; --alt-background-color: #3a3a3a; - --link-color: #4388d6; - --blockquote-text-color: #959595; + --link-color: #b5daff; + --blockquote-text-color: #a8a8a6; --blockquote-border-color: #525252; --header-border-color: #474747; --hr-background-color: #505050; - --hr-border-color: #464646; - --code-background-color: #3e3e3e; - --table-td-border-color: #525252; --table-tr-border-color: #696969; - --kbd-text-color: #bbbbbb; + --table-td-border-color: #525252; + --kbd-text-color: #cececc; --kbd-background-color: #3c3c3c; --kbd-border-color: #696969; --kbd-shadow-color: #979797; diff --git a/data/media/uberwriter.css b/data/media/uberwriter.css deleted file mode 100644 index 7cb0bd65a0550c89bda0c26f8a5fc8ed0c35b64c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2432 zcmcIm+iu!G5S>@@6_%nZQWTSfTch+TQd{-C{Q)o+TLt1`D50po-u9dsFWxl{$wR7@ zypUCOmu8^Qk=kwvmU z#IuCI7~Y1+DMQRVxrh7$nKHkb#<_zulCPR;0ofH+-xP%ja^=m#z-mJ%Xo1zN_~~ph1LV{1Wc?Bp<~++!vLDC|g!r_{(4=MUM2+ zlN$_QcMJI#(p2Sr=|i4_5npG4XjZV2!78oX;29#SHT+QTHy(}@`4Nj$I_2Cg=UzGY z%Xt8;J$AH!MrAuzi}?{!RX+cZr8-iB15%b9b8C*7HMQ2r7q!S8E+gfceEtAx)Mn)~ zf5#YYtiS_nDAu~0LW@}Ul?~PxxhGewm4ObQqZ~MnG04%ZW~1{0r=dq*+cLQ#W_)!9JLr+lp?eIWGv$~av;o(r^5@CqD&#o-Q?+oceave!U!hMQ z8K=*FCV$4E*=5x-BU>@AJyuoahrIeex*oG;v5lVKokT4|r+$9axvsLMg?4#rrNDWm zQMJ)AL$4q0hHAbMzQF5Te&Wq266|AM53rQs+p;Y1wM4JRuf7j@hw5!<_ZC>sVa0AC z_E*(q)j2}+TSxc7d*Luyh-)2}CT#6QH*D^4_6)Vccp^EhdH)cbiN4t<7kIAlrcXn7 z3N&V@U%TD+8YfSs*XKn${C_b!_+>6nz%=YYJE2|gn|HF3D?g0X#qIuM#E=rr8Dxw; WDKlY?hFa6TOU-lnj1$*AF57>3-(-~l diff --git a/data/media/uberwriter_dark.css b/data/media/uberwriter_dark.css deleted file mode 100644 index bae9e17125421729cd4c8e19447e5449e3de8b4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2486 zcmcIm%Wm5+5ZtT%6#{}HKoB{JUrp0ffTrlZ{Q+BkNT{u-mR-j+`s;0HmZC&TijzYM zLZawh?qg<`^xr>Ma`8r^D;?pplc~&QBYQlFZ1uY*k>nVZ-%Eh6MAnkY3erF(lFAHo zq-(CIv6X|abBUof$C|qr@(8;D_UO%qA-lxto1!pBu3Y8NC1MNtShGyDenCpB zH<;IjMub>aiU%cU@*tne$Jm&{UnJi(hDTsRoJ0KL?;8jQcLc>C$|kEl{3X~QBS(4} z$~A_oyN7%RX{_>*j3Cdzh^wH&ubuDs>%T#$LlRtnOwORSh z-!euU8}Psy3bpPQ&?43&WrOua*2xuXWvs*HC#F7~+B_v(gr3{Wiau4ZA*$`957_ ztUmjh{2307T~;kKGArhF#Hy-%pI6t%z+u){?4c)kCsE6wQ$IiITvyrBLa#WrV&J^d zsCwv_iPMkfhHAeNzQF5Be&Wq2BJ5*c_pp@U+hm#JD@Ct{uf7k4W%YKndvmN;uwrf@ z_E*(q)j2}+JB^#*y>J+rk82&5Hf+s_Zm_w-*)!1!. # END LICENSE -import locale -import subprocess -import os import codecs -import webbrowser -import urllib +import locale import logging - import mimetypes +import os import re - +import subprocess +import urllib +import webbrowser from gettext import gettext as _ import gi +from gi.repository.GObject import param_spec_string + +from uberwriter.Theme import Theme + gi.require_version('Gtk', '3.0') gi.require_version('WebKit2', '4.0') # pylint: disable=wrong-import-position from gi.repository import Gtk, Gdk, GObject, GLib, Gio @@ -181,21 +183,13 @@ class UberwriterWindow(Gtk.ApplicationWindow): # Init file name with None self.set_filename() - # self.style_provider = Gtk.CssProvider() - # self.style_provider.load_from_path(helpers.get_media_path('arc_style.css')) - - # Gtk.StyleContext.add_provider_for_screen( - # Gdk.Screen.get_default(), self.style_provider, - # Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION - # ) - # Markup and Shortcuts for the TextBuffer self.markup_buffer = MarkupBuffer( self, self.text_buffer, base_leftmargin) self.markup_buffer.markup_buffer() - # Setup dark mode if so - self.toggle_dark_mode(self.settings.get_value("dark-mode")) + # Set current theme + self.apply_current_theme() # Scrolling -> Dark or not? self.textchange = False @@ -266,6 +260,22 @@ class UberwriterWindow(Gtk.ApplicationWindow): 'close-window': (GObject.SIGNAL_ACTION, None, ()) } + def apply_current_theme(self): + """Adjusts both the window and the CSD for the current theme. + """ + + theme = Theme.get_current() + if theme.is_dark: + self.markup_buffer.dark_mode(True) + else: + self.markup_buffer.dark_mode(False) + + # Reload preview if it exists, otherwise redraw contents of window (self) + if self.preview_webview: + self.show_preview() + else: + self.queue_draw() + def scrolled(self, widget): """if window scrolled + focusmode make font black again""" # if self.focusmode: @@ -387,7 +397,7 @@ class UberwriterWindow(Gtk.ApplicationWindow): else: self.remove_typewriter() self.focusmode = False - self.text_buffer.remove_tag(self.markup_buffer.grayfont, + self.text_buffer.remove_tag(self.markup_buffer.unfocused_text, self.text_buffer.get_start_iter(), self.text_buffer.get_end_iter()) self.text_buffer.remove_tag(self.markup_buffer.blackfont, @@ -865,20 +875,13 @@ class UberwriterWindow(Gtk.ApplicationWindow): base_path = '' os.environ['PANDOC_PREFIX'] = base_path + '/' - # Set the styles according the color theme - if self.settings.get_value("dark-mode"): - stylesheet = helpers.get_media_path('github-md-dark.css') - else: - stylesheet = helpers.get_media_path('github-md.css') - args = ['pandoc', '-s', '--from=markdown', '--to=html5', '--mathjax', - '--css=' + stylesheet, - '--lua-filter=' + - helpers.get_script_path('relative_to_absolute.lua'), + '--css=' + Theme.get_current().web_css_path, + '--lua-filter=' + helpers.get_script_path('relative_to_absolute.lua'), '--lua-filter=' + helpers.get_script_path('task-list.lua')] proc = subprocess.Popen( @@ -906,32 +909,6 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.preview_webview.load_html(output.decode("utf-8"), 'file://localhost/') - def toggle_dark_mode(self, state): - """Toggle the dark mode, both for the window and for the CSD - - Arguments: - state {gtk bool} -- Desired state of the dark mode (enabled/disabled) - """ - - # Save state for saving settings later - if state: - # Dark Mode is on - self.get_style_context().add_class("dark_mode") - self.headerbar.hb_container.get_style_context().add_class("dark_mode") - self.markup_buffer.dark_mode(True) - else: - # Dark mode off - self.get_style_context().remove_class("dark_mode") - self.headerbar.hb_container.get_style_context().remove_class("dark_mode") - self.markup_buffer.dark_mode(False) - - # Reload preview if it exists - if self.preview_webview: - self.show_preview() - - # Redraw contents of window (self) - self.queue_draw() - def load_file(self, filename=None): """Open File from command line or open / open recent etc.""" if self.check_change() == Gtk.ResponseType.CANCEL: diff --git a/uberwriter_lib/helpers.py b/uberwriter_lib/helpers.py index f46bf52..ec682ee 100644 --- a/uberwriter_lib/helpers.py +++ b/uberwriter_lib/helpers.py @@ -49,16 +49,12 @@ def get_builder(builder_file_name): # Owais Lone : To get quick access to icons and stuff. -def get_media_file(media_file_name): +def get_media_file(media_file_path): """Return the full path of a given filename under the media dir (starts with file:///) """ - media_filename = get_data_file('media', '%s' % (media_file_name,)) - if not os.path.exists(media_filename): - media_filename = None - - return "file:///" + media_filename + return "file:///" + get_media_path(media_file_path) def get_media_path(media_file_name): @@ -66,19 +62,26 @@ def get_media_path(media_file_name): (doesn't start with file:///) """ - media_filename = get_data_file('media', '%s' % (media_file_name,)) - if not os.path.exists(media_filename): - media_filename = None - return media_filename + media_path = get_data_file('media', '%s' % (media_file_name,)) + if not os.path.exists(media_path): + media_path = None + return media_path + + +def get_css_path(css_file_name): + """Return the full path of a given filename under the css dir + (doesn't start with file:///) + """ + return get_media_path("css/{}".format(css_file_name)) def get_script_path(script_file_name): """Return the full path of a given filename under the script dir """ - script_filename = get_data_file('lua', '%s' % (script_file_name,)) - if not os.path.exists(script_filename): - script_filename = None - return script_filename + script_path = get_data_file('lua', '%s' % (script_file_name,)) + if not os.path.exists(script_path): + script_path = None + return script_path class NullHandler(logging.Handler): From 52f1c9f6924f0f5ca1aae861d90beeecd80130dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Tue, 26 Mar 2019 14:20:43 +0000 Subject: [PATCH 09/14] Add back support for Arc, Arc-Darker and Arc-Dark themes --- data/media/css/gtk_arc.css | 5 +++++ data/media/css/gtk_arc_dark.css | 5 +++++ data/media/css/gtk_arc_darker.css | 5 +++++ data/media/css/web_arc.css | 18 ++++++++++++++++++ data/media/css/web_arc_dark.css | 18 ++++++++++++++++++ data/media/css/web_arc_darker.css | 1 + uberwriter/Theme.py | 7 +++++++ 7 files changed, 59 insertions(+) create mode 100644 data/media/css/gtk_arc.css create mode 100644 data/media/css/gtk_arc_dark.css create mode 100644 data/media/css/gtk_arc_darker.css create mode 100644 data/media/css/web_arc.css create mode 100644 data/media/css/web_arc_dark.css create mode 100644 data/media/css/web_arc_darker.css diff --git a/data/media/css/gtk_arc.css b/data/media/css/gtk_arc.css new file mode 100644 index 0000000..967c919 --- /dev/null +++ b/data/media/css/gtk_arc.css @@ -0,0 +1,5 @@ +@define-color foreground_color #3b3e45; +@define-color background_color #f5f6f7; +@define-color math_text_color #00364c; + +@import url("_gtk_base.css"); diff --git a/data/media/css/gtk_arc_dark.css b/data/media/css/gtk_arc_dark.css new file mode 100644 index 0000000..3edd842 --- /dev/null +++ b/data/media/css/gtk_arc_dark.css @@ -0,0 +1,5 @@ +@define-color foreground_color #d3dae3; +@define-color background_color #383c4a; +@define-color math_text_color #ffc9b3; + +@import url("_gtk_base.css"); diff --git a/data/media/css/gtk_arc_darker.css b/data/media/css/gtk_arc_darker.css new file mode 100644 index 0000000..44c667b --- /dev/null +++ b/data/media/css/gtk_arc_darker.css @@ -0,0 +1,5 @@ +@define-color foreground_color #3b3e45; +@define-color background_color #f5f6f7; +@define-color math_text_color #00364C; + +@import url("_gtk_base.css"); diff --git a/data/media/css/web_arc.css b/data/media/css/web_arc.css new file mode 100644 index 0000000..c5ccb04 --- /dev/null +++ b/data/media/css/web_arc.css @@ -0,0 +1,18 @@ +@import url("_web_base.css"); + +:root { + --text-color: #3b3e45; + --background-color: #f5f6f7; + --alt-background-color: #eceff2; + --link-color: #1a7bed; + --blockquote-text-color: #818894; + --blockquote-border-color: #d5d9dd; + --header-border-color: #e0e3e7; + --hr-background-color: #d7dbe0; + --table-tr-border-color: #bcc2c9; + --table-td-border-color: #d5d9dd; + --kbd-text-color: #5b626d; + --kbd-background-color: #f0f2f4; + --kbd-border-color: #bcc2c9; + --kbd-shadow-color: #8b949d; +} \ No newline at end of file diff --git a/data/media/css/web_arc_dark.css b/data/media/css/web_arc_dark.css new file mode 100644 index 0000000..b0c6a45 --- /dev/null +++ b/data/media/css/web_arc_dark.css @@ -0,0 +1,18 @@ +@import url("_web_base.css"); + +:root { + --text-color: #d3dae3; + --background-color: #383c4a; + --alt-background-color: #3d414f; + --link-color: #9ac6ff; + --blockquote-text-color: #8d949d; + --blockquote-border-color: #555967; + --header-border-color: #4a4e5c; + --hr-background-color: #535765; + --table-tr-border-color: #6c707e; + --table-td-border-color: #555967; + --kbd-text-color: #b3bac3; + --kbd-background-color: #3f4351; + --kbd-border-color: #6c707e; + --kbd-shadow-color: #9a9eac; +} \ No newline at end of file diff --git a/data/media/css/web_arc_darker.css b/data/media/css/web_arc_darker.css new file mode 100644 index 0000000..cc6a95e --- /dev/null +++ b/data/media/css/web_arc_darker.css @@ -0,0 +1 @@ +@import url("web_arc.css"); \ No newline at end of file diff --git a/uberwriter/Theme.py b/uberwriter/Theme.py index f0c87d1..c67ee3d 100644 --- a/uberwriter/Theme.py +++ b/uberwriter/Theme.py @@ -46,4 +46,11 @@ defaultThemes = [ get_css_path('web_adwaita.css'), False, 'Adwaita-dark'), Theme('Adwaita-dark', get_css_path('gtk_adwaita_dark.css'), get_css_path('web_adwaita_dark.css'), True, 'Adwaita'), + # https://github.com/NicoHood/arc-theme/tree/master/common/gtk-3.0/3.20/sass + Theme('Arc', get_css_path('gtk_arc.css'), + get_css_path('web_arc.css'), False, 'Arc-Dark'), + Theme('Arc-Darker', get_css_path('gtk_arc_darker.css'), + get_css_path('web_arc_darker.css'), False, 'Arc-Dark'), + Theme('Arc-Dark', get_css_path('gtk_arc_dark.css'), + get_css_path('web_arc_dark.css'), True, 'Arc'), ] From 95e6d89514635e3fabe663ebe6e43af08cc14108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Tue, 26 Mar 2019 14:21:12 +0000 Subject: [PATCH 10/14] Add support for HighContrast and HighContrastInverse themes --- data/media/css/gtk_high_contrast.css | 5 ++++ data/media/css/gtk_high_contrast_inverse.css | 5 ++++ data/media/css/web_high_contrast.css | 26 ++++++++++++++++++++ data/media/css/web_high_contrast_inverse.css | 26 ++++++++++++++++++++ uberwriter/Theme.py | 5 ++++ 5 files changed, 67 insertions(+) create mode 100644 data/media/css/gtk_high_contrast.css create mode 100644 data/media/css/gtk_high_contrast_inverse.css create mode 100644 data/media/css/web_high_contrast.css create mode 100644 data/media/css/web_high_contrast_inverse.css diff --git a/data/media/css/gtk_high_contrast.css b/data/media/css/gtk_high_contrast.css new file mode 100644 index 0000000..254215e --- /dev/null +++ b/data/media/css/gtk_high_contrast.css @@ -0,0 +1,5 @@ +@define-color foreground_color #000000; +@define-color background_color #ffffff; +@define-color math_text_color #000000; + +@import url("_gtk_base.css"); diff --git a/data/media/css/gtk_high_contrast_inverse.css b/data/media/css/gtk_high_contrast_inverse.css new file mode 100644 index 0000000..b9790d4 --- /dev/null +++ b/data/media/css/gtk_high_contrast_inverse.css @@ -0,0 +1,5 @@ +@define-color foreground_color #ffffff; +@define-color background_color #000000; +@define-color math_text_color #ffffff; + +@import url("_gtk_base.css"); diff --git a/data/media/css/web_high_contrast.css b/data/media/css/web_high_contrast.css new file mode 100644 index 0000000..b9db89e --- /dev/null +++ b/data/media/css/web_high_contrast.css @@ -0,0 +1,26 @@ +@import url("_web_base.css"); + +a { + text-decoration: underline; +} + +pre { + border: 1px solid; +} + +:root { + --text-color: #000000; + --background-color: #ffffff; + --alt-background-color: #ffffff; + --link-color: #000000; + --blockquote-text-color: #000000; + --blockquote-border-color: #000000; + --header-border-color: #000000; + --hr-background-color: #000000; + --table-tr-border-color: #000000; + --table-td-border-color: #000000; + --kbd-text-color: #000000; + --kbd-background-color: #ffffff; + --kbd-border-color: #000000; + --kbd-shadow-color: #000000; +} \ No newline at end of file diff --git a/data/media/css/web_high_contrast_inverse.css b/data/media/css/web_high_contrast_inverse.css new file mode 100644 index 0000000..646e1f0 --- /dev/null +++ b/data/media/css/web_high_contrast_inverse.css @@ -0,0 +1,26 @@ +@import url("_web_base.css"); + +a { + text-decoration: underline; +} + +pre { + border: 1px solid; +} + +:root { + --text-color: #ffffff; + --background-color: #000000; + --alt-background-color: #000000; + --link-color: #ffffff; + --blockquote-text-color: #ffffff; + --blockquote-border-color: #ffffff; + --header-border-color: #ffffff; + --hr-background-color: #ffffff; + --table-tr-border-color: #ffffff; + --table-td-border-color: #ffffff; + --kbd-text-color: #ffffff; + --kbd-background-color: #000000; + --kbd-border-color: #ffffff; + --kbd-shadow-color: #ffffff; +} \ No newline at end of file diff --git a/uberwriter/Theme.py b/uberwriter/Theme.py index c67ee3d..cd408bc 100644 --- a/uberwriter/Theme.py +++ b/uberwriter/Theme.py @@ -53,4 +53,9 @@ defaultThemes = [ get_css_path('web_arc_darker.css'), False, 'Arc-Dark'), Theme('Arc-Dark', get_css_path('gtk_arc_dark.css'), get_css_path('web_arc_dark.css'), True, 'Arc'), + # https://gitlab.gnome.org/GNOME/gtk/tree/master/gtk/theme/HighContrast + Theme('HighContrast', get_css_path('gtk_high_contrast.css'), + get_css_path('web_high_contrast.css'), False, 'HighContrastInverse'), + Theme('HighContrastInverse', get_css_path('gtk_high_contrast_inverse.css'), + get_css_path('web_high_contrast_inverse.css'), True, 'HighContrast'), ] From 152db98f8afec6ee251d1be71152c98f26ed9c40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Tue, 26 Mar 2019 14:24:58 +0000 Subject: [PATCH 11/14] Add script used to generate theme colors Theme colors are originally based on GitHub's theme. This script (slightly) offsets them to match the color pallete of the specified theme automatically, and prints them out. While the adjustments are meant to be minor, color contrast should still be verified. Finally, a few themes should not be automated in this way. For example, the high contrast themes are meant to be purely black & white. --- scripts/color_palette_generator.py | 102 +++++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 scripts/color_palette_generator.py diff --git a/scripts/color_palette_generator.py b/scripts/color_palette_generator.py new file mode 100644 index 0000000..5a2f50f --- /dev/null +++ b/scripts/color_palette_generator.py @@ -0,0 +1,102 @@ +#!/usr/bin/python3 +# +# Generates color palettes based on the specified background/foreground colors. +# +# Usage: python color_palette_generator.py #fg_hex #bg_hex light|dark +# +# The light variant is based on GitHub's style, while the dark variant is based on pre-existing UberWriter styles. +# +# Accessibility is not accounted for, so make sure to verify contrast: https://webaim.org/resources/contrastchecker/ + +import operator +import os +import sys + + +def hex_to_tuple(h): + return tuple(int(h.lstrip('#')[i:i + 2], 16) for i in (0, 2, 4)) + + +def tuple_to_hex(t): + (r, g, b) = t + if r < 0 or g < 0 or b < 0 or r > 255 or g > 255 or b > 255: + return '#%02x%02x%02x (clamped)' % tuple(map(lambda x: max(0, min(x, 255)), t)) + else: + return '#%02x%02x%02x' % t + + +def sub_tuples(t1, t2): + return tuple(map(operator.sub, t1, t2)) + + +if __name__ == '__main__': + if len(sys.argv) != 4: + print("Usage: {} foreground_color background_color light|dark\n" + + "Both colors must be in hexadecimal format, eg. #f6f5f4".format(os.path.basename(__file__))) + exit() + + target_foreground_color = hex_to_tuple(sys.argv[1]) + target_background_color = hex_to_tuple(sys.argv[2]) + dark = sys.argv[3] == "dark" + + gh_text_color = hex_to_tuple("#dbdbdb" if dark else "#24292e") + gh_background_color = hex_to_tuple("#353535" if dark else "#ffffff") + gh_alt_background_color = hex_to_tuple("#3a3a3a" if dark else "#f6f8fa") + gh_link_color = hex_to_tuple("#a2c7f8" if dark else "#0366d6") + gh_blockquote_text_color = hex_to_tuple("#959595" if dark else "#6a737d") + gh_blockquote_border_color = hex_to_tuple("#525252" if dark else "#dfe2e5") + gh_header_border_color = hex_to_tuple("#474747" if dark else "#eaecef") + gh_hr_background_color = hex_to_tuple("#505050" if dark else "#e1e4e8") + gh_table_tr_border_color = hex_to_tuple("#696969" if dark else "#c6cbd1") + gh_table_td_border_color = hex_to_tuple("#525252" if dark else "#dfe2e5") + gh_kbd_text_color = hex_to_tuple("#bbbbbb" if dark else "#444d56") + gh_kbd_background_color = hex_to_tuple("#3c3c3c" if dark else "#fafbfc") + gh_kbd_border_color = hex_to_tuple("#696969" if dark else "#c6cbd1") + gh_kbd_shadow_color = hex_to_tuple("#979797" if dark else "#959da5") + + text_color_diff = sub_tuples(gh_text_color, target_foreground_color) + background_color_diff = sub_tuples(gh_background_color, target_background_color) + + text_color = tuple_to_hex(target_foreground_color) + background_color = tuple_to_hex(target_background_color) + alt_background_color = tuple_to_hex(sub_tuples(gh_alt_background_color, background_color_diff)) + link_color = tuple_to_hex(sub_tuples(gh_link_color, text_color_diff)) + blockquote_text_color = tuple_to_hex(sub_tuples(gh_blockquote_text_color, text_color_diff)) + blockquote_border_color = tuple_to_hex(sub_tuples(gh_blockquote_border_color, background_color_diff)) + header_border_color = tuple_to_hex(sub_tuples(gh_header_border_color, background_color_diff)) + hr_background_color = tuple_to_hex(sub_tuples(gh_hr_background_color, background_color_diff)) + table_tr_border_color = tuple_to_hex(sub_tuples(gh_table_tr_border_color, background_color_diff)) + table_td_border_color = tuple_to_hex(sub_tuples(gh_table_td_border_color, background_color_diff)) + kbd_text_color = tuple_to_hex(sub_tuples(gh_kbd_text_color, text_color_diff)) + kbd_background_color = tuple_to_hex(sub_tuples(gh_kbd_background_color, background_color_diff)) + kbd_border_color = tuple_to_hex(sub_tuples(gh_kbd_border_color, background_color_diff)) + kbd_shadow_color = tuple_to_hex(sub_tuples(gh_kbd_shadow_color, background_color_diff)) + + print(("--text-color: {};\n" + + "--background-color: {};\n" + + "--alt-background-color: {};\n" + + "--link-color: {};\n" + + "--blockquote-text-color: {};\n" + + "--blockquote-border-color: {};\n" + + "--header-border-color: {};\n" + + "--hr-background-color: {};\n" + + "--table-tr-border-color: {};\n" + + "--table-td-border-color: {};\n" + + "--kbd-text-color: {};\n" + + "--kbd-background-color: {};\n" + + "--kbd-border-color: {};\n" + + "--kbd-shadow-color: {};\n").format( + text_color, + background_color, + alt_background_color, + link_color, + blockquote_text_color, + blockquote_border_color, + header_border_color, + hr_background_color, + table_tr_border_color, + table_td_border_color, + kbd_text_color, + kbd_background_color, + kbd_border_color, + kbd_shadow_color)) From bef52648c78aee478c2a7a965a1360afbfe227bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Tue, 26 Mar 2019 14:25:11 +0000 Subject: [PATCH 12/14] Remove hard-coded colors from MarkupBuffer Instead, use colors set in the theme. --- uberwriter/MarkupBuffer.py | 56 ++++++++++++++++----------------- uberwriter/UberwriterWindow.py | 6 +--- uberwriter_lib/AppWindow.py | 57 +++++++++++++++------------------- 3 files changed, 53 insertions(+), 66 deletions(-) diff --git a/uberwriter/MarkupBuffer.py b/uberwriter/MarkupBuffer.py index bbc762c..c413482 100644 --- a/uberwriter/MarkupBuffer.py +++ b/uberwriter/MarkupBuffer.py @@ -16,6 +16,7 @@ import re import gi + gi.require_version('Gtk', '3.0') from gi.repository import Gtk from gi.repository import Pango @@ -46,14 +47,10 @@ class MarkupBuffer(): self.normal_indent = self.text_buffer.create_tag('normal_indent', indent=100) - self.green_text = self.text_buffer.create_tag("greentext", - foreground="#00364C") + self.math_text = self.text_buffer.create_tag('math_text') - self.grayfont = self.text_buffer.create_tag('graytag', - foreground="gray") - - self.blackfont = self.text_buffer.create_tag('blacktag', - foreground="#222") + self.unfocused_text = self.text_buffer.create_tag('graytag', + foreground="gray") self.underline = self.text_buffer.create_tag("underline", underline=Pango.Underline.SINGLE) @@ -101,7 +98,8 @@ class MarkupBuffer(): self.table_env.set_property('pixels-above-lines', 0) self.table_env.set_property('pixels-below-lines', 0) - # self.ftag = self.TextBuffer.create_tag("pix_front", pixels_above_lines = 100) + self.update_style() + regex = { "ITALIC": re.compile(r"(\*|_)(.*?)\1", re.UNICODE), # *asdasd* // _asdasd asd asd_ "STRONG": re.compile(r"(\*\*|__)(.*?)\1", re.UNICODE), # **as das** // __asdasd asd ad a__ @@ -120,6 +118,13 @@ class MarkupBuffer(): "LINK": re.compile(r"\(http(.+?)\)") } + def update_style(self): + (found, color) = self.parent.get_style_context().lookup_color('math_text_color') + if not found: + (_, color) = self.parent.get_style_context().lookup_color('foreground_color') + + self.math_text.set_property("foreground", color.to_string()) + def markup_buffer(self, mode=0): buf = self.text_buffer @@ -178,13 +183,13 @@ class MarkupBuffer(): end_iter = buf.get_iter_at_offset(context_offset + match.end()) self.text_buffer.apply_tag(self.strikethrough, start_iter, end_iter) - self.text_buffer.remove_tag(self.green_text, context_start, context_end) + self.text_buffer.remove_tag(self.math_text, context_start, context_end) matches = re.finditer(self.regex["MATH"], text) for match in matches: start_iter = buf.get_iter_at_offset(context_offset + match.start()) end_iter = buf.get_iter_at_offset(context_offset + match.end()) - self.text_buffer.apply_tag(self.green_text, start_iter, end_iter) + self.text_buffer.apply_tag(self.math_text, start_iter, end_iter) for margin in self.rev_leftmargin: self.text_buffer.remove_tag(margin, context_start, context_end) @@ -266,15 +271,13 @@ class MarkupBuffer(): self.focusmode_highlight() def focusmode_highlight(self): - self.text_buffer.apply_tag( - self.grayfont, - self.text_buffer.get_start_iter(), - self.text_buffer.get_end_iter()) + start_document = self.text_buffer.get_start_iter() + end_document = self.text_buffer.get_end_iter() self.text_buffer.remove_tag( - self.blackfont, - self.text_buffer.get_start_iter(), - self.text_buffer.get_end_iter()) + self.unfocused_text, + start_document, + end_document) cursor = self.text_buffer.get_mark("insert") cursor_iter = self.text_buffer.get_iter_at_mark(cursor) @@ -293,9 +296,14 @@ class MarkupBuffer(): start_sentence = cursor_iter.copy() start_sentence.backward_sentence_start() + # grey out everything before self.text_buffer.apply_tag( - self.blackfont, - start_sentence, end_sentence) + self.unfocused_text, + self.text_buffer.get_start_iter(), start_sentence) + + self.text_buffer.apply_tag( + self.unfocused_text, + end_sentence, self.text_buffer.get_end_iter()) def set_multiplier(self, multiplier): self.multiplier = multiplier @@ -311,13 +319,3 @@ class MarkupBuffer(): new_margin = (lm - multiplier) + multiplier + multiplier * (i + 1) self.leftmargin[i].set_property("left-margin", 0 if new_margin < 0 else new_margin) self.leftmargin[i].set_property("indent", - (multiplier - 1) * (i + 1) - multiplier) - - def dark_mode(self, active=False): - if active: - self.green_text.set_property("foreground", "#FA5B0F") - self.grayfont.set_property("foreground", "#666") - self.blackfont.set_property("foreground", "#CCC") - else: - self.green_text.set_property("foreground", "#00364C") - self.grayfont.set_property("foreground", "gray") - self.blackfont.set_property("foreground", "#222") diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index 604e4ed..f3c4429 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -264,11 +264,7 @@ class UberwriterWindow(Gtk.ApplicationWindow): """Adjusts both the window and the CSD for the current theme. """ - theme = Theme.get_current() - if theme.is_dark: - self.markup_buffer.dark_mode(True) - else: - self.markup_buffer.dark_mode(False) + self.markup_buffer.update_style() # Reload preview if it exists, otherwise redraw contents of window (self) if self.preview_webview: diff --git a/uberwriter_lib/AppWindow.py b/uberwriter_lib/AppWindow.py index d25161a..3e446ae 100644 --- a/uberwriter_lib/AppWindow.py +++ b/uberwriter_lib/AppWindow.py @@ -16,13 +16,14 @@ from gettext import gettext as _ import gi +from uberwriter.Theme import Theme + gi.require_version('Gtk', '3.0') # pylint: disable=wrong-import-position from gi.repository import GLib, Gio, Gtk, Gdk, GdkPixbuf from uberwriter import UberwriterWindow from uberwriter.Settings import Settings from uberwriter_lib import set_up_logging -from uberwriter_lib import helpers from uberwriter_lib.PreferencesDialog import PreferencesDialog from . helpers import get_builder, get_media_path @@ -36,30 +37,6 @@ class Application(Gtk.Application): self.window = None self.settings = Settings.new() - def init(self): - """Init main application""" - - # set theme variant (dark/light) - dark = self.settings.get_value("dark-mode") - Gtk.Settings.get_default().set_property("gtk-application-prefer-dark-theme", dark) - - # set css for current theme - self.style_provider = Gtk.CssProvider() - - themes = { - "Arc": "arc_style.css", - "Arc-Dark": "arc_style.css", - "Arc-Darker": "arc_style.css", - } - - theme = Gtk.Settings.get_default().get_property("gtk-theme-name") - self.style_provider.load_from_path(helpers.get_media_path(themes.get(theme,"adwaita_style.css"))) - - Gtk.StyleContext.add_provider_for_screen( - Gdk.Screen.get_default(), self.style_provider, - Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION - ) - def do_startup(self, *args, **kwargs): Gtk.Application.do_startup(self) @@ -176,7 +153,7 @@ class Application(Gtk.Application): self.set_accels_for_action("app.save", ["s"]) self.set_accels_for_action("app.save_as", ["s"]) - self.init() + self.apply_current_theme() def do_activate(self, *args, **kwargs): # We only allow a single window and raise any existing ones @@ -209,6 +186,23 @@ class Application(Gtk.Application): self.activate() return 0 + def apply_current_theme(self): + # get current theme + theme = Theme.get_current() + + # set theme variant (dark/light) + Gtk.Settings.get_default().set_property( + "gtk-application-prefer-dark-theme", + GLib.Variant("b", theme.is_dark)) + + # set theme css + style_provider = Gtk.CssProvider() + style_provider.load_from_path(theme.gtk_css_path) + Gtk.StyleContext.add_provider_for_screen( + Gdk.Screen.get_default(), style_provider, + Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION + ) + def on_about(self, _action, _param): builder = get_builder('About') about_dialog = builder.get_object("AboutDialog") @@ -234,14 +228,13 @@ class Application(Gtk.Application): def on_dark_mode(self, action, value): action.set_state(value) - self.settings.set_value("dark-mode", - GLib.Variant("b", value)) - self.window.toggle_dark_mode(value) + self.settings.set_value("dark-mode", GLib.Variant("b", value)) # this changes the headerbar theme accordingly - self.dark_setting = Gtk.Settings.get_default() - self.dark_setting.set_property( - "gtk-application-prefer-dark-theme", value) + self.apply_current_theme() + + # adjust window for theme + self.window.apply_current_theme() def on_focus_mode(self, action, value): action.set_state(value) From 6d7bfe82cb21fe6e5250f2653e50ba189d79ef40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Genov=C3=A9s?= Date: Tue, 26 Mar 2019 22:02:05 +0100 Subject: [PATCH 13/14] unclutter the terminal output --- uberwriter/UberwriterWindow.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index f3c4429..dd993d4 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -842,7 +842,6 @@ class UberwriterWindow(Gtk.ApplicationWindow): return True def show_text_editor(self): - print(self.scrolled_window.get_child()) self.scrolled_window.remove(self.scrolled_window.get_child()) self.scrolled_window.add(self.text_editor) self.text_editor.show() @@ -877,9 +876,13 @@ class UberwriterWindow(Gtk.ApplicationWindow): '--to=html5', '--mathjax', '--css=' + Theme.get_current().web_css_path, + '--quiet', '--lua-filter=' + helpers.get_script_path('relative_to_absolute.lua'), '--lua-filter=' + helpers.get_script_path('task-list.lua')] + # TODO: find a way to pass something like this instead of the quiet arg + #'--metadata pagetitle="test"', + proc = subprocess.Popen( args, stdin=subprocess.PIPE, stdout=subprocess.PIPE) From 3f87bd1d22019c6a34bcd7960854727e8029e3a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Silva?= Date: Wed, 27 Mar 2019 02:29:29 +0000 Subject: [PATCH 14/14] Add Hemingway Mode Closes #40 --- data/ui/Menu.ui | 4 ++++ data/ui/Shortcuts.ui | 11 +++++++++-- uberwriter/UberwriterTextEditor.py | 9 +++++++++ uberwriter/UberwriterWindow.py | 10 ++++++++-- uberwriter_lib/AppWindow.py | 15 +++++++++++++-- 5 files changed, 43 insertions(+), 6 deletions(-) diff --git a/data/ui/Menu.ui b/data/ui/Menu.ui index 55319df..e07092c 100644 --- a/data/ui/Menu.ui +++ b/data/ui/Menu.ui @@ -6,6 +6,10 @@ Focus Mode app.focus_mode + + Hemingway Mode + app.hemingway_mode + Preview app.preview diff --git a/data/ui/Shortcuts.ui b/data/ui/Shortcuts.ui index d3c6dee..3234844 100644 --- a/data/ui/Shortcuts.ui +++ b/data/ui/Shortcuts.ui @@ -55,20 +55,27 @@ + True + Hemingway mode + <Primary>t + + + + True Fullscreen F11 - + True Preview <Primary>p - + True Search <Primary>f diff --git a/uberwriter/UberwriterTextEditor.py b/uberwriter/UberwriterTextEditor.py index 6965b54..63673d4 100644 --- a/uberwriter/UberwriterTextEditor.py +++ b/uberwriter/UberwriterTextEditor.py @@ -122,6 +122,9 @@ class TextEditor(Gtk.TextView): self.not_undoable_action = False self.undo_in_progress = False + self.can_delete = True + self.connect('key-press-event', self.on_key_press_event) + self.format_shortcuts = FormatShortcuts(self.get_buffer(), self) self.connect('insert-italic', self.set_italic) @@ -393,6 +396,12 @@ class TextEditor(Gtk.TextView): toggles self.not_undoable_action""" self.not_undoable_action = False + def on_key_press_event(self, widget, event): + if widget == self and not self.can_delete: + return event.keyval == Gdk.KEY_BackSpace or event.keyval == Gdk.KEY_Delete + else: + return False + def set_italic(self, _widget, _data=None): """Ctrl + I""" self.format_shortcuts.italic() diff --git a/uberwriter/UberwriterWindow.py b/uberwriter/UberwriterWindow.py index dd993d4..188e857 100644 --- a/uberwriter/UberwriterWindow.py +++ b/uberwriter/UberwriterWindow.py @@ -358,7 +358,7 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.update_line_and_char_count() self.check_scroll(self.text_buffer.get_insert()) - def toggle_fullscreen(self, state): + def set_fullscreen(self, state): """Puts the application in fullscreen mode and show/hides the poller for motion in the top border @@ -376,7 +376,7 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.text_editor.grab_focus() - def set_focusmode(self, state): + def set_focus_mode(self, state): """toggle focusmode """ @@ -408,6 +408,12 @@ class UberwriterWindow(Gtk.ApplicationWindow): self.spell_checker._misspelled.set_property('underline', 4) _click_event = self.text_editor.disconnect(self.click_event) + def set_hemingway_mode(self, state): + """toggle hemingwaymode + """ + self.text_editor.can_delete = not state.get_boolean() + self.text_editor.grab_focus() + def on_focusmode_click(self, *_args): """call MarkupBuffer to mark as bold the line where the cursor is """ diff --git a/uberwriter_lib/AppWindow.py b/uberwriter_lib/AppWindow.py index 3e446ae..f286761 100644 --- a/uberwriter_lib/AppWindow.py +++ b/uberwriter_lib/AppWindow.py @@ -72,6 +72,12 @@ class Application(Gtk.Application): action.connect("change-state", self.on_focus_mode) self.add_action(action) + action = Gio.SimpleAction.new_stateful("hemingway_mode", + None, + GLib.Variant.new_boolean(False)) + action.connect("change-state", self.on_hemingway_mode) + self.add_action(action) + action = Gio.SimpleAction.new_stateful("fullscreen", None, GLib.Variant.new_boolean(False)) @@ -143,6 +149,7 @@ class Application(Gtk.Application): # Shortcuts self.set_accels_for_action("app.focus_mode", ["d"]) + self.set_accels_for_action("app.hemingway_mode", ["t"]) self.set_accels_for_action("app.fullscreen", ["F11"]) self.set_accels_for_action("app.preview", ["p"]) self.set_accels_for_action("app.search", ["f"]) @@ -238,11 +245,15 @@ class Application(Gtk.Application): def on_focus_mode(self, action, value): action.set_state(value) - self.window.set_focusmode(value) + self.window.set_focus_mode(value) + + def on_hemingway_mode(self, action, value): + action.set_state(value) + self.window.set_hemingway_mode(value) def on_fullscreen(self, action, value): action.set_state(value) - self.window.toggle_fullscreen(value) + self.window.set_fullscreen(value) def on_preview(self, action, value): action.set_state(value)