Gspöt - retained GUI lib
- trubblegum
- Party member
- Posts: 192
- Joined: Wed Feb 22, 2012 10:40 pm
Re: Gspöt - formerly Yet another stateful GUI
Update : added element:update(dt)
Re: Gspöt - formerly Yet another stateful GUI
Hey trubblegum, thanks for this.
I want to use an image as a button label, and I see that this functionality exists but 'img' isn't included in the button constructor. Am I just misunderstanding how to use images here?
I want to use an image as a button label, and I see that this functionality exists but 'img' isn't included in the button constructor. Am I just misunderstanding how to use images here?
- trubblegum
- Party member
- Posts: 192
- Joined: Wed Feb 22, 2012 10:40 pm
Re: Gspöt - formerly Yet another stateful GUI
There are two ways to add an image, mostly because I haven't decided on what's the best way to do it yet.
The first is to make a button using id = gui:button() and then assign the image using gui:element(id).img = imgdata
The second is with gui:image(label, pos, img, optional parent) but at the moment this doesn't display label (that's why it's not in the examples, and it will be fixed in the next update)
In either case (at least for now) the image must be an imagedata such as is loaded by love using love.graphics.newImage()
I'm building in a shortcut for image buttons now, so check back soon.
The first is to make a button using id = gui:button() and then assign the image using gui:element(id).img = imgdata
The second is with gui:image(label, pos, img, optional parent) but at the moment this doesn't display label (that's why it's not in the examples, and it will be fixed in the next update)
In either case (at least for now) the image must be an imagedata such as is loaded by love using love.graphics.newImage()
I'm building in a shortcut for image buttons now, so check back soon.
- trubblegum
- Party member
- Posts: 192
- Joined: Wed Feb 22, 2012 10:40 pm
Re: Gspöt - formerly Yet another stateful GUI
Update :
- image(this, label, pos, img, parent) resizes the element to fit the image, and displays the image with no background, and a centered label below
- imgbutton(this, label, pos, img, parent) does not resize the element, centers the image, and displays with default interactive background behind the image, and label centered just below the top of the element
Both accept imageData as arg 4, or will do img = assert(love.graphics.newImage(img)) if type(img) == 'string'
Keep 'em coming
- image(this, label, pos, img, parent) resizes the element to fit the image, and displays the image with no background, and a centered label below
- imgbutton(this, label, pos, img, parent) does not resize the element, centers the image, and displays with default interactive background behind the image, and label centered just below the top of the element
Both accept imageData as arg 4, or will do img = assert(love.graphics.newImage(img)) if type(img) == 'string'
Keep 'em coming
Re: Gspöt - formerly Yet another stateful GUI
That makes sense. I've been playing with this library all afternoon (my RPG has so many buttons now!), and I have one question and one suggestion:
Question: Is there a way for me to assign functions that are called when an element gains or loses focus? I think this would be easy for me to add but I just want to make sure it's not already there.
Suggestion: I think backspace should continue to delete things when held down for more than a half second (or some other fraction). People would have to add a gui:isdown() call, but it seems like a small price to pay.
Question: Is there a way for me to assign functions that are called when an element gains or loses focus? I think this would be easy for me to add but I just want to make sure it's not already there.
Suggestion: I think backspace should continue to delete things when held down for more than a half second (or some other fraction). People would have to add a gui:isdown() call, but it seems like a small price to pay.
- trubblegum
- Party member
- Posts: 192
- Joined: Wed Feb 22, 2012 10:40 pm
Re: Gspöt - formerly Yet another stateful GUI
there is a element:update(dt), which is called every update.
In very simplistic terms, you're probably looking at something like :
Of course, you will want to provide for timing, which is why the gui passes dt along to the element.
Do you think it might be worth adding element.updateinterval to signal how often to call the behaviour?
I'm considering it.
In very simplistic terms, you're probably looking at something like :
Code: Select all
gui:element(id).update = fuction(this, dt)
if love.keyboard.isdown('backspace') then
this.value = this.value:sub(1, this.value:len())
end
end
Do you think it might be worth adding element.updateinterval to signal how often to call the behaviour?
I'm considering it.
- trubblegum
- Party member
- Posts: 192
- Joined: Wed Feb 22, 2012 10:40 pm
Re: Gspöt - formerly Yet another stateful GUI
Doh! The first question ..
Elements have focus at different levels, so I'm not sure how I'd go about adding start and stop events for each one, but I can give it some thought.
The "states" which the gui tracks are :
- gui.mousein - id of the topmost element under the pointer
- gui.mouseover - id of the topmost element under the pointer and the element being dragged. only not nil if an element is being dragged over another element.
- gui.focus - id of an input element which has focus
You can of course simulate mouseEnter and mouseLeave events with something like :
Come to think of it, it would be fairly straightforward to implement, but something for tomorrow, I think - glad you brought it up.
Come to think of it more, it is my job to provide that functionality for you but still a job for tomorrow
Elements have focus at different levels, so I'm not sure how I'd go about adding start and stop events for each one, but I can give it some thought.
The "states" which the gui tracks are :
- gui.mousein - id of the topmost element under the pointer
- gui.mouseover - id of the topmost element under the pointer and the element being dragged. only not nil if an element is being dragged over another element.
- gui.focus - id of an input element which has focus
You can of course simulate mouseEnter and mouseLeave events with something like :
Code: Select all
element = gui:element(id)
element.hasfocus = false
element.enter = function(this) print("I'm In!") end
element.leave = function(this) print("I'm Out!") end
element.update = function(this, dt)
if this.id == this.Gspot.mousein then
if not this.hasfocus then
this:enter()
this.hasfocus = true
end
else
if this.hasfocus then
this:leave()
this.hasfocus = false
end
end
end
Come to think of it more, it is my job to provide that functionality for you but still a job for tomorrow
Re: Gspöt - formerly Yet another stateful GUI
Great!
I'm not sure the updateinterval would be used enough to warrant its own per-element setting, especially since there would almost always be an alternate solution using dt.
However, I do think that every element should have an optional font override. Otherwise someone will have to make a GUI for every font (I think). It would just require you to add something like:
I'm not sure the updateinterval would be used enough to warrant its own per-element setting, especially since there would almost always be an alternate solution using dt.
However, I do think that every element should have an optional font override. Otherwise someone will have to make a GUI for every font (I think). It would just require you to add something like:
Code: Select all
if element.font then
love.graphics.setFont(element.font)
else
love.graphics.setFont(this.font)
end
Re: Gspöt - formerly Yet another stateful GUI
God I love the names of these libraries. Firstly we have Löve, even. and then there's:
LUBE
AnAL
HUMP
SECS
HardonCollider
i love you people
LUBE
AnAL
HUMP
SECS
HardonCollider
i love you people
- trubblegum
- Party member
- Posts: 192
- Joined: Wed Feb 22, 2012 10:40 pm
Re: Gspöt - formerly Yet another stateful GUI
Colour too!Gravy wrote:every element should have an optional font override
More for the ToDo list
It's good to smile while you workKingdaro wrote: LUBE
AnAL
HUMP
SECS
HardonCollider
Löve you too, man
Who is online
Users browsing this forum: Google [Bot] and 2 guests