diff --git a/area.js b/area.js index 845a1da..1580a2d 100644 --- a/area.js +++ b/area.js @@ -42,6 +42,7 @@ const Elements = Me.imports.elements; const Files = Me.imports.files; const Menu = Me.imports.menu; const _ = imports.gettext.domain(Me.metadata['gettext-domain']).gettext; +const pgettext = imports.gettext.domain(Me.metadata['gettext-domain']).pgettext; const CAIRO_DEBUG_EXTENDS = false; const SVG_DEBUG_EXTENDS = false; @@ -392,6 +393,7 @@ var DrawingArea = new Lang.Class({ event.get_key_symbol() == Clutter.KEY_KP_Enter || event.get_key_symbol() == Clutter.KEY_Control_L) { if (this.currentElement.points.length == 2) + // Translators: %s is a key label this.emit('show-osd', null, _("Press %s to get\na fourth control point") .format(Gtk.accelerator_get_label(Clutter.KEY_Return, 0)), "", -1, true); this.currentElement.addPoint(); @@ -594,7 +596,8 @@ var DrawingArea = new Lang.Class({ color: this.currentColor.to_string(), eraser: eraser, font: this.currentFont.to_string(), - text: _("Text"), + // Translators: initial content of the text area + text: pgettext("text-area-content", "Text"), textRightAligned: this.currentTextRightAligned, points: [] }); @@ -626,6 +629,7 @@ var DrawingArea = new Lang.Class({ this.currentElement.startDrawing(startX, startY); if (this.currentTool == Shapes.POLYGON || this.currentTool == Shapes.POLYLINE) + // Translators: %s is a key label this.emit('show-osd', null, _("Press %s to mark vertices") .format(Gtk.accelerator_get_label(Clutter.KEY_Return, 0)), "", -1, true); @@ -687,6 +691,7 @@ var DrawingArea = new Lang.Class({ let [x, y] = [this.currentElement.x, this.currentElement.y]; this.currentElement.text = ''; this.currentElement.cursorPosition = 0; + // Translators: %s is a key label this.emit('show-osd', null, _("Type your text and press %s") .format(Gtk.accelerator_get_label(Clutter.KEY_Escape, 0)), "", -1, true); this._updateTextCursorTimeout(); diff --git a/extension.js b/extension.js index 64499ff..4395725 100644 --- a/extension.js +++ b/extension.js @@ -342,6 +342,7 @@ const AreaManager = new Lang.Class({ if (Main._findModal(this.activeArea) != -1) { Main.popModal(this.activeArea); if (source && source == global.display) + // Translators: "released" as the opposite of "grabbed" this.showOsd(null, 'touchpad-disabled-symbolic', _("Keyboard and pointer released"), null, null, false); this.setCursor('DEFAULT'); this.activeArea.reactive = false; @@ -388,7 +389,8 @@ const AreaManager = new Lang.Class({ this.activeArea.enterDrawingMode(); this.osdDisabled = Me.settings.get_boolean('osd-disabled'); - let label = _("Press %s for help").format(this.activeArea.helper.helpKeyLabel) + "\n\n" + _("Entering drawing mode"); + // Translators: %s is a key label + let label = "" + _("Press %s for help").format(this.activeArea.helper.helpKeyLabel) + "\n\n" + _("Entering drawing mode"); this.showOsd(null, this.enterGicon, label, null, null, true); } diff --git a/helper.js b/helper.js index 176ddfe..70d93d7 100644 --- a/helper.js +++ b/helper.js @@ -31,7 +31,7 @@ const Tweener = imports.ui.tweener; const Me = ExtensionUtils.getCurrentExtension(); const Convenience = ExtensionUtils.getSettings ? ExtensionUtils : Me.imports.convenience; -const Prefs = Me.imports.prefs; +const Shortcuts = Me.imports.shortcuts.Shortcuts; const _ = imports.gettext.domain(Me.metadata['gettext-domain']).gettext; const GS_VERSION = Config.PACKAGE_VERSION; @@ -87,49 +87,54 @@ var DrawingHelper = new Lang.Class({ this.add_actor(this.vbox); this.vbox.add_child(new St.Label({ text: _("Global") })); - for (let settingKey of Prefs.GLOBAL_KEYBINDINGS) { - if (!Me.settings.get_strv(settingKey)[0]) - continue; + Shortcuts.GLOBAL_KEYBINDINGS.forEach((settingKeys, index) => { + if (index) + this.vbox.add_child(new St.BoxLayout({ vertical: false, style_class: 'draw-on-your-screen-helper-separator' })); - let hbox = new St.BoxLayout({ vertical: false }); - let [keyval, mods] = Gtk.accelerator_parse(Me.settings.get_strv(settingKey)[0]); - hbox.add_child(new St.Label({ text: Me.settings.settings_schema.get_key(settingKey).get_summary() })); - hbox.add_child(new St.Label({ text: Gtk.accelerator_get_label(keyval, mods), x_expand: true })); - this.vbox.add_child(hbox); - } + settingKeys.forEach(settingKey => { + if (!Me.settings.get_strv(settingKey)[0]) + return; + + let hbox = new St.BoxLayout({ vertical: false }); + let [keyval, mods] = Gtk.accelerator_parse(Me.settings.get_strv(settingKey)[0]); + hbox.add_child(new St.Label({ text: Me.settings.settings_schema.get_key(settingKey).get_summary() })); + hbox.add_child(new St.Label({ text: Gtk.accelerator_get_label(keyval, mods), x_expand: true })); + this.vbox.add_child(hbox); + }); + }); this.vbox.add_child(new St.BoxLayout({ vertical: false, style_class: 'draw-on-your-screen-helper-separator' })); this.vbox.add_child(new St.Label({ text: _("Internal") })); - Prefs.OTHER_SHORTCUTS.forEach((object, index) => { + Shortcuts.OTHERS.forEach((pairs, index) => { if (index) this.vbox.add_child(new St.BoxLayout({ vertical: false, style_class: 'draw-on-your-screen-helper-separator' })); - for (let key in object) { + pairs.forEach(pair => { let hbox = new St.BoxLayout({ vertical: false }); - hbox.add_child(new St.Label({ text: _(key) })); - hbox.add_child(new St.Label({ text: object[key], x_expand: true })); + hbox.add_child(new St.Label({ text: pair[0] })); + hbox.add_child(new St.Label({ text: pair[1], x_expand: true })); hbox.get_children()[0].get_clutter_text().set_use_markup(true); this.vbox.add_child(hbox); - } + }); }); this.vbox.add_child(new St.BoxLayout({ vertical: false, style_class: 'draw-on-your-screen-helper-separator' })); - Prefs.INTERNAL_KEYBINDINGS.forEach((object, index) => { + Shortcuts.INTERNAL_KEYBINDINGS.forEach((settingKeys, index) => { if (index) this.vbox.add_child(new St.BoxLayout({ vertical: false, style_class: 'draw-on-your-screen-helper-separator' })); - for (let settingKey of object) { + settingKeys.forEach(settingKey => { if (!Me.internalShortcutSettings.get_strv(settingKey)[0]) - continue; + return; let hbox = new St.BoxLayout({ vertical: false }); let [keyval, mods] = Gtk.accelerator_parse(Me.internalShortcutSettings.get_strv(settingKey)[0]); hbox.add_child(new St.Label({ text: Me.internalShortcutSettings.settings_schema.get_key(settingKey).get_summary() })); hbox.add_child(new St.Label({ text: Gtk.accelerator_get_label(keyval, mods), x_expand: true })); this.vbox.add_child(hbox); - } + }); }); let mediaKeysSettings; diff --git a/locale/POTFILES.in b/locale/POTFILES.in new file mode 100644 index 0000000..3a9591f --- /dev/null +++ b/locale/POTFILES.in @@ -0,0 +1,8 @@ +# xgettext --from-code=UTF-8 --add-comments="Translators: " --no-location --package-name="Draw On Your Screen" --msgid-bugs-address="https://framagit.org/abakkk/DrawOnYourScreen/issues" -f locale/POTFILES.in +area.js +extension.js +helper.js +menu.js +prefs.js +shortcuts.js +schemas/org.gnome.shell.extensions.draw-on-your-screen.gschema.xml diff --git a/locale/draw-on-your-screen.pot b/locale/draw-on-your-screen.pot index 3881e79..588f5f6 100644 --- a/locale/draw-on-your-screen.pot +++ b/locale/draw-on-your-screen.pot @@ -8,9 +8,9 @@ # You are free to translate them or not. msgid "" msgstr "" -"Project-Id-Version: Draw On Your Screen VERSION\n" +"Project-Id-Version: Draw On Your Screen\n" "Report-Msgid-Bugs-To: https://framagit.org/abakkk/DrawOnYourScreen/issues\n" -"POT-Creation-Date: 2019-03-04 16:40+0100\n" +"POT-Creation-Date: 2020-09-09 08:40+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -19,177 +19,338 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "About" +#. Translators: %s is a key label +#, javascript-format +msgid "" +"Press %s to get\n" +"a fourth control point" msgstr "" -# You are free to translate the extension name, that is displayed in About page, or not. -msgid "Draw On You Screen" +msgid "Mark a point of symmetry" msgstr "" -msgid "Version %d" +msgid "Draw a line of symmetry" msgstr "" -msgid "Start drawing with Super+Alt+D and save your beautiful work by taking a screenshot" +#. Translators: initial content of the text area +msgctxt "text-area-content" +msgid "Text" msgstr "" -# Add your name here, for example: -# (add "\n" as separator if there is many translators) -# msgid "translator-credits" -# msgstr "Me" -# or, with mail: -# msgid "translator-credits" -# msgstr "Me" -# or, with page: -# msgid "translator-credits" -# msgstr "Me" -# else keep it empty. -# It will be displayed in about page -msgid "translator-credits" +#. Translators: %s is a key label +#, javascript-format +msgid "Press %s to mark vertices" msgstr "" -msgid "Drawing" +#. Translators: %s is a key label +#, javascript-format +msgid "Type your text and press %s" msgstr "" -msgid "Palettes" +#. Translators: "released" as the opposite of "grabbed" +msgid "Keyboard and pointer released" msgstr "" -msgid "Color palettes" +msgid "Keyboard and pointer grabbed" msgstr "" -msgid "The palettes of drawing colors" +msgid "Leaving drawing mode" +msgstr "" + +#. Translators: %s is a key label +#, javascript-format +msgid "Press %s for help" +msgstr "" + +msgid "Entering drawing mode" +msgstr "" + +msgid "Global" +msgstr "" + +msgid "Internal" +msgstr "" + +msgid "System" +msgstr "" + +msgid "Dashed line" +msgstr "" + +#. Translators: as the alternative to "Dashed line" +msgid "Full line" +msgstr "" + +msgid "Fill" +msgstr "" + +#. Translators: as the alternative to "Fill" +msgid "Outline" +msgstr "" + +#. Translators: fill-rule SVG attribute +msgid "Nonzero" +msgstr "" + +msgid "Evenodd" +msgstr "" + +#. Translators: generic font-family SVG attribute +msgctxt "font-family" +msgid "Sans-Serif" +msgstr "" + +msgctxt "font-family" +msgid "Serif" +msgstr "" + +msgctxt "font-family" +msgid "Monospace" +msgstr "" + +msgctxt "font-family" +msgid "Cursive" +msgstr "" + +msgctxt "font-family" +msgid "Fantasy" +msgstr "" + +#. Translators: font-style SVG attribute +msgctxt "font-style" +msgid "Normal" +msgstr "" + +msgctxt "font-style" +msgid "Oblique" +msgstr "" + +msgctxt "font-style" +msgid "Italic" +msgstr "" + +#. Translators: font-weight SVG attribute +msgctxt "font-weight" +msgid "Thin" +msgstr "" + +msgctxt "font-weight" +msgid "Ultra Light" +msgstr "" + +msgctxt "font-weight" +msgid "Light" +msgstr "" + +msgctxt "font-weight" +msgid "Semi Light" +msgstr "" + +msgctxt "font-weight" +msgid "Book" +msgstr "" + +msgctxt "font-weight" +msgid "Normal" +msgstr "" + +msgctxt "font-weight" +msgid "Medium" +msgstr "" + +msgctxt "font-weight" +msgid "Semi Bold" +msgstr "" + +msgctxt "font-weight" +msgid "Bold" +msgstr "" + +msgctxt "font-weight" +msgid "Ultra Bold" +msgstr "" + +msgctxt "font-weight" +msgid "Heavy" +msgstr "" + +msgctxt "font-weight" +msgid "Ultra Heavy" +msgstr "" + +#. Translators: stroke-linecap SVG attribute +msgctxt "stroke-linecap" +msgid "Butt" +msgstr "" + +msgctxt "stroke-linecap" +msgid "Round" +msgstr "" + +msgctxt "stroke-linecap" +msgid "Square" +msgstr "" + +#. Translators: stroke-linejoin SVG attribute +msgctxt "stroke-linejoin" +msgid "Miter" +msgstr "" + +msgctxt "stroke-linejoin" +msgid "Round" +msgstr "" + +msgctxt "stroke-linejoin" +msgid "Bevel" +msgstr "" + +#. Translators: value in pixel unit (e.g. "5 px") +#, javascript-format +msgid "%f px" +msgstr "" + +#. Translators: text alignment +msgid "Right aligned" +msgstr "" + +msgid "Left aligned" +msgstr "" + +msgctxt "drawing-tool" +msgid "Free drawing" +msgstr "" + +msgctxt "drawing-tool" +msgid "Line" +msgstr "" + +msgctxt "drawing-tool" +msgid "Ellipse" +msgstr "" + +msgctxt "drawing-tool" +msgid "Rectangle" +msgstr "" + +msgctxt "drawing-tool" +msgid "Text" +msgstr "" + +msgctxt "drawing-tool" +msgid "Polygon" +msgstr "" + +msgctxt "drawing-tool" +msgid "Polyline" +msgstr "" + +msgctxt "drawing-tool" +msgid "Image" +msgstr "" + +msgctxt "drawing-tool" +msgid "Move" +msgstr "" + +msgctxt "drawing-tool" +msgid "Resize" +msgstr "" + +msgctxt "drawing-tool" +msgid "Mirror" +msgstr "" + +msgid "Undo" +msgstr "" + +msgid "Redo" +msgstr "" + +msgid "Erase" +msgstr "" + +msgid "Smooth" msgstr "" msgid "Palette" msgstr "" +msgid "Color" +msgstr "" + +msgid "Open drawing" +msgstr "" + +#. Translators: "Preferences" page in preferences +msgid "Preferences" +msgstr "" + +#. Translators: "Drawing" page in preferences +msgid "Drawing" +msgstr "" + +#. Translators: "About" page in preferences +msgid "About" +msgstr "" + +#. Translators: you are free to translate the extension name, that is displayed in About page, or not +msgid "Draw On You Screen" +msgstr "" + +#. Translators: version number in "About" page +#, javascript-format +msgid "Version %d" +msgstr "" + +#. Translators: you are free to translate the extension description, that is displayed in About page, or not +msgid "" +"Start drawing with Super+Alt+D and save your beautiful work by taking a " +"screenshot" +msgstr "" + +#. Translators: add your name here or keep it empty, it will be displayed in about page, e.g. +#. msgstr "" +#. "translator1\n" +#. "translator2\n" +#. "translator3" +msgid "translator-credits" +msgstr "" + +msgid "Palettes" +msgstr "" + msgid "Add a new palette" msgstr "" -msgid "New palette" -msgstr "" - -msgid "Rename the palette" -msgstr "" - -msgid "Remove the palette" -msgstr "" - -msgid "Auto" -msgstr "" - msgid "Area" msgstr "" -msgid "Square area size" -msgstr "" - -msgid "Automatic square area size" -msgstr "" - -msgid "Compute the size of the square area from the screen size" -msgstr "" - -msgid "The size of the square area in pixels" -msgstr "" - -msgid "Background color" -msgstr "" - -msgid "The color of the drawing area background" +msgid "Auto" msgstr "" msgid "Grid overlay line" msgstr "" -msgid "Automatic grid overlay line" -msgstr "" - -msgid "Compute the lengths from the screen size" -msgstr "" - -msgid "Grid overlay line spacing" -msgstr "" - -msgid "The line width in pixels" -msgstr "" - -msgid "Grid overlay line width" -msgstr "" - -msgid "The gap between lines in pixels" -msgstr "" - -msgid "Grid overlay color" -msgstr "" - -msgid "The color of the lines" -msgstr "" - msgid "Tools" msgstr "" msgid "Dash array" msgstr "" -msgid "Automatic dash array" -msgstr "" - -msgid "Compute the lengths from the line width" -msgstr "" - -msgid "Dash array on" -msgstr "" - -msgid "The dash length in pixels" -msgstr "" - -msgid "Dash array off" -msgstr "" - -msgid "The gap between the dashes in pixels" -msgstr "" - -msgid "Dash offset" -msgstr "" - -msgid "The dash offset in pixels" -msgstr "" - msgid "Reset settings" msgstr "" -msgid "Preferences" +msgid "Rename the palette" msgstr "" -msgid "Global" +msgid "Remove the palette" msgstr "" -msgid "Enter/leave drawing mode" +#. Translators: default name of a new palette +msgid "New palette" msgstr "" -# There is a similar text in GNOME Boxes (https://gitlab.gnome.org/GNOME/gnome-boxes/tree/master/po) -msgid "Grab/ungrab keyboard and pointer" -msgstr "" - -msgid "Erase all drawings" -msgstr "" - -msgid "Persistent" -msgstr "" - -msgid "Persistent drawing through session restart" -msgstr "" - -msgid "Drawing on the desktop" -msgstr "" - -msgid "Draw On Your Screen becomes Draw On Your Desktop" -msgstr "" - -msgid "Disable on-screen notifications" -msgstr "" - -msgid "Disable panel indicator" +msgid "In drawing mode" msgstr "" msgid "Draw" @@ -213,17 +374,19 @@ msgstr "" msgid "Scroll" msgstr "" +#. Translators: %s are key labels (Ctrl+F1 and Ctrl+F9) msgid "Select color" msgstr "" -# %s are key labels (Ctrl+F1 and Ctrl+F9) +#, javascript-format msgid "%s … %s" msgstr "" +#. Translators: %s is a key label msgid "Ignore pointer movement" msgstr "" -# %s is a key label +#, javascript-format msgid "%s held" msgstr "" @@ -257,22 +420,137 @@ msgstr "" msgid "Inverse (while mirroring)" msgstr "" -msgid "Internal" +msgid "Drawing on the desktop" msgstr "" -msgid "In drawing mode" +msgid "Draw On Your Screen becomes Draw On Your Desktop" msgstr "" -msgid "Undo last brushstroke" +msgid "Erase all drawings" msgstr "" -msgid "Redo last brushstroke" +msgid "Disable panel indicator" +msgstr "" + +msgid "Disable on-screen notifications" +msgstr "" + +msgid "Persistent" +msgstr "" + +msgid "Persistent drawing through session restart" +msgstr "" + +msgid "Enter/leave drawing mode" +msgstr "" + +#. Translators: there is a similar text in GNOME Boxes (https://gitlab.gnome.org/GNOME/gnome-boxes/tree/master/po) +msgid "Grab/ungrab keyboard and pointer" +msgstr "" + +msgid "Background color" +msgstr "" + +msgid "The color of the drawing area background" +msgstr "" + +msgid "Automatic dash array" +msgstr "" + +msgid "Compute the lengths from the line width" +msgstr "" + +msgid "Dash array on" +msgstr "" + +msgid "The dash length in pixels" +msgstr "" + +msgid "Dash array off" +msgstr "" + +msgid "The gap between the dashes in pixels" +msgstr "" + +msgid "Dash offset" +msgstr "" + +msgid "The dash offset in pixels" +msgstr "" + +msgid "Grid overlay color" +msgstr "" + +msgid "The color of the lines" +msgstr "" + +msgid "Automatic grid overlay line" +msgstr "" + +msgid "Compute the lengths from the screen size" +msgstr "" + +msgid "Grid overlay line spacing" +msgstr "" + +msgid "The gap between lines in pixels" +msgstr "" + +msgid "Grid overlay line width" +msgstr "" + +msgid "The line width in pixels" +msgstr "" + +msgid "Color palettes" +msgstr "" + +msgid "The palettes of drawing colors" +msgstr "" + +msgid "Automatic square area size" +msgstr "" + +msgid "Compute the size of the square area from the screen size" +msgstr "" + +msgid "Square area size" +msgstr "" + +msgid "The size of the square area in pixels" +msgstr "" + +msgid "Decrement line width" +msgstr "" + +msgid "Decrement line width even more" msgstr "" msgid "Erase last brushstroke" msgstr "" -msgid "Smooth last brushstroke" +msgid "Increment line width" +msgstr "" + +msgid "Increment line width even more" +msgstr "" + +msgid "Open next drawing" +msgstr "" + +msgid "Open preferences" +msgstr "" + +msgid "Open previous drawing" +msgstr "" + +msgid "Redo last brushstroke" +msgstr "" + +msgid "Save drawing" +msgstr "" + +msgid "Save drawing as a SVG file" msgstr "" msgid "Select color 1" @@ -317,6 +595,9 @@ msgstr "" msgid "Select move tool" msgstr "" +msgid "Select free drawing" +msgstr "" + msgid "Select polygon tool" msgstr "" @@ -332,10 +613,7 @@ msgstr "" msgid "Select text tool" msgstr "" -msgid "Toggle fill/outline" -msgstr "" - -msgid "Toggle fill rule" +msgid "Smooth last brushstroke" msgstr "" msgid "Change color palette" @@ -344,22 +622,10 @@ msgstr "" msgid "Change color palette (reverse)" msgstr "" -msgid "Increment line width" +msgid "Toggle fill/outline" msgstr "" -msgid "Decrement line width" -msgstr "" - -msgid "Increment line width even more" -msgstr "" - -msgid "Decrement line width even more" -msgstr "" - -msgid "Change linejoin" -msgstr "" - -msgid "Change linecap" +msgid "Toggle fill rule" msgstr "" msgid "Change font family" @@ -368,19 +634,22 @@ msgstr "" msgid "Change font family (reverse)" msgstr "" -msgid "Change font weight" -msgstr "" - msgid "Change font style" msgstr "" -msgid "Toggle text alignment" +msgid "Change font weight" msgstr "" msgid "Change image file" msgstr "" -msgid "Hide panel and dock" +msgid "Change linecap" +msgstr "" + +msgid "Change linejoin" +msgstr "" + +msgid "Toggle text alignment" msgstr "" msgid "Add a drawing background" @@ -389,251 +658,14 @@ msgstr "" msgid "Add a grid overlay" msgstr "" -msgid "Square drawing area" -msgstr "" - -msgid "Open previous drawing" -msgstr "" - -msgid "Open next drawing" -msgstr "" - -msgid "Save drawing as a SVG file" -msgstr "" - -msgid "Open preferences" -msgstr "" - msgid "Show help" msgstr "" -msgid "Screenshot" +msgid "Hide panel and dock" msgstr "" -msgid "Screenshot to clipboard" +msgid "Square drawing area" msgstr "" -msgid "Area screenshot" +msgid "Undo last brushstroke" msgstr "" - -msgid "Area screenshot to clipboard" -msgstr "" - -msgid "System" -msgstr "" - -msgid "Undo" -msgstr "" - -msgid "Redo" -msgstr "" - -msgid "Erase" -msgstr "" - -msgid "Smooth" -msgstr "" - -msgid "Free drawing" -msgstr "" - -msgid "Line" -msgstr "" - -msgid "Ellipse" -msgstr "" - -msgid "Rectangle" -msgstr "" - -msgid "Text" -msgstr "" - -msgid "Polygon" -msgstr "" - -msgid "Polyline" -msgstr "" - -msgid "Image" -msgstr "" - -msgid "Move" -msgstr "" - -msgid "Resize" -msgstr "" - -msgid "Mirror" -msgstr "" - -msgid "Color" -msgstr "" - -msgid "Fill" -msgstr "" - -# fill-rule SVG attribute -msgid "Evenodd" -msgstr "" - -msgid "%d px" -msgstr "" - -# stroke-linejoin SVG attribute -msgid "Miter" -msgstr "" - -# stroke-linejoin and stroke-linecap SVG attribute -msgid "Round" -msgstr "" - -# stroke-linejoin SVG attribute -msgid "Bevel" -msgstr "" - -# stroke-linecap SVG attribute -msgid "Butt" -msgstr "" - -# stroke-linecap SVG attribute -msgid "Square" -msgstr "" - -# generic font-family SVG attribute -msgid "Sans-Serif" -msgstr "" - -# generic font-family SVG attribute -msgid "Serif" -msgstr "" - -# generic font-family SVG attribute -msgid "Monospace" -msgstr "" - -# generic font-family SVG attribute -msgid "Cursive" -msgstr "" - -# generic font-family SVG attribute -msgid "Fantasy" -msgstr "" - -# font-weight SVG attribute -msgid "Thin" -msgstr "" - -# font-weight SVG attribute -msgid "Ultra-light" -msgstr "" - -# font-weight SVG attribute -msgid "Light" -msgstr "" - -# font-weight SVG attribute -msgid "Semi-light" -msgstr "" - -# font-weight SVG attribute -msgid "Book" -msgstr "" - -# font-weight and font-style SVG attribute -msgid "Normal" -msgstr "" - -# font-weight SVG attribute -msgid "Medium" -msgstr "" - -# font-weight SVG attribute -msgid "Semi-bold" -msgstr "" - -# font-weight SVG attribute -msgid "Bold" -msgstr "" - -# font-weight SVG attribute -msgid "Ultra-bold" -msgstr "" - -# font-weight SVG attribute -msgid "Heavy" -msgstr "" - -# font-style SVG attribute -msgid "Italic" -msgstr "" - -# font-style SVG attribute -msgid "Oblique" -msgstr "" - -msgid "Right aligned" -msgstr "" - -msgid "Open drawing" -msgstr "" - -msgid "Save drawing" -msgstr "" - -msgid "Leaving drawing mode" -msgstr "" - -# %s is a key label -msgid "Press %s for help" -msgstr "" - -msgid "Entering drawing mode" -msgstr "" - -# "released" as the opposite of "grabbed" -msgid "Keyboard and pointer released" -msgstr "" - -msgid "Keyboard and pointer grabbed" -msgstr "" - -# %s is a key label -msgid "" -"Press %s to get\n" -"a fourth control point" -msgstr "" - -msgid "Mark a point of symmetry" -msgstr "" - -msgid "Draw a line of symmetry" -msgstr "" - -# %s is a key label -msgid "" -"Press %s to mark vertices" -msgstr "" - -# %s is a key label -msgid "" -"Type your text and press %s" -msgstr "" - -# as the alternative to "Fill" -msgid "Outline" -msgstr "" - -msgid "Dashed line" -msgstr "" - -msgid "Full line" -msgstr "" - -msgid "Left aligned" -msgstr "" - -msgid "Nonzero" -msgstr "" - - diff --git a/menu.js b/menu.js index 5483be8..529667f 100644 --- a/menu.js +++ b/menu.js @@ -39,6 +39,7 @@ const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); const Files = Me.imports.files; const _ = imports.gettext.domain(Me.metadata['gettext-domain']).gettext; +const pgettext = imports.gettext.domain(Me.metadata['gettext-domain']).pgettext; const GS_VERSION = Config.PACKAGE_VERSION; @@ -71,29 +72,37 @@ const getSummary = function(settingKey) { // Used by both menu and osd notifications. var DisplayStrings = { getDashedLine: function(dashed) { - return dashed ? _("Dashed line") : _("Full line"); + return dashed ? _("Dashed line") : + // Translators: as the alternative to "Dashed line" + _("Full line"); }, getFill: function(fill) { - return fill ? _("Fill") : _("Outline"); + return fill ? _("Fill") : + // Translators: as the alternative to "Fill" + _("Outline"); }, get FillRule() { if (!this._fillRules) + // Translators: fill-rule SVG attribute this._fillRules = { 0: _("Nonzero"), 1: _("Evenodd") }; return this._fillRules; }, getFontFamily: function(family) { if (!this._fontGenericFamilies) - this._fontGenericFamilies = { 'Sans-Serif': _("Sans-Serif"), 'Serif': _("Serif"), 'Monospace': _("Monospace"), - 'Cursive': _("Cursive"), 'Fantasy': _("Fantasy") }; + // Translators: generic font-family SVG attribute + this._fontGenericFamilies = { 'Sans-Serif': pgettext("font-family", "Sans-Serif"), 'Serif': pgettext("font-family", "Serif"), + 'Monospace': pgettext("font-family", "Monospace"), 'Cursive': pgettext("font-family", "Cursive"), + 'Fantasy': pgettext("font-family", "Fantasy") }; return this._fontGenericFamilies[family] || family; }, get FontStyle() { if (!this._fontStyles) - this._fontStyles = { 0: _("Normal"), 1: _("Oblique"), 2: _("Italic") }; + // Translators: font-style SVG attribute + this._fontStyles = { 0: pgettext("font-style", "Normal"), 1: pgettext("font-style", "Oblique"), 2: pgettext("font-style", "Italic") }; return this._fontStyles; }, @@ -101,37 +110,44 @@ var DisplayStrings = { get FontWeight() { if (!this._fontWeights) - this._fontWeights = { 100: _("Thin"), 200: _("Ultra Light"), 300: _("Light"), 350: _("Semi Light"), - 380: _("Book"), 400: _("Normal"), 500: _("Medium"), 600: _("Semi Bold"), - 700: _("Bold"), 800: _("Ultra Bold"), 900: _("Heavy"), 1000:_("Ultra Heavy") }; + // Translators: font-weight SVG attribute + this._fontWeights = { 100: pgettext("font-weight", "Thin"), 200: pgettext("font-weight", "Ultra Light"), 300: pgettext("font-weight", "Light"), + 350: pgettext("font-weight", "Semi Light"), 380: pgettext("font-weight", "Book"), 400: pgettext("font-weight", "Normal"), + 500: pgettext("font-weight", "Medium"), 600: pgettext("font-weight", "Semi Bold"), 700: pgettext("font-weight", "Bold"), + 800: pgettext("font-weight", "Ultra Bold"), 900: pgettext("font-weight", "Heavy"), 1000: pgettext("font-weight", "Ultra Heavy") }; return this._fontWeights; }, get LineCap() { if (!this._lineCaps) - this._lineCaps = { 0: _("Butt"), 1: _("Round"), 2: _("Square") }; + // Translators: stroke-linecap SVG attribute + this._lineCaps = { 0: pgettext("stroke-linecap", "Butt"), 1: pgettext("stroke-linecap", "Round"), 2: pgettext("stroke-linecap", "Square") }; return this._lineCaps; }, get LineJoin() { if (!this._lineJoins) - this._lineJoins = { 0: _("Miter"), 1: _("Round"), 2: _("Bevel") }; + // Translators: stroke-linejoin SVG attribute + this._lineJoins = { 0: pgettext("stroke-linejoin", "Miter"), 1: pgettext("stroke-linejoin", "Round"), 2: pgettext("stroke-linejoin", "Bevel") }; return this._lineJoins; }, getPixels(value) { - return _("%d px").format(value); + // Translators: value in pixel unit (e.g. "5 px") + return _("%f px").format(value); }, getTextAlignment: function(rightAligned) { + // Translators: text alignment return rightAligned ? _("Right aligned") : _("Left aligned"); }, get Tool() { if (!this._tools) - this._tools = { 0: _("Free drawing"), 1: _("Line"), 2: _("Ellipse"), 3: _("Rectangle"), - 4: _("Text"), 5: _("Polygon"), 6: _("Polyline"), 7: _("Image"), - 100: _("Move"), 101: _("Resize"), 102: _("Mirror") }; + this._tools = { 0: pgettext("drawing-tool", "Free drawing"), 1: pgettext("drawing-tool", "Line"), 2: pgettext("drawing-tool", "Ellipse"), + 3: pgettext("drawing-tool", "Rectangle"), 4: pgettext("drawing-tool", "Text"), 5: pgettext("drawing-tool", "Polygon"), + 6: pgettext("drawing-tool", "Polyline"), 7: pgettext("drawing-tool", "Image"), + 100: pgettext("drawing-tool", "Move"), 101: pgettext("drawing-tool", "Resize"), 102: pgettext("drawing-tool", "Mirror") }; return this._tools; } }; diff --git a/prefs.js b/prefs.js index bec7a2f..998cc56 100644 --- a/prefs.js +++ b/prefs.js @@ -1,5 +1,5 @@ /* jslint esversion: 6 */ -/* exported GLOBAL_KEYBINDINGS, INTERNAL_KEYBINDINGS, OTHER_SHORTCUTS, init, buildPrefsWidget */ +/* exported init, buildPrefsWidget */ /* * Copyright 2019 Abakkk @@ -27,10 +27,10 @@ const GLib = imports.gi.GLib; const GObject = imports.gi.GObject; const Gtk = imports.gi.Gtk; -const Config = imports.misc.config; const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); const Convenience = ExtensionUtils.getSettings && ExtensionUtils.initTranslations ? ExtensionUtils : Me.imports.convenience; +const Shortcuts = Me.imports.shortcuts.Shortcuts; const gettext = imports.gettext.domain(Me.metadata['gettext-domain']).gettext; const _ = function(string) { if (!string) @@ -39,51 +39,9 @@ const _ = function(string) { }; const _GTK = imports.gettext.domain('gtk30').gettext; -const GS_VERSION = Config.PACKAGE_VERSION; const MARGIN = 10; const ROWBOX_MARGIN_PARAMS = { margin_top: MARGIN / 2, margin_bottom: MARGIN / 2, margin_left: MARGIN, margin_right: MARGIN }; -var GLOBAL_KEYBINDINGS = ['toggle-drawing', 'toggle-modal', 'erase-drawings']; -var INTERNAL_KEYBINDINGS = [ - ['undo', 'redo', 'delete-last-element', 'smooth-last-element'], - ['select-none-shape', 'select-line-shape', 'select-ellipse-shape', 'select-rectangle-shape', 'select-polygon-shape', 'select-polyline-shape', - 'select-text-shape', 'select-image-shape', 'select-move-tool', 'select-resize-tool', 'select-mirror-tool'], - ['switch-fill', 'switch-fill-rule', 'switch-color-palette', 'switch-color-palette-reverse'], - ['increment-line-width', 'increment-line-width-more', 'decrement-line-width', 'decrement-line-width-more', - 'switch-linejoin', 'switch-linecap', 'switch-dash'], - ['switch-font-family', 'switch-font-family-reverse', 'switch-font-weight', 'switch-font-style', 'switch-text-alignment', 'switch-image-file'], - ['toggle-panel-and-dock-visibility', 'toggle-background', 'toggle-grid', 'toggle-square-area'], - ['open-next-json', 'open-previous-json', 'save-as-json', 'save-as-svg', 'open-preferences', 'toggle-help'] -]; - -if (GS_VERSION < '3.36') - delete INTERNAL_KEYBINDINGS[INTERNAL_KEYBINDINGS.length - 1]['open-preferences']; - -const getKeyLabel = function(accel) { - let [keyval, mods] = Gtk.accelerator_parse(accel); - return Gtk.accelerator_get_label(keyval, mods); -}; - -var OTHER_SHORTCUTS = [{ - get "Draw"() { return _("Left click"); }, - get "Menu"() { return _("Right click"); }, - get "Toggle fill/outline"() { return _("Center click"); }, - get "Increment/decrement line width"() { return _("Scroll"); }, - get "Select color"() { return _("%s … %s").format(getKeyLabel('1'), getKeyLabel('9')); }, - get "Ignore pointer movement"() { return _("%s held").format(getKeyLabel('space')); }, - "Leave": getKeyLabel('Escape'), - }, { - "Select eraser (while starting drawing)": getKeyLabel(''), - "Duplicate (while starting handling)": getKeyLabel(''), - "Rotate rectangle, polygon, polyline": getKeyLabel(''), - "Extend circle to ellipse": getKeyLabel(''), - "Curve line": getKeyLabel(''), - "Smooth free drawing outline": getKeyLabel(''), - "Rotate (while moving)": getKeyLabel(''), - "Stretch (while resizing)": getKeyLabel(''), - "Inverse (while mirroring)": getKeyLabel(''), -}]; - function init() { Convenience.initTranslations(); } @@ -110,10 +68,13 @@ const TopStack = new GObject.Class({ _init: function(params) { this.parent({ transition_type: 1, transition_duration: 500, expand: true }); this.prefsPage = new PrefsPage(); + // Translators: "Preferences" page in preferences this.add_titled(this.prefsPage, 'prefs', _("Preferences")); this.drawingPage = new DrawingPage(); + // Translators: "Drawing" page in preferences this.add_titled(this.drawingPage, 'drawing', _("Drawing")); this.aboutPage = new AboutPage(); + // Translators: "About" page in preferences this.add_titled(this.aboutPage, 'about', _("About")); } }); @@ -129,9 +90,12 @@ const AboutPage = new GObject.Class({ let vbox= new Gtk.Box({ orientation: Gtk.Orientation.VERTICAL, margin: MARGIN * 3 }); this.add(vbox); - let name = " " + _(Me.metadata.name) + ""; + // Translators: you are free to translate the extension name, that is displayed in About page, or not + let name = " " + _("Draw On You Screen") + ""; + // Translators: version number in "About" page let version = _("Version %d").format(Me.metadata.version); - let description = _(Me.metadata.description); + // Translators: you are free to translate the extension description, that is displayed in About page, or not + let description = _("Start drawing with Super+Alt+D and save your beautiful work by taking a screenshot"); let link = "" + Me.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"; @@ -153,6 +117,11 @@ const AboutPage = new GObject.Class({ creditBox.pack_start(rightBox, true, true, 5); vbox.add(creditBox); + // Translators: add your name here or keep it empty, it will be displayed in about page, e.g. + // msgstr "" + // "translator1\n" + // "translator2\n" + // "translator3" if (_("translator-credits") != "translator-credits" && _("translator-credits") != "") { leftBox.pack_start(new Gtk.Label(), false, false, 0); rightBox.pack_start(new Gtk.Label(), false, false, 0); @@ -162,7 +131,6 @@ const AboutPage = new GObject.Class({ rightBox.pack_start(rightLabel, false, false, 0); } } - }); const DrawingPage = new GObject.Class({ @@ -375,6 +343,7 @@ const DrawingPage = new GObject.Class({ _addNewPalette: function() { let colors = Array(9).fill('Black'); + // Translators: default name of a new palette this.palettes.push([_("New palette"), colors]); this._savePalettes(); }, @@ -407,10 +376,15 @@ const PrefsPage = new GObject.Class({ listBox.get_style_context().add_class('background'); globalFrame.add(listBox); - let globalKeybindingsRow = new Gtk.ListBoxRow({ activatable: false }); - let globalKeybindingsWidget = new KeybindingsWidget(GLOBAL_KEYBINDINGS, settings); - globalKeybindingsRow.add(globalKeybindingsWidget); - listBox.add(globalKeybindingsRow); + Shortcuts.GLOBAL_KEYBINDINGS.forEach((settingKeys, index) => { + if (index) + listBox.add(new Gtk.Box(ROWBOX_MARGIN_PARAMS)); + + let globalKeybindingsRow = new Gtk.ListBoxRow({ activatable: false }); + let globalKeybindingsWidget = new KeybindingsWidget(settingKeys, settings); + globalKeybindingsRow.add(globalKeybindingsWidget); + listBox.add(globalKeybindingsRow); + }); let persistentKey = schema.get_key('persistent-drawing'); let persistentRow = new PrefRow({ label: persistentKey.get_summary(), desc: persistentKey.get_description() }); @@ -447,28 +421,28 @@ const PrefsPage = new GObject.Class({ listBox.get_style_context().add_class('background'); internalFrame.add(listBox); - OTHER_SHORTCUTS.forEach((object, index) => { + Shortcuts.OTHERS.forEach((pairs, index) => { if (index) listBox.add(new Gtk.Box(ROWBOX_MARGIN_PARAMS)); - for (let key in object) { + pairs.forEach(pair => { let otherBox = new Gtk.Box({ margin_left: MARGIN, margin_right: MARGIN }); - let otherLabel = new Gtk.Label({ label: _(key), use_markup: true }); + let otherLabel = new Gtk.Label({ label: pair[0], use_markup: true }); otherLabel.set_halign(1); - let otherLabel2 = new Gtk.Label({ label: object[key] }); + let otherLabel2 = new Gtk.Label({ label: pair[1] }); otherBox.pack_start(otherLabel, true, true, 4); otherBox.pack_start(otherLabel2, false, false, 4); listBox.add(otherBox); - } + }); }); listBox.add(new Gtk.Box(ROWBOX_MARGIN_PARAMS)); - INTERNAL_KEYBINDINGS.forEach((array, index) => { + Shortcuts.INTERNAL_KEYBINDINGS.forEach((settingKeys, index) => { if (index) listBox.add(new Gtk.Box(ROWBOX_MARGIN_PARAMS)); - let internalKeybindingsWidget = new KeybindingsWidget(array, internalShortcutSettings); + let internalKeybindingsWidget = new KeybindingsWidget(settingKeys, internalShortcutSettings); listBox.add(internalKeybindingsWidget); }); @@ -552,7 +526,7 @@ const PixelSpinButton = new GObject.Class({ // Add 'px' unit. vfunc_output: function() { - this.text = _("%d px").format(Math.round(this.value * 100) / 100); + this.text = _("%f px").format(Number(this.value).toFixed(2)); return true; }, @@ -603,11 +577,11 @@ const KeybindingsWidget = new GObject.Class({ GTypeName: 'DrawOnYourScreenKeybindingsWidget', Extends: Gtk.Box, - _init: function(keybindings, settings) { + _init: function(settingKeys, settings) { this.parent(ROWBOX_MARGIN_PARAMS); this.set_orientation(Gtk.Orientation.VERTICAL); - this._keybindings = keybindings; + this._settingKeys = settingKeys; this._settings = settings; this._columns = { @@ -706,9 +680,9 @@ const KeybindingsWidget = new GObject.Class({ _refresh: function() { this._store.clear(); - for(let settings_key of this._keybindings) { + this._settingKeys.forEach(settingKey => { let [key, mods] = Gtk.accelerator_parse( - this._settings.get_strv(settings_key)[0] + this._settings.get_strv(settingKey)[0] ); let iter = this._store.append(); @@ -720,12 +694,12 @@ const KeybindingsWidget = new GObject.Class({ this._columns.KEY ], [ - settings_key, - this._settings.settings_schema.get_key(settings_key).get_summary(), + settingKey, + this._settings.settings_schema.get_key(settingKey).get_summary(), mods, key ] ); - } + }); } }); diff --git a/schemas/org.gnome.shell.extensions.draw-on-your-screen.gschema.xml b/schemas/org.gnome.shell.extensions.draw-on-your-screen.gschema.xml index 9b2e3c0..beea9e5 100644 --- a/schemas/org.gnome.shell.extensions.draw-on-your-screen.gschema.xml +++ b/schemas/org.gnome.shell.extensions.draw-on-your-screen.gschema.xml @@ -31,10 +31,82 @@ ["<Primary><Alt><Super>d"] + Grab/ungrab keyboard and pointer + + + "#2e2e2e" + Background color + The color of the drawing area background + + + true + Automatic dash array + Compute the lengths from the line width + + + 5 + Dash array on + The dash length in pixels + + + 15 + Dash array off + The gap between the dashes in pixels + + + 0 + Dash offset + The dash offset in pixels + + + "Gray" + Grid overlay color + The color of the lines + + + true + Automatic grid overlay line + Compute the lengths from the screen size + + + 10 + Grid overlay line spacing + The gap between lines in pixels + + + 0.5 + Grid overlay line width + The line width in pixels + + + + [ + ("Palette", ["HotPink","Cyan","yellow","Orangered","Chartreuse","DarkViolet","White","Gray","Black"]), + ("GNOME HIG lighter", ["rgb(153,193,241)","rgb(143,240,164)","rgb(249,240,107)","rgb(255,190,111)","rgb(246,97,81)","rgb(220,138,221)","rgb(205,171,143)","rgb(255,255,255)","rgb(119,118,123)"]), + ("GNOME HIG light", ["rgb(98,160,241)","rgb(87,227,137)","rgb(248,228,92)","rgb(255,163,72)","rgb(237,51,59)","rgb(192,97,203)","rgb(181,131,90)","rgb(246,245,244)","rgb(94,92,100)"]), + ("GNOME HIG normal", ["rgb(53,132,228)","rgb(51,209,122)","rgb(246,211,45)","rgb(255,120,0)","rgb(224,27,36)","rgb(145,65,172)","rgb(152,106,68)","rgb(222,221,218)","rgb(61,56,70)"]), + ("GNOME HIG dark", ["rgb(28,113,216)","rgb(46,194,126)","rgb(245,194,17)","rgb(230,97,0)","rgb(192,28,40)","rgb(129,61,156)","rgb(134,94,60)","rgb(192,191,188)","rgb(36,31,49)"]), + ("GNOME HIG darker", ["rgb(26,095,180)","rgb(38,162,105)","rgb(229,165,10)","rgb(198,70,0)","rgb(165,29,45)","rgb(97,53,131)","rgb(99,69,44)","rgb(154,153,150)","rgb(0,0,0)"]) + ] + + Color palettes + The palettes of drawing colors + + + true + Automatic square area size + Compute the size of the square area from the screen size + + + 512 + Square area size + The size of the square area in pixels + + KP_Subtract','minus','minus']]]> @@ -139,7 +211,7 @@ ["<Primary>p"] - Free drawing + Select free drawing ["<Primary>y"] @@ -242,75 +314,4 @@ Undo last brushstroke - - - "#2e2e2e" - Background color - The color of the drawing area background - - - true - Automatic dash array - Compute the lengths from the line width - - - 5 - Dash array on - The dash length in pixels - - - 15 - Dash array off - The gap between the dashes in pixels - - - 0 - Dash offset - The dash offset in pixels - - - "Gray" - Grid overlay color - The color of the lines - - - true - Automatic grid overlay line - Compute the lengths from the screen size - - - 10 - Grid overlay line spacing - The gap between lines in pixels - - - 0.5 - Grid overlay line width - The line width in pixels - - - - [ - ("Palette", ["HotPink","Cyan","yellow","Orangered","Chartreuse","DarkViolet","White","Gray","Black"]), - ("GNOME HIG lighter", ["rgb(153,193,241)","rgb(143,240,164)","rgb(249,240,107)","rgb(255,190,111)","rgb(246,97,81)","rgb(220,138,221)","rgb(205,171,143)","rgb(255,255,255)","rgb(119,118,123)"]), - ("GNOME HIG light", ["rgb(98,160,241)","rgb(87,227,137)","rgb(248,228,92)","rgb(255,163,72)","rgb(237,51,59)","rgb(192,97,203)","rgb(181,131,90)","rgb(246,245,244)","rgb(94,92,100)"]), - ("GNOME HIG normal", ["rgb(53,132,228)","rgb(51,209,122)","rgb(246,211,45)","rgb(255,120,0)","rgb(224,27,36)","rgb(145,65,172)","rgb(152,106,68)","rgb(222,221,218)","rgb(61,56,70)"]), - ("GNOME HIG dark", ["rgb(28,113,216)","rgb(46,194,126)","rgb(245,194,17)","rgb(230,97,0)","rgb(192,28,40)","rgb(129,61,156)","rgb(134,94,60)","rgb(192,191,188)","rgb(36,31,49)"]), - ("GNOME HIG darker", ["rgb(26,095,180)","rgb(38,162,105)","rgb(229,165,10)","rgb(198,70,0)","rgb(165,29,45)","rgb(97,53,131)","rgb(99,69,44)","rgb(154,153,150)","rgb(0,0,0)"]) - ] - - Color palettes - The palettes of drawing colors - - - true - Automatic square area size - Compute the size of the square area from the screen size - - - 512 - Square area size - The size of the square area in pixels - - diff --git a/shortcuts.js b/shortcuts.js new file mode 100644 index 0000000..6e9a07c --- /dev/null +++ b/shortcuts.js @@ -0,0 +1,102 @@ +/* jslint esversion: 6 */ +/* exported Shortcuts */ + +/* + * Copyright 2019 Abakkk + * + * This file is part of DrawOnYourScreen, a drawing extension for GNOME Shell. + * https://framagit.org/abakkk/DrawOnYourScreen + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +const Gtk = imports.gi.Gtk; + +const GS_VERSION = imports.misc.config.PACKAGE_VERSION; +const ExtensionUtils = imports.misc.extensionUtils; +const Me = ExtensionUtils.getCurrentExtension(); +const Convenience = ExtensionUtils.getSettings && ExtensionUtils.initTranslations ? ExtensionUtils : Me.imports.convenience; +const _ = imports.gettext.domain(Me.metadata['gettext-domain']).gettext; + +const internalShortcutsSchema = Convenience.getSettings(Me.metadata['settings-schema'] + '.internal-shortcuts').settings_schema; + +const getKeyLabel = function(accel) { + let [keyval, mods] = Gtk.accelerator_parse(accel); + return Gtk.accelerator_get_label(keyval, mods); +}; + +// It is used by helper and prefs. +var Shortcuts = { + + // The setting keys of the "org.gnome.shell.extensions.draw-on-your-screen" schema. + GLOBAL_KEYBINDINGS: [ + ['toggle-drawing', 'toggle-modal', 'erase-drawings'] + ], + + // The setting keys of the "org.gnome.shell.extensions.draw-on-your-screen.internal-shortcuts" schema. + INTERNAL_KEYBINDINGS: [ + ['undo', 'redo', 'delete-last-element', 'smooth-last-element'], + ['select-none-shape', 'select-line-shape', 'select-ellipse-shape', 'select-rectangle-shape', 'select-polygon-shape', 'select-polyline-shape', + 'select-text-shape', 'select-image-shape', 'select-move-tool', 'select-resize-tool', 'select-mirror-tool'], + ['switch-fill', 'switch-fill-rule', 'switch-color-palette', 'switch-color-palette-reverse'], + ['increment-line-width', 'increment-line-width-more', 'decrement-line-width', 'decrement-line-width-more', + 'switch-linejoin', 'switch-linecap', 'switch-dash'], + ['switch-font-family', 'switch-font-family-reverse', 'switch-font-weight', 'switch-font-style', 'switch-text-alignment', 'switch-image-file'], + ['toggle-panel-and-dock-visibility', 'toggle-background', 'toggle-grid', 'toggle-square-area'], + ['open-next-json', 'open-previous-json', 'save-as-json', 'save-as-svg', 'open-preferences', 'toggle-help'] + ], + + // Use functions to get the translations "at runtime". + _otherFunctions: [[ + () => [_("Draw"), _("Left click")], + () => [_("Menu"), _("Right click")], + () => [internalShortcutsSchema.get_key('switch-fill').get_summary(), _("Center click")], + () => [_("Increment/decrement line width"), _("Scroll")], + // Translators: %s are key labels (Ctrl+F1 and Ctrl+F9) + () => [_("Select color"), _("%s … %s").format(getKeyLabel('1'), getKeyLabel('9'))], + // Translators: %s is a key label + () => [_("Ignore pointer movement"), _("%s held").format(getKeyLabel('space'))], + () => [_("Leave"), getKeyLabel('Escape')], + ], [ + () => [_("Select eraser (while starting drawing)"), getKeyLabel('')], + () => [_("Duplicate (while starting handling)"), getKeyLabel('')], + () => [_("Rotate rectangle, polygon, polyline"), getKeyLabel('')], + () => [_("Extend circle to ellipse"), getKeyLabel('')], + () => [_("Curve line"), getKeyLabel('')], + () => [_("Smooth free drawing outline"), getKeyLabel('')], + () => [_("Rotate (while moving)"), getKeyLabel('')], + () => [_("Stretch (while resizing)"), getKeyLabel('')], + () => [_("Inverse (while mirroring)"), getKeyLabel('')], + ]], + + get OTHERS() { + if (!this._others) { + this._others = []; + this._otherFunctions.forEach(getPairFunctions => { + let pairs = []; + getPairFunctions.forEach(getPairFunction => pairs.push(getPairFunction())); + this._others.push(pairs); + }); + } + return this._others; + } +}; + +if (GS_VERSION < '3.36') + // Remove 'open-preferences' keybinding. + Shortcuts.INTERNAL_KEYBINDINGS.forEach(settingKeys => { + let index = settingKeys.indexOf('open-preferences'); + if (index != -1) + settingKeys.splice(index, 1); + });