From 360ac081cef456826534f31d9f3773d8fcbf4ef5 Mon Sep 17 00:00:00 2001 From: abakkk Date: Fri, 5 Jun 2020 15:58:58 +0200 Subject: [PATCH] Add grid overlay --- data/default.css | 4 ++ draw.js | 38 ++++++++++++++++++ extension.js | 1 + locale/draw-on-your-screen.pot | 3 ++ prefs.js | 1 + schemas/gschemas.compiled | Bin 3456 -> 3540 bytes ...extensions.draw-on-your-screen.gschema.xml | 9 ++++- 7 files changed, 54 insertions(+), 2 deletions(-) diff --git a/data/default.css b/data/default.css index b5ab3ef..f6015ea 100644 --- a/data/default.css +++ b/data/default.css @@ -46,6 +46,10 @@ -drawing-color8: rgba(130, 130, 130, 0.3); -drawing-color9: rgb(0, 0, 0); -drawing-background-color: #2e3436; + -grid-overlay-gap: 10px; + -grid-overlay-line-width: 0.4px; + -grid-overlay-interline-width: 0.2px; + -grid-overlay-color: gray; /*-drawing-square-area-width: 512px;*/ /*-drawing-square-area-height: 512px;*/ font-family: Cantarell; diff --git a/draw.js b/draw.js index 330ffce..c71b5ac 100644 --- a/draw.js +++ b/draw.js @@ -123,6 +123,7 @@ var DrawingArea = new Lang.Class({ this.currentElement = null; this.currentShape = Shapes.NONE; this.isSquareArea = false; + this.hasGrid = false; this.hasBackground = false; this.textHasCursor = false; this.dashedLine = false; @@ -160,6 +161,10 @@ var DrawingArea = new Lang.Class({ this.fontFamily = font.get_family(); this.currentFontWeight = font.get_weight(); this.currentFontStyle = font.get_style(); + this.gridGap = themeNode.get_length('-grid-overlay-gap') || 10; + this.gridLineWidth = themeNode.get_length('-grid-overlay-line-width') || 0.4; + this.gridInterlineWidth = themeNode.get_length('-grid-overlay-interline-width') || 0.2; + this.gridColor = themeNode.get_color('-grid-overlay-color'); this.squareAreaWidth = themeNode.get_length('-drawing-square-area-width'); this.squareAreaHeight = themeNode.get_length('-drawing-square-area-height'); } catch(e) { @@ -178,6 +183,11 @@ var DrawingArea = new Lang.Class({ this.currentFontWeight = this.currentFontWeight > 500 ? 1 : 0 ; // font style enum order of Cairo and Pango are different this.currentFontStyle = this.currentFontStyle == 2 ? 1 : ( this.currentFontStyle == 1 ? 2 : 0); + + this.gridGap = this.gridGap && this.gridGap >= 1 ? this.gridGap : 10; + this.gridLineWidth = this.gridLineWidth || 0.4; + this.gridInterlineWidth = this.gridInterlineWidth || 0.2; + this.gridColor = this.gridColor && this.gridColor.alpha ? this.gridColor : Clutter.Color.new(127, 127, 127, 255); }, vfunc_repaint: function() { @@ -207,6 +217,26 @@ var DrawingArea = new Lang.Class({ cr.stroke(); } + if (this.isInDrawingMode && this.hasGrid && this.gridGap && this.gridGap >= 1) { + Clutter.cairo_set_source_color(cr, this.gridColor); + + let [gridX, gridY] = [this.gridGap, this.gridGap]; + while (gridX < this.monitor.width) { + cr.setLineWidth((gridX / this.gridGap) % 5 ? this.gridInterlineWidth : this.gridLineWidth); + cr.moveTo(gridX, 0); + cr.lineTo(gridX, this.monitor.height); + gridX += this.gridGap; + cr.stroke(); + } + while (gridY < this.monitor.height) { + cr.setLineWidth((gridY / this.gridGap) % 5 ? this.gridInterlineWidth : this.gridLineWidth); + cr.moveTo(0, gridY); + cr.lineTo(this.monitor.width, gridY); + gridY += this.gridGap; + cr.stroke(); + } + } + cr.$dispose(); }, @@ -500,6 +530,11 @@ var DrawingArea = new Lang.Class({ this.get_parent().set_background_color(this.hasBackground ? this.activeBackgroundColor : null); }, + toggleGrid: function() { + this.hasGrid = !this.hasGrid; + this._redisplay(); + }, + toggleSquareArea: function() { this.isSquareArea = !this.isSquareArea; if (this.isSquareArea) { @@ -596,6 +631,7 @@ var DrawingArea = new Lang.Class({ }, enterDrawingMode: function() { + this.isInDrawingMode = true; this.stageKeyPressedHandler = global.stage.connect('key-press-event', this._onStageKeyPressed.bind(this)); this.stageKeyReleasedHandler = global.stage.connect('key-release-event', this._onStageKeyReleased.bind(this)); this.keyPressedHandler = this.connect('key-press-event', this._onKeyPressed.bind(this)); @@ -607,6 +643,7 @@ var DrawingArea = new Lang.Class({ }, leaveDrawingMode: function(save) { + this.isInDrawingMode = false; if (this.stageKeyPressedHandler) { global.stage.disconnect(this.stageKeyPressedHandler); this.stageKeyPressedHandler = null; @@ -1308,6 +1345,7 @@ const DrawingMenu = new Lang.Class({ let manager = Extension.manager; this._addSwitchItemWithCallback(this.menu, _("Hide panel and dock"), manager.hiddenList ? true : false, manager.togglePanelAndDockOpacity.bind(manager)); this._addSwitchItemWithCallback(this.menu, _("Add a drawing background"), this.area.hasBackground, this.area.toggleBackground.bind(this.area)); + this._addSwitchItemWithCallback(this.menu, _("Add a grid overlay"), this.area.hasGrid, this.area.toggleGrid.bind(this.area)); this._addSwitchItemWithCallback(this.menu, _("Square drawing area"), this.area.isSquareArea, this.area.toggleSquareArea.bind(this.area)); this._addSeparator(this.menu); diff --git a/extension.js b/extension.js index 68c4347..8fa8ad2 100644 --- a/extension.js +++ b/extension.js @@ -176,6 +176,7 @@ var AreaManager = new Lang.Class({ 'open-previous-json': this.activeArea.loadPreviousJson.bind(this.activeArea), 'open-next-json': this.activeArea.loadNextJson.bind(this.activeArea), 'toggle-background': this.activeArea.toggleBackground.bind(this.activeArea), + 'toggle-grid': this.activeArea.toggleGrid.bind(this.activeArea), 'toggle-square-area': this.activeArea.toggleSquareArea.bind(this.activeArea), 'increment-line-width': () => this.activeArea.incrementLineWidth(1), 'decrement-line-width': () => this.activeArea.incrementLineWidth(-1), diff --git a/locale/draw-on-your-screen.pot b/locale/draw-on-your-screen.pot index 2df55f0..676752b 100644 --- a/locale/draw-on-your-screen.pot +++ b/locale/draw-on-your-screen.pot @@ -199,6 +199,9 @@ msgstr "" msgid "Add a drawing background" msgstr "" +msgid "Add a grid overlay" +msgstr "" + msgid "Square drawing area" msgstr "" diff --git a/prefs.js b/prefs.js index 3971165..114c7f3 100644 --- a/prefs.js +++ b/prefs.js @@ -65,6 +65,7 @@ var INTERNAL_KEYBINDINGS = { '-separator-4': '', 'toggle-panel-and-dock-visibility': "Hide panel and dock", 'toggle-background': "Add a drawing background", + 'toggle-grid': "Add a grid overlay", 'toggle-square-area': "Square drawing area", '-separator-5': '', 'open-previous-json': "Open previous drawing", diff --git a/schemas/gschemas.compiled b/schemas/gschemas.compiled index eebc890de348b295b81de90a8af5f07457f944f1..1cd66c59bb02fdc2bc1e162edaad257b4dc06f6c 100644 GIT binary patch literal 3540 zcmZ`+U2GIp6dsi#|CC?bQnVn#wmQ3(QYfZY&Qe{qE9u1D%61oc*7R6Ana`41k2VgzP@`!zD>UskKHn{bL3>u4 z0)G#fhJ%r@F1`bSPyIfnt>MJ zVL%61H&N62(LCnjysXrQv?=g4;JvpG+@PI$DeQlN=gvkQ&cPAdsTaUr2VM=lak}Ly z?bJ=MZv*!Ni^m>orJb5_a^O5L@aWEV+Nl@8ei(cV82qQLk#=hOPk^rghjusqLOb~+F9c4WU+dCNJszjkc52#l z;8Eb_k4JiGr)Hhw;1fXK@rxhQPEG#_@D-rEx2U<4@ZW&lyZ;H=sq0~{!v<>yo*emY zigxOSu=jv-z|Uva$oZjWJtN>Zfg2Z+uhO5I{>Q=RfTvU(YT75k)4=2_hvxGvQP;qJ z9lQz~yIc8F(?0?30S>)B@jl~Iv(6m&E#PV8Pc8F;F9GRpKPh0XX(~?*!ve zFJoTtEkJAd=@#wOT(4Rju64i;6`z{%JHUOwPGzU2JqI2KijVI*&p6av-&5d^fga^g zP5(*oG_XtAscF9nuEn9=t?bmaH-WbSll|68#;4}E`oIu9HDJ(s}jv%auJCeS_nF`TR| zbU$Yl1RU|{+~Zk!!yE1LkRoCD&4HVxOTX&`dcTpk?9ocUe&y%-rfyokk+y{?Jre2i zcMFCiY~66+;ARH(A2#O${2y`{oimh0Bvj(&pSPwJ<_XBtpkoPuQ$3p<`TC_0CU+K=h2aKyl-kWOp zSoBQ>JPfcFe+{!-x$Ka@xzT4`uXbnmUHL6 z(eti1^Bk$T*hbq;6VoJvmkwaYwOy|jMa1iXV{24ZtG1}VV)t0KUFmPAdW2{AB04gi z+wGvMb8ivHsY{^y&P=;eMv09dc{fIRHnKKy2|3OEquxd`J4Io xyzs*3YQOucFUhhCo*1&+V$_{t@#H<&?G8I=-^^L9PsQ_NKd~{D#vx17{sX$BGkE|2 literal 3456 zcmZu!U2GIp7#)$yKP~@lsR}5t1!k903dKMbE&rI55KNz>vpaWpr=6WyW@h^b5~3zz z&;)$3F%lsrf(Z#tRDwn$ycjf+;DbuyOG%882MG^EF$VFRyLWeH*WKjwoSymSyWiZo z_s+dLUNSt(Z~{&J8o|9q9h;=QN5GROMmxy77T0!a$H8NDnpU?!(;nh?WEKo$HBGmBz$5iunc%g;b}0j99RLYREU9zR$vvd8d#%n z;hX8N>Co(xdTmfU5B?mu@ZH;u^r`2=zXARY82G2Xg+BFM`1irn@NkQpJ~%?3dNTY5 z@KT_z?W5`RsTacU1n&aQees}yJ~i|7fdz0aIPnR6YWlC zb7Yu4^-TCTz&`?K`YxsEQ_q3_JNR$l`Qblq(5IdSe=1%|47l@Y{8jqY^gF?OffrOf zHT^#DF`!%d)bvk+$AM%_v@s7g>%RuR4rt9kKcG)N8~z0N9WA;4MI5%YlpZso9@BU<25t@>4T^9()qmt$b?wXTVp0=B|+r=Aq`ex(U7w^sn6^ zeQNg4eQ^DB#JzHK2Inbt9sEY{9w0b;y_L0#09C=F+ETp1a^lGc@hxudmwlsaby`xD~MX9ekEPHT!cX zSOD+6b@&c_YB`?4ZvwxZTPpKYGyfR)W8g~KTF7{6#$N&d0Nl$hk@3`wp8)>}9NpdW zE90qIPXiX0)j<8|GjbeKGtYD2ZNS~1PV8emHT$_2YyoeaU3HT_^%D3e!DoTi+li_4 zso8Ir!QTR<^^=bZ~_^l z4_RiAMTT^_W)52wYD$E#FAm!sG+t7fZIfdEw}JPYhaa!PonJH}X6^Mn)X$c845H6PD`d zTsO$-w&4dln&uNSOSxWwXRxuvGS>CY>egg?s%FP^O67+4=PREp<=U>-7Rir(YYU^> zwAoFvDd8Eu(D~`IoDA#PY6o4L_ZRZQ>k=3Nvh-qC$&~9@G=Al}k#}AA-?~y>RjRzF zy(+#vjBhW+s|xu2G=)D9xOv$O{-B@LYYwZdtkbMf=X!N}w9fTmyX#BsM(gaTsiZ{jor-z<%JyHF< zsxG{q{e@)U8L2>PkrkSFn*nBECSG;;K4ipuiP)rCc}(%*@)ouuRGwPvZDc@|^M>Pz z%kLuDgsLI!Vzo{iIm;di^QSB8Ok1{H@tj80b>D)+}gWnFp05w>nPSh(HPfIevX zR?@PqV5Hc5SZ}uSKG}D2h!+FP`7IR(I|kr5g8ebS$^5<-&k@|$V|y*n1K6%=%>cG( zav#q#!xG>L09zA`3GTDPGsQgU`2f#FJX7$Tz%v83Rq{;2vj(=D@_expTn{V 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 8890675..1454195 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 @@ -53,8 +53,13 @@ ["<Primary>b"] - toggle background - toggle background + toggle drawing background + toggle drawing background + + + ["<Primary>g"] + toggle grid overlay + toggle grid overlay ["<Primary>h"]