Drawing GUI widgets?


I am developing a GUI library that will be used for some games I’m planning to make. I have most of the code done (event handling, layout, etc.), BUT I haven’t made any progress with the actual drawing, since I don’t know any good way of doing it. What I want to be able to draw is:
[ul][li] Colored rectangles (for buttons, text edit controls, etc.)[/li] [li] Textured rectangles[/li] [li] Lines (for borders)[/li] [li] Text[/ul] I’m planning to draw it all with version 3.3, and 2.1 where 3.x is unavailable. I will probably have to render the rectangles first (done using two triangles each in 3.3), then the lines, and the text last. I will use FreeType to generate the bitmaps needed for text rendering. My questions are:[/li][ul][li] What is an efficient way to send all the necessary vertex/color data to the GPU? How should it be sorted?[/li] [*] What is the best way to render text from bitmaps loaded by FreeType?[/ul]Thank you on beforehand for any advice I get.