Paid job - GUI programmer

Archives Forums/General Discussion/Paid job - GUI programmer

JoshK(Posted 2009) [#1]
I am looking for someone to write a GUI system in Lua, with support for the following controls:
-Window
-Panel
-Button / checkbox
-Label
-Trackbar / slider
-Listbox with multiple columns
-Text field editor

Please post examples of your experience writing GUIs. You don't have to be an expert at Lua, since it is very easy to pick up.

--Edit--

This can be moved to general discussion, because it doesn't actually involve BlitzMax.


spacerat(Posted 2009) [#2]
This looks like it could be interesting. Do you want a GUI system done from scratch in blitz with a Lua interface? Or do you want the implimentation done in Lua as well as a Lua interface?

As for experience, I've used the lua library quite a bit in blitz, and I'm currently writing a GUI module for a project. I've also learnt to use wxWidgets recently, if that counts for anything. Here's an old screenshot of the GUI module.



And an older screenshot of my wxWidgets program:




JoshK(Posted 2009) [#3]
The whole thing should be done in Lua, using Leadwerks Engine drawing commands; DrawLine, DrawText, Plot, DrawImage, DrawText.

I'm looking for someone with experience writing GUIs, who has a knack for attractive GUI elements. I already have a basic Lua GUI built which you can use, but I want someone who will do a better job than me, since this isn't really my area of expertise. Do you have any more images of your own GUI graphics?


slenkar(Posted 2009) [#4]
http://www.blitzbasic.com/codearcs/codearcs.php?code=2436

this is one that i made, if you think its good enough I can start work
download the ZIP to see the demo


_Skully(Posted 2009) [#5]
Leadworks...

I think your going to find that a scripted GUI is going to be slow... so you would be better off creating the GUI system in Max and then creating GLUE code to allow LUA to control it.


JoshK(Posted 2009) [#6]
Jeremy, I can't download the file, due to a javascript error both IE and Firefox report.


slenkar(Posted 2009) [#7]
hmm download works for me, have you got a script blocker?

I just have flashblock.
Im using firefox.

I created a glue function for the GUI system a while back.as described by skully.


Blitzplotter(Posted 2009) [#8]
@Leadwerks, have you any specific reason for specifying LUA? Excuse my ignorance if it is only LUA you can use but I could hang a GUI together in VB6 that would write out a .ini, .txt file of whatever is within the GUI before starting your app.


Arowx(Posted 2009) [#9]
I'd love to have a go at a great looking GUI, but no LUA experience and got a big multistage project looming so limited time!

But for great looking GUI's have a look at The Skins Factory


JoshK(Posted 2009) [#10]
I want it in Lua because I want everything that can be done in Lua to be done in Lua from now on:
http://www.youtube.com/watch?v=z-EuS1EYk8o


Gabriel(Posted 2009) [#11]
Well speaking as someone who wrote a pretty comprehensive lua-scripted GUI which contains all the controls you want and many more, I can tell you that writing it in Lua is going to cause all sorts of problems. Lua has no inbuilt support for object orientation and inheritance is a very common way to create GUI controls. Ironically, what you'll actually do is make it much harder to use your GUI from Lua specifically because it's written in Lua. That's not even account for speed. Depending on the precise nature of your GUI, there can be some speed sensitive code in there. 2D rendering for a GUI can be a significant chunk of your render time, depending on how complex the GUI is.

I mean you say you want everything that can be done in Lua to be done in Lua. Well you could just expose the OpenGL API through BlitzMax and write the entire renderer in Lua, but that doesn't make it a good idea.

Anyway, I'm not available to do any freelance work either way, so leave my advice or take it, it's up to you.


ShadowTurtle(Posted 2009) [#12]
i wrote a graphical user interface. See the image below.



The graphical user interface took me one year and is not finished yet, because the design is not cool yet... hm... work on the usability needed, too.


Naughty Alien(Posted 2009) [#13]
..i dont know what is your deadline, so I may take a crack on it soon as i get rid of my demo (almost completed)..however, I do believe Lua may not be best way to do things for GUI..anyway, here is how my current GUI system look like...it has everything, from sliders, buttons, checkboxes, credits lists scrollable, or pages or slidable on all direction(user choose and it can use combination between text/images inputs or combined both), all GUI elements will be properly adjusted regardless screen size or ratio so it will look seameless on every config, skinable, etc..







JoshK(Posted 2009) [#14]
Wow. I have not seen this much of your GUI.


beanage(Posted 2009) [#15]
Write a skin system, buttons, edits and window and canvas types in max. Use those basic elements as bricks for an advanced system in lua.

A Scrollbar is multiple buttons. A tabber is multiple windows and buttons. That applies for panels, listboxes, context menus, spinners etc.

That way you could benefit from the max speed, as well as keep your lua system providing the dynamic interface..


_Skully(Posted 2009) [#16]
Leadworks,

How well is your "initial" LUA GUI Speed wise? I'm kind of curious how this works out since eventually I have to integrate scripting into TileMax... If LUA is capable of a fast GUI that would be cool.

Is LUA JIT compiled or byte code interpreted?


degac(Posted 2009) [#17]
Maybe I mis-interpreted the all things, but I really dont' understand why LUA-GUI should be 'slower' than (what?).
I made a little test just to understand LUA with MaxGUI

This is the LUA script


The only 'effort' is to map the MaxGUI function with the LUA ones - and choose the way sending/receiving information.
Lua uses MaxGUI to 'create' windows and buttons, then the just 'waits' events passed by MaxGUI.
I think a similar approach will be used by any graphical interface.
The 'speed' is only in the gui_waitevent() function, and the gui_redraw() used by the engine (Max2d or LeadwerksEngine or whatelse).


JoshK(Posted 2009) [#18]
I wouldn't care if Lua was 50% as fast. It's reusable (in a realistic way where it will actually get reused, not just in theoretical magic land). About 35% of my users are BlitzMax programmers, so any programming language I provide code in will be a dead end for more than half the users. Most programmers I see use C++ only because it is free; then I get blamed when beginners can't figure out how to install MS Visual Studio.

Lua is something everyone can understand, and you can easily download bits of code and plug it into your program. It's one of the best design decisions I have made.


ShadowTurtle(Posted 2009) [#19]
gui_redraw() is a bit large. Only updated events should be drawn. What you need is a gadget-event-container. With a position/size-event a gadget can see any rectangle, wich must to be repainted. A routine like "Min-Max-Octree" is fast therefore but practically hard to program. Even moving windows (inventory and so on) should not send event for repaint, because the gadgets into the windows have been moved.

"Min-Max-Octree" you ask? X = position x of gadget (absolute). Y = position y of gadget (absolute). Z = Draw-/Update order of gadget (do not forget to draw the gadget after the window ^^).

Ok. This is Level 1. Level 2 should be a solution for slow pixel plot wich occurs on modern graphic cards in use with directx and/or opengl. Ah! Your engine use Shaders? Make use of it! Windows Vista make already use of Shaders - future linux KDE make use of more Shaders for GUI - the World will be a shader -.-

Ok. You have a texture/shader size limit (512x512 or so on). So you must use more textures/shader to fill the screen. 8 Polygons and 4 separate Shaders later, do you forget a cool feature in Level 1: Level 2 have a absolute resolution, Level 1 based itself on the real screen resolution. Can Level 1 compare with it?

It is a work of 3 months and you need a pro. for this. This costs you at least 2.700$ * 3 by a professional. Work in a non object-oriented language environment makes 2 Months plus.

The sum is 13.500$. Have your users group bring this sum with this product? It is useless to hold the group of users, so long the lost sum is lower.

Set the users off-line, so your time is on-line. Think in the future - the time is with you.


_Skully(Posted 2009) [#20]
This is interesting http://luajit.org/

That would completely make using a scripted system viable by eliminating the byte-code interpretation. Then the GUI would make sense.

The last time I got into scripting, I started to use it too much... what happens then is that you find out that your GUI is taking too many CPU/GPU cycles so it either feels groggy (because you've limited the cycles per second it can use) or the rest of your game slows right down.

I only say this because your product looks awesome (seriously considering it for my next project) and I would hate to see it suffer in the long term. Your project... your decision... just be careful you don't become a script junky ;)

I wonder if you might benefit by making GLUE code for an accomplished GUI system already out there?


JoshK(Posted 2009) [#21]
Can you suggest any preexisting GUIs?


_Skully(Posted 2009) [#22]
Not through experience, but I know there are several out there. Your main concern would likely be skin-able, and flexible but snappy too. What control types do you need, pretty much everything? animation?


beanage(Posted 2009) [#23]
I can only repeat what i've said;
make a _simple_ set of _basic_ gadgets a.k.a. buttons, windows, canvases, edits, a TStyle class, and some advanced mouse-gadget event localization with doubleclick checking and stuff,
and leave it up to your lua-artists to build advanced gadgets outa those.
I predict a good implementation will be below 3k lines.
They'll love it.

So the most important thing is, that the gadgets can be, just like the 3d objects, sorted into an abstract hierarchy of objects, and individually be controlled with local lua scripts. According to what i've seen in your vids, that really shouldnt be the problem.

I've done this before for my teams engine and scripting system,- rewriting the interface for lua shouldn't be that much of a problem as well:

Dont be frightened by those ~500 fps, I was running in advanced shader level 1920*1080 for this shot. Artworks are by my team.

Unfortunately i dont own your engine; but a license for me and i'll do it.


Takis76(Posted 2012) [#24]
What kind of gui is this?
I want it!!!!


matibee(Posted 2012) [#25]
Takis what are you trying to achieve? What type of application are you attempting? You've "tried" all these things ifsoGUI / iGlass / dwlab framework / MaxGUI / ProGUI / mention of grey aliens framework and so much more.

But they are mostly different tools for different jobs.

If it's a game then the UI doesn't need to match that of the OS (indeed it probably shouldn't!) and it needs to run full screen which cuts out MaxGUI and ProGUI.

There are other game frameworks out there too with their own GUI's built in:

Playniax framework: http://www.playniax.com/developers/ignition-framework/
and mine (which was written as a replacement for Grey Aliens): http://www.matibee.co.uk/wpsite/code/mbm-framework/ Scan the functionality through the docs here

You're going to have to accept that you're not going to find exactly what you want. Instead you'll have to take what's available and put some work in to make them exactly what you want. There's nothing unusual about that.

If you're doing a game and don't want to use an entire framework, then go for ifsoGUI. It's solid and reliable. None of the authors samples look cool and flash like iGlass does, but you can see it in action, all fully re-skinned for the purpose here..

http://www.youtube.com/watch?v=x9FCRQBBByk


Takis76(Posted 2012) [#26]
All of this fantastic was made with ifso gui?

How do you change or create skins?
The disadvantage with ifsoGui , is menus not supported.

I want 2 kinds of Guis , one for Fullscreen games and one with windows application. So far MaxGui , will make the work.

wxMax had a lots of errors to get compiled and I am not care to fix it , is not my job to fix other people guis , is the developer's job.

Your video clip convinced me the ifsoGui is a nice library , (Don't have menus)

This iGlass have nice screenshots and nice menus. I will try both , there is not other way to see which of them is the best , before purchase.

About window application Guis like MaxGui , only MaxGui made the job well so far , but there is problem with image buttons and the developer seems to abandoned his project , because if you see some software became free and open source , means the software is abandoned.

As I see , there is not the best Gui out there. If I will try to create my own Gui library from scratch , I will need to learn the language very well first , to finish some couple of games even with other peoples libraries and we shall see after 5 years.

I liked ifsoGui with your skins , I am interesting about your skins , or if is possible to create my own skins.

Takis what are you trying to achieve?


I would like to create the level editor of my game.
I have started my rpg (Eye of the Beholder 4) with PureBasic and DarkGDK and I would like to create the level editor.

I have started some few things with MaxGui , but I like to have and Fullscreen gui for my games. And MaxGui not supports image buttons.
And some addons and other extensions or libraries I found here , most of them not compiles and have problems.

How the rpg is look like.


I will see , I will search for a few more Guis and I will purchase ifsoGui and iGlass for fullscreen GUI , and I will still use MaxGui for windows Gui.

Some time I will show you how my level editor is look like with the new Guis , when I Decide which among of them , I will choose.

Thank you very very much.


matibee(Posted 2012) [#27]
It's not unusual to make editors and games with separate GUI systems unless the editor is embedded in the game (is that what you are trying to do?)

MaxGUI

MaxGUI should be perfectly fine for making a stand-alone editor. Here's one I did in no time at all (couple of days, max); http://www.matibee.co.uk/wpsite/2010/01/03/hello-world/

For image buttons it's very easy to make a panel behave like a button (which is the recommended, cross platform way of making bitmap buttons.) I posted an example here: http://www.blitzbasic.com/Community/posts.php?topic=97019

ifsoGUI
Menus are really not a problem with ifsoGUI. You could make a form with a row of buttons, and upon hitting each button show the correct "menu form" underneath. Each menu form has buttons for each menu command. I've done this before, just not with ifsoGUI. There's a community of users and maybe with the authors (TaskMaster) help you could achieve this.

The video above isn't mine, but from another blitzmax, ifsoGUI user SystemError51. I don't know how to make skins although as I remember they are just a collection of split up images. If you fast forward through the video to here: http://www.youtube.com/watch?feature=player_detailpage&v=x9FCRQBBByk#t=460s you'll see SystemError51 change the ifsoGUI skins on the fly. Clever stuff.


Takis76(Posted 2012) [#28]
My level editor will be a separated tool , not embended in my game.
But I don't have desided if it will fullscreen application or windows forms application.

About MaxGui and panel trick , to make it as PANEL_RAISED , or PANEL_SUNKEN was a nice idea , but CreatePanel function set the appearance of the panel gadget.

Which commant changes the style or the image of the panel gadget on runtime?

Does ifsoGui support image buttons to make a menu like toolbox?

Thank you!

Last edited 2012

Last edited 2012


matibee(Posted 2012) [#29]
My level editor will be a separated tool , not embended in my game.
But I don't have desided if it will fullscreen application or windows forms application.


Then take my advice and make it with MaxGUI. There's nothing more cumbersome than a gui based application NOT behaving like a native app. It's sometimes necessary and rewarding (see Blender), but 99% of the time people will just want it to work the way they are used to. There are minor niggles like copy+pasting text across text fields, file dialogs, window rezising etc and a major niggle; performance. A blitzmax graphics application is a different beast to a blitzmax GUI application.

Which commant changes the style or the image of the panel gadget on runtime?

I don't think you can change the style, but you change the graphic with SetGadgetPixmap

Does ifsoGui support image buttons to make a menu like toolbox?

Yes. Maybe not directly, but we worked on some sample source for these over at the ifsoGUI forums.

Now, let's stop bumping this really old thread :)


Steve Elliott(Posted 2012) [#30]
I can't think of anything worse than a game looking like a spreadsheet as far as GUI is concerned. If you take a look at Naughty Alien's GUI, that's the sort of thing I want to see in a game. Max GUI for utility programs.


D4NM4N(Posted 2012) [#31]
@josh,

Cant really help you with the LUA. However I did notice though you forgot a multi selector in your list of widgets! It might be useful! (eg. a dropdown or radio group)


TaskMaster(Posted 2012) [#32]
Yes, ifsoGUI has image buttons.

You can go to the ifsoGUI Wiki (http://wiki.ifsogui.com) to see all of the gadgets available and the methods/functions connected to each.

It really would not be very difficult to do a menu bar type gadget. Maybe some buttons with a list box that pops up with the options... hmmm...

I might dabble with this, but I am crazy busy with work. I always come back to play with BlitzMax as I have been messing with it again in the past few weeks.


*(Posted 2012) [#33]
D4NM4N:Up till post 22 this was a dead thread (2 years old) :)

there seems to be a lot of 'raising the dead' in threads lately


D4NM4N(Posted 2012) [#34]
OOps fell for that one!
Ok... who is practicing the dark arts?

Edit: @Takis76 You should really start a new thread with reference to this one (include a link to post number to go to specific post :)

I think he can be forgiven this once... eh lads? :D

Last edited 2012


Steve Elliott(Posted 2012) [#35]
Haha, maybe threads should 'time out' and auto lock after 6 months.


*(Posted 2012) [#36]
@Steve: been asking for this for ages, would keep the forum fresh and stop necrotic thread from reappearing from time to time.