summary refs log tree commit diff stats
path: root/compiler/renderer.nim
Commit message (Expand)AuthorAgeFilesLines
* custom integer literals (#17489)Andreas Rumpf2021-03-241-4/+14
* refs #17292 fix `repr` with `do:` (#17449)Timothee Cour2021-03-231-3/+10
* Fix #14325 (#17308)Clyybber2021-03-111-2/+2
* fix #13491 #17279 runnableExamples now don't get lost in translation (#17282)Timothee Cour2021-03-091-1/+1
* Use nicer escape sequences in renderer.nim (#17239)Clyybber2021-03-021-11/+11
* ARC Analysis in one pass v3 (#17068)Clyybber2021-02-171-9/+9
* Revert "ARC: Analysis in one pass v2 (#17000)" (#17046)Clyybber2021-02-151-9/+9
* ARC: Analysis in one pass v2 (#17000)Clyybber2021-02-101-9/+9
* Revert "ARC Analysis in one pass (#16849)" (#16984)Clyybber2021-02-091-9/+9
* ARC Analysis in one pass (#16849)Clyybber2021-02-091-9/+9
* close #16844 (#16852)flywind2021-01-291-0/+14
* Correct all eggs (#15906)Miran2020-11-101-1/+1
* Use modern enums in compiler (#15775)cooldome2020-11-021-1/+1
* fixes a regressionAraq2020-10-081-10/+18
* docgen: improve alignment of comments (still not perfect) (#15506)Andreas Rumpf2020-10-071-1/+1
* implements https://github.com/nim-lang/RFCs/issues/258 (#15503)Andreas Rumpf2020-10-061-3/+4
* renderer: use the biggest integer type for masking literals (#15482)alaviss2020-10-041-1/+1
* borrow checking (#15282)Andreas Rumpf2020-09-091-1/+8
* Big compiler Cleanup (#14777)Clyybber2020-08-281-14/+14
* Show that a variable is cursor in --expandArc (#15002)Clyybber2020-07-171-0/+2
* An optimizer for ARC (#14962)Andreas Rumpf2020-07-151-3/+18
* renderer.nim: more obvious debug outputAraq2020-07-101-1/+11
* init checks and 'out' parameters (#14521)Andreas Rumpf2020-06-231-4/+4
* Implement rendering of `[]=`, `{}`, `{}=` braces (#14539)cooldome2020-06-011-16/+54
* fix #14174 do not collapse pragma inside runnableExamples (#14385)Timothee Cour2020-05-181-1/+1
* Error -> Defect for defects (#13908)Jacek Sieka2020-04-281-2/+2
* fix several bugs with `repr` (#13386)Timothee Cour2020-02-111-4/+8
* fix #12740 (#12774)Arne Döring2019-12-041-7/+16
* Cosmetic compiler cleanup (#12718)Clyybber2019-11-281-191/+181
* .cursor implementation (#12637)Andreas Rumpf2019-11-121-0/+2
* make renderIds work againAndreas Rumpf2019-11-011-2/+3
* renderer letAux fix only for octal literal (#12343)Ridho Pratama2019-10-081-5/+8
* render typeof as typeofAndreas Rumpf2019-10-071-2/+2
* Small ast.nim cleanup (#12156)Clyybber2019-09-091-32/+32
* fixes #12029; finish the 'unused import' feature (#12064)Andreas Rumpf2019-08-271-0/+5
* genSym symbols rendered as b1_416049 instead of b1416049 (#11960)Timothee Cour2019-08-161-7/+12
* fixes #10053 (#11951)Timothee Cour2019-08-151-0/+12
* int128 on firstOrd, lastOrd and lengthOrd (#11701)Arne Döring2019-08-071-2/+1
* there is only one style -- my styleAraq2019-07-101-7/+7
* nimpretty: code cleanupsAraq2019-07-091-7/+4
* Fixes #11662: render ops priority (#11664)cooldome2019-07-051-4/+7
* docgen: do not render the ugly <//> operator; temporary hack until 0.20 has b...Araq2019-05-291-1/+4
* fixes #11239Araq2019-05-221-0/+1
* fixes #7816 (#11261)Andreas Rumpf2019-05-151-1/+1
* fixes #11131Andreas Rumpf2019-05-131-3/+4
* Replace countup(x, y) with x .. yClyybber2019-05-071-6/+6
* Replace countup(x, y-1) with x ..< yClyybber2019-05-071-8/+8
* dfa.nim: track object/tuple field accesses more precisely; sink(o.x); sink(o....Araq2019-04-161-1/+1
* more destructor based changes (#10885)Andreas Rumpf2019-03-231-4/+4
* docgen: generate pragma after generic, fixes #10792 (#10865)Miran2019-03-191-2/+8
an> "p", "a", "s", "d", "f", "g", "h", "j", "k", "l", "z", "x", "c", "v", "b", "n", "m"} local upper = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P", "A", "S", "D", "F", "G", "H", "J", "K", "L", "Z", "X", "C", "V", "B", "N", "M"} local xCoords = { 38, 74, 110, 146, 182, 218, 254, 290, 326, 362, 38, 74, 110, 146, 182, 218, 254, 290, 326, 362, 56, 92, 128, 164, 200, 236, 272, 308, 344, 74, 110,146, 182, 218, 254, 290} local yCoords = {100, 125, 150, 175} local row1CharCount = 10 local row2CharCount = 10 local row3CharCount = 9 local row4CharCount = 8 local row5CharCount = 2 local keyRow1Y = 100 local keyRow2Y = 125 local keyRow3Y = 150 local keyRow4Y = 175 local focusWidth = 26 local focusHeight = 30 local margin = 20 function TextInputScreen:init() TextInputScreen.super.init(self) self.lower = true self.showing = false self.input = "" self.defaultFont = gfx.getFont() local pixarlmed = gfx.font.new("Fonts/pixarlmed") gfx.setFont(pixarlmed) self.backgroundImageLower = playdate.graphics.image.new(400, 240) gfx.pushContext(self.backgroundImageLower) playdate.graphics.setColor(playdate.graphics.kColorWhite) gfx.fillRect(0, 0, 400, 240) playdate.graphics.setColor(playdate.graphics.kColorBlack) for n=1,36 do local y = 0 if n <= 10 then y = keyRow1Y elseif n <= 20 then y = keyRow2Y elseif n <= 29 then y = keyRow3Y else y = keyRow4Y end gfx.drawTextAligned(chars[n], xCoords[n], y, kTextAlignment.center) end gfx.drawTextAligned("del", 343, 175, kTextAlignment.center) gfx.drawTextAligned("space", 200, 205, kTextAlignment.center) gfx.drawTextAligned("done", 335, 205, kTextAlignment.center) gfx.popContext() self.backgroundImageUpper = playdate.graphics.image.new(400, 240) gfx.pushContext(self.backgroundImageUpper) playdate.graphics.setColor(playdate.graphics.kColorWhite) gfx.fillRect(0, 0, 400, 240) playdate.graphics.setColor(playdate.graphics.kColorBlack) for n=1,36 do local y = 0 if n <= 10 then y = keyRow1Y elseif n <= 20 then y = keyRow2Y elseif n <= 29 then y = keyRow3Y else y = keyRow4Y end gfx.drawTextAligned(upper[n], xCoords[n], y, kTextAlignment.center) end gfx.drawTextAligned("del", 343, 175, kTextAlignment.center) gfx.drawTextAligned("space", 200, 205, kTextAlignment.center) gfx.drawTextAligned("done", 335, 205, kTextAlignment.center) gfx.popContext() self:setImage(self.backgroundImageLower) self:moveTo(200, 120) self.rowIndex = 3 self.letterIndex = 5 local focusImage = playdate.graphics.image.new(focusWidth, focusHeight) gfx.pushContext(focusImage) playdate.graphics.setColor(playdate.graphics.kColorBlack) gfx.drawRoundRect(0, 0, focusWidth, focusHeight, 7) gfx.popContext() self.focusSprite = gfx.sprite.new(focusImage) local spacebarWidth = 136 local spacebarHeight = focusHeight local spacebarImage = playdate.graphics.image.new(spacebarWidth, 30) gfx.pushContext(spacebarImage) playdate.graphics.setColor(playdate.graphics.kColorBlack) gfx.drawRoundRect(0, 0, spacebarWidth, spacebarHeight, 7) gfx.popContext() self.spacebarSprite = gfx.sprite.new(spacebarImage) self.spacebarSprite:moveTo(200, 216) local deleteWidth = 50 local deleteHeight = focusHeight local deleteImage = playdate.graphics.image.new(deleteWidth, 30) gfx.pushContext(deleteImage) playdate.graphics.setColor(playdate.graphics.kColorBlack) gfx.drawRoundRect(0, 0, deleteWidth, deleteHeight, 7) gfx.popContext() self.deleteSprite = gfx.sprite.new(deleteImage) self.deleteSprite:moveTo(345, keyRow4Y + (focusHeight/2) - 5) local doneWidth = 63 local doneHeight = focusHeight local doneImage = playdate.graphics.image.new(doneWidth, 30) gfx.pushContext(doneImage) playdate.graphics.setColor(playdate.graphics.kColorBlack) gfx.drawRoundRect(0, 0, doneWidth, doneHeight, 7) gfx.popContext() self.doneSprite = gfx.sprite.new(doneImage) self.doneSprite:moveTo(336, 216) local inputImage = playdate.graphics.image.new(1, 1) self.inputSprite = gfx.sprite.new(inputImage) self.inputSprite:moveTo(200, 67) end function TextInputScreen:isShowing() return self.showing end function TextInputScreen:push(message, onDone) self.onDone = onDone self:add() self.focusSprite:add() self.inputSprite:add() self:updateFocusCaret() if message ~= nil then local messageImage = gfx.imageWithText(message, 400, 100) self.messageSprite = gfx.sprite.new(messageImage) self.messageSprite:moveTo(200, 25) self.messageSprite:add() end self.inputHandler = { cranked = function(change, acceleratedChange) end, leftButtonDown = function() self.letterIndex = math.max(1, self.letterIndex - 1) self:updateFocusCaret() end, rightButtonDown = function() self.letterIndex += 1 if self.rowIndex == 1 then if self.letterIndex > row1CharCount then self.letterIndex = row1CharCount end elseif self.rowIndex == 2 then if self.letterIndex > row2CharCount then self.letterIndex = row2CharCount end elseif self.rowIndex == 3 then if self.letterIndex > row3CharCount then self.letterIndex = row3CharCount end elseif self.rowIndex == 4 then if self.letterIndex > row4CharCount then self.letterIndex = row4CharCount end end self:updateFocusCaret() end, upButtonDown = function() self.rowIndex = math.max(1, self.rowIndex - 1) if self.rowIndex == 4 then self.letterIndex = 4 end self:updateFocusCaret() end, downButtonDown = function() self.rowIndex = math.min(5, self.rowIndex + 1) if self.rowIndex == 1 then if self.letterIndex > row1CharCount then self.letterIndex = row1CharCount end elseif self.rowIndex == 2 then if self.letterIndex > row2CharCount then self.letterIndex = row2CharCount end elseif self.rowIndex == 3 then if self.letterIndex > row3CharCount then self.letterIndex = row3CharCount end elseif self.rowIndex == 4 then if self.letterIndex > row4CharCount then self.letterIndex = row4CharCount end elseif self.rowIndex == 5 then --space bar self.letterIndex = 1 end self:updateFocusCaret() end, BButtonDown = function() self.lower = not self.lower if self.lower then self:setImage(self.backgroundImageLower) else self:setImage(self.backgroundImageUpper) end end, AButtonDown = function() self.focusSprite:moveBy(0, 1) self.spacebarSprite:moveBy(0, 1) self.deleteSprite:moveBy(0, 1) if self.rowIndex == 1 then if self.lower then self.input = self.input .. chars[self.letterIndex] else self.input = self.input .. upper[self.letterIndex] end elseif self.rowIndex == 2 then if self.lower then self.input = self.input .. chars[self.letterIndex + 10] else self.input = self.input .. upper[self.letterIndex + 10] end elseif self.rowIndex == 3 then if self.lower then self.input = self.input .. chars[self.letterIndex + 20] else self.input = self.input .. upper[self.letterIndex + 20] end elseif self.rowIndex == 4 then if self.letterIndex == row4CharCount then if string.len(self.input) > 0 then self.input = self.input:sub(1, -2) end else if self.lower then self.input = self.input .. chars[self.letterIndex + 29] else self.input = self.input .. upper[self.letterIndex + 29] end end elseif self.rowIndex == 5 then if self.letterIndex == 1 then self.input = self.input .. " " elseif self.letterIndex == 2 then self:pop() return end end print("Input: " .. self.input) if string.len(self.input) > 0 then local inputImage = gfx.imageWithText(self.input, 400, 100) self.inputSprite:setImage(inputImage) self.inputSprite:add() else self.inputSprite:remove() end end, BButtonUp = function() end, AButtonUp = function() self.focusSprite:moveBy(0, -1) self.spacebarSprite:moveBy(0, -1) self.deleteSprite:moveBy(0, -1) end } playdate.inputHandlers.push(self.inputHandler) self.showing = true end function TextInputScreen:updateFocusCaret() if self.rowIndex == 1 then self.focusSprite:moveTo(xCoords[self.letterIndex], yCoords[self.rowIndex] + (focusHeight/2) - 5) self.focusSprite:add() self.spacebarSprite:remove() self.deleteSprite:remove() elseif self.rowIndex == 2 then self.focusSprite:moveTo(xCoords[self.letterIndex + 10], yCoords[self.rowIndex] + (focusHeight/2) - 5) self.focusSprite:add() self.spacebarSprite:remove() self.deleteSprite:remove() elseif self.rowIndex == 3 then self.focusSprite:moveTo(xCoords[self.letterIndex + 20], yCoords[self.rowIndex] + (focusHeight/2) - 5) self.focusSprite:add() self.spacebarSprite:remove() self.deleteSprite:remove() elseif self.rowIndex == 4 then if self.letterIndex == row4CharCount then --delete self.focusSprite:remove() self.spacebarSprite:remove() self.deleteSprite:add() else self.focusSprite:moveTo(xCoords[self.letterIndex + 29], yCoords[self.rowIndex] + (focusHeight/2) - 5) self.focusSprite:add() self.spacebarSprite:remove() self.deleteSprite:remove() end self.doneSprite:remove() elseif self.rowIndex == 5 then self.focusSprite:remove() self.deleteSprite:remove() if self.letterIndex == 1 then self.spacebarSprite:add() self.doneSprite:remove() elseif self.letterIndex == 2 then self.spacebarSprite:remove() self.doneSprite:add() end else print("Invalid row index: " .. self.rowIndex) end end function TextInputScreen:pop() self.isShowing = false gfx.setFont(self.defaultFont) self.focusSprite:remove() self.spacebarSprite:remove() self.deleteSprite:remove() self.doneSprite:remove() self.inputSprite:remove() self.focusSprite = nil self.spacebarSprite = nil self.deleteSprite = nil self.doneSprite = nil self.inputSprite = nil if self.messageSprite ~= nil then self.messageSprite:remove() self.messageSprite = nil end self:remove() playdate.inputHandlers.pop() if self.onDone ~= nil then self.onDone(self.input) end end