From 695c5a09d9b4bda175b16c545ce453f3a338cc6c Mon Sep 17 00:00:00 2001 From: abakkk Date: Thu, 28 Mar 2019 02:00:57 +0100 Subject: [PATCH 1/5] rework text shape before writing --- draw.js | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/draw.js b/draw.js index 4ebcaad..626a273 100644 --- a/draw.js +++ b/draw.js @@ -52,6 +52,7 @@ const LINECAP_ICON_PATH = Extension.dir.get_child('icons').get_child('linecap-sy const DASHED_LINE_ICON_PATH = Extension.dir.get_child('icons').get_child('dashed-line-symbolic.svg').get_path(); var Shapes = { NONE: 0, LINE: 1, ELLIPSE: 2, RECTANGLE: 3, TEXT: 4 }; +var TextState = { DRAWING: 0, WRITING: 1 }; var ShapeNames = { 0: "Free drawing", 1: "Line", 2: "Ellipse", 3: "Rectangle", 4: "Text" }; var LineCapNames = { 0: 'Butt', 1: 'Round', 2: 'Square' }; var LineJoinNames = { 0: 'Miter', 1: 'Round', 2: 'Bevel' }; @@ -159,7 +160,7 @@ var DrawingArea = new Lang.Class({ let shiftPressed = event.has_shift_modifier(); // stop writing - if (this.currentElement && this.currentElement.shape == Shapes.TEXT) { + if (this.currentElement && this.currentElement.shape == Shapes.TEXT && this.currentElement.state == TextState.WRITING ) { this._stopWriting(); } @@ -196,7 +197,7 @@ var DrawingArea = new Lang.Class({ this.emitter.emit('stop-drawing'); return Clutter.EVENT_STOP; - } else if (this.currentElement && this.currentElement.shape == Shapes.TEXT) { + } else if (this.currentElement && this.currentElement.shape == Shapes.TEXT && this.currentElement.state == TextState.WRITING) { if (event.get_key_symbol() == Clutter.KEY_BackSpace) { this.currentElement.text = this.currentElement.text.slice(0, -1); this._updateCursorTimeout(); @@ -251,7 +252,7 @@ var DrawingArea = new Lang.Class({ this.smoothedStroke = this.settings.get_boolean('smoothed-stroke'); this.currentElement = new DrawingElement ({ - shape: this.currentShape == Shapes.TEXT ? Shapes.RECTANGLE : this.currentShape, + shape: this.currentShape, color: this.currentColor.to_string(), line: { lineWidth: this.currentLineWidth, lineJoin: this.currentLineJoin, lineCap: this.currentLineCap }, dash: { array: this.dashedLine ? this.dashArray : [0, 0] , offset: this.dashedLine ? this.dashOffset : 0 }, @@ -263,6 +264,14 @@ var DrawingArea = new Lang.Class({ points: [[startX, startY]] }); + if (this.currentShape == Shapes.TEXT) { + this.currentElement.line = { lineWidth: 1, lineJoin: 0, lineCap: 0 }; + this.currentElement.dash = { array: [1, 1] , offset: 0 }; + this.currentElement.fill = false; + this.currentElement.text = _("Text"); + this.currentElement.state = TextState.DRAWING; + } + this.motionHandler = this.connect('motion-event', (actor, event) => { let coords = event.get_coords(); let [s, x, y] = this.transform_stage_point(coords[0], coords[1]); @@ -289,11 +298,12 @@ var DrawingArea = new Lang.Class({ Math.hypot(this.currentElement.points[1][0] - this.currentElement.points[0][0], this.currentElement.points[1][1] - this.currentElement.points[0][1]) > 3)) { // start writing - if (this.currentShape == Shapes.TEXT) { - this.currentElement.shape = Shapes.TEXT; + if (this.currentElement.shape == Shapes.TEXT && this.currentElement.state == TextState.DRAWING) { + this.currentElement.state = TextState.WRITING; this.currentElement.text = ''; this.emitter.emit('show-osd', _("Type your text\nand press Enter"), null); this._updateCursorTimeout(); + this.textHasCursor = true; this._redisplay(); return; } @@ -310,7 +320,7 @@ var DrawingArea = new Lang.Class({ return; if (this.currentElement.shape == Shapes.NONE) this.currentElement.addPoint(x, y, this.smoothedStroke); - else if (this.currentElement.shape == Shapes.RECTANGLE && (controlPressed || this.currentElement.transform.active)) + else if ((this.currentElement.shape == Shapes.RECTANGLE || this.currentElement.shape == Shapes.TEXT) && (controlPressed || this.currentElement.transform.active)) this.currentElement.transformRectangle(x, y); else if (this.currentElement.shape == Shapes.ELLIPSE && (controlPressed || this.currentElement.transform.active)) this.currentElement.transformEllipse(x, y); @@ -543,9 +553,9 @@ var DrawingArea = new Lang.Class({ saveAsSvg: function() { // stop drawing or writing - if (this.currentElement && this.currentElement.shape == Shapes.TEXT) { + if (this.currentElement && this.currentElement.shape == Shapes.TEXT && this.currentElement.state == TextState.WRITING) { this._stopWriting(); - } else if (this.currentElement && this.currentShape != Shapes.TEXT) { + } else if (this.currentElement && this.currentElement.shape != Shapes.TEXT) { this._stopDrawing(); } @@ -706,6 +716,8 @@ var DrawingElement = new Lang.Class({ } else if (shape == Shapes.TEXT && points.length == 2) { this.rotate(cr, trans.angle, trans.center[0], trans.center[1]); + if (this.state == TextState.DRAWING) + cr.rectangle(points[0][0], points[0][1], points[1][0] - points[0][0], points[1][1] - points[0][1]); cr.selectFontFace(this.font.family, this.font.style, this.font.weight); cr.setFontSize(Math.abs(points[1][1] - points[0][1])); cr.moveTo(Math.min(points[0][0], points[1][0]), Math.max(points[0][1], points[1][1])); From 82c45f4cc1c5f30f0828583de5b71a7091fe038c Mon Sep 17 00:00:00 2001 From: abakkk Date: Thu, 28 Mar 2019 14:59:14 +0100 Subject: [PATCH 2/5] rework of prefs --- locale/draw-on-your-screen.pot | 39 ++++++++---- prefs.js | 108 ++++++++++++++++++++++++--------- 2 files changed, 107 insertions(+), 40 deletions(-) diff --git a/locale/draw-on-your-screen.pot b/locale/draw-on-your-screen.pot index ef0631d..5a5fee2 100644 --- a/locale/draw-on-your-screen.pot +++ b/locale/draw-on-your-screen.pot @@ -17,6 +17,14 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +# add your name here, for example: +# "Aïssata\n" +# "Ali\n" +# "" +# It will be displayed in About page +msgid "Translators" +msgstr "" + #: extension.js msgid "Leaving drawing mode" msgstr "" @@ -90,8 +98,17 @@ msgstr "" msgid "Dashed" msgstr "" +msgid "Color" +msgstr "" + #: prefs.js +msgid "Preferences" +msgstr "" + +msgid "About" +msgstr "" + # GLOBAL_KEYBINDINGS msgid "Enter/leave drawing mode" @@ -231,13 +248,20 @@ msgstr "" msgid "Escape key" msgstr "" -# +# About page -msgid "" -"Start drawing with Super+Alt+D\n" -"Then save your beautiful work by taking a screenshot" +# you are free to translate the extension name +#msgid "Draw On You Screen" +#msgstr "" + +msgid "Version %s" msgstr "" +msgid "Start drawing with Super+Alt+D and save your beautiful work by taking a screenshot" +msgstr "" + +# Prefs page + msgid "Global" msgstr "" @@ -284,11 +308,4 @@ msgid "" "(See \"Add a drawing background\" or edit the SVG file afterwards)" msgstr "" -msgid "" -"This program comes with ABSOLUTELY NO WARRANTY.\n" -"See the GNU General Public License, version 2 or later for details." -msgstr "" -msgid "Author" -msgstr "" diff --git a/prefs.js b/prefs.js index 922437d..890ec9d 100644 --- a/prefs.js +++ b/prefs.js @@ -23,12 +23,14 @@ const GObject = imports.gi.GObject; const Gtk = imports.gi.Gtk; const Lang = imports.lang; +const Mainloop = imports.mainloop; const ExtensionUtils = imports.misc.extensionUtils; const Extension = ExtensionUtils.getCurrentExtension(); const Convenience = Extension.imports.convenience; const Metadata = Extension.metadata; const _ = imports.gettext.domain(Extension.metadata["gettext-domain"]).gettext; +const _GTK = imports.gettext.domain('gtk30').gettext; const MARGIN = 10; @@ -92,6 +94,82 @@ function buildPrefsWidget() { return prefsPage; } +function buildPrefsWidget() { + let topStack = new TopStack(); + let switcher = new Gtk.StackSwitcher({halign: Gtk.Align.CENTER, visible: true, stack: topStack}); + Mainloop.timeout_add(0, () => { + let window = topStack.get_toplevel(); + window.resize(720,500); + let headerBar = window.get_titlebar(); + headerBar.custom_title = switcher; + return false; + }); + + topStack.show_all(); + return topStack; +} + +const TopStack = new GObject.Class({ + Name: 'DrawOnYourScreenTopStack', + GTypeName: 'DrawOnYourScreenTopStack', + Extends: Gtk.Stack, + + _init: function(params) { + this.parent({ transition_type: 1, transition_duration: 500, expand: true }); + this.prefsPage = new PrefsPage(); + this.add_titled(this.prefsPage, 'prefs', _("Preferences")); + this.aboutPage = new AboutPage(); + this.add_titled(this.aboutPage, 'about', _("About")); + } +}); + +const AboutPage = new GObject.Class({ + Name: 'DrawOnYourScreenAboutPage', + GTypeName: 'DrawOnYourScreenAboutPage', + Extends: Gtk.ScrolledWindow, + + _init: function(params) { + this.parent(); + + let vbox= new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL, margin: MARGIN*3 }); + this.add(vbox); + + let name = " " + _(Metadata.name) + ""; + let version = _("Version %s").format(Metadata.version.toString()); + let description = _(Metadata.description); + let link = "" + Metadata.url + ""; + let licenceName = _GTK("GNU General Public License, version 2 or later"); + let licenceLink = "https://www.gnu.org/licenses/old-licenses/gpl-2.0.html"; + let licence = "" + _GTK("This program comes with absolutely no warranty.\nSee the %s for details.").format(licenceLink, licenceName) + ""; + + let aboutLabel = new Gtk.Label({ wrap: true, justify: 2, use_markup: true, label: + name + "\n\n" + version + "\n\n" + description + "\n\n" + link + "\n\n" + licence + "\n" }); + + vbox.add(aboutLabel); + + let creditBox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL, margin: 2*MARGIN }); + let leftBox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); + let rightBox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); + let leftLabel = new Gtk.Label({ wrap: true, valign: 1, halign: 2, justify: 1, use_markup: true, label: "" + _GTK("Created by") + "" }); + let rightLabel = new Gtk.Label({ wrap: true, valign: 1, halign: 1, justify: 0, use_markup: true, label: "Abakkk" }); + leftBox.pack_start(leftLabel, true, true, 0); + rightBox.pack_start(rightLabel, true, true, 0); + creditBox.pack_start(leftBox, true, true, 5); + creditBox.pack_start(rightBox, true, true, 5); + vbox.add(creditBox); + + if (_("Translators") != "Translators") { + leftBox.pack_start(new Gtk.Label(), true, true, 0); + rightBox.pack_start(new Gtk.Label(), true, true, 0); + leftLabel = new Gtk.Label({ wrap: true, valign: 1, halign: 2, justify: 1, use_markup: true, label: "" + _GTK("Translated by") + "" }); + rightLabel = new Gtk.Label({ wrap: true, valign: 1, halign: 1, justify: 0, use_markup: true, label: "" + _("Translators") + "" }); + leftBox.pack_start(leftLabel, true, true, 0); + rightBox.pack_start(rightLabel, true, true, 0); + } + } + +}); + const PrefsPage = new GObject.Class({ Name: 'DrawOnYourScreenPrefsPage', GTypeName: 'DrawOnYourScreenPrefsPage', @@ -105,13 +183,7 @@ const PrefsPage = new GObject.Class({ let box = new Gtk.Box({orientation: Gtk.Orientation.VERTICAL, margin: MARGIN*3 }); this.add(box); - let textBox1 = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL, margin: MARGIN }); - let text1 = new Gtk.Label({ wrap: true, justify: 2, use_markup: true, - label: " " + _("Start drawing with Super+Alt+D\nThen save your beautiful work by taking a screenshot") + "" }); - textBox1.pack_start(text1, false, false, 0); - box.add(textBox1); - - let listBox = new Gtk.ListBox({ selection_mode: 0, hexpand: true, margin_top: 2*MARGIN, margin_bottom: 2*MARGIN }); + let listBox = new Gtk.ListBox({ selection_mode: 0, hexpand: true }); box.add(listBox); let styleContext = listBox.get_style_context(); @@ -226,28 +298,6 @@ const PrefsPage = new GObject.Class({ noteBox.pack_start(noteLabel, true, true, 4); listBox.add(noteBox); - this.addSeparator(listBox); - - let licence = _("This program comes with ABSOLUTELY NO WARRANTY.\nSee the GNU General Public License, version 2 or later for details."); - - let textBox2 = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); - let text2 = new Gtk.Label({ wrap: true, justify: 2, use_markup: true, - label: "Version" + " " + Metadata.version +"\n\n" + "" + Metadata.url + "" + "\n\n" + licence + "\n" }); - textBox2.pack_start(text2, false, false, 0); - - let creditBox = new Gtk.Box({ orientation: Gtk.Orientation.HORIZONTAL }); - let leftBox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); - let rightBox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); - let leftLabel = new Gtk.Label({ wrap: true, valign: 1, halign: 2, justify: 1, use_markup: true, label: "" + _("Author") + ":" }); - let rightLabel = new Gtk.Label({ wrap: true, valign: 1, halign: 1, justify: 0, use_markup: true, label: "Abakkk" }); - leftBox.pack_start(leftLabel, true, true, 0); - rightBox.pack_start(rightLabel, true, true, 0); - creditBox.pack_start(leftBox, true, true, 5); - creditBox.pack_start(rightBox, true, true, 5); - textBox2.pack_start(creditBox, false, false, 0); - - box.add(textBox2); - let children = listBox.get_children(); for (let i = 0; i < children.length; i++) { if (children[i].activatable) From 14205295fc463fa512af443cfc6571950d96b2cc Mon Sep 17 00:00:00 2001 From: abakkk Date: Thu, 28 Mar 2019 15:26:10 +0100 Subject: [PATCH 3/5] add svg attributes in pot --- draw.js | 15 ++++++----- locale/draw-on-your-screen.pot | 48 ++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+), 7 deletions(-) diff --git a/draw.js b/draw.js index 626a273..de707c5 100644 --- a/draw.js +++ b/draw.js @@ -453,17 +453,17 @@ var DrawingArea = new Lang.Class({ incrementLineWidth: function(increment) { this.currentLineWidth = Math.max(this.currentLineWidth + increment, 1); - this.emitter.emit('show-osd', this.currentLineWidth + "px", this.currentLineWidth); + this.emitter.emit('show-osd', this.currentLineWidth + " " + _("px"), this.currentLineWidth); }, toggleLineJoin: function() { this.currentLineJoin = this.currentLineJoin == 2 ? 0 : this.currentLineJoin + 1; - this.emitter.emit('show-osd', LineJoinNames[this.currentLineJoin], null); + this.emitter.emit('show-osd', _(LineJoinNames[this.currentLineJoin]), null); }, toggleLineCap: function() { this.currentLineCap = this.currentLineCap == 2 ? 0 : this.currentLineCap + 1; - this.emitter.emit('show-osd', LineCapNames[this.currentLineCap], null); + this.emitter.emit('show-osd', _(LineCapNames[this.currentLineCap]), null); }, toggleFontWeight: function() { @@ -472,7 +472,7 @@ var DrawingArea = new Lang.Class({ this.currentElement.font.weight = this.currentFontWeight; this._redisplay(); } - this.emitter.emit('show-osd', `${FontWeightNames[this.currentFontWeight]}`, null); + this.emitter.emit('show-osd', `${_(FontWeightNames[this.currentFontWeight])}`, null); }, toggleFontStyle: function() { @@ -481,7 +481,7 @@ var DrawingArea = new Lang.Class({ this.currentElement.font.style = this.currentFontStyle; this._redisplay(); } - this.emitter.emit('show-osd', `${FontStyleNames[this.currentFontStyle]}`, null); + this.emitter.emit('show-osd', `${_(FontStyleNames[this.currentFontStyle])}`, null); }, toggleFontFamily: function() { @@ -491,7 +491,7 @@ var DrawingArea = new Lang.Class({ this.currentElement.font.family = currentFontFamily; this._redisplay(); } - this.emitter.emit('show-osd', `${currentFontFamily}`, null); + this.emitter.emit('show-osd', `${_(currentFontFamily)}`, null); }, toggleHelp: function() { @@ -1075,6 +1075,7 @@ var DrawingMenu = new Lang.Class({ this._addSwitchItem(lineSection, _("Dashed"), dashedLineIcon, this.area, 'dashedLine'); this._addSeparator(lineSection); this.menu.addMenuItem(lineSection); + lineSection.itemActivated = () => {}; this.lineSection = lineSection; let fontSection = new PopupMenu.PopupMenuSection(); @@ -1140,7 +1141,7 @@ var DrawingMenu = new Lang.Class({ _addSliderItem: function(menu, target, targetProperty) { let item = new PopupMenu.PopupBaseMenuItem({ activate: false }); - let label = new St.Label({ text: target[targetProperty] + " px", style_class: 'draw-on-your-screen-menu-slider-label' }); + let label = new St.Label({ text: target[targetProperty] + " " + _("px"), style_class: 'draw-on-your-screen-menu-slider-label' }); let slider = new Slider.Slider(target[targetProperty] / 50); slider.connect('value-changed', (slider, value, property) => { diff --git a/locale/draw-on-your-screen.pot b/locale/draw-on-your-screen.pot index 5a5fee2..eb1d9ae 100644 --- a/locale/draw-on-your-screen.pot +++ b/locale/draw-on-your-screen.pot @@ -309,3 +309,51 @@ msgid "" msgstr "" +# The following words refer to SVG attributes. +# You have the choice to translate or not + +#msgid "Butt" +#msgstr "" + +#msgid "Round" +#msgstr "" + +#msgid "Square" +#msgstr "" + +#msgid "Miter" +#msgstr "" + +#msgid "Bevel" +#msgstr "" + +#msgid "Normal" +#msgstr "" + +#msgid "Bold" +#msgstr "" + +#msgid "Italic" +#msgstr "" + +#msgid "Oblique" +#msgstr "" + +#msgid "Sans-Serif" +#msgstr "" + +#msgid "Serif" +#msgstr "" + +#msgid "Monospace" +#msgstr "" + +#msgid "Cursive" +#msgstr "" + +#msgid "Fantasy" +#msgstr "" + +#msgid "px" +#msgstr "" + From d2c285154b94a34add3b42d240972d50cb06c6c4 Mon Sep 17 00:00:00 2001 From: abakkk Date: Thu, 28 Mar 2019 22:01:39 +0100 Subject: [PATCH 4/5] add panel indicator and prefs to disable osd notifications and indicator --- draw.js | 2 +- extension.js | 68 +++++++++++++++--- locale/draw-on-your-screen.pot | 6 ++ prefs.js | 30 ++++++-- schemas/gschemas.compiled | Bin 3140 -> 3256 bytes ...extensions.draw-on-your-screen.gschema.xml | 10 +++ 6 files changed, 103 insertions(+), 13 deletions(-) diff --git a/draw.js b/draw.js index de707c5..cca7194 100644 --- a/draw.js +++ b/draw.js @@ -506,7 +506,6 @@ var DrawingArea = new Lang.Class({ this.buttonPressedHandler = this.connect('button-press-event', this._onButtonPressed.bind(this)); this._onKeyboardPopupMenuHandler = this.connect('popup-menu', this._onKeyboardPopupMenu.bind(this)); this.scrollHandler = this.connect('scroll-event', this._onScroll.bind(this)); - this.selectShape(Shapes.NONE); this.get_parent().set_background_color(this.hasBackground ? this.activeBackgroundColor : null); this._updateStyle(); }, @@ -542,6 +541,7 @@ var DrawingArea = new Lang.Class({ this.currentElement = null; this._stopCursorTimeout(); + this.currentShape = Shapes.NONE; this.dashedLine = false; this.fill = false; this._redisplay(); diff --git a/extension.js b/extension.js index 176c37d..e928394 100644 --- a/extension.js +++ b/extension.js @@ -25,8 +25,11 @@ const Lang = imports.lang; const Meta = imports.gi.Meta; const Shell = imports.gi.Shell; const St = imports.gi.St; + const Main = imports.ui.main; const OsdWindow = imports.ui.osdWindow; +const PanelMenu = imports.ui.panelMenu; + const Extension = imports.misc.extensionUtils.getCurrentExtension(); const Convenience = Extension.imports.convenience; const Draw = Extension.imports.draw; @@ -78,6 +81,9 @@ var AreaManager = new Lang.Class({ this.updateAreas(); this.monitorChangedHandler = Main.layoutManager.connect('monitors-changed', this.updateAreas.bind(this)); + this.updateIndicator(); + this.indicatorSettingHandler = this.settings.connect('changed::indicator-disabled', this.updateIndicator.bind(this)); + this.desktopSettingHandler = this.settings.connect('changed::drawing-on-desktop', this.onDesktopSettingChanged.bind(this)); this.persistentSettingHandler = this.settings.connect('changed::persistent-drawing', this.onPersistentSettingChanged.bind(this)); @@ -105,6 +111,15 @@ var AreaManager = new Lang.Class({ this.areas[Main.layoutManager.primaryIndex].saveAsJson(); }, + updateIndicator: function() { + if (this.indicator) { + this.indicator.disable(); + this.indicator = null; + } + if (!this.settings.get_boolean('indicator-disabled')) + this.indicator = new DrawingIndicator(); + }, + updateAreas: function() { if (this.activeArea) this.toggleDrawing(); @@ -264,8 +279,8 @@ var AreaManager = new Lang.Class({ global.display.set_cursor(Meta.Cursor.DEFAULT); else if (global.screen && global.screen.set_cursor) global.screen.set_cursor(Meta.Cursor.DEFAULT); - - Main.osdWindowManager.show(activeIndex, this.leaveGicon, _("Leaving drawing mode"), null); + if (!this.osdDisabled) + Main.osdWindowManager.show(activeIndex, this.leaveGicon, _("Leaving drawing mode"), null); } else { // avoid to deal with Meta changes (global.display/global.screen) let currentIndex = Main.layoutManager.monitors.indexOf(Main.layoutManager.currentMonitor); @@ -287,16 +302,24 @@ var AreaManager = new Lang.Class({ global.display.set_cursor(Meta.Cursor.POINTING_HAND); else if (global.screen && global.screen.set_cursor) global.screen.set_cursor(Meta.Cursor.POINTING_HAND); - - // increase OSD display time - let hideTimeoutSave = OsdWindow.HIDE_TIMEOUT; - OsdWindow.HIDE_TIMEOUT = 2000; - Main.osdWindowManager.show(currentIndex, this.enterGicon, _("Press Ctrl + F1 for help") + "\n\n" + _("Entering drawing mode"), null); - OsdWindow.HIDE_TIMEOUT = hideTimeoutSave; + + this.osdDisabled = this.settings.get_boolean('osd-disabled'); + if (!this.osdDisabled) { + // increase OSD display time + let hideTimeoutSave = OsdWindow.HIDE_TIMEOUT; + OsdWindow.HIDE_TIMEOUT = 2000; + Main.osdWindowManager.show(currentIndex, this.enterGicon, _("Press Ctrl + F1 for help") + "\n\n" + _("Entering drawing mode"), null); + OsdWindow.HIDE_TIMEOUT = hideTimeoutSave; + } } + + if (this.indicator) + this.indicator.sync(this.activeArea != null); }, showOsd: function(emitter, label, level, maxLevel) { + if (this.osdDisabled) + return; let activeIndex = this.areas.indexOf(this.activeArea); if (activeIndex != -1) { Main.osdWindowManager.show(activeIndex, this.enterGicon, label, level, maxLevel); @@ -326,6 +349,10 @@ var AreaManager = new Lang.Class({ Main.layoutManager.disconnect(this.monitorChangedHandler); this.monitorChangedHandler = null; } + if (this.indicatorSettingHandler) { + this.settings.disconnect(this.indicatorSettingHandler); + this.indicatorSettingHandler = null; + } if (this.desktopSettingHandler) { this.settings.disconnect(this.desktopSettingHandler); this.desktopSettingHandler = null; @@ -340,6 +367,31 @@ var AreaManager = new Lang.Class({ Main.wm.removeKeybinding('toggle-drawing'); Main.wm.removeKeybinding('erase-drawing'); this.removeAreas(); + if (this.indicator) + this.indicator.disable(); + } +}); + +var DrawingIndicator = new Lang.Class({ + Name: 'DrawOnYourScreenIndicator', + + _init: function() { + let [menuAlignment, dontCreateMenu] = [0, true]; + this.button = new PanelMenu.Button(menuAlignment, "Drawing Indicator", dontCreateMenu); + Main.panel.addToStatusArea('draw-on-your-screen-indicator', this.button); + + this.icon = new St.Icon({ icon_name: 'applications-graphics-symbolic', + style_class: 'system-status-icon screencast-indicator' }); + this.button.actor.add_child(this.icon); + this.button.actor.visible = false; + }, + + sync: function(visible) { + this.button.actor.visible = visible; + }, + + disable: function() { + this.button.destroy(); } }); diff --git a/locale/draw-on-your-screen.pot b/locale/draw-on-your-screen.pot index eb1d9ae..eb936e2 100644 --- a/locale/draw-on-your-screen.pot +++ b/locale/draw-on-your-screen.pot @@ -277,6 +277,12 @@ msgstr "" msgid "Persistent drawing through session restart" msgstr "" +msgid "Disable on-screen notifications" +msgstr "" + +msgid "Disable panel indicator" +msgstr "" + msgid "Internal" msgstr "" diff --git a/prefs.js b/prefs.js index 890ec9d..ba791e0 100644 --- a/prefs.js +++ b/prefs.js @@ -109,7 +109,7 @@ function buildPrefsWidget() { return topStack; } -const TopStack = new GObject.Class({ +var TopStack = new GObject.Class({ Name: 'DrawOnYourScreenTopStack', GTypeName: 'DrawOnYourScreenTopStack', Extends: Gtk.Stack, @@ -123,7 +123,7 @@ const TopStack = new GObject.Class({ } }); -const AboutPage = new GObject.Class({ +var AboutPage = new GObject.Class({ Name: 'DrawOnYourScreenAboutPage', GTypeName: 'DrawOnYourScreenAboutPage', Extends: Gtk.ScrolledWindow, @@ -170,7 +170,7 @@ const AboutPage = new GObject.Class({ }); -const PrefsPage = new GObject.Class({ +var PrefsPage = new GObject.Class({ Name: 'DrawOnYourScreenPrefsPage', GTypeName: 'DrawOnYourScreenPrefsPage', Extends: Gtk.ScrolledWindow, @@ -226,6 +226,28 @@ const PrefsPage = new GObject.Class({ persistentBox.pack_start(persistentLabelBox, true, true, 4); persistentBox.pack_start(persistentSwitch, false, false, 4); listBox.add(persistentBox); + + let osdBox = new Gtk.Box({ margin: MARGIN }); + let osdLabelBox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); + let osdLabel1 = new Gtk.Label({label: _("Disable on-screen notifications")}); + osdLabel1.set_halign(1); + osdLabelBox.pack_start(osdLabel1, true, true, 0); + let osdSwitch = new Gtk.Switch({valign: 3}); + this.settings.bind("osd-disabled", osdSwitch, "active", 0); + osdBox.pack_start(osdLabelBox, true, true, 4); + osdBox.pack_start(osdSwitch, false, false, 4); + listBox.add(osdBox); + + let indicatorBox = new Gtk.Box({ margin: MARGIN }); + let indicatorLabelBox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); + let indicatorLabel1 = new Gtk.Label({label: _("Disable panel indicator")}); + indicatorLabel1.set_halign(1); + indicatorLabelBox.pack_start(indicatorLabel1, true, true, 0); + let indicatorSwitch = new Gtk.Switch({valign: 3}); + this.settings.bind("indicator-disabled", indicatorSwitch, "active", 0); + indicatorBox.pack_start(indicatorLabelBox, true, true, 4); + indicatorBox.pack_start(indicatorSwitch, false, false, 4); + listBox.add(indicatorBox); this.addSeparator(listBox); let internalTitleBox = new Gtk.Box({ margin: MARGIN }); @@ -313,7 +335,7 @@ const PrefsPage = new GObject.Class({ }); // this code comes from Sticky Notes View by Sam Bull, https://extensions.gnome.org/extension/568/notes/ -const KeybindingsWidget = new GObject.Class({ +var KeybindingsWidget = new GObject.Class({ Name: 'DrawOnYourScreenKeybindings.Widget', GTypeName: 'DrawOnYourScreenKeybindingsWidget', Extends: Gtk.Box, diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled index 6645b28b84262d3cc1ca01aba32b9b08235c0a7f..329554d6b23e75f72fdb56ab41f68bcf99307d8f 100644 GIT binary patch literal 3256 zcmZu!U2GIp7#)ymp@8LA3RMe=Y{A*hQVOl96|_P{Ng#+pAE2{4cXx-*&MY&t{R0V6 z5;2MqeUKQ5H73FX2{i$t#z=iJ#Ds(=gy;h#nrNb=4?dU}#B*lv&d+u?IXNe1zq$9j z-@SA1oo%mZj-gqeB7e)kdn-CIQ+hMNvu=%blKEd!=~s?}2O1QmVTq#L!|%(vFqD^+ z3*fH++sP;MmR%G{w;)V2DMmbDxrS}IN!`(gRohZW?Xsh~Sw{$q&nk&0eNvSBz{LGP zBQOVO0@%fTU;(fQSRBDpXyPHDMPfPl;RqguCfb0Nz$%Hyz{KNquo~VPpdDB%u?}3t z_`szcO5oRGfik3wpeAnv%JQG?(x;ve{}lKf@#BeQ^r;uap9EhAj%;uJl|D87DR2`C z@a)K6*XUEvgTD;i1$=Pt_C@;CP4N4{uL94>cxuKMz{i1)zTGv!c^ zlRou>@UMVx0)4U_YPRz`xbXo+d0zU|em>wXV5{`0>Gy*Rz~H|ft!$rqA^fA@lfX6^ zPtEvo@FdVLeQNsGz*B&C=xQI^p=O;Mu`pVIsq63TqEF2_C&1mnygysNqfgCo^@Dc+ zFUa<(+5Q0dD6n1n)b!s6PXG<+FXpfv>ZS0nfN#==$#qZ7b^iJr{=h>fNui(E`M**r}ozacm`gCw?12YgFbZ|;uGL* z;QWr$hv`$#g1;HO7g*8qsqa(M9{?W&-cw(@%6Mwl=P39j@bSBc?$D=Z{%65o1Cu#p zDSc}C*TA=d)8|*&^r^WHr@%AuvK~1$@d&%?NHM{4n6^xyY@drpPKET1z!f5Z#nyZvFXDHXGoGVmJ!OgikW4jeo3@jV zwwn&KO)K+TD#6;2P&HR|hw}09xN zyqsPaqi|3-M`-@=!bq!5-W%h2Zw#Y1R@;r1c~eauo5J`_)p(glM#~Q79lLDll{CW0 zOng1E##yZt{y$jF)1NS*tFGtRgILyyOnWq$uA1?oj$L6ZUDbS|k961M-yOzx*Tg$` zsWgi(jC`qr`FCV~Xp46Up7T!tJm1>^-f30?JnMNk;C+Gjh7|ygTwrgq1W>(qG(+>q;N1kq8=T8ibfHI4c+(|UWQTC|Zq+QnoVcCZguc5~i#b>R+rHgdqc8kTNkHP3dUv+MiQw{4k9 zJdZskEVfGWrtrk{ZByyP^m_u!l2P&{^Kc2D_P%)WI{9_?r-!48%%36Sgri|ORgbCI zIVI#dl`LtVUlcr_!iPZ0{}4#|9|EcHLm*Y>Lm-6{Q*Kc?!!#rPYqEboD@FMq=~4Bg literal 3140 zcmZuzU1%It6rO5gV{4N%t<|(qliJ!%VRlW^w27p#)%3@zkPs@t2h-V|ySvlO&a5+& z-)bl-TJQ(yi$NN+2>w8!0k!nOpY%n7P|S;3@g)Ht6tuM9gHW`7-_4!fnRFMvd|%F- zJ@?#m&poq;pEEqmZ~{$z?gtMp>%<+(whCOeIN3qwv!r%JI}J`$Yg+Zansy7HefPki zJ)`Xh_X4h$OXeK6Ad-Gw*mhEk2g30!*YT64XN>8tqffXap6+KnAsl{JOYD?X`487- zK17wmUEno9El>wE02=_Lq-_GY7h*H81$Yo>iC`=A!wTEL+krj!#O9BRfn4n75>6QYg&)D5stgJ*!j>5CuHPR)E~!IyzEx0b%7 zoq8?o3*aT-po&k;_}9Vp*wH)s^H=CkT?czJxDA+kZT2kf)QzzBfi2*WibKsfbw zg>k59KMg($*!@F~(@xF&FM)pmuK)CAKkd}DurGpd05cc1y0lZXZfyJp;Dv85+q6@& z-xA<1;QhBwUZb6w=h6o@fWHgPG7dH46v3|p!#CTT=ua)r5&RkO-dFvzv{SP`=fFP# zTN*!*{X@SoyU;0fTv z;}^5EQ`7%l@HwDv@-f+O)Xeh|_-kM;Yw^lUP5T0DOTe$6w8;HZbHCTYt2nDR|NJlg zsafZG@HSxGpH1J;PR(=g1ar1={?r3^0tlhq2XK~fvvt6B0Ih;EUY<{A-_mSa5500W zaULP8#<_zd)i{eD0$KsixCej)umj-1;M&UB#97t|Yy>#FIMbQ|Q(%x5gcIntOyNb5k}rysd{Lyz zFN#!!7ez|be3f_B#b*6r!WOZ-EtPjPr(N-Uc9rwl73Sj!Q}#)zUflzED;xAo;^bHc z70$yx4Toj(^F|RXm;Aj7>$XRpqyFt>@AhzA?$L5`d>@*^9}e6icf(I29WE+Qbme+> zxSla8bi>#E(Hy^3%Eu3%N6uz<)$UH0A`=HnKHvs_gihX~3Zu8LQw(e#4r$y12L z?=x~@sMj5HFg79uls(cB@k1URx}2yS@!M><3;oBTCsjt*}p6F7oOn@U7bGt57e4yOIv*=yNb)O@ZDkC$Qps;v?Mr#!N15!j((^-Ym`9O=!jCqqh!j`$oruSg zw=ioIEPDd0Mb^v4{Y=A;&m(Nqa!t(CNZS63BZh}=_JmQ&%L&h;;JQKnwmDSt6Zo!; zQOt0dW%4pd^O;m}Dit;AhyFTXhIy$|4KS2cAxi57@%#AqLystpersistent drawing persistent drawing + + false + disable OSD notifications + disable on-screen notifications + + + false + disable panel indicator + disable panel indicator + ["<Alt><Super>d"] toggle drawing From ec2408043f8971159d1b97d85593f6902edec136 Mon Sep 17 00:00:00 2001 From: abakkk Date: Thu, 28 Mar 2019 22:15:31 +0100 Subject: [PATCH 5/5] change middle click middle click: toggle fill remove toggleShape method update prefs and .pot --- draw.js | 8 ++------ locale/draw-on-your-screen.pot | 6 +++--- prefs.js | 6 +++--- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/draw.js b/draw.js index cca7194..f881a78 100644 --- a/draw.js +++ b/draw.js @@ -165,7 +165,7 @@ var DrawingArea = new Lang.Class({ } // hide helper - if (this.helper.visible && button != 2) { + if (this.helper.visible) { this.helper.hideHelp(); return Clutter.EVENT_STOP; } @@ -174,7 +174,7 @@ var DrawingArea = new Lang.Class({ this._startDrawing(x, y, shiftPressed); return Clutter.EVENT_STOP; } else if (button == 2) { - this.toggleShape(); + this.toggleFill(); } else if (button == 3) { this._stopDrawing(); this.menu.open(x, y); @@ -437,10 +437,6 @@ var DrawingArea = new Lang.Class({ this.emitter.emit('show-osd', _(ShapeNames[shape]), null); }, - toggleShape: function() { - this.selectShape((this.currentShape == Object.keys(Shapes).length - 1) ? 0 : this.currentShape + 1); - }, - toggleFill: function() { this.fill = !this.fill; this.emitter.emit('show-osd', this.fill ? _("Fill") : _("Stroke"), null); diff --git a/locale/draw-on-your-screen.pot b/locale/draw-on-your-screen.pot index eb936e2..cfbf9de 100644 --- a/locale/draw-on-your-screen.pot +++ b/locale/draw-on-your-screen.pot @@ -206,13 +206,13 @@ msgstr "" msgid "Left click" msgstr "" -msgid "Draw by filling in" +msgid "Menu" msgstr "" msgid "Right click" msgstr "" -msgid "Toggle shape" +msgid "Toggle fill/stroke" msgstr "" msgid "Center click" @@ -299,7 +299,7 @@ msgstr "" msgid "Smooth stroke during the drawing process" msgstr "" -msgid "You can smooth the stroke afterward\nSee" +msgid "You can also smooth the stroke afterward\nSee" msgstr "" msgid "Change the style" diff --git a/prefs.js b/prefs.js index ba791e0..4ca6f71 100644 --- a/prefs.js +++ b/prefs.js @@ -75,8 +75,8 @@ var INTERNAL_KEYBINDINGS = { var OTHER_SHORTCUTS = [ { desc: "Draw", shortcut: "Left click" }, - { desc: "Draw by filling in", shortcut: "Right click" }, - { desc: "Toggle shape", shortcut: "Center click" }, + { desc: "Menu", shortcut: "Right click" }, + { desc: "Toggle fill/stroke", shortcut: "Center click" }, { desc: "Transform shape (when drawing)", shortcut: "Ctrl key" }, { desc: "Increment/decrement line width", shortcut: "Scroll" }, { desc: "Select color", shortcut: "Ctrl+1...9" }, @@ -287,7 +287,7 @@ var PrefsPage = new GObject.Class({ let smoothBox = new Gtk.Box({ margin: MARGIN }); let smoothLabelBox = new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL }); let smoothLabel1 = new Gtk.Label({label: _("Smooth stroke during the drawing process")}); - let smoothLabel2 = new Gtk.Label({ use_markup: true, halign: 1, label: "" + _("You can smooth the stroke afterward\nSee") + " \"" + _("Smooth last brushstroke") + "\"" }); + let smoothLabel2 = new Gtk.Label({ use_markup: true, halign: 1, label: "" + _("You can also smooth the stroke afterward\nSee") + " \"" + _("Smooth last brushstroke") + "\"" }); smoothLabel1.set_halign(1); smoothLabel2.get_style_context().add_class("dim-label"); smoothLabelBox.pack_start(smoothLabel1, true, true, 0);