From 11a00a25d04e677745974df44ebeb4485849a12c Mon Sep 17 00:00:00 2001 From: abakkk Date: Mon, 1 Jun 2020 19:28:06 +0200 Subject: [PATCH] Fix font-color label color Foreground color markup is not displayed since 3.36, use style instead but the transparency is lost. close #31 --- draw.js | 33 ++++++++++++++++++--------------- extension.js | 12 +++++++++++- 2 files changed, 29 insertions(+), 16 deletions(-) diff --git a/draw.js b/draw.js index 679e04e..330ffce 100644 --- a/draw.js +++ b/draw.js @@ -108,7 +108,7 @@ const getJsonFiles = function() { var DrawingArea = new Lang.Class({ Name: 'DrawOnYourScreenDrawingArea', Extends: St.DrawingArea, - Signals: { 'show-osd': { param_types: [GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_DOUBLE] }, + Signals: { 'show-osd': { param_types: [GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_STRING, GObject.TYPE_DOUBLE] }, 'stop-drawing': {} }, _init: function(params, monitor, helper, loadPersistent) { @@ -378,7 +378,7 @@ var DrawingArea = new Lang.Class({ if (this.currentElement.shape == Shapes.TEXT && this.currentElement.state == TextState.DRAWING) { this.currentElement.state = TextState.WRITING; this.currentElement.text = ''; - this.emit('show-osd', null, _("Type your text\nand press Enter"), -1); + this.emit('show-osd', null, _("Type your text\nand press Enter"), "", -1); this._updateTextCursorTimeout(); this.textHasCursor = true; this._redisplay(); @@ -525,38 +525,39 @@ var DrawingArea = new Lang.Class({ this.currentElement.color = this.currentColor.to_string(); this._redisplay(); } - this.emit('show-osd', null, `${this.currentColor.to_string()}`, -1); + // Foreground color markup is not displayed since 3.36, use style instead but the transparency is lost. + this.emit('show-osd', null, this.currentColor.to_string(), this.currentColor.to_string().slice(0, 7), -1); }, selectShape: function(shape) { this.currentShape = shape; - this.emit('show-osd', null, _(ShapeNames[shape]), -1); + this.emit('show-osd', null, _(ShapeNames[shape]), "", -1); this.updatePointerCursor(); }, toggleFill: function() { this.fill = !this.fill; - this.emit('show-osd', null, this.fill ? _("Fill") : _("Stroke"), -1); + this.emit('show-osd', null, this.fill ? _("Fill") : _("Stroke"), "", -1); }, toggleDash: function() { this.dashedLine = !this.dashedLine; - this.emit('show-osd', null, this.dashedLine ? _("Dashed line") : _("Full line"), -1); + this.emit('show-osd', null, this.dashedLine ? _("Dashed line") : _("Full line"), "", -1); }, incrementLineWidth: function(increment) { this.currentLineWidth = Math.max(this.currentLineWidth + increment, 0); - this.emit('show-osd', null, this.currentLineWidth + " " + _("px"), 2 * this.currentLineWidth); + this.emit('show-osd', null, this.currentLineWidth + " " + _("px"), "", 2 * this.currentLineWidth); }, toggleLineJoin: function() { this.currentLineJoin = this.currentLineJoin == 2 ? 0 : this.currentLineJoin + 1; - this.emit('show-osd', null, _(LineJoinNames[this.currentLineJoin]), -1); + this.emit('show-osd', null, _(LineJoinNames[this.currentLineJoin]), "", -1); }, toggleLineCap: function() { this.currentLineCap = this.currentLineCap == 2 ? 0 : this.currentLineCap + 1; - this.emit('show-osd', null, _(LineCapNames[this.currentLineCap]), -1); + this.emit('show-osd', null, _(LineCapNames[this.currentLineCap]), "", -1); }, toggleFontWeight: function() { @@ -565,7 +566,7 @@ var DrawingArea = new Lang.Class({ this.currentElement.font.weight = this.currentFontWeight; this._redisplay(); } - this.emit('show-osd', null, `${_(FontWeightNames[this.currentFontWeight])}`, -1); + this.emit('show-osd', null, `${_(FontWeightNames[this.currentFontWeight])}`, "", -1); }, toggleFontStyle: function() { @@ -574,7 +575,7 @@ var DrawingArea = new Lang.Class({ this.currentElement.font.style = this.currentFontStyle; this._redisplay(); } - this.emit('show-osd', null, `${_(FontStyleNames[this.currentFontStyle])}`, -1); + this.emit('show-osd', null, `${_(FontStyleNames[this.currentFontStyle])}`, "", -1); }, toggleFontFamily: function() { @@ -584,7 +585,7 @@ var DrawingArea = new Lang.Class({ this.currentElement.font.family = currentFontFamily; this._redisplay(); } - this.emit('show-osd', null, `${_(currentFontFamily)}`, -1); + this.emit('show-osd', null, `${_(currentFontFamily)}`, "", -1); }, toggleHelp: function() { @@ -729,7 +730,7 @@ var DrawingArea = new Lang.Class({ GLib.file_set_contents(path, contents); if (notify) - this.emit('show-osd', 'document-save-symbolic', name, -1); + this.emit('show-osd', 'document-save-symbolic', name, "", -1); if (name != Me.metadata['persistent-file-name']) { this.jsonName = name; this.lastJsonContents = contents; @@ -771,7 +772,7 @@ var DrawingArea = new Lang.Class({ this.elements.push(...JSON.parse(contents).map(object => new DrawingElement(object))); if (notify) - this.emit('show-osd', 'document-open-symbolic', name, -1); + this.emit('show-osd', 'document-open-symbolic', name, "", -1); if (name != Me.metadata['persistent-file-name']) { this.jsonName = name; this.lastJsonContents = contents; @@ -1436,13 +1437,15 @@ const DrawingMenu = new Lang.Class({ Mainloop.timeout_add(0, () => { for (let i = 1; i < this.area.colors.length; i++) { - let text = `${this.area.colors[i].to_string()}`; + let text = this.area.colors[i].to_string(); let iCaptured = i; let colorItem = item.menu.addAction(text, () => { this.area.currentColor = this.area.colors[iCaptured]; item.icon.set_style(`color:${this.area.currentColor.to_string().slice(0, 7)};`); }); colorItem.label.get_clutter_text().set_use_markup(true); + // Foreground color markup is not displayed since 3.36, use style instead but the transparency is lost. + colorItem.label.set_style(`color:${this.area.colors[i].to_string().slice(0, 7)};`); } return GLib.SOURCE_REMOVE; }); diff --git a/extension.js b/extension.js index ef5d9ed..9eef841 100644 --- a/extension.js +++ b/extension.js @@ -339,7 +339,7 @@ var AreaManager = new Lang.Class({ }, // use level -1 to set no level (null) - showOsd: function(emitter, iconName, label, level) { + showOsd: function(emitter, iconName, label, color, level) { if (this.osdDisabled) return; let activeIndex = this.areas.indexOf(this.activeArea); @@ -359,6 +359,16 @@ var AreaManager = new Lang.Class({ Main.osdWindowManager.show(activeIndex, icon || this.enterGicon, label, level, maxLevel); Main.osdWindowManager._osdWindows[activeIndex]._label.get_clutter_text().set_use_markup(true); + if (color) { + Main.osdWindowManager._osdWindows[activeIndex]._icon.set_style(`color:${color};`); + Main.osdWindowManager._osdWindows[activeIndex]._label.set_style(`color:${color};`); + let osdColorChangedHandler = Main.osdWindowManager._osdWindows[activeIndex]._label.connect('notify::text', () => { + Main.osdWindowManager._osdWindows[activeIndex]._icon.set_style(`color:;`); + Main.osdWindowManager._osdWindows[activeIndex]._label.set_style(`color:;`); + Main.osdWindowManager._osdWindows[activeIndex]._label.disconnect(osdColorChangedHandler); + }); + } + 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