mirror of
https://github.com/LDDestroier/CC/
synced 2025-06-27 15:42:59 +00:00
Copy and paste (#5)
* Beginning copy/pasteing regions * Added copy/paste, lines render when creating another win for Ikon babyyy * Update pain.lua * Update pain.lua * Update pain.lua
This commit is contained in:
parent
17c1fc2573
commit
d2770c0b47
292
pain.lua
292
pain.lua
@ -4,8 +4,6 @@
|
|||||||
wget https://raw.githubusercontent.com/LDDestroier/CC/master/pain.lua pain
|
wget https://raw.githubusercontent.com/LDDestroier/CC/master/pain.lua pain
|
||||||
pastebin get wJQ7jav0 pain
|
pastebin get wJQ7jav0 pain
|
||||||
std ld pain pain
|
std ld pain pain
|
||||||
|
|
||||||
This is a stable release. You fool!
|
|
||||||
--]]
|
--]]
|
||||||
local askToSerialize = false
|
local askToSerialize = false
|
||||||
local defaultSaveFormat = 4 -- will change if importing image, or making new file with extension in name
|
local defaultSaveFormat = 4 -- will change if importing image, or making new file with extension in name
|
||||||
@ -96,6 +94,7 @@ local firstBG = term.getBackgroundColor()
|
|||||||
local firstTX = term.getTextColor()
|
local firstTX = term.getTextColor()
|
||||||
local changedImage = false
|
local changedImage = false
|
||||||
local isCurrentlyFilling = false
|
local isCurrentlyFilling = false
|
||||||
|
local theClipboard = {}
|
||||||
|
|
||||||
local _
|
local _
|
||||||
local tableconcat = table.concat
|
local tableconcat = table.concat
|
||||||
@ -271,30 +270,30 @@ Hotkeys:
|
|||||||
left/right ctrl: Toggle the menu
|
left/right ctrl: Toggle the menu
|
||||||
|
|
||||||
left click:
|
left click:
|
||||||
+left shift = Drag and let go to make a line
|
+left shift = Drag and let go to draw a line
|
||||||
-alone = Place pixel
|
-alone = Place a dot
|
||||||
|
|
||||||
right click: delete pixel
|
Right Click: delete pixel
|
||||||
|
|
||||||
middle click OR "t": Place text down with current colors, cancel with X
|
Middle Click, or "T": Place text down with current colors; cancel with X
|
||||||
|
|
||||||
"z":
|
"Z":
|
||||||
+left alt = Redo
|
+LeftAlt = Redo
|
||||||
-alone = Undo
|
-alone = Undo
|
||||||
|
|
||||||
"p": Pick colors from position onscreen; cancel with X
|
"P": Pick colors from position onscreen; cancel with X
|
||||||
|
|
||||||
"n":
|
"N":
|
||||||
+left shift = Change character to that of a special character
|
+LeftShift = Change character to that of a special character
|
||||||
-alone = Change box character for drawing
|
-alone = Change box character for drawing
|
||||||
(cancel with CTRL, N, or by clicking outside)
|
(cancel with CTRL, N, or by clicking outside)
|
||||||
|
|
||||||
"[" or mouse scroll down:
|
"[" or mouse scroll down:
|
||||||
+shift = Change to previous text color
|
+LeftShift = Change to previous text color
|
||||||
-alone = Change to previous background color
|
-alone = Change to previous background color
|
||||||
|
|
||||||
"]" or mouse scroll up:
|
"]" or mouse scroll up:
|
||||||
+shift = Change to next text color
|
+LeftShift = Change to next text color
|
||||||
-alone = Change to next background color
|
-alone = Change to next background color
|
||||||
|
|
||||||
"F1":
|
"F1":
|
||||||
@ -303,45 +302,51 @@ Hotkeys:
|
|||||||
"F3:"
|
"F3:"
|
||||||
-alone = View all connected monitors
|
-alone = View all connected monitors
|
||||||
|
|
||||||
spacebar:
|
Spacebar:
|
||||||
+shift = Toggle background grid
|
+LeftShift = Toggle background grid
|
||||||
-alone = Toggle bar visibility
|
-alone = Toggle bar visibility
|
||||||
|
|
||||||
arrow keys:
|
Arrow keys:
|
||||||
+shift = Displaces the entire frame
|
+LeftShift = Displaces the entire frame
|
||||||
+tab = Moves canvas one pixel at a time
|
+Tab = Moves canvas one pixel at a time
|
||||||
-alone = Looks around the canvas smoothly
|
-alone = Looks around the canvas smoothly
|
||||||
|
|
||||||
"+" (or equals):
|
"+" (or equals):
|
||||||
+left alt = Swap the current frame with the next frame
|
+LeftAlt = Swap the current frame with the next frame
|
||||||
+left shift = Merge the current frame atop the next frame
|
+LeftShift = Merge the current frame atop the next frame
|
||||||
+right shift = If you are making a new frame, duplicates the last frame
|
+RightShift = If you are making a new frame, duplicates the last frame
|
||||||
-alone = Change to next frame
|
-alone = Change to next frame
|
||||||
|
|
||||||
"-":
|
"-":
|
||||||
+left alt = Swap the current frame with the previous frame
|
+LeftAlt = Swap the current frame with the previous frame
|
||||||
+left shift = Merge the current frame atop the previous frame
|
+LeftShift = Merge the current frame atop the previous frame
|
||||||
-alone = Change to previous frame
|
-alone = Change to previous frame
|
||||||
|
|
||||||
(oh good, you're actually reading this stuff)
|
(oh good, you're actually reading this stuff)
|
||||||
|
|
||||||
"a": Set the coordinates to 0,0
|
"A": Set the coordinates to 0,0
|
||||||
|
|
||||||
"n": Open block character selection
|
"N": Open block character selection
|
||||||
|
|
||||||
"b": Toggle redirect to blittle, to preview in teletext characters
|
"B": Toggle redirect to blittle, to preview in teletext characters
|
||||||
|
|
||||||
"c": Input coordinates to scroll over to
|
"c":
|
||||||
|
+LeftAlt = Select region to copy to specified clipboard
|
||||||
|
-alone = Input coordinates to scroll over to
|
||||||
|
|
||||||
"g": toggle grayscale mode.
|
"LeftAlt + X": Select region to cut to specified clipboard
|
||||||
|
|
||||||
|
"LeftAlt + X": Pastes from specified clipboard
|
||||||
|
|
||||||
|
"G": toggle grayscale mode.
|
||||||
Everything is in shades of gray.
|
Everything is in shades of gray.
|
||||||
If you Save, it saves in grayscale.
|
If you Save, it saves in grayscale.
|
||||||
|
|
||||||
"f":
|
"F":
|
||||||
+left shift = fill all empty pixels with background color and selected box character
|
+LeftShift = fill all empty pixels with background color and selected box character
|
||||||
-alone = activate fill tool - click anywhere to fill with color
|
-alone = activate fill tool - click anywhere to fill with color
|
||||||
|
|
||||||
"m": set metadata for pixels (for game makers, otherwise please ignore)
|
"M": set metadata for pixels (for game makers, otherwise please ignore)
|
||||||
|
|
||||||
==================================
|
==================================
|
||||||
Thy Menu (accessible with CTRL):
|
Thy Menu (accessible with CTRL):
|
||||||
@ -380,6 +385,16 @@ Hotkeys:
|
|||||||
"Edit > BLittle Shrink"
|
"Edit > BLittle Shrink"
|
||||||
Shrinks the current frame using the BLittle API. Very lossy, and unreversable without Undo.
|
Shrinks the current frame using the BLittle API. Very lossy, and unreversable without Undo.
|
||||||
|
|
||||||
|
"Edit > Copy"
|
||||||
|
Drag to select a region of the screen, and save it in a clipboard of a specified name.
|
||||||
|
|
||||||
|
"Edit > Cut"
|
||||||
|
Same as Copy, but deletes the selected region on the screen.
|
||||||
|
|
||||||
|
"Edit > Paste"
|
||||||
|
Takes the contents of the specified clipboard, and plops it on the canvas where the mouse is.
|
||||||
|
(The mouse will indicate the top-left corner of the pasted selection)
|
||||||
|
|
||||||
"Set > ..."
|
"Set > ..."
|
||||||
Each option will toggle a config option (or set it's value to something else).
|
Each option will toggle a config option (or set it's value to something else).
|
||||||
Changing a value is saved automatically, and effective immediately.
|
Changing a value is saved automatically, and effective immediately.
|
||||||
@ -1414,7 +1429,7 @@ renderPAIN = function(dots,xscroll,yscroll,doPain,dontRenderBar)
|
|||||||
term.setBackgroundColor((paint.doGray and grayOut(d.b) or d.b) or rendback.b)
|
term.setBackgroundColor((paint.doGray and grayOut(d.b) or d.b) or rendback.b)
|
||||||
if painconfig.gridBleedThrough then
|
if painconfig.gridBleedThrough then
|
||||||
term.setTextColor(rendback.t)
|
term.setTextColor(rendback.t)
|
||||||
term.write(grid[ ro( d.y+2, #grid)+1]:sub(1+ro(d.x+-1,#grid[1]), 1+ro(d.x+-1,#grid[1])))
|
term.write((d.x >= 1 and d.y >= 1) and grid[ ro( d.y+2, #grid)+1]:sub(1+ro(d.x+-1,#grid[1]), 1+ro(d.x+-1,#grid[1])) or "/")
|
||||||
else
|
else
|
||||||
term.setTextColor( (paint.doGray and grayOut(d.t) or d.t) or rendback.t)
|
term.setTextColor( (paint.doGray and grayOut(d.t) or d.t) or rendback.t)
|
||||||
term.write(d.c or " ")
|
term.write(d.c or " ")
|
||||||
@ -2058,6 +2073,68 @@ local checkIfNFP = function(str) --does not check table format, only string form
|
|||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local selectRegion = function()
|
||||||
|
local position = {}
|
||||||
|
local mevt, id, x1, y1 = os.pullEvent("mouse_click")
|
||||||
|
local x2, y2, pos, redrawID
|
||||||
|
local renderRectangle = true
|
||||||
|
redrawID = os.startTimer(0.5)
|
||||||
|
while true do
|
||||||
|
mevt, id, x2, y2 = os.pullEvent()
|
||||||
|
if mevt == "mouse_up" or mevt == "mouse_drag" or mevt == "mouse_click" then
|
||||||
|
pos = {{
|
||||||
|
x1 < x2 and x1 or x2,
|
||||||
|
y1 < y2 and y1 or y2
|
||||||
|
},{
|
||||||
|
x1 < x2 and x2 or x1,
|
||||||
|
y1 < y2 and y2 or y1
|
||||||
|
}}
|
||||||
|
end
|
||||||
|
if mevt == "mouse_up" then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
if (mevt == "mouse_drag") or (mevt == "timer" and id == redrawID) then
|
||||||
|
renderAllPAIN()
|
||||||
|
if renderRectangle then
|
||||||
|
term.setTextColor(rendback.t)
|
||||||
|
term.setBackgroundColor(rendback.b)
|
||||||
|
for y = pos[1][2], pos[2][2] do
|
||||||
|
if y ~= scr_y then
|
||||||
|
term.setCursorPos(pos[1][1], y)
|
||||||
|
if (y == pos[1][2] or y == pos[2][2]) then
|
||||||
|
term.write(("#"):rep(1 + pos[2][1] - pos[1][1]))
|
||||||
|
else
|
||||||
|
term.write("#")
|
||||||
|
term.setCursorPos(pos[2][1], y)
|
||||||
|
term.write("#")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if (mevt == "timer" and id == redrawID) then
|
||||||
|
renderRectangle = not renderRectangle
|
||||||
|
redrawID = os.startTimer(0.25)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
local output = {}
|
||||||
|
for k,v in pairs(paintEncoded[frame]) do
|
||||||
|
if v.x >= pos[1][1] and v.x <= pos[2][1] then
|
||||||
|
if v.y >= pos[1][2] and v.y <= pos[2][2] then
|
||||||
|
output[#output+1] = {
|
||||||
|
x = v.x - pos[1][1],
|
||||||
|
y = v.y - pos[1][2],
|
||||||
|
t = v.t,
|
||||||
|
c = v.c,
|
||||||
|
b = v.b,
|
||||||
|
m = v.m
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return output, pos[1][1], pos[1][2], pos[2][1], pos[2][2]
|
||||||
|
end
|
||||||
|
|
||||||
local openNewFile = function(fname, allowNonImageNFP)
|
local openNewFile = function(fname, allowNonImageNFP)
|
||||||
local file = fs.open(fname,"r")
|
local file = fs.open(fname,"r")
|
||||||
local contents = file.readAll()
|
local contents = file.readAll()
|
||||||
@ -2087,6 +2164,70 @@ local openNewFile = function(fname, allowNonImageNFP)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local editCopy = function()
|
||||||
|
local board = bottomPrompt("Copy to board: ")
|
||||||
|
renderAllPAIN()
|
||||||
|
renderBottomBar("Select region to copy.")
|
||||||
|
local selectedDots = selectRegion()
|
||||||
|
theClipboard[board] = selectedDots
|
||||||
|
barmsg = "Copied to '"..board.."'"
|
||||||
|
doRender = true
|
||||||
|
keysDown = {}
|
||||||
|
miceDown = {}
|
||||||
|
end
|
||||||
|
local editCut = function()
|
||||||
|
local board = bottomPrompt("Cut to board: ")
|
||||||
|
renderAllPAIN()
|
||||||
|
renderBottomBar("Select region to copy.")
|
||||||
|
local selectedDots, x1, y1, x2, y2 = selectRegion()
|
||||||
|
theClipboard[board] = selectedDots
|
||||||
|
local dot
|
||||||
|
for i = #paintEncoded[frame], 1, -1 do
|
||||||
|
dot = paintEncoded[frame][i]
|
||||||
|
if dot.x >= x1 and dot.x <= x2 then
|
||||||
|
if dot.y >= y1 and dot.y <= y2 then
|
||||||
|
table.remove(paintEncoded[frame], i)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
barmsg = "Cut to '"..board.."'"
|
||||||
|
doRender = true
|
||||||
|
saveToUndoBuffer()
|
||||||
|
keysDown = {}
|
||||||
|
miceDown = {}
|
||||||
|
end
|
||||||
|
|
||||||
|
local editPaste = function()
|
||||||
|
local board = bottomPrompt("Paste from board: ")
|
||||||
|
renderAllPAIN()
|
||||||
|
renderBottomBar("Click to paste. (top left corner)")
|
||||||
|
if theClipboard[board] then
|
||||||
|
local mevt
|
||||||
|
repeat
|
||||||
|
mevt = {os.pullEvent()}
|
||||||
|
until (mevt[1] == "key" and mevt[2] == keys.x) or (mevt[1] == "mouse_click" and mevt[2] == 1 and (mevt[4] or scr_y) <= scr_y-1)
|
||||||
|
for k,v in pairs(theClipboard[board]) do
|
||||||
|
paintEncoded[frame][#paintEncoded[frame]+1] = {
|
||||||
|
x = v.x + paint.scrollX + (mevt[3]),
|
||||||
|
y = v.y + paint.scrollY + (mevt[4]),
|
||||||
|
c = v.c,
|
||||||
|
t = v.t,
|
||||||
|
b = v.b,
|
||||||
|
m = v.m
|
||||||
|
}
|
||||||
|
end
|
||||||
|
paintEncoded[frame] = clearRedundant(paintEncoded[frame])
|
||||||
|
barmsg = "Pasted from '"..board.."'"
|
||||||
|
doRender = true
|
||||||
|
saveToUndoBuffer()
|
||||||
|
keysDown = {}
|
||||||
|
miceDown = {}
|
||||||
|
else
|
||||||
|
barmsg = "No such clipboard."
|
||||||
|
doRender = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
local displayMenu = function()
|
local displayMenu = function()
|
||||||
menuOptions = {"File","Edit","Window","Set","About","Exit"}
|
menuOptions = {"File","Edit","Window","Set","About","Exit"}
|
||||||
local diss = " "..tableconcat(menuOptions," ")
|
local diss = " "..tableconcat(menuOptions," ")
|
||||||
@ -2264,13 +2405,22 @@ local displayMenu = function()
|
|||||||
return exportName
|
return exportName
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local editClear = function(ignorePrompt)
|
||||||
|
local outcum = ignorePrompt and "y" or bottomPrompt("Clear the frame? (Y/N)",_,"yn",{keys.leftCtrl,keys.rightCtrl})
|
||||||
|
if outcum == "y" then
|
||||||
|
paintEncoded[frame] = {}
|
||||||
|
saveToUndoBuffer()
|
||||||
|
barmsg = "Cleared frame "..frame.."."
|
||||||
|
end
|
||||||
|
doRender = true
|
||||||
|
end
|
||||||
|
|
||||||
local editDelFrame = function()
|
local editDelFrame = function()
|
||||||
local outcum = bottomPrompt("Thou art sure? (Y/N)",_,"yn",{keys.leftCtrl,keys.rightCtrl})
|
local outcum = bottomPrompt("Thou art sure? (Y/N)",_,"yn",{keys.leftCtrl,keys.rightCtrl})
|
||||||
doRender = true
|
doRender = true
|
||||||
if outcum == "y" then
|
if outcum == "y" then
|
||||||
if #paintEncoded == 1 then
|
if #paintEncoded == 1 then
|
||||||
barmsg = "Fat chance."
|
return editClear(true)
|
||||||
return
|
|
||||||
end
|
end
|
||||||
table.remove(paintEncoded,frame)
|
table.remove(paintEncoded,frame)
|
||||||
barmsg = "Deleted frame "..frame.."."
|
barmsg = "Deleted frame "..frame.."."
|
||||||
@ -2287,15 +2437,6 @@ local displayMenu = function()
|
|||||||
saveToUndoBuffer()
|
saveToUndoBuffer()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
local editClear = function()
|
|
||||||
local outcum = bottomPrompt("Clear the frame? (Y/N)",_,"yn",{keys.leftCtrl,keys.rightCtrl})
|
|
||||||
if outcum == "y" then
|
|
||||||
paintEncoded[frame] = {}
|
|
||||||
saveToUndoBuffer()
|
|
||||||
barmsg = "Cleared frame "..frame.."."
|
|
||||||
end
|
|
||||||
doRender = true
|
|
||||||
end
|
|
||||||
local editCrop = function()
|
local editCrop = function()
|
||||||
local outcum = bottomPrompt("Crop all but visible? (Y/N)",_,"yn",{keys.leftCtrl,keys.rightCtrl})
|
local outcum = bottomPrompt("Crop all but visible? (Y/N)",_,"yn",{keys.leftCtrl,keys.rightCtrl})
|
||||||
if outcum == "y" then
|
if outcum == "y" then
|
||||||
@ -2426,7 +2567,13 @@ I recommend using NFT if you don't need multiple frames, NFP if you don't need t
|
|||||||
[1] = function() --File
|
[1] = function() --File
|
||||||
while true do
|
while true do
|
||||||
--renderAllPAIN()
|
--renderAllPAIN()
|
||||||
local output, longestLen = makeSubMenu(1,cleary-1,{"Save","Save As","Export","Open",((peripheral.find("printer")) and "Print" or nil)})
|
local output, longestLen = makeSubMenu(1,cleary-1,{
|
||||||
|
"Save",
|
||||||
|
"Save As",
|
||||||
|
"Export",
|
||||||
|
"Open",
|
||||||
|
((peripheral.find("printer")) and "Print" or nil)
|
||||||
|
})
|
||||||
doRender = true
|
doRender = true
|
||||||
if output == 1 then -- Save
|
if output == 1 then -- Save
|
||||||
local _fname = fileExport(_,defaultSaveFormat,fileName)
|
local _fname = fileExport(_,defaultSaveFormat,fileName)
|
||||||
@ -2479,7 +2626,17 @@ I recommend using NFT if you don't need multiple frames, NFP if you don't need t
|
|||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
[2] = function() --Edit
|
[2] = function() --Edit
|
||||||
local output = makeSubMenu(6,cleary-1,{"Delete Frame","Clear Frame","Crop Frame","Choose Box Character","Choose Special Character","BLittle Shrink"})
|
local output = makeSubMenu(6,cleary-1,{
|
||||||
|
"Delete Frame",
|
||||||
|
"Clear Frame",
|
||||||
|
"Crop Frame",
|
||||||
|
"Choose Box Character",
|
||||||
|
"Choose Special Character",
|
||||||
|
"BLittle Shrink",
|
||||||
|
"Copy Region",
|
||||||
|
"Cut Region",
|
||||||
|
"Paste Region"
|
||||||
|
})
|
||||||
doRender = true
|
doRender = true
|
||||||
if output == 1 then
|
if output == 1 then
|
||||||
editDelFrame()
|
editDelFrame()
|
||||||
@ -2513,12 +2670,22 @@ I recommend using NFT if you don't need multiple frames, NFP if you don't need t
|
|||||||
doRender = true
|
doRender = true
|
||||||
barmsg = "Shrunk image."
|
barmsg = "Shrunk image."
|
||||||
end
|
end
|
||||||
|
elseif output == 7 then
|
||||||
|
editCopy()
|
||||||
|
elseif output == 8 then
|
||||||
|
editCut()
|
||||||
|
elseif output == 9 then
|
||||||
|
editPaste()
|
||||||
elseif output == false then
|
elseif output == false then
|
||||||
return "nobreak"
|
return "nobreak"
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
[3] = function() --Window
|
[3] = function() --Window
|
||||||
local output = makeSubMenu(11,cleary-1,{"Set Screen Size","Set Scroll XY","Set Grid Colors"})
|
local output = makeSubMenu(11,cleary-1,{
|
||||||
|
"Set Screen Size",
|
||||||
|
"Set Scroll XY",
|
||||||
|
"Set Grid Colors"
|
||||||
|
})
|
||||||
doRender = true
|
doRender = true
|
||||||
if output == 1 then
|
if output == 1 then
|
||||||
windowSetScrSize()
|
windowSetScrSize()
|
||||||
@ -2564,7 +2731,11 @@ I recommend using NFT if you don't need multiple frames, NFP if you don't need t
|
|||||||
saveConfig()
|
saveConfig()
|
||||||
end,
|
end,
|
||||||
[5] = function() --About
|
[5] = function() --About
|
||||||
local output = makeSubMenu(17,cleary-1,{"PAIN","File Formats","Help!"})
|
local output = makeSubMenu(17,cleary-1,{
|
||||||
|
"PAIN",
|
||||||
|
"File Formats",
|
||||||
|
"Help!"
|
||||||
|
})
|
||||||
doRender = true
|
doRender = true
|
||||||
if output == 1 then
|
if output == 1 then
|
||||||
aboutPAIN()
|
aboutPAIN()
|
||||||
@ -2819,12 +2990,12 @@ local getInput = function() --gotta catch them all
|
|||||||
end
|
end
|
||||||
linePoses = {{x=oldmx,y=oldmy},{x=x,y=y}}
|
linePoses = {{x=oldmx,y=oldmy},{x=x,y=y}}
|
||||||
miceDown[button] = true
|
miceDown[button] = true
|
||||||
doRender = true
|
|
||||||
if y <= scr_y-(renderBlittle and 0 or doRenderBar) then
|
if y <= scr_y-(renderBlittle and 0 or doRenderBar) then
|
||||||
if (button == 3) then
|
if (button == 3) then
|
||||||
putDownText(x,y)
|
putDownText(x,y)
|
||||||
miceDown = {}
|
miceDown = {}
|
||||||
keysDown = {}
|
keysDown = {}
|
||||||
|
doRender = true
|
||||||
elseif button == 1 then
|
elseif button == 1 then
|
||||||
if keysDown[keys.leftShift] and evt[1] == "mouse_click" then
|
if keysDown[keys.leftShift] and evt[1] == "mouse_click" then
|
||||||
isDragging = true
|
isDragging = true
|
||||||
@ -2834,6 +3005,12 @@ local getInput = function() --gotta catch them all
|
|||||||
dragPoses[1] = {x=x,y=y}
|
dragPoses[1] = {x=x,y=y}
|
||||||
end
|
end
|
||||||
dragPoses[2] = {x=x,y=y}
|
dragPoses[2] = {x=x,y=y}
|
||||||
|
local points = getDotsInLine(dragPoses[1].x,dragPoses[1].y,dragPoses[2].x,dragPoses[2].y)
|
||||||
|
renderAllPAIN()
|
||||||
|
for a = 1, #points do
|
||||||
|
term.setCursorPos(points[a].x, points[a].y)
|
||||||
|
term.blit(paint.c, CTB(paint.t), CTB(paint.b))
|
||||||
|
end
|
||||||
elseif (not dontDragThisTime) then
|
elseif (not dontDragThisTime) then
|
||||||
if evt[1] == "mouse_drag" then
|
if evt[1] == "mouse_drag" then
|
||||||
local points = getDotsInLine(linePoses[1].x,linePoses[1].y,linePoses[2].x,linePoses[2].y)
|
local points = getDotsInLine(linePoses[1].x,linePoses[1].y,linePoses[2].x,linePoses[2].y)
|
||||||
@ -2844,11 +3021,13 @@ local getInput = function() --gotta catch them all
|
|||||||
putDotDown({x=x, y=y})
|
putDotDown({x=x, y=y})
|
||||||
end
|
end
|
||||||
changedImage = true
|
changedImage = true
|
||||||
|
doRender = true
|
||||||
end
|
end
|
||||||
dontDragThisTime = false
|
dontDragThisTime = false
|
||||||
elseif button == 2 and y <= scr_y-(renderBlittle and 0 or doRenderBar) then
|
elseif button == 2 and y <= scr_y-(renderBlittle and 0 or doRenderBar) then
|
||||||
deleteDot(x+paint.scrollX,y+paint.scrollY)
|
deleteDot(x+paint.scrollX,y+paint.scrollY)
|
||||||
changedImage = true
|
changedImage = true
|
||||||
|
doRender = true
|
||||||
end
|
end
|
||||||
elseif origy >= scr_y-(renderBlittle and 0 or doRenderBar) then
|
elseif origy >= scr_y-(renderBlittle and 0 or doRenderBar) then
|
||||||
miceDown = {}
|
miceDown = {}
|
||||||
@ -2876,7 +3055,7 @@ local getInput = function() --gotta catch them all
|
|||||||
isDragging = false
|
isDragging = false
|
||||||
elseif evt[1] == "key" then
|
elseif evt[1] == "key" then
|
||||||
local key = evt[2]
|
local key = evt[2]
|
||||||
if (not keysDown[keys.leftShift]) and (keysDown[keys.tab]) then
|
if (isDragging or not keysDown[keys.leftShift]) and (keysDown[keys.tab]) then
|
||||||
if key == keys.right and (not keysDown[keys.right]) then
|
if key == keys.right and (not keysDown[keys.right]) then
|
||||||
paint.scrollX = paint.scrollX + 1
|
paint.scrollX = paint.scrollX + 1
|
||||||
doRender = true
|
doRender = true
|
||||||
@ -2917,11 +3096,23 @@ local getInput = function() --gotta catch them all
|
|||||||
doRender = true
|
doRender = true
|
||||||
scr_x, scr_y = term.current().getSize()
|
scr_x, scr_y = term.current().getSize()
|
||||||
end
|
end
|
||||||
|
if keysDown[keys.leftAlt] then
|
||||||
|
if (not renderBlittle) then
|
||||||
|
if (key == keys.c) then
|
||||||
|
editCopy()
|
||||||
|
elseif (key == keys.x) then
|
||||||
|
editCut()
|
||||||
|
elseif (key == keys.v) then
|
||||||
|
editPaste()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
else
|
||||||
if (key == keys.c) and (not renderBlittle) then
|
if (key == keys.c) and (not renderBlittle) then
|
||||||
gotoCoords()
|
gotoCoords()
|
||||||
resetInputState()
|
resetInputState()
|
||||||
doRender = true
|
doRender = true
|
||||||
end
|
end
|
||||||
|
end
|
||||||
if (keysDown[keys.leftShift]) and (not isDragging) then
|
if (keysDown[keys.leftShift]) and (not isDragging) then
|
||||||
if key == keys.left then
|
if key == keys.left then
|
||||||
paintEncoded[frame] = movePaintEncoded(paintEncoded[frame],-1,0)
|
paintEncoded[frame] = movePaintEncoded(paintEncoded[frame],-1,0)
|
||||||
@ -3288,6 +3479,7 @@ runPainEditor = function(...) --needs to be cleaned up
|
|||||||
term.clearLine()
|
term.clearLine()
|
||||||
end
|
end
|
||||||
|
|
||||||
if not shell then return end
|
if not shell then error("shell API is required, sorry") end
|
||||||
|
|
||||||
runPainEditor(...)
|
runPainEditor(...)
|
||||||
|
\
|
||||||
|
Loading…
x
Reference in New Issue
Block a user