Commit 41334929 authored by abakkk's avatar abakkk

Merge branch 'dev' into 'master'

Dev

See merge request abakkk/DrawOnYourScreen!4
parents 71c2309e 3f2fb189
......@@ -10,7 +10,8 @@ Features :
* Basic shapes (rectangle, circle, ellipse, line, curve, text, free)
* Smooth stroke
* Drawing on desktop and persistence
* Draw over applications
* Keep drawings on desktop background with persistence (notes, children's art ...)
* Multi-monitor support
* Export to SVG
......
......@@ -33,6 +33,7 @@ const Signals = imports.signals;
const St = imports.gi.St;
const BoxPointer = imports.ui.boxpointer;
const Config = imports.misc.config;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
const Slider = imports.ui.slider;
......@@ -46,6 +47,8 @@ const ExtensionJs = Extension.imports.extension;
const Prefs = Extension.imports.prefs;
const _ = imports.gettext.domain(Extension.metadata["gettext-domain"]).gettext;
const GS_VERSION = Config.PACKAGE_VERSION;
const FILL_ICON_PATH = Extension.dir.get_child('icons').get_child('fill-symbolic.svg').get_path();
const STROKE_ICON_PATH = Extension.dir.get_child('icons').get_child('stroke-symbolic.svg').get_path();
const LINEJOIN_ICON_PATH = Extension.dir.get_child('icons').get_child('linejoin-symbolic.svg').get_path();
......@@ -77,7 +80,6 @@ var DrawingArea = new Lang.Class({
this.settings = Convenience.getSettings();
this.emitter = new DrawingAreaEmitter();
this.monitor = monitor;
this.menu = new DrawingMenu(this);
this.helper = helper;
this.elements = [];
......@@ -95,6 +97,12 @@ var DrawingArea = new Lang.Class({
this._loadJson();
},
get menu() {
if (!this._menu)
this._menu = new DrawingMenu(this);
return this._menu;
},
_redisplay: function() {
// force area to emit 'repaint'
this.queue_repaint();
......@@ -458,8 +466,8 @@ 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.currentLineWidth = Math.max(this.currentLineWidth + increment, 0);
this.emitter.emit('show-osd', this.currentLineWidth + " " + _("px"), 2 * this.currentLineWidth);
},
toggleLineJoin: function() {
......@@ -919,6 +927,8 @@ var DrawingHelper = new Lang.Class({
this.vbox.add(hbox);
continue;
}
if (!settings.get_strv(settingKey)[0])
continue;
let [keyval, mods] = Gtk.accelerator_parse(settings.get_strv(settingKey)[0]);
hbox.add(new St.Label({ text: _(Prefs.GLOBAL_KEYBINDINGS[settingKey]) }));
hbox.add(new St.Label({ text: Gtk.accelerator_get_label(keyval, mods) }), { expand: true });
......@@ -946,6 +956,8 @@ var DrawingHelper = new Lang.Class({
continue;
}
let hbox = new St.BoxLayout({ vertical: false });
if (!settings.get_strv(settingKey)[0])
continue;
let [keyval, mods] = Gtk.accelerator_parse(settings.get_strv(settingKey)[0]);
hbox.add(new St.Label({ text: _(Prefs.INTERNAL_KEYBINDINGS[settingKey]) }));
hbox.add(new St.Label({ text: Gtk.accelerator_get_label(keyval, mods) }), { expand: true });
......@@ -958,8 +970,9 @@ var DrawingHelper = new Lang.Class({
for (let settingKey in MEDIA_KEYS_KEYS) {
if (!mediaKeysSettings.settings_schema.has_key(settingKey))
return;
let [keyval, mods] = Gtk.accelerator_parse(mediaKeysSettings.get_string(settingKey));
continue;
let shortcut = GS_VERSION < '3.33.0' ? mediaKeysSettings.get_string(settingKey) : mediaKeysSettings.get_strv(settingKey)[0];
let [keyval, mods] = Gtk.accelerator_parse(shortcut);
let hbox = new St.BoxLayout({ vertical: false });
hbox.add(new St.Label({ text: _(MEDIA_KEYS_KEYS[settingKey]) }));
hbox.add(new St.Label({ text: Gtk.accelerator_get_label(keyval, mods) }), { expand: true });
......@@ -1005,7 +1018,7 @@ var DrawingMenu = new Lang.Class({
this.area = area;
let side = Clutter.get_default_text_direction() == Clutter.TextDirection.RTL ? St.Side.RIGHT : St.Side.LEFT;
this.menu = new PopupMenu.PopupMenu(Main.layoutManager.dummyCursor, 0.25, side);
this.menuManager = new PopupMenu.PopupMenuManager({ actor: this.area });
this.menuManager = new PopupMenu.PopupMenuManager(GS_VERSION < '3.33.0' ? { actor: this.area } : this.area);
this.menuManager.addMenu(this.menu);
Main.layoutManager.uiGroup.add_actor(this.menu.actor);
......@@ -1022,7 +1035,6 @@ var DrawingMenu = new Lang.Class({
this.linecapIcon = new Gio.FileIcon({ file: Gio.File.new_for_path(LINECAP_ICON_PATH) });
this.fullLineIcon = new Gio.FileIcon({ file: Gio.File.new_for_path(FULL_LINE_ICON_PATH) });
this.dashedLineIcon = new Gio.FileIcon({ file: Gio.File.new_for_path(DASHED_LINE_ICON_PATH) });
},
disable: function() {
......@@ -1125,9 +1137,10 @@ var DrawingMenu = new Lang.Class({
_addSwitchItem: function(menu, label, iconFalse, iconTrue, target, targetProperty) {
let item = new PopupMenu.PopupSwitchMenuItem(label, target[targetProperty]);
let itemActor = GS_VERSION < '3.33.0' ? item.actor : item;
item.icon = new St.Icon({ style_class: 'popup-menu-icon' });
item.actor.insert_child_at_index(item.icon, 1);
itemActor.insert_child_at_index(item.icon, 1);
item.icon.set_gicon(target[targetProperty] ? iconTrue : iconFalse);
item.connect('toggled', (item, state) => {
......@@ -1146,17 +1159,34 @@ var DrawingMenu = new Lang.Class({
_addSliderItem: function(menu, target, targetProperty) {
let item = new PopupMenu.PopupBaseMenuItem({ activate: false });
let itemActor = GS_VERSION < '3.33.0' ? item.actor : item;
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);
let sliderActor = GS_VERSION < '3.33.0' ? slider.actor : slider;
if (GS_VERSION < '3.33.0') {
slider.connect('value-changed', (slider, value, property) => {
target[targetProperty] = Math.max(Math.round(value * 50), 0);
label.set_text(target[targetProperty] + " px");
if (target[targetProperty] === 0)
label.add_style_class_name(ExtensionJs.WARNING_COLOR_STYLE_CLASS_NAME);
else
label.remove_style_class_name(ExtensionJs.WARNING_COLOR_STYLE_CLASS_NAME);
});
} else {
slider.connect('notify::value', () => {
target[targetProperty] = Math.max(Math.round(slider.value * 50), 0);
label.set_text(target[targetProperty] + " px");
if (target[targetProperty] === 0)
label.add_style_class_name(ExtensionJs.WARNING_COLOR_STYLE_CLASS_NAME);
else
label.remove_style_class_name(ExtensionJs.WARNING_COLOR_STYLE_CLASS_NAME);
});
}
slider.connect('value-changed', (slider, value, property) => {
target[targetProperty] = Math.max(Math.round(value * 50), 1);
label.set_text(target[targetProperty] + " px");
});
item.actor.add(slider.actor, { expand: true });
item.actor.add(label);
item.actor.connect('key-press-event', slider.onKeyPressEvent.bind(slider));
itemActor.add(sliderActor, { expand: true });
itemActor.add(label);
itemActor.connect('key-press-event', slider.onKeyPressEvent.bind(slider));
menu.addMenuItem(item);
},
......@@ -1222,7 +1252,8 @@ var DrawingMenu = new Lang.Class({
_addSeparator: function(menu) {
let separator = new PopupMenu.PopupSeparatorMenuItem(' ');
separator.actor.add_style_class_name('draw-on-your-screen-menu-separator');
let separatorActor = GS_VERSION < '3.33.0' ? separator.actor : separator;
separatorActor.add_style_class_name('draw-on-your-screen-menu-separator');
menu.addMenuItem(separator);
}
});
......
......@@ -26,6 +26,7 @@ const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const St = imports.gi.St;
const Config = imports.misc.config;
const Main = imports.ui.main;
const OsdWindow = imports.ui.osdWindow;
const PanelMenu = imports.ui.panelMenu;
......@@ -35,8 +36,12 @@ const Convenience = Extension.imports.convenience;
const Draw = Extension.imports.draw;
const _ = imports.gettext.domain(Extension.metadata["gettext-domain"]).gettext;
const GS_VERSION = Config.PACKAGE_VERSION;
// DRAWING_ACTION_MODE is a custom Shell.ActionMode
var DRAWING_ACTION_MODE = Math.pow(2,14);
// use 'login-dialog-message-warning' class in order to get GS theme warning color (default: #f57900)
var WARNING_COLOR_STYLE_CLASS_NAME = 'login-dialog-message-warning';
let manager;
......@@ -322,8 +327,21 @@ var AreaManager = new Lang.Class({
return;
let activeIndex = this.areas.indexOf(this.activeArea);
if (activeIndex != -1) {
// GS 3.32- : bar from 0 to 100
// GS 3.34+ : bar from 0 to 1
if (level && GS_VERSION > '3.33.0')
level = level / 100;
Main.osdWindowManager.show(activeIndex, this.enterGicon, label, level, maxLevel);
Main.osdWindowManager._osdWindows[activeIndex]._label.get_clutter_text().set_use_markup(true);
if (level === 0) {
Main.osdWindowManager._osdWindows[activeIndex]._label.add_style_class_name(WARNING_COLOR_STYLE_CLASS_NAME);
// the same label is shared by all GS OSD so the style must be removed after being used
let osdLabelChangedHandler = Main.osdWindowManager._osdWindows[activeIndex]._label.connect('notify::text', () => {
Main.osdWindowManager._osdWindows[activeIndex]._label.remove_style_class_name(WARNING_COLOR_STYLE_CLASS_NAME);
Main.osdWindowManager._osdWindows[activeIndex]._label.disconnect(osdLabelChangedHandler);
});
}
}
},
......@@ -378,16 +396,17 @@ var DrawingIndicator = new Lang.Class({
_init: function() {
let [menuAlignment, dontCreateMenu] = [0, true];
this.button = new PanelMenu.Button(menuAlignment, "Drawing Indicator", dontCreateMenu);
this.buttonActor = GS_VERSION < '3.33.0' ? this.button.actor: this.button;
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;
this.buttonActor.add_child(this.icon);
this.buttonActor.visible = false;
},
sync: function(visible) {
this.button.actor.visible = visible;
this.buttonActor.visible = visible;
},
disable: function() {
......
......@@ -17,11 +17,18 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
# add your name here, for example:
# "Aïssata\n"
# "<a href=\"mailto:ali@mail.org\">Ali</a>\n"
# "<a href=\"https://...\">丽</a>"
# It will be displayed in About page
# Add your name here, for example:
# (add "\n" as separator if there is many translators)
# msgid "Translators"
# msgstr "Me"
# or, with mail:
# msgid "Translators"
# msgstr "<a href=\"mailto:me@mail.org\">Me</a>"
# or, with page:
# msgid "Translators"
# msgstr "<a href=\"https://...\">Me</a>"
# else keep it empty.
# It will be displayed in about page
msgid "Translators"
msgstr ""
......
{
"name": "Draw On You Screen",
"description": "Start drawing with Super+Alt+D and save your beautiful work by taking a screenshot",
"version": 4,
"version": 4.1,
"uuid": "drawOnYourScreen@abakkk.framagit.org",
"url": "https://framagit.org/abakkk/DrawOnYourScreen",
"settings-schema": "org.gnome.shell.extensions.draw-on-your-screen",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment