Disclaimer: This thread is mostly for keeping me motivated since I'm a lazy something or other. So feel free to be annoying. I code in Java using OpenGL and hate Java Swing with all my heart. I usually make crappy ad hoc UIs for every thing I code (not that I code much), so I decided to make my own GUI library. Since I'm a noob it'd make a good learning experience, what with never having coded a library before. I'm making it renderer unspecific for the same reason. Although I'm coding it in Java, I'm going to try to not use any Java packages (the import thingies). This way it'll pretty much be OO psuedo-code in Java form, easily convertible into whichever OO language I decide to learn next. Also, it'd increase the cool factor, which is good for motivation. Renderer unspecific basically means that the library won't handle any of the drawing. You'll have to make your own renderer using whatever graphics library you prefer (in my case, that would be OpenGL). Spoiler: The rough gist of how I want it to work -A script generates a UI via the library. -UI takes in KB/M data from whatever program (now known as Jimmy) is using the library. -UI updates element positions (x,y coordinates), states and orders (what goes on top of what) based on KB/M input. -UI sends element positions, orders and states/events to Jimmy. -Jimmy renders a GUI using received UI element positions and orders. -Jimmy performs functions and updates its variables using received UI element states/events. Spoiler: Desired features -Have everything about the GUI (including what each element does when triggered) be determined via a script. -Layers (e.g. inventory screen) that are resizeable, repositionable and min/maximizable during runtime. -Buttons, text-boxes, drop-down lists, sliders and scrollbars. -Elements hold very abstracted state/event data (e.g. a double between 0 and 1 for sliders). Spoiler: What I have so far -Buttons and layers have click detection. -Layers are reordered when clicked on. -Layers are repositioned when you click and drag them. -Horizontal and vertical scroll bars for layers. -Layers can be resized. Spoiler: Checklist Spoiler I'm not very good at explaining things so I hope what I've said so far makes sense. If not, just ask. I̶'̶l̶l̶ ̶u̶p̶l̶o̶a̶d̶ ̶t̶h̶e̶ ̶s̶o̶u̶r̶c̶e̶ ̶a̶f̶t̶e̶r̶ ̶I̶'̶v̶e̶ ̶c̶o̶d̶e̶d̶ ̶a̶ ̶b̶i̶t̶ ̶m̶o̶r̶e̶ ̶a̶n̶d̶ ̶a̶d̶d̶e̶d̶ ̶c̶o̶m̶m̶e̶n̶t̶s̶.̶.̶.̶ Also, scripting support will be the last thing I do, so the source won't be for a library, it'll be for a program with all the classes intended for the library plus a Core class (main) to simulate/act as an abstraction of Jimmy and his renderer. Compiled runnable version, http://www.mediafire.com/download/0tl8k4819xkr3i0/GuiDemo.rar It works like a standard UI. Drag the scroll bar to scroll, click a button to click a button, drag the bottom right corner to resize and drag anywhere else to drag the layer. Source, http://pastebin.com/u/razaron It's under "GUI Library/". Requires LWJGL. This is all part of a larger goal, the first step of which is to be able to quickly and easily make UIs. By around October I hope to have learned basic AI, coded a fairly versatile cellular automaton library, coded an impulse based physics library and gotten my head around scripting (so I don't have to hard-code everything). I've already learned A*, know how I'm going to do the cellular automaton library and coded a verlet based physics engine beforehand. The only thing I know jack squat about is scripting.