mirror of
https://github.com/TangentFoxy/Pop.Box.git
synced 2024-12-15 12:44:20 +00:00
started work on rewriting in moonscript
This commit is contained in:
commit
2442730ded
52
src/pop/elements/box.moon
Normal file
52
src/pop/elements/box.moon
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
import graphics from love
|
||||||
|
import sub, len from string
|
||||||
|
|
||||||
|
path = sub ..., 1, len(...) - len "/box"
|
||||||
|
element = require "#{path}/element"
|
||||||
|
|
||||||
|
class box extends element
|
||||||
|
new: (pop, parent, background=false) =>
|
||||||
|
super pop, parent
|
||||||
|
|
||||||
|
@background = background
|
||||||
|
|
||||||
|
draw: => --NOTE these ifs might be wrong? test this!
|
||||||
|
if @background
|
||||||
|
if type(@background) == "table"
|
||||||
|
graphics.setColor @background
|
||||||
|
else
|
||||||
|
graphics.setColor @background
|
||||||
|
w, h = @background\getDimensions!
|
||||||
|
w = @w/w
|
||||||
|
h = @h/h
|
||||||
|
graphics.draw @background, @x, @y, 0, w, h
|
||||||
|
|
||||||
|
return @
|
||||||
|
|
||||||
|
debugDraw: =>
|
||||||
|
graphics.setLineWidth 0.5
|
||||||
|
graphics.setColor 0, 0, 0, 100
|
||||||
|
graphics.rectangle "fill", @x, @y, @w, @h
|
||||||
|
graphics.setColor 0, 0, 200, 200
|
||||||
|
graphics.rectangle "line", @x, @y, @w, @h
|
||||||
|
graphics.setColor 200, 200, 255, 255
|
||||||
|
graphics.print "b", @x, @y
|
||||||
|
|
||||||
|
return @
|
||||||
|
|
||||||
|
setBackground: (background) =>
|
||||||
|
@background = background
|
||||||
|
return @
|
||||||
|
|
||||||
|
getBackground: =>
|
||||||
|
return @background
|
||||||
|
|
||||||
|
setColor: (r, g, b, a=255) =>
|
||||||
|
@background = {r, g, b, a}
|
||||||
|
return @
|
||||||
|
|
||||||
|
getColor: =>
|
||||||
|
if type(@background) == "table"
|
||||||
|
return unpack @background
|
||||||
|
else
|
||||||
|
error "This box doesn't have a color." --might be bad design...
|
152
src/pop/elements/element.moon
Normal file
152
src/pop/elements/element.moon
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
import graphics from love
|
||||||
|
|
||||||
|
class element
|
||||||
|
new: (pop, parent) =>
|
||||||
|
@parent = parent
|
||||||
|
@child = {}
|
||||||
|
|
||||||
|
@x = parent.x or 0
|
||||||
|
@y = parent.y or 0
|
||||||
|
@w = 10
|
||||||
|
@h = 10
|
||||||
|
|
||||||
|
@horizontal = "left"
|
||||||
|
@vertical = "top"
|
||||||
|
|
||||||
|
debugDraw: =>
|
||||||
|
graphics.setLineWidth 0.5
|
||||||
|
graphics.setColor 0, 0, 0, 100
|
||||||
|
graphics.rectangle "fill", @x, @y, @w, @h
|
||||||
|
graphics.setColor 0, 200, 0, 200
|
||||||
|
graphics.rectangle "line", @x, @y, @w, @h
|
||||||
|
graphics.setColor 200, 255, 200, 255
|
||||||
|
graphics.print "e", @x, @y
|
||||||
|
|
||||||
|
return @
|
||||||
|
|
||||||
|
move: (x, y) =>
|
||||||
|
@x += x
|
||||||
|
@y += y
|
||||||
|
|
||||||
|
for i in @child do
|
||||||
|
if not @child[i].excludeMovement
|
||||||
|
@child[i]\move x, y
|
||||||
|
|
||||||
|
return @
|
||||||
|
|
||||||
|
setPosition: (x, y) =>
|
||||||
|
oldX = @x
|
||||||
|
oldY = @y
|
||||||
|
|
||||||
|
switch @horizontal
|
||||||
|
when "left"
|
||||||
|
@x = x
|
||||||
|
when "center"
|
||||||
|
@x = x - @w/2
|
||||||
|
when "right"
|
||||||
|
@x = x - @w
|
||||||
|
|
||||||
|
switch @vertical
|
||||||
|
when "top"
|
||||||
|
@y = y
|
||||||
|
when "center"
|
||||||
|
@y = y - @h/2
|
||||||
|
when "bottom"
|
||||||
|
@y = y - @h
|
||||||
|
|
||||||
|
for i in @child
|
||||||
|
if not @child[i].excludeMovement
|
||||||
|
@child[i]\move x - oldX, y - oldY
|
||||||
|
|
||||||
|
return @
|
||||||
|
|
||||||
|
getPosition: =>
|
||||||
|
resultX = @x
|
||||||
|
resultY = @y
|
||||||
|
|
||||||
|
switch @horizontal
|
||||||
|
when "center"
|
||||||
|
resultX += @w/2
|
||||||
|
when "right"
|
||||||
|
resultX += @w
|
||||||
|
|
||||||
|
switch @vertical
|
||||||
|
when "center"
|
||||||
|
resultY += @h/2
|
||||||
|
when "bottom"
|
||||||
|
resultY += @h
|
||||||
|
|
||||||
|
return resultX, resultY
|
||||||
|
|
||||||
|
setSize: (w, h) =>
|
||||||
|
if w
|
||||||
|
switch @horizontal
|
||||||
|
when "center"
|
||||||
|
@x -= (w - @w)/2
|
||||||
|
when "right"
|
||||||
|
@x -= w - @w
|
||||||
|
@w = w
|
||||||
|
|
||||||
|
if h
|
||||||
|
switch @vertical
|
||||||
|
when "center"
|
||||||
|
@y -= (h - @h)/2
|
||||||
|
when "bottom"
|
||||||
|
@y -= h - @h
|
||||||
|
|
||||||
|
@h = h
|
||||||
|
|
||||||
|
return @
|
||||||
|
|
||||||
|
getSize: =>
|
||||||
|
return @w, @h
|
||||||
|
|
||||||
|
adjustSize: (w, h) =>
|
||||||
|
W, H = @getSize!
|
||||||
|
|
||||||
|
if w
|
||||||
|
W += w
|
||||||
|
if h
|
||||||
|
H += h
|
||||||
|
|
||||||
|
@setSize W, H
|
||||||
|
|
||||||
|
return @
|
||||||
|
|
||||||
|
align: (horizontal, vertical) =>
|
||||||
|
@setAlignment horizontal, vertical
|
||||||
|
|
||||||
|
@x = @parent.x
|
||||||
|
@y = @parent.y
|
||||||
|
|
||||||
|
switch @horizontal
|
||||||
|
when "center"
|
||||||
|
@x += (@parent.w - @w)/2
|
||||||
|
when "right"
|
||||||
|
@x += @parent.w - @w
|
||||||
|
|
||||||
|
switch @vertical
|
||||||
|
when "center"
|
||||||
|
@y += (@parent.h - @h)/2
|
||||||
|
when "bottom"
|
||||||
|
@y += @parent.h - @h
|
||||||
|
|
||||||
|
return @
|
||||||
|
|
||||||
|
alignTo: (element, horizontal, vertical) =>
|
||||||
|
realParent = @parent
|
||||||
|
@parent = element
|
||||||
|
|
||||||
|
@align horizontal, vertical
|
||||||
|
|
||||||
|
@parent = realParent
|
||||||
|
|
||||||
|
return @
|
||||||
|
|
||||||
|
setAlignment: (horizontal, vertical) =>
|
||||||
|
if horizontal
|
||||||
|
@horizontal = horizontal
|
||||||
|
if vertical
|
||||||
|
@vertical = vertical
|
||||||
|
|
||||||
|
return @
|
86
src/pop/init.moon
Normal file
86
src/pop/init.moon
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
import filesystem, graphics from love
|
||||||
|
import insert from table
|
||||||
|
|
||||||
|
path = ...
|
||||||
|
|
||||||
|
class Pop
|
||||||
|
new: =>
|
||||||
|
@elements = {}
|
||||||
|
@window = {child: {}} --TODO eliminate this crap
|
||||||
|
--@focused = @window --TODO redo better
|
||||||
|
|
||||||
|
elements = filesystem.getDirectoryItems "#{path}/elements"
|
||||||
|
for i in elements
|
||||||
|
name = elements[i]\sub 1, -5
|
||||||
|
@elements[name] = require "#{path}/elements/#{name}"
|
||||||
|
print "loaded element: #{name}"
|
||||||
|
|
||||||
|
if not @name
|
||||||
|
@name = (...) -> return @create(name, ...)
|
||||||
|
print "wrapped created: #{name}()"
|
||||||
|
|
||||||
|
@window = @create("element")\setSize(graphics.getWidth!, graphics.getHeight!)
|
||||||
|
print "created window"
|
||||||
|
|
||||||
|
create: (elementType, parent=@window, ...) =>
|
||||||
|
newElement = @elements[elementType](@, parent, ...)
|
||||||
|
insert parent.child, newElement
|
||||||
|
return newElement
|
||||||
|
|
||||||
|
update: (dt, element=@window) =>
|
||||||
|
if not element.excludeUpdating
|
||||||
|
if element.update
|
||||||
|
element\update dt
|
||||||
|
|
||||||
|
for i in element.child
|
||||||
|
@update dt, element.child[i]
|
||||||
|
|
||||||
|
draw: (element=@window) =>
|
||||||
|
if not element.excludeRendering
|
||||||
|
if element.draw
|
||||||
|
element\draw
|
||||||
|
|
||||||
|
for i in element.child
|
||||||
|
@draw element.child[i]
|
||||||
|
|
||||||
|
mousepressed: (button, x, y, element) =>
|
||||||
|
error "Unimplemented."
|
||||||
|
|
||||||
|
mousereleased: (button, x, y, element) =>
|
||||||
|
error "Unimplemented."
|
||||||
|
|
||||||
|
keypressed: (key) =>
|
||||||
|
error "Unimplemented."
|
||||||
|
|
||||||
|
keyreleased: (key) =>
|
||||||
|
error "Unimplemented."
|
||||||
|
|
||||||
|
textinput: (text) =>
|
||||||
|
error "Unimplemented."
|
||||||
|
|
||||||
|
skin: (element, skin, apply_to_children=false) =>
|
||||||
|
if element.background
|
||||||
|
element.background = skin.background
|
||||||
|
if element.color
|
||||||
|
element.color = skin.color
|
||||||
|
if element.font
|
||||||
|
element.font = skin.font
|
||||||
|
|
||||||
|
if not apply_to_children
|
||||||
|
for i in element.child
|
||||||
|
@skin element.child[i], skin
|
||||||
|
|
||||||
|
debugDraw: (element=@window) =>
|
||||||
|
if element.debugDraw
|
||||||
|
element\debugDraw!
|
||||||
|
else
|
||||||
|
graphics.setLineWidth 1
|
||||||
|
graphics.setColor 0, 0, 0, 100
|
||||||
|
graphics.rectangle "fill", element.x, element.y, element.w, element.h
|
||||||
|
graphics.setColor 150, 150, 150, 150
|
||||||
|
graphics.rectangle "line", element.x, element.y, element.w, element.h
|
||||||
|
graphics.setColor 200, 200, 200, 255
|
||||||
|
graphics.print ".", element.x, element.y
|
||||||
|
|
||||||
|
for i in element.child
|
||||||
|
@debugDraw element.child[i]
|
Loading…
Reference in New Issue
Block a user