Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --# SpecFuncs
- function angleOfPoint( pt )
- local x, y = pt.x, pt.y
- local radian = math.atan2(y,x)
- local angle = radian*180/math.pi
- if angle < 0 then angle = 360 + angle elseif angle > 360 then angle = 0 + (angle-360) end
- return angle
- end
- function round(n)
- if n < math.floor(n)+0.5 then
- return math.floor(n)
- elseif n > math.ceil(n)-0.5 then
- return math.ceil(n)
- else
- return math.ceil(n)
- end
- end
- function clamp(x, min, max)
- return math.max(min, math.min(max, x))
- end
- function split(inputstr, sep)
- local t={}
- local i=1
- for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
- t[i] = str
- i = i + 1
- end
- return t
- end
- Lines = class()
- function Lines:init(pos1,pos2,strok,col)
- self.m = mesh()
- local c = col or 255
- self.p = (pos1+pos2)
- self.pl = (pos1-pos2)
- self.dir = self.pl:normalize()
- self.len = self.pl:len()
- self.strok = strok
- self.p = self.p/2
- self.r = self.m:addRect(self.p.x,self.p.y,self.len,strok,angleOfPoint(self.dir)/57.3)
- self.m:setColors(c,c,c,255)
- end
- function Lines:setPos(pos1,pos2)
- self.p = (pos1+pos2)
- self.pl = (pos1-pos2)
- self.dir = self.pl:normalize()
- self.len = self.pl:len()
- self.p = self.p/2
- self.m:setRect(self.r,self.p.x,self.p.y,self.len,self.strok,angleOfPoint(self.dir)/57.3)
- end
- function Lines:draw()
- self.m:draw()
- end
- function Lines:touched(touch)
- -- Codea does not automatically call this method
- end
- Tblines = class()
- function Tblines:init(v,col,width)
- self.m = mesh()
- self.r = {}
- self.width = width
- local c = col or 255
- for i=2,#v do
- self.p = (v[i]+v[i-1])
- self.p2 = (v[i]-v[i-1])
- self.dir = self.p2:normalize()
- self.len = self.p2:len()
- self.p = self.p/2
- local img = image(self.len*2,width*2)
- setContext(img)
- pushStyle()
- strokeWidth(width*2)
- lineCapMode(ROUND)
- line(0,width,self.len*2,width)
- popStyle()
- setContext()
- self.r[i] = self.m:addRect(self.p.x,self.p.y,self.len+width,
- width,angleOfPoint(self.dir)/57.3)
- self.m.texture = img
- self.m:setColors(c,c,c,255)
- end
- end
- function Tblines:setCol(col)
- self.m:setColors(col.r,col.g,col.b,col.a or 255)
- end
- function Tblines:setPos(v)
- for i=2,#v do
- self.p = (v[i]+v[i-1])
- self.p2 = (v[i]-v[i-1])
- self.dir = self.p2:normalize()
- self.len = self.p2:len()+self.width
- self.p = self.p/2
- self.m:setRect(self.r[i],self.p.x,self.p.y,self.len,self.width,angleOfPoint(self.dir)/57.3)
- end
- end
- function Tblines:draw()
- self.m:draw()
- end
- function Tblines:touched(touch)
- -- Codea does not automatically call this method
- end
- function roundRect(x,y,w,h,r)
- pushStyle()
- local eM = ellipseMode() -- The previous mode, this is so not to disrupt other ellipses
- local rM = rectMode()
- if rectMode() == CORNERS then
- w = (w - x)
- h = (h - y)
- elseif rectMode() == CENTER then
- x = x - w / 2
- y = y - h / 2
- elseif rectMode() == RADIUS then
- x = x - w
- y = y - h
- w = w * 2
- h = h * 2
- end
- ellipseMode(RADIUS)
- rectMode(CORNER)
- clip(x, y + r, w, h - r * 2); rect(x, y, w, h) -- Left and Right
- clip(x + r, y, w - r * 2, h); rect(x, y, w, h) -- Top and Bottom
- strokeWidth(strokeWidth() - 1) -- Necessary because without it the ellipse looks too big
- clip(x, y, r, r); ellipse(x + r - 1, y + r - 1, r) -- Bottom Left
- clip(x, y + h - r, r, r); ellipse(x + r - 1, y + h - r + 1, r) -- Top Left
- clip(x + w - r, y, r, r); ellipse(x + w - r + 1, y + r - 1, r) -- Bottom Right
- clip(x + w - r, y + h - r, r, r); ellipse(x + w - r + 1, y + h - r + 1, r) -- Top
- strokeWidth(strokeWidth() + 1) -- Make everything normal again
- clip()
- ellipseMode(eM)
- rectMode(rM)
- popStyle()
- end
- --# Main
- -- toolbar
- -- Use this function to perform your initial setup
- function setup()
- displayMode(FULLSCREEN)
- frame = Frame(vec2(WIDTH/1.5,HEIGHT/1.7),vec2(600,450),"Colour Window",150)
- frame:isCloseable(true)
- --Button command: Button(Position,Size,Text,Colour,BorderWidth,CallBack)
- var1 = "Press Me"
- sizevar = 10
- btn = Button(vec2(WIDTH/2,HEIGHT/2-20),vec2(100,45),var1,
- color(252, 7, 139, 255),function() sizevar = math.random(0,40) end,true)
- --btn:strokeCol(color(220,220,220,255))
- btn:addParent(frame)
- btn2 = Button(vec2(WIDTH/2,HEIGHT/2+28),vec2(100,45),var1,
- color(251, 83, 7, 255),function()
- alpha = 255
- end)
- btn2:addParent(frame)
- var = 3
- --Slider command: Slider(Position,Size,StartValue,EndValue,Value)
- sldr = Slider(vec2(WIDTH/2,300),vec2(150,15),10,500,var,"Slider:")
- sldr:addParent(frame)
- sldr:isVisible(true)
- var2 = 0
- --Toggle command: Toggle(Position,Size,Value) , Toggle Value: Toggle:getValue()
- tog = Toggle(vec2(WIDTH/2,HEIGHT/2+100),vec2(75,30),var2)
- tog:addParent(frame)
- --Dial command: Dial(Position,Size,StartVal,EndVal,Value) , Dial Value: Dial:getValue()
- dial = Dial(vec2(WIDTH/2,HEIGHT/2+180),65,0,20,10)
- dial:addParent(frame)
- dial:setFloat(0)
- --Drop Down Menu command: DMenu(Position,Size) , DMenu item: DMenu:addItem(Name,Callback)
- dropd = DMenu(vec2(WIDTH/2+200,HEIGHT/2-30),vec2(150,30),"Rect Colour")
- dropd:addParent(frame)
- dropd:addItem("Orange",function() colour = color(255,100,0) end)
- dropd:addItem("Yellow",function() colour = color(255,255,0) end)
- dropd:addItem("Red",function() colour = color(255,0,0) end)
- dropd:addItem("Green",function() colour = color(0,255,0) end)
- dropd:addItem("Cyan",function() colour = color(0,255,255) end)
- dropd:addItem("Blue",function() colour = color(0,0,255) end)
- dropd:addItem("Purple",function() colour = color(200,0,255) end)
- dropd:addItem("Pink",function() colour = color(255,0,220) end)
- dropd:addItem("Black",function() colour = color(0,0,0) end)
- dropd:addItem("White",function() colour = color(255,255,255) end)
- var3 = 0
- --Radio Button command: Radio(Position,Size) , Radio Value (On/Off): Radio:getValue()
- rad = Radio(vec2(WIDTH/2+320,HEIGHT/2+230),30,"Radio Button",var3)
- rad:addParent(frame)
- --Colour Picker command: Colour(Position) , Colour Value: Colour:getValue()
- col = Colour(vec2(WIDTH/2+200,HEIGHT/2+100))
- col:addParent(frame)
- colour = color(255,255,255,255)
- scolour = color(255,255,255,255)
- --Combo Box (Combox) command: Combox(Position,Size)
- --Combox item: Combox:addItem(name,callback)
- combobox = Combox(vec2(WIDTH/2+375,HEIGHT/2+20),vec2(130,300),"Colour Combo Box")
- combobox:addParent(frame)
- combobox:addItem("Orange",function() scolour = color(255,100,0) end)
- combobox:addItem("Yellow",function() scolour = color(255,255,0) end)
- combobox:addItem("Red",function() scolour = color(255,0,0) end)
- combobox:addItem("Green",function() scolour = color(0,255,0) end)
- combobox:addItem("Cyan",function() scolour = color(0,255,255) end)
- combobox:addItem("Blue",function() scolour = color(0,0,255) end)
- combobox:addItem("Purple",function() scolour = color(200,0,255) end)
- combobox:addItem("Pink",function() scolour = color(255,0,220) end)
- combobox:addItem("Black",function() scolour = color(0,0,0) end)
- combobox:addItem("White",function() scolour = color(255,255,255) end)
- textbox = TextBox(vec2(WIDTH/2+200,HEIGHT/2-130),vec2(140,30),color(0,0,0),15,"Testing Text","Label")
- textbox:addParent(frame)
- textbox:setMode(CENTER)
- progvar = 57
- --Progress Bar (Progbar) command: Progbar(Position,Size,Value,ColourA,ColourB)
- --Set Progress Bar start value: Progbar:setStart(Number)
- --Set Progress Bar end value: Progbar:setEnd(Number)
- progb = Progbar(vec2(WIDTH/2+200,300),vec2(125,15),progvar,color(100,100,100,255),
- color(255,50,50,150),"Alpha Progress Bar")
- progb:addParent(frame)
- progb:setStart(0)
- progb:setEnd(255)
- alpha = 0
- end
- function keyboard(k)
- textbox:keyboard(k)
- end
- function touched(t)
- frame:touched(t)
- btn:touched(t)
- sldr:touched(t)
- tog:touched(t)
- dial:touched(t)
- dropd:touched(t)
- rad:touched(t)
- col:touched(t)
- combobox:touched(t)
- btn2:touched(t)
- textbox:touched(t)
- end
- -- This function gets called once every frame
- function draw()
- -- This sets a dark background color
- background(40, 40, 50,255)
- -- Do your drawing here
- pushStyle()
- fill(255)
- text("FPS: "..1/DeltaTime,100,100)
- popStyle()
- if col:isTouching() then
- colour = col:getValue()
- end
- if col:isTouchingAlpha() then
- alpha = col.alpha
- end
- if sldr:isMoving() then
- colour.a = sldr:getValue()*40
- end
- pushStyle()
- strokeWidth(5)
- stroke(scolour.r,scolour.g,scolour.b,rad:getValue()*255)
- fill(colour.r,colour.g,colour.b,alpha*tog:getValue())
- rect(WIDTH/2+150,200,60+dial:getValue()*4+sizevar,60+dial:getValue()*4+sizevar)
- popStyle()
- frame:draw()
- btn:draw()
- sldr:draw()
- tog:draw()
- dial:draw()
- progb:draw()
- progb:setValue(alpha)
- dropd:draw()
- rad:draw()
- btn2:draw()
- col:draw()
- combobox:draw()
- textbox:draw()
- end
- --# Frame
- Frame = class()
- function Frame:init(pos,size,txt,grey)
- self.pos = pos
- self.size = size
- self.oldscl = vec2()
- self.oldpos = vec2()
- self.scl = size
- self.spos = vec2()
- self.txt = txt
- self.grey = grey
- self.closeable = false
- self.moveable = true
- self.m = mesh()
- self.r = self.m:addRect(pos.x,pos.y,size.x,size.y)
- local img = image(size.x,size.y)
- setContext(img)
- pushStyle()
- fill(255,255)
- roundRect(0,0,size.x,size.y,10)
- popStyle()
- setContext()
- self.m.texture = img
- self.m:setColors(grey,grey,grey,255)
- self.t = mesh()
- self.tr = self.t:addRect(pos.x,pos.y+size.y/2-20,size.x,40)
- local img = image(size.x,40)
- setContext(img)
- pushStyle()
- fill(170,255)
- roundRect(0,-40,size.x,80,10)
- textMode(CORNER)
- fontSize(15)
- fill(0)
- text(self.txt,15,10)
- popStyle()
- setContext()
- self.t.texture = img
- self.t:setColors(grey,grey,grey,255)
- self.holding = nil
- self.hpos = vec2()
- self.state = "open"
- self.oc = false
- self.children = {}
- end
- function Frame:isCloseable(bool)
- self.closeable = bool
- end
- function Frame:isMoveable(bool)
- if bool == true or bool == false then
- self.moveable = bool
- end
- end
- function Frame:getPos()
- return self.pos
- end
- function Frame:isHolding()
- return self.holding ~= nil
- end
- function Frame:draw()
- local pos = self.pos
- local size = self.size
- if self.holdingscl then
- self.size = self.scl
- self.t:setRect(self.tr,pos.x,pos.y+size.y/2-20,size.x,40)
- self.m:setRect(self.r,pos.x,pos.y,size.x,size.y)
- end
- local t = self.holding
- if t ~= nil then
- self.pos = vec2(t.x,t.y)+self.hpos
- pos = self.pos
- self.t:setRect(self.tr,pos.x,pos.y+size.y/2-20,size.x,40)
- self.m:setRect(self.r,pos.x,pos.y,size.x,size.y)
- end
- if self.state == "open" then
- self.m:draw()
- end
- self.t:draw()
- if self.closeable then
- pushStyle()
- strokeWidth(6)
- if self.minimizing then
- stroke(150)
- else
- stroke(255)
- end
- line(pos.x+size.x/2-35,pos.y+size.y/2-20,pos.x+size.x/2-20,pos.y+size.y/2-20)
- popStyle()
- end
- end
- function Frame:addChild(ch)
- table.insert(self.children,ch)
- end
- function Frame:getChildren()
- return self.children
- end
- function Frame:touched(t)
- local p,s = self.pos,self.size
- local p2,s2 = vec2(p.x,p.y+s.y*0.45),vec2(s.x,(s.y/2)*0.2)
- if self.moveable and t.state == BEGAN and t.x < p.x+s.x/2 and t.x > p.x-s.x/2 and t.y < p2.y+s2.y/2 and t.y > p2.y-s2.y/2 then
- self.holding = t
- self.hpos = self.pos-vec2(t.x,t.y)
- elseif t.state == MOVING and self.holding ~= nil then
- self.holding = t
- elseif t.state == ENDED and self.holding ~= nil then
- self.holding = nil
- end
- if t.state == BEGAN and self.closeable and t.x < p.x+s.x/2-5 and t.x > p.x+s.x/2-40 and t.y > p.y+s.y/2-35 and t.y < p.y+s.y/2 then
- self.minimizing = true
- end
- if t.state == ENDED and self.minimizing == true then
- if self.state == "open" then
- for k,v in pairs(self.children) do
- v:isVisible(false)
- end
- self.state = "closed"
- elseif self.state == "closed" then
- for k,v in pairs(self.children) do
- v:isVisible(true)
- v.pos = self.pos-v.ppos
- end
- self.state = "open"
- end
- self.minimizing = false
- end
- end
- --# Button
- Button = class()
- function Button:init(pos,size,txt,col,callback,...)
- if ... then
- if ... == true then
- self.invert = ...
- else
- self.invert = color(...,...,...,255)
- end
- else
- self.invert = false
- end
- -- you can accept and set parameters here
- self.m = mesh()
- self.r = self.m:addRect(pos.x,pos.y,size.x,size.y)
- self.m:setColors(col)
- self.t = mesh()
- self.tr = self.t:addRect(pos.x,pos.y,size.x,size.y)
- self.oldcol = col
- self.col = color(col.r-50,col.g-50,col.b-50)
- if self.invert then
- self.t.shader = shader("Basic:Invert")
- end
- self.txtt = image(size.x,size.y)
- setContext(self.txtt)
- pushStyle()
- font("AmericanTypewriter-Bold")
- fontSize(15)
- textAlign(CENTER)
- if self.invert == true then
- fill(self.oldcol)
- elseif self.invert ~= false then
- fill(self.invert)
- else
- fill(50,255)
- end
- textWrapWidth(size.x)
- text(txt,size.x/2,size.y/2)
- popStyle()
- setContext()
- self.t.texture = self.txtt
- self.pos = pos
- self.txt = txt
- self.holding = 0
- self.cb = callback
- self.size = size
- strok = 5
- self.strok = strok
- if strok ~= nil then
- self.v = {}
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- end
- self.lines = Tblines(self.v,220,5)
- self.oldpos = self.pos
- self.ppos = vec2()
- self.parent = nil
- self.viscol = color(0,0,0,0)
- self.visible = true
- self.strokcol = color(220,220,220,255)
- end
- function Button:isVisible(bool)
- if bool == false then
- self.visible = false
- elseif bool == true then
- self.visible = true
- end
- end
- function Button:strokeCol(col)
- self.lines:setCol(col)
- self.strokcol = col
- end
- function Button:setAlpha(a)
- self.m:setColors(self.oldcol.r,self.oldcol.g,self.oldcol.b,a)
- self.t:setColors(255,255,255,a)
- self.lines:setCol(color(self.strokcol.r,self.strokcol.g,self.strokcol.b,a))
- end
- function Button:visible()
- return self.visible
- end
- function Button:addParent(par)
- if par ~= nil then
- self.parent = par
- self.ppos = par:getPos()-self.oldpos
- par:addChild(self)
- end
- end
- function Button:setPos(pos)
- --self.pos = pos
- self.v[1] = vec2(pos.x-self.size.x/2,pos.y+self.size.y/2)
- self.v[2] = vec2(pos.x+self.size.x/2,pos.y+self.size.y/2)
- self.v[3] = vec2(pos.x+self.size.x/2,pos.y-self.size.y/2)
- self.v[4] = vec2(pos.x-self.size.x/2,pos.y-self.size.y/2)
- self.v[5] = vec2(pos.x-self.size.x/2,pos.y+self.size.y/2)
- self.m:setRect(self.r,pos.x,pos.y,self.size.x,self.size.y)
- self.t:setRect(self.tr,pos.x,pos.y,self.size.x,self.size.y)
- self.lines:setPos(self.v)
- end
- function Button:draw()
- if self.parent then
- if self.parent:isHolding() then
- self.pos = self.parent:getPos()-self.ppos
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.m:setRect(self.r,self.pos.x,self.pos.y,self.size.x,self.size.y)
- self.t:setRect(self.tr,self.pos.x,self.pos.y,self.size.x,self.size.y)
- self.lines:setPos(self.v)
- end
- end
- if self.visible == false then return end
- self.m:draw()
- self.t:draw()
- self.lines:draw()
- end
- function Button:touched(t)
- if self.visible == false then return end
- if t.state == BEGAN and t.x < (self.pos.x+self.size.x/2) and t.x > (self.pos.x-self.size.x/2)
- and t.y > (self.pos.y-self.size.y/2) and t.y < (self.pos.y+self.size.y/2) then
- self.m:setColors(self.col)
- self.cb()
- self.holding = 1
- end
- if t.state == ENDED and self.holding == 1 then
- self.m:setColors(self.oldcol)
- self.holding = 0
- end
- end
- --# Slider
- Slider = class()
- function Slider:init(pos,size,startval,endval,value,...)
- if ... then
- self.label = ...
- end
- self.pos = pos
- self.ballpos = vec2(pos.x-size.x/2+((value-startval)/(endval-startval))*size.x,pos.y)
- self.val = clamp(value,startval,endval)
- self.size = size
- self.endval = endval
- self.startval = startval
- self.m = mesh()
- self.r = self.m:addRect(pos.x,pos.y,size.x,size.y)
- self.m:setColors(120,120,120,255)
- self.col = color(120,120,120,255)
- self.t = mesh()
- self.ballsize = size:len()/6
- self.ballsize = clamp(self.ballsize,size.y+5,40)
- self.lball = self.ballpos - pos
- self.tr = self.t:addRect(pos.x,pos.y,self.ballsize,self.ballsize)
- self.t.texture = readImage("Documents:slider")
- self.t:setColors(255,255,255,255)
- self.holding = 0
- self.oldpos = self.pos
- self.ppos = vec2()
- self.parent = nil
- self.prevval = 0
- self.viscol = color(0,0,0,0)
- self.oldcol = self.col
- self.visible = true
- self.fillcol = color(0,0,0,255)
- self.showval = true
- end
- function Slider:setLabel(txt)
- self.label = txt or ""
- end
- function Slider:isVisible(bool)
- if bool == false then
- self.visible = false
- elseif bool == true then
- self.visible = true
- end
- end
- function Slider:showValue(bool)
- if bool == false then
- self.showval = false
- elseif bool == true then
- self.showval = true
- end
- end
- function Slider:setColour(col)
- self.m:setColors(col.r,col.g,col.b,col.a or 255)
- self.oldcol = col
- self.t:setColors(255,255,255,col.a)
- end
- function Slider:setPos(pos)
- self.pos = pos
- local p,s = self.pos,self.size
- local value,startval,endval = self.val,self.startval,self.endval
- self.m:setRect(self.r,self.pos.x,self.pos.y,self.size.x,self.size.y)
- self.ballpos = vec2(p.x-s.x/2+((value-startval)/
- (endval-startval))*s.x,p.y)
- self.t:setRect(self.tr,self.ballpos.x,self.ballpos.y,self.ballsize,self.ballsize)
- end
- function Slider:addParent(par)
- if par ~= nil then
- self.parent = par
- self.ppos = par:getPos()-self.oldpos
- par:addChild(self)
- end
- end
- function Slider:draw()
- local pos,size,value,startval,endval = self.pos,self.size,self.val,
- self.startval,self.endval
- if self.parent then
- if self.parent:isHolding() then
- self.pos = self.parent:getPos()-self.ppos
- self.m:setRect(self.r,self.pos.x,self.pos.y,self.size.x,self.size.y)
- self.ballpos = vec2(pos.x-size.x/2+((value-startval)/
- (endval-startval))*size.x,pos.y)
- end
- end
- local size = self.size
- local pos = self.pos
- self.ballpos.x = clamp(self.ballpos.x,pos.x-size.x/2,pos.x+size.x/2)
- self.ballpos.y = pos.y
- if self.visible == false then return end
- self.m:draw()
- self.t:setRect(self.tr,self.ballpos.x,self.ballpos.y,self.ballsize,self.ballsize)
- self.t:draw()
- pushStyle()
- fill(self.fillcol.r,self.fillcol.g,self.fillcol.b,self.fillcol.a)
- fontSize(13)
- textWrapWidth(self.size.x)
- if type(self.val) == "number" and self.showval then
- self.val = clamp(self.val,self.startval,self.endval)
- self.val = round(self.val)
- if self.val ~= nil then
- text("Value: "..self.val,self.pos.x,self.pos.y-self.size.y/2-10)
- else
- text("Value: ",self.pos.x,self.pos.y-self.size.y/2-10)
- end
- end
- popStyle()
- if self.label then
- pushStyle()
- textMode(CORNER)
- fontSize(15)
- fill(self.fillcol.r,self.fillcol.g,self.fillcol.b,self.fillcol.a)
- text(self.label,pos.x-size.x/2,pos.y+size.y/2+4)
- popStyle()
- end
- end
- function Slider:isMoving()
- local val = self.changed
- self.changed = false
- return val
- end
- function Slider:getValue()
- if self.val ~= nil and type(self.val) == "number" then
- --return clamp(self.val,self.startval,self.endval)
- return round(self.val)
- end
- end
- function Slider:touched(t)
- if self.visible == false then return end
- if t.state == BEGAN and self.holding == 0 and vec2(t.x,t.y):dist(self.ballpos) < self.size:len()/8 then
- self.holding = 1
- end
- if self.holding == 1 then
- self.ballpos = vec2(clamp(t.x,self.pos.x-self.size.x/2,self.pos.x+self.size.x/2),self.pos.y)
- self.lball = self.pos-self.ballpos+vec2(self.size.x/2,0)
- self.lball.x = self.size.x-self.lball.x
- self.lball.x = math.max(self.lball.x,1)
- --self.val = ((self.endval-self.startval)/2+(self.endval-
- --self.startval)*(self.ballpos.x-self.pos.x)/self.size.x+self.startval)
- self.val = (self.endval-self.startval)*((self.lball.x/self.size.x))+self.startval
- if round(self.val) ~= self.prevval then
- self.changed = true
- else
- self.changed = false
- end
- self.prevval = round(self.val)
- end
- if t.state == ENDED then
- self.holding = 0
- end
- end
- --# TextBox
- TextBox = class()
- function TextBox:init(pos,size,col,fontsize,txt,...)
- if ... then self.label = ... end
- self.pos = pos
- self.size = size
- self.fontsize = clamp(fontsize,5,size.y/1.5)
- self.m = mesh()
- self.r = self.m:addRect(pos.x,pos.y,size.x,size.y)
- self.m:setColors(200,200,200)
- self.col = col
- self.oldcol = col
- self.txt = txt
- self.startertxt = txt
- self.v = {}
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.lines = Tblines(self.v,170,5)
- self.oldpos = self.pos
- self.ppos = vec2()
- self.parent = nil
- self.entered = false
- self.mode = CORNER
- self.editing = false
- self.viscol = color(0,0,0,0)
- self.visible = true
- self.strokcol = color(170,255)
- end
- function TextBox:setMode(mode)
- self.mode = mode
- end
- function TextBox:setDimensions(pos,size)
- self.pos = pos
- pushStyle()
- fontSize(self.fontsize)
- textMode(self.mode)
- textWrapWidth(size.x)
- local w,h = textSize(self.txt)
- if h < size.y then
- self.size = size
- end
- self.size.x = clamp(self.size.x,5,self.size.x+1)
- popStyle()
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.lines:setPos(self.v)
- self.m:setRect(self.r,self.pos.x,self.pos.y,self.size.x,self.size.y)
- end
- function TextBox:getDimensions()
- local tbl = {}
- tbl.size = self.size
- tbl.pos = self.pos
- return tbl
- end
- function TextBox:setFont(fontsize)
- self.fontsize = fontsize
- end
- function TextBox:startTyping()
- self.editing = true showKeyboard()
- end
- function TextBox:isTyping()
- return self.editing
- end
- function TextBox:isFinished()
- local se = self.entered
- self.entered = false
- return se
- end
- function TextBox:setAlpha(a)
- self.lines:setCol(color(self.strokcol.r,self.strokcol.g,self.strokcol.b,a))
- self.m:setColors(200,200,200,a)
- end
- function TextBox:strokeCol(col)
- self.lines:setCol(col)
- self.strokcol = col
- end
- function TextBox:isVisible(bool)
- if bool == false then
- self.visible = false
- elseif bool == true then
- self.visible = true
- end
- end
- function TextBox:visible()
- return self.visible
- end
- function TextBox:addParent(par)
- if par ~= nil then
- self.parent = par
- self.ppos = par:getPos()-self.oldpos
- par:addChild(self)
- end
- end
- function TextBox:setText(txt)
- self.txt = txt
- end
- function TextBox:getText()
- return self.txt
- end
- function TextBox:draw()
- if self.parent then
- if self.parent:isHolding() then
- self.pos = self.parent:getPos()-self.ppos
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.lines:setPos(self.v)
- self.m:setRect(self.r,self.pos.x,self.pos.y,self.size.x,self.size.y)
- end
- end
- if self.visible == false then return end
- self.m:draw()
- self.lines:draw()
- local p,s = self.pos,self.size
- pushStyle()
- textWrapWidth(s.x)
- textMode(self.mode)
- if self.fontsize ~= nil then
- fontSize(self.fontsize)
- end
- if self.editing then
- fill(self.col.r,self.col.g,self.col.b,math.sin(ElapsedTime*10)*100+155)
- else
- fill(self.col)
- end
- if self.mode == CORNER then
- text(self.txt,p.x-s.x/2+4,p.y-self.fontsize/2)
- else
- text(self.txt,p.x,p.y)
- end
- textMode(CORNER)
- if self.label then
- fill(0,255)
- text(self.label,p.x-s.x/2+2,p.y+s.y/2+5)
- end
- popStyle()
- if isKeyboardShowing() == false and self.editing == true then
- self.editing = false
- self.entered = true
- if self.txt == self.startertxt then
- self.txt = ""
- end
- end
- end
- function TextBox:touched(t)
- if self.visible == false then return end
- local p,s = self.pos,self.size
- if t.x > p.x-s.x/2 and t.x < p.x+s.x/2 and t.y < p.y+s.y/2 and t.y > p.y-s.y/2 then
- if t.state == BEGAN and self.editing == false then
- if self.txt == self.startertxt then
- self.txt = ""
- end
- self.editing = true showKeyboard()
- elseif t.state == BEGAN and self.editing == true then
- self.editing = false hideKeyboard()
- self.entered = true
- end
- end
- end
- function TextBox:keyboard(k)
- if k == "\n" then
- self.editing = false
- hideKeyboard()
- self.entered = true
- if self.txt == self.startertxt then
- self.txt = ""
- end
- return
- end
- self.txt = self.txt..k
- if self.txt == self.startertxt or string.sub(self.txt,1,self.txt:len()-1) == self.startertxt then
- self.txt = k or ""
- end
- if k == BACKSPACE then
- self.txt = string.sub(self.txt,1,self.txt:len()-1)
- end
- end
- --# Toggle
- Toggle = class()
- function Toggle:init(pos,size,value,...)
- if ... then
- self.label = ...
- end
- self.val = value
- self.nval = value
- self.dir = 0
- self.size = size
- self.pos = pos
- self.tpos = vec2(pos.x-size.x/4,pos.y)
- self.m = mesh()
- self.r = self.m:addRect(pos.x,pos.y,size.x,size.y)
- self.m:setColors(170,170,170,255)
- self.t = mesh()
- self.t.texture = readImage("Documents:slider")
- self.tr = self.t:addRect(self.tpos.x,self.tpos.y,size.x/4,size.y)
- self.t:setColors(100,100,100,255)
- self.v = {}
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.lines = Tblines(self.v,220,5)
- self.oldpos = self.pos
- self.ppos = vec2()
- self.parent = nil
- self.viscol = color(0,0,0,0)
- self.oldcol = color(170,170,170,255)
- self.visible = true
- self.strokcol = color(220,220,220,255)
- end
- function Toggle:isVisible(bool)
- if bool == false then
- self.visible = false
- elseif bool == true then
- self.visible = true
- end
- end
- function Toggle:strokeCol(col)
- self.lines:setColour(col)
- self.strokcol = col
- end
- function Toggle:addParent(par)
- if par ~= nil then
- self.parent = par
- self.ppos = par:getPos()-self.oldpos
- par:addChild(self)
- end
- end
- function Toggle:draw()
- if self.parent then
- if self.parent:isHolding() then
- self.pos = self.parent:getPos()-self.ppos
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.lines:setPos(self.v)
- self.m:setRect(self.r,self.pos.x,self.pos.y,self.size.x,self.size.y)
- end
- end
- if self.val == 1 and self.nval == 0 then
- self.dir = -0.1
- elseif self.val == 0 and self.nval == 1 then
- self.dir = 0.1
- end
- if self.dir == -0.1 and self.val > self.nval then
- self.val = self.val + self.dir
- elseif self.dir == 0.1 and self.val < self.nval then
- self.val = self.val + self.dir
- end
- if self.val < 0 then self.val = 0 elseif self.val > 1 then self.val = 1 end
- self.t:setRect(self.tr,self.pos.x-self.size.x/4+(self.size.x/2)*self.val,
- self.pos.y,self.size.x/1.7,self.size.y+10)
- if self.visible == false then return end
- self.m:draw()
- self.tpos = vec2(self.pos.x-self.size.x/4+(self.size.x/2)*self.val,self.pos.y)
- pushStyle()
- fill(0,150,0)
- text("1",self.pos.x-self.size.x/4,self.pos.y)
- fill(150,0,0)
- text("0",self.pos.x+self.size.x/4,self.pos.y)
- --[[rect(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2,
- (self.tpos.x-self.size.x/4)-(self.pos.x-self.size.x/2),self.size.y)
- rect(self.tpos.x+self.size.x/4,self.pos.y-self.size.y/2,
- (self.pos.x+self.size.x/2)-(self.tpos.x+self.size.x/4),self.size.y)]]
- popStyle()
- self.t:draw()
- self.lines:draw()
- if self.label then
- pushStyle()
- fill(255)
- fontSize(15)
- textMode(CORNER)
- text(self.label,self.pos.x-self.size.x/2,self.pos.y+self.size.y/2+2)
- popStyle()
- end
- end
- function Toggle:getValue()
- return self.val
- end
- function Toggle:touched(t)
- if self.visible == false then return end
- local size = self.size
- local pos = self.pos
- if t.state == BEGAN and t.x > pos.x-size.x/2 and t.x < pos.x+size.x/2 and t.y > pos.y-size.y/2 and t.y < pos.y+size.y/2 then
- if self.val == 1 then
- self.nval = 0
- end
- if self.val == 0 then
- self.nval = 1
- end
- end
- end
- --# Dial
- Dial = class()
- function Dial:init(pos,size,startval,endval,value)
- self.pos = pos
- self.size = size
- self.eval = endval
- self.sval = startval
- self.val = value
- self.m = mesh()
- self.m.texture = readImage("Documents:whitecircle")
- self.r = self.m:addRect(pos.x,pos.y,size,size)
- self.m:setColors(170,170,170,255)
- self.holding = 0
- self.tp = pos
- self.float = 0
- self.hl = Lines(pos,pos,3,220)
- self.lines = {}
- local num = endval-startval
- self.num = num
- self.txt = image(size,size)
- self.t = mesh()
- self.tr = self.t:addRect(pos.x,pos.y,size+35,size+35)
- for i=0,20 do
- local mth = ((math.pi*2)/20-((math.pi/20)/(20/2)))*i
- local p1 = vec2(math.sin(mth)*size/3.5,
- math.cos(mth)*size/3.5)
- local p2 = vec2(math.sin(mth)*(size/3.2),
- math.cos(mth)*(size/3.2))
- local p3 = vec2(math.sin(mth)*(self.size/2-4),
- math.cos(mth)*(self.size/2-4))
- setContext(self.txt)
- pushStyle()
- strokeWidth(2)
- stroke(255, 255, 255, 255)
- fill(255,255)
- fontSize(5)
- text(self.sval+((self.eval-self.sval)/20)*i,p3.x+size/2,p3.y+size/2)
- line(p1.x+size/2,p1.y+size/2,p2.x+size/2,p2.y+size/2)
- popStyle()
- setContext()
- end
- self.t.texture = self.txt
- self.oldpos = self.pos
- self.ppos = vec2()
- self.parent = nil
- self.viscol = color(0,0,0,0)
- self.oldcol = color(170,170,170,255)
- self.fillcol = color(0,0,0,255)
- self.visible = true
- self.strokcol = color(220,220,220,255)
- end
- function Dial:isVisible(bool)
- if bool == false then
- self.visible = false
- elseif bool == true then
- self.visible = true
- end
- end
- function Dial:addParent(par)
- if par ~= nil then
- self.parent = par
- self.ppos = par:getPos()-self.oldpos
- par:addChild(self)
- end
- end
- function Dial:setFloat(n)
- if n == 1 then
- self.float = 1
- elseif n == 0 then
- self.float = 0
- else
- return
- end
- end
- function Dial:draw()
- local num = self.num
- local pos,size = self.pos,self.size
- if self.parent then
- if self.parent:isHolding() then
- self.pos = self.parent:getPos()-self.ppos
- self.m:setRect(self.r,self.pos.x,self.pos.y,self.size,self.size)
- self.t:setRect(self.tr,self.pos.x,self.pos.y,self.size+35,self.size+35)
- end
- end
- if self.visible == false then return end
- self.m:draw()
- self.t:draw()
- pushStyle()
- fontSize(13)
- if self.holding == 1 then
- pushStyle()
- strokeWidth(3)
- stroke(255,255)
- fill(255,0)
- ellipse(self.pos.x,self.pos.y,self.size/2)
- ellipse(self.tp.x,self.tp.y,self.size/3)
- popStyle()
- self.hl:setPos(self.pos,self.tp)
- self.hl:draw()
- local vl
- local vr
- if self.float == 0 then
- vl = (360/(self.num+1))
- vr = clamp((self.num)-math.floor(angleOfPoint((self.tp-self.pos
- ):rotate(-math.pi/2))/vl-self.sval),self.sval,self.eval)
- elseif self.float == 1 then
- vl = (360/(self.num))
- vr = clamp((self.num)-math.floor((angleOfPoint((self.tp-self.pos
- ):rotate(-math.pi/2))/vl-self.sval)*100)/100,self.sval,self.eval)
- if vr < self.sval+0.1 then
- vr = self.sval
- end
- end
- self.val = vr
- end
- fill(self.fillcol)
- text(self.val,self.pos.x,self.pos.y)
- popStyle()
- end
- function Dial:getValue()
- return self.val
- end
- function Dial:touched(t)
- if self.visible == false then return end
- local tp = vec2(t.x,t.y)
- if t.state == BEGAN and tp:dist(self.pos) < self.size/2 then
- self.holding = 1
- self.tp = tp
- end
- if t.state == MOVING then
- self.tp = tp
- end
- if t.state == ENDED then
- self.tp = self.pos
- self.holding = 0
- end
- end
- --# DMenu
- DMenu = class()
- function DMenu:init(pos,size,...)
- if ... then
- self.label = ...
- end
- self.pos = pos
- self.size = size
- self.items = {}
- self.m = mesh()
- self.r = self.m:addRect(pos.x,pos.y,size.x,size.y)
- self.m:setColors(200,200,200,200)
- self.t = mesh()
- self.tr = self.t:addRect(pos.x,pos.y,size.x,size.y)
- self.t:setColors(50,50,50,150)
- self.expanded = 0
- self.int = 0
- self.selected = nil
- self.snum = 0
- self.intv = 255/(size.y/2)
- self.v = {}
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.lines = Tblines(self.v,220,5)
- self.oldpos = self.pos
- self.ppos = vec2()
- self.parent = nil
- self.viscol = color(0,0,0,0)
- self.oldcol = color(200,200,200,255)
- self.visible = true
- self.strokcol = color(220,220,220,255)
- end
- function DMenu:isVisible(bool)
- if bool == false then
- self.visible = false
- elseif bool == true then
- self.visible = true
- end
- end
- function DMenu:strokeCol(col)
- self.lines:setColour(col)
- self.strokcol = col
- end
- function DMenu:addParent(par)
- if par ~= nil then
- self.parent = par
- self.ppos = par:getPos()-self.oldpos
- par:addChild(self)
- end
- end
- function DMenu:addItem(txt,callback)
- table.insert(self.items,{txt,callback})
- end
- function DMenu:draw()
- local p,s = self.pos,self.size
- local num = #self.items
- if self.parent then
- if self.parent:isHolding() then
- self.pos = self.parent:getPos()-self.ppos
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.lines:setPos(self.v)
- self.m:setRect(self.r,self.pos.x,self.pos.y,self.size.x,self.size.y)
- p = self.pos
- s = self.size
- if self.expanded == 1 then
- self.t:setRect(self.tr,p.x,p.y-s.y/2-num*(s.y/2),s.x,num*s.y)
- end
- end
- end
- if self.visible == false then return end
- self.m:draw()
- self.t:draw()
- if self.expanded == 1 then
- if self.int < s.y/2 then
- self.int = self.int + 1
- end
- for i=1,num do
- local txt = self.items[i][1]
- local int = clamp(i*self.int*2,s.y,(s.y)*num)
- pushStyle()
- fill(self.intv*self.int,self.intv*self.int)
- text(txt,p.x,p.y-int)
- popStyle()
- end
- self.t:setRect(self.tr,p.x,p.y-s.y/2-
- clamp(num*self.int*(2.3/2),0,num*(s.y/2)),s.x,
- clamp(num*self.int*2.3,0,num*(s.y/2)*2))
- elseif self.expanded == 0 then
- if self.int > 0 then
- self.int = self.int - 1
- end
- for i=1,num do
- local txt = self.items[i][1]
- local int = clamp(i*self.int*2,s.y,(s.y)*num)
- pushStyle()
- fill(self.intv*self.int,self.intv*self.int)
- text(txt,p.x,p.y-int)
- popStyle()
- end
- self.t:setRect(self.tr,p.x,p.y-s.y/2-num*self.int,s.x,num*self.int*2)
- end
- if self.selected ~= nil then
- if self.expanded == 1 and self.snum ~= 0 and
- self.int > ((s.y/2)/#self.items)*(self.snum-1) then
- pushStyle()
- fill(200,100)
- rect(p.x-s.x/2,p.y-self.snum*s.y-s.y/2,s.x,s.y)
- popStyle()
- end
- pushStyle()
- fill(0,255)
- text(self.selected[1],p.x,p.y)
- popStyle()
- elseif self.label then
- pushStyle()
- fill(0,255)
- font("AmericanTypewriter")
- text(self.label,p.x,p.y)
- popStyle()
- end
- self.lines:draw()
- end
- function DMenu:touched(t)
- if self.visible == false then return end
- local p = self.pos
- local s = self.size
- if t.state == BEGAN and t.x < p.x+s.x/2 and t.x > p.x-s.x/2 and t.y < p.y+s.y/2 and t.y > p.y-s.y/2 then
- if self.expanded == 1 then
- self.expanded = 0
- elseif self.expanded == 0 then
- self.expanded = 1
- end
- end
- for i=1,#self.items do
- if t.state == BEGAN and self.expanded == 1 then
- if t.x < p.x+s.x/2 and t.x > p.x-s.x/2 and t.y > p.y-i*s.y-s.y/2 and t.y < p.y-
- i*s.y+s.y/2 then
- self.selected = self.items[i]
- self.snum = i
- self.items[i][2]()
- end
- end
- end
- end
- --# ComboxImg
- ComboxImg = class()
- function ComboxImg:init(pos,size,imgsize,...)
- if ... then
- self.label = ...
- end
- self.pos = pos
- self.size = size
- self.m = mesh()
- self.r = self.m:addRect(pos.x,pos.y,size.x,size.y)
- self.vp = image(size.x,size.y)
- self.m.texture = self.vp
- self.moving = 1
- self.oldm = 0
- self.selected = {}
- self.snum = 0
- self.scrl = 0
- self.img = self.vp
- self.id = 0
- self.itemh = imgsize
- self.items = {}
- self.imesh = {}
- self.imeshr = {}
- self.v = {}
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.lines = Tblines(self.v,220,5)
- self.oldpos = self.pos
- self.ppos = vec2()
- self.snum2 = {0}
- self.mov = 0
- self.parent = nil
- self.numitems = 0
- self.viscol = color(0,0,0,0)
- self.oldcol = color(255, 255, 255, 255)
- self.visible = true
- self.strokcol = color(220,220,220,255)
- end
- function ComboxImg:isVisible(bool)
- if bool == false then
- self.visible = false
- elseif bool == true then
- self.visible = true
- end
- end
- function ComboxImg:strokeCol(col)
- self.lines:setCol(col)
- self.strokcol = col
- end
- function ComboxImg:addParent(par)
- if par ~= nil then
- self.parent = par
- self.ppos = par:getPos()-self.oldpos
- par:addChild(self)
- end
- end
- function ComboxImg:addItem(img,callback)
- local p,s = self.pos,self.size
- self.numitems = self.numitems + 1
- self.id = self.id + 1
- table.insert(self.items,{name,callback})
- self.imesh[self.id] = mesh()
- self.imeshr[self.id] = self.imesh[self.id]:addRect(p.x,p.y,s.x,self.itemh)
- self.imesh[self.id].texture = img
- self.imesh[self.id]:draw()
- end
- function ComboxImg:draw()
- if self.visible == false then return end
- local p,s = self.pos,self.size
- if self.parent then
- if self.parent:isHolding() then
- self.pos = self.parent:getPos()-self.ppos
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.m:setRect(self.r,self.pos.x,self.pos.y,self.size.x,self.size.y)
- self.lines:setPos(self.v)
- end
- end
- if self.visible == false then return end
- self.m:draw()
- if self.moving == 1 then
- if self.scrl >= 0 then
- setContext(self.vp)
- background(200,255)
- for i=1,#self.items do
- self.imesh[i]:setRect(self.imeshr[i],s.x/2,s.y-i*self.itemh+(self.itemh/2)+self.scrl,s.x,self.itemh)
- self.imesh[i]:draw()
- pushStyle()
- fill(80,150)
- if self.snum == i then
- rect(0,s.y-i*self.itemh+self.scrl,s.x,self.itemh+1)
- end
- popStyle()
- end
- setContext()
- else
- self.scrl = 0
- end
- end
- local p,s = self.pos,self.size
- self.lines:draw()
- if self.label then
- pushStyle()
- textMode(CORNER)
- fontSize(15)
- fill(255,255)
- text(self.label,p.x-s.x/2,p.y+s.y/2+6)
- popStyle()
- end
- end
- function ComboxImg:touched(t)
- local p,s = self.pos,self.size
- if self.visible == false then return end
- if t.state == BEGAN then
- if t.x < p.x+s.x/2 and t.x > p.x-s.x/2 and t.y > p.y-s.y/2
- and t.y < p.y+s.y/2 then
- self.moving = 1
- self.mov = 0
- self.oldm = 0
- else
- self.moving = 0
- end
- end
- if t.state == MOVING and self.moving == 1 and self.mov == 0 then
- self.snum = self.snum2[1]
- self.oldm = 1
- self.scrl = self.scrl + t.deltaY
- if self.scrl < 0.1 then
- self.scrl = 0
- elseif self.scrl >= (1-(s.y/(#self.items*self.itemh)))*self.itemh*#self.items then
- self.scrl = (1-(s.y/(#self.items*self.itemh)))*self.itemh*#self.items
- end
- end
- if t.state == ENDED and self.moving == 1 and self.mov == 0 then
- for i=1,#self.items do
- if t.x < p.x+s.x/2 and t.x > p.x-s.x/2 and
- t.y > p.y+s.y/2-i*self.itemh+self.scrl and t.y < p.y+s.y/2-i*self.itemh+self.itemh+self.scrl then
- self.snum = i
- end
- end
- if self.oldm == 0 then
- self.snum2[1] = self.snum
- self.selected = self.items[self.snum]
- self.items[self.snum][2]()
- end
- self.snum = self.snum2[1]
- self.moving = 1
- self.mov = 0
- self.oldm = 0
- end
- end
- --# Radio
- Radio = class()
- function Radio:init(pos,size,txt,value)
- self.pos = pos
- self.size = size
- self.val = value
- self.txt = txt
- self.oldpos = self.pos
- self.ppos = vec2()
- self.parent = nil
- self.viscol = color(0,0,0,0)
- self.oldcol = color(170,170,170,255)
- self.alpha = 255
- self.visible = true
- self.strokcol = color(220,220,220,255)
- end
- function Radio:isVisible(bool)
- if bool == false then
- self.visible = false
- elseif bool == true then
- self.visible = true
- end
- end
- function Radio:addParent(par)
- if par ~= nil then
- self.parent = par
- self.ppos = par:getPos()-self.oldpos
- par:addChild(self)
- end
- end
- function Radio:draw()
- if self.parent then
- if self.parent:isHolding() then
- self.pos = self.parent:getPos()-self.ppos
- end
- end
- if self.visible == false then return end
- pushStyle()
- fill(200,self.alpha)
- stroke(100,self.alpha)
- strokeWidth(self.size/8)
- ellipse(self.pos.x,self.pos.y,self.size)
- fill(50,self.alpha*self.val)
- strokeWidth(0)
- ellipse(self.pos.x,self.pos.y,self.size*0.5)
- textMode(CORNER)
- fill(50,self.alpha)
- fontSize(15)
- text(self.txt,self.pos.x+self.size*0.9,self.pos.y-10)
- popStyle()
- end
- function Radio:getValue()
- return self.val
- end
- function Radio:touched(t)
- if self.visible == false then return end
- local tpos = vec2(t.x,t.y)
- if t.state == BEGAN and tpos:dist(self.pos) < self.size then
- if self.val == 1 then
- self.val = 0
- elseif self.val == 0 then
- self.val = 1
- end
- end
- end
- --# Combox
- Combox = class()
- function Combox:init(pos,size,...)
- if ... then
- self.label = ...
- end
- self.pos = pos
- self.size = size
- self.m = mesh()
- self.r = self.m:addRect(pos.x,pos.y,size.x,size.y)
- self.vp = image(size.x,size.y)
- self.m.texture = self.vp
- self.moving = 1
- self.oldm = 0
- self.selected = {}
- self.snum = 0
- self.scrl = 0
- self.img = self.vp
- self.id = 0
- self.items = {}
- self.imesh = {}
- self.imeshr = {}
- self.v = {}
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.lines = Tblines(self.v,220,5)
- self.oldpos = self.pos
- self.ppos = vec2()
- self.snum2 = {0}
- self.mov = 0
- self.parent = nil
- self.numitems = 0
- self.viscol = color(0,0,0,0)
- self.oldcol = color(255, 255, 255, 255)
- self.visible = true
- self.strokcol = color(220,220,220,255)
- end
- function Combox:isVisible(bool)
- if bool == false then
- self.visible = false
- elseif bool == true then
- self.visible = true
- end
- end
- function Combox:setSelected(name)
- for k,v in pairs(self.items) do
- if name == v[1] then
- self.selected = v
- end
- end
- end
- function Combox:strokeCol(col)
- self.lines:setColour(col)
- end
- function Combox:addParent(par)
- if par ~= nil then
- self.parent = par
- self.ppos = par:getPos()-self.oldpos
- par:addChild(self)
- end
- end
- function Combox:addItem(name,callback)
- local p,s = self.pos,self.size
- self.numitems = self.numitems + 1
- self.id = self.id + 1
- table.insert(self.items,{name,callback})
- self.imesh[self.id] = mesh()
- self.imeshr[self.id] = self.imesh[self.id]:addRect(p.x,p.y,s.x,40)
- local img = image(s.x,40)
- setContext(img)
- pushStyle()
- if self.id%2 == 1 then
- background(170,255)
- end
- fill(0,255)
- textWrapWidth(s.x)
- fontSize(15)
- text(name,s.x/2,20)
- stroke(100,255)
- strokeWidth(2)
- line(0,0,s.x,0)
- popStyle()
- setContext()
- self.imesh[self.id].texture = img
- self.imesh[self.id]:draw()
- end
- function Combox:draw()
- local p,s = self.pos,self.size
- if self.parent then
- if self.parent:isHolding() then
- self.pos = self.parent:getPos()-self.ppos
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.m:setRect(self.r,self.pos.x,self.pos.y,self.size.x,self.size.y)
- self.lines:setPos(self.v)
- end
- end
- if self.visible == false then return end
- self.m:draw()
- if self.moving == 1 then
- if self.scrl >= 0 then
- setContext(self.vp)
- background(200,255)
- for i=1,#self.items do
- self.imesh[i]:setRect(self.imeshr[i],s.x/2,s.y-i*40+20+self.scrl,s.x,40)
- self.imesh[i]:draw()
- pushStyle()
- fill(80,150)
- if self.snum == i then
- rect(0,s.y-i*40+self.scrl,s.x,41)
- end
- popStyle()
- end
- setContext()
- else
- self.scrl = 0
- end
- end
- local p,s = self.pos,self.size
- self.lines:draw()
- if self.label then
- pushStyle()
- textMode(CORNER)
- fontSize(15)
- fill(255,255)
- text(self.label,p.x-s.x/2,p.y+s.y/2+6)
- popStyle()
- end
- end
- function Combox:touched(t)
- local p,s = self.pos,self.size
- if t.state == BEGAN then
- if t.x < p.x+s.x/2 and t.x > p.x-s.x/2 and t.y > p.y-s.y/2
- and t.y < p.y+s.y/2 then
- self.moving = 1
- self.mov = 0
- self.oldm = 0
- else
- self.moving = 0
- end
- end
- if t.state == MOVING and self.moving == 1 and self.mov == 0 then
- self.snum = self.snum2[1]
- self.oldm = 1
- self.scrl = self.scrl + t.deltaY
- if self.scrl < 0.1 then
- self.scrl = 0
- elseif self.scrl >= (1-(s.y/(#self.items*40)))*40*#self.items then
- self.scrl = (1-(s.y/(#self.items*40)))*40*#self.items
- end
- end
- if t.state == ENDED and self.moving == 1 and self.mov == 0 then
- for i=1,#self.items do
- if t.x < p.x+s.x/2 and t.x > p.x-s.x/2 and
- t.y > p.y+s.y/2-i*40+self.scrl and t.y < p.y+s.y/2-i*40+40+self.scrl then
- self.snum = i
- end
- end
- if self.oldm == 0 then
- self.snum2[1] = self.snum
- self.selected = self.items[self.snum]
- if self.items[self.snum] ~= nil then
- self.items[self.snum][2]()
- end
- end
- self.snum = self.snum2[1]
- self.moving = 1
- self.mov = 0
- self.oldm = 0
- end
- end
- --# Colour
- Colour = class()
- function Colour:init(pos)
- self.pos = pos
- self.size = vec2(150,100)
- self.m = mesh()
- self.r = self.m:addRect(pos.x,pos.y,self.size.x,self.size.y)
- self.col = color(255,255)
- self.v = {}
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v2 = {}
- self.v2[1] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2-50)
- self.v2[2] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2-50)
- self.v2[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2-20)
- self.v2[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2-20)
- self.v2[5] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2-50)
- self.v3 = {}
- self.v3[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2+40)
- self.v3[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2+40)
- self.v3[3] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2+10)
- self.v3[4] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2+10)
- self.v3[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2+40)
- self.lines = Tblines(self.v,220,5)
- self.lines2 = Tblines(self.v2,220,5)
- self.lines3 = Tblines(self.v3,220,5)
- self.prevcol = color(0,0,0,0)
- self.changed = false
- self.oldpos = self.pos
- self.ppos = vec2()
- self.alpha = 255
- self.parent = nil
- self.touching = false
- self.touchingt = false
- self.touchingb = false
- self.img = readImage("Documents:colour")
- self.m.texture = self.img
- self.b = mesh()
- self.br = self.b:addRect(pos.x,pos.y-self.size.y/2-35,self.size.x,30)
- self.imgt = readImage("Documents:gradient")
- self.b.texture = self.imgt
- self.imga = readImage("Documents:alphabar")
- self.a = mesh()
- self.ar = self.a:addRect(pos.x,pos.y+self.size.y/2+25,self.size.x,30)
- self.a.texture = self.imga
- self.t = nil
- self.tx = 10^10
- self.ty = 10^10
- self.bo = color()
- self.hold = vec2(self.size.x/1.5,0)
- self.hold2 = vec2(self.size.x,0)
- self.viscol = color(0,0,0,0)
- self.oldcol = color(255, 255, 255, 255)
- self.visible = true
- self.strokcol = color(220,220,220,255)
- end
- function Colour:isVisible(bool)
- if bool == false then
- self.visible = false
- elseif bool == true then
- self.visible = true
- end
- end
- function Colour:strokeCol(col)
- self.lines:setColour(col)
- end
- function Colour:isMoving()
- local var = self.changed
- self.changed = false
- return var
- end
- function Colour:isTouchingAlpha()
- return self.touchingb
- end
- function Colour:addParent(par)
- if par ~= nil then
- self.parent = par
- self.ppos = par:getPos()-self.oldpos
- par:addChild(self)
- end
- end
- function Colour:draw()
- if self.parent then
- if self.parent:isHolding() then
- self.pos = self.parent:getPos()-self.ppos
- self.v[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2)
- self.v[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2)
- self.v[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2)
- self.v[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2)
- self.v2[1] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2-50)
- self.v2[2] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2-50)
- self.v2[3] = vec2(self.pos.x+self.size.x/2,self.pos.y-self.size.y/2-20)
- self.v2[4] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2-20)
- self.v2[5] = vec2(self.pos.x-self.size.x/2,self.pos.y-self.size.y/2-50)
- self.v3[1] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2+40)
- self.v3[2] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2+40)
- self.v3[3] = vec2(self.pos.x+self.size.x/2,self.pos.y+self.size.y/2+10)
- self.v3[4] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2+10)
- self.v3[5] = vec2(self.pos.x-self.size.x/2,self.pos.y+self.size.y/2+40)
- self.lines:setPos(self.v)
- self.lines2:setPos(self.v2)
- self.lines3:setPos(self.v3)
- self.m:setRect(self.r,self.pos.x,self.pos.y,self.size.x,self.size.y)
- self.b:setRect(self.br,self.pos.x,self.pos.y-self.size.y/2-35,self.size.x,30)
- self.a:setRect(self.ar,self.pos.x,self.pos.y+self.size.y/2+25,self.size.x,30)
- end
- end
- if self.visible == false then return end
- self.b:draw()
- self.m:draw()
- sprite("Documents:alphabd",self.pos.x,self.pos.y+self.size.y/2+25,self.size.x,30)
- self.a:draw()
- self.lines:draw()
- self.lines2:draw()
- self.lines3:draw()
- pushStyle()
- strokeWidth(5)
- stroke(220,255)
- fill(255)
- fontSize(14)
- text("R:"..math.ceil(self.col.r),self.pos.x-self.size.x/2+self.size.x/7,self.pos.y-self.size.y/2-10)
- text("G:"..math.ceil(self.col.g),self.pos.x-self.size.x/2+(self.size.x/2),self.pos.y-self.size.y/2-10)
- text("B:"..math.ceil(self.col.b),self.pos.x-self.size.x/2+(self.size.x/4)*3.5,self.pos.y-self.size.y/2-10)
- textMode(CORNER)
- text("Alpha:"..self.alpha,self.pos.x-self.size.x/2,self.pos.y+self.size.y/2+43)
- popStyle()
- local p,s = self.pos,self.size
- if self.t ~= nil then
- self.tx = clamp(self.t.x,p.x-s.x/2,p.x+s.x/2)-p.x
- self.ty = clamp(self.t.y,p.y-s.y/2,p.y+s.y/2)-p.y
- if self.t.state == ENDED then
- self.t = nil
- end
- end
- pushStyle()
- stroke(255)
- strokeWidth(2.5)
- fill(0,0)
- ellipse(p.x+self.tx,p.y+self.ty,15)
- --lineCapMode(SQUARE)
- --line(p.x-s.x/2+self.hold.x*1.5,p.y-s.y/2-50,p.x-s.x/2+self.hold.x*1.5,p.y-s.y/2-20)
- rect(p.x-s.x/2+self.hold.x*1.5-4.5,p.y-s.y/2-50,6,30)
- rect(p.x-s.x/2+self.hold2.x-4.5,p.y+s.y/2+10,6,30)
- popStyle()
- end
- function Colour:getValue()
- return color(self.col.r,self.col.g,self.col.b,self.alpha)
- end
- function Colour:getAlpha()
- return self.alpha
- end
- function Colour:isTouching()
- return self.touching or self.touchingt
- end
- function Colour:touched(t)
- if self.visible == false then return end
- local p,s = self.pos,self.size
- if t.state == BEGAN and t.x < p.x+s.x/2 and t.x > p.x-s.x/2 and t.y < p.y+s.y/2 and t.y > p.y-s.y/2 then
- self.t = t
- local ps = self.pos-self.size*0.5
- local nps = self.pos+self.size*0.5
- local tp = vec2(t.x,t.y)
- tp.x = clamp(t.x,ps.x,nps.x)
- tp.y = clamp(t.y,ps.y,nps.y)
- local x,y = tp.x-ps.x,tp.y-ps.y
- x = clamp(x,1,self.img.width)
- y = clamp(y,1,self.img.height)
- self.col.r,self.col.g,self.col.b = self.img:get(x*(self.img.width/self.size.x),y*(self.img.height/self.size.y))
- if self.prevcol ~= self.col then self.changed = true end
- self.prevcol = self.col
- self.touching = true
- for i=1,100 do
- for j=1,20 do
- self.imgt:set(i,j,(self.col.r/100)*i,(self.col.g/100)*i,(self.col.b/100)*i)
- end
- end
- self.a:setColors(self.col)
- self.b.texture = self.imgt
- end
- if t.state == MOVING and self.touching == true then
- self.t = t
- local ps = self.pos-self.size*0.5
- local nps = self.pos+self.size*0.5
- local tp = vec2(t.x,t.y)
- tp.x = clamp(t.x,ps.x,nps.x)
- tp.y = clamp(t.y,ps.y,nps.y)
- local x,y = tp.x-ps.x,tp.y-ps.y
- x = clamp(x,1,self.img.width)
- y = clamp(y,1,self.img.height)
- self.col.r,self.col.g,self.col.b = self.img:get(
- x*(self.img.width/self.size.x),y*(self.img.height/self.size.y))
- if self.prevcol ~= self.col then self.changed = true end
- self.prevcol = self.col
- self.a:setColors(self.col)
- for i=1,100 do
- for j=1,20 do
- self.imgt:set(i,j,(self.col.r/100)*i,(self.col.g/100)*i,(self.col.b/100)*i)
- end
- end
- self.b.texture = self.imgt
- end
- if t.state == ENDED and self.touching then
- self.b.texture = self.imgt
- self.touching = false
- self.t = t
- end
- if t.state == BEGAN and t.x < p.x+s.x/2 and t.x > p.x-s.x/2 and t.y < p.y-s.y/2-20 and t.y > p.y-s.y/2-50 then
- self.touchingt = true
- local psx = p.x-s.x/2
- local npsx = p.x+s.x/2
- local tp = vec2(t.x,t.y)
- tp.x = clamp(t.x,psx,npsx)
- local x = tp.x-psx
- x = clamp(x*(self.imgt.width/self.size.x),2,self.imgt.width)
- if x > 1 and x <= self.size.x then
- self.bo.r,self.bo.g,self.bo.b = self.imgt:get(x,10)
- self.hold = vec2(x,15)
- self.col = self.bo
- self.a:setColors(self.col)
- end
- end
- if t.state == MOVING and self.touchingt then
- local psx = p.x-s.x/2
- local npsx = p.x+s.x/2
- local tp = vec2(t.x,t.y)
- tp.x = clamp(t.x,psx,npsx)
- local x = tp.x-psx
- x = clamp(x*(self.imgt.width/self.size.x),2,self.imgt.width)
- if x > 1 and x <= self.size.x then
- self.hold = vec2(x,15)
- self.col.r,self.col.g,self.col.b = self.imgt:get(x,10)
- self.a:setColors(self.col)
- end
- end
- if t.state == ENDED and self.touchingt then
- self.touchingt = nil
- end
- if t.state == BEGAN and t.x < p.x+s.x/2 and t.x > p.x-s.x/2 and t.y > p.y+s.y/2+10 and t.y < p.y+s.y/2+40 then
- self.touchingb = true
- local psx = p.x-s.x/2
- local npsx = p.x+s.x/2
- local tp = vec2(t.x,t.y)
- tp.x = clamp(t.x,psx,npsx)
- local x = tp.x-psx
- x = clamp(x*(self.imga.width/self.size.x),2,self.imga.width)
- if x > 1 and x <= self.size.x then
- self.hold2 = vec2(x,15)
- local r,g,b
- r,g,b,self.alpha = self.imga:get(x,10)
- end
- end
- if t.state == MOVING and self.touchingb then
- local psx = p.x-s.x/2
- local npsx = p.x+s.x/2
- local tp = vec2(t.x,t.y)
- tp.x = clamp(t.x,psx,npsx)
- local x = tp.x-psx
- x = clamp(x*(self.imga.width/self.size.x),2,self.imga.width)
- if x > 1 and x <= self.size.x then
- self.hold2 = vec2(x,15)
- local r,g,b
- r,g,b,self.alpha = self.imga:get(x,10)
- if self.alpha == 3 then self.alpha = 0 end
- end
- end
- if t.state == ENDED and self.touchingb then
- local psx = p.x-s.x/2
- local npsx = p.x+s.x/2
- local tp = vec2(t.x,t.y)
- tp.x = clamp(t.x,psx,npsx)
- local x = tp.x-psx
- x = clamp(x*(self.imga.width/self.size.x),2,self.imga.width)
- if x > 1 and x <= self.size.x then
- self.hold2 = vec2(x,15)
- local r,g,b
- r,g,b,self.alpha = self.imga:get(x,10)
- if self.alpha == 3 then self.alpha = 0 end
- end
- self.touchingb = nil
- end
- end
- --# Progbar
- Progbar = class()
- function Progbar:init(pos,size,value,col1,col2,...)
- self.pos = pos
- self.size = size
- self.cola = col1
- local colalp = col1.a or 255
- self.colb = col2
- self.colba = col2.a or 255
- if ... then
- self.label = ...
- end
- self.startval = 0
- self.endval = 100
- self.val = value
- self.m = mesh()
- self.r = self.m:addRect(pos.x,pos.y,size.x,size.y)
- self.m:setColors(col1.r,col1.g,col1.b,colalp)
- self.oldpos = self.pos
- self.ppos = vec2()
- self.parent = nil
- self.viscol = color(0,0,0,0)
- self.oldcol = col1
- self.alpha = 255
- self.fillcol = col2
- self.visible = true
- self.strokcol = color(220,220,220,255)
- end
- function Progbar:isVisible(bool)
- if bool == false then
- self.visible = false
- elseif bool == true then
- self.visible = true
- end
- end
- function Progbar:addParent(par)
- if par ~= nil then
- self.parent = par
- self.ppos = par:getPos()-self.oldpos
- par:addChild(self)
- end
- end
- function Progbar:setStart(x)
- self.startval = x
- end
- function Progbar:setEnd(x)
- self.endval = x
- end
- function Progbar:setValue(x)
- self.val = x
- end
- function Progbar:draw()
- self.val = clamp(self.val,self.startval,self.endval)
- if self.parent then
- if self.parent:isHolding() then
- self.pos = self.parent:getPos()-self.ppos
- end
- end
- if self.visible == false then return end
- local p,s = self.pos,self.size
- self.m:setRect(self.r,p.x,p.y,s.x,s.y)
- self.m:draw()
- pushStyle()
- fill(self.fillcol.r,self.fillcol.g,self.fillcol.b,self.alpha)
- rect(p.x-s.x/2,p.y-s.y/2,self.val*(s.x/(self.endval-self.startval))-(s.x/(self.endval-self.startval))*self.startval,s.y)
- fill(255,self.alpha)
- fontSize(13)
- text(self.val,p.x,p.y+1)
- fill(255,self.alpha)
- if self.label then
- textMode(CORNER)
- text(self.label,p.x-s.x/2,p.y+s.y/2+2)
- end
- popStyle()
- end
- function Progbar:touched(touch)
- -- Codea does not automatically call this method
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement