--------------------------------- ParaGUI unstable development tree BEWARE! MAY CONTAIN NUTS --------------------------------- ---------------------- ROADMAP LEADING TO 1.2 ---------------------- 1.1.5 - signals handled by libsigc++ 1.1.6 - API cleanup (all binary incompatible changes allowed) 1.1.7 - Performance tuning / more API cleanups 1.1.8 - unify constructors (e.g.: PG_Widget(PG_Widget* parent, const PG_Rect& rect)) needed for factory. redesign of event-handling. 1.1.9 - merge object factory from paragui2 1.1.10 - merge and rework XML layoutloader 1.1.? - i'll consult my magic orb If you want to take part in the development process - drop me a few lines or take a look into "TODO". ---------------------------- Whats new in ParaGUI 1.1.7 ? ---------------------------- - optimized (software)cursor drawing - removed obsoleted PG_Widget::[Move|Size]Window methods - added custom itemheight to PG_DropDown::AddItem() - dynamic resizing of listbox height in PG_DropDown - disabled alpha for application background - optimized PG_RectList - added docs - major rewrite of PG_WidgetList (new class PG_ScrollArea) - fixed many widget child-handling bugs - the new design should simply do it *right* - removed obsolete PG_WidgetListEx class - reworked nearly all class constructors - splitted PG_WidgetList in PG_ScrollWidget / PG_WidgetList - PG_RichEdit is now inherited from PG_ScrollWidget - PG_ScrollBar / PG_Slider cleanup - applied patches from Sebastian: made AddWidget() / AddItem() obsolete (see roadmap for more info) added param 'bool bRecursive' to PG_Widget::SetTransparency (set to false by default) added PG_Button::SetTransparency(Uint8 t, bool bRecursive) to work properly when a parent widget sets transparency recursively improved graphical update of software cursor a bit by minimizing rect to be updated merged multiple calls to SDL_UpdateRects to improve performance (see SDL reference for more info) added PG_DropDown::GetIndent() added PG_Label::GetIndent() added PG_ListBox::GetIndent() fixed PG_ListBox::GetSelectedItems() (sorry, my fault :)) fixed: sometimes PG_ListBox items were drawn although parent was not visible removed unnecessary BringToFront() in PG_DropDown::handleButtonClick() improved graphical update in PG_ListBox::SelectItem() added 24 bpp support for fonts (thanks to Steve McCrea!) fixed paratest.cpp VC.NET warnings made some changes to paratest.cpp to make use of PG_Button::SetTransparency() and the new way of adding items to lists made some minor cleanups fixed VC complaint concerning PG_Application::GetScreen() added PG_ListBox::SetAlignment() / GetAlignment() added PG_DropDown::SetAlignment() / GetAlignment() added PG_Window::GetIcon() modified PG_Application::SetCaption() to use ParaGUI's SetIcon() insteadof SDL's fixed a potential crash occuring when having only one widget in a PG_RectList made PG_ListBox / PG_DropDown::SetIndent() work before adding items added a simple mouse wheel handling for PG_ListBox and PG_DropDown made PG_Widget's destructor call RemoveFromWidgetList() only if widget has no parent added "break"s to PG_Window::handleButtonClick() connected a slider's sigSlideEnd signal in paratest.cpp made use of new SetAlignment() method in paratest.cpp - applied patches from Ulf Lorenz documented pgsurfacecache.h remove obsolete code from drawline.cpp ---------------------------- Whats new in ParaGUI 1.1.6 ? ---------------------------- - new PG_Color class unifying SDL_Color/Uint32/R,G,B - added signal "sigTimer" to PG_TimerObject - added new PG_Point class - cleanup of PG_Button SetIcon, SetIcon2 - moved PG_CURSORMODE stuff to PG_Application - moved KeyEvent Actions to PG_Widget - obsoleted paragui_types.h - move PG_TA_xxx to PG_Label::TextAlign - removed all the SWIG crap (need to find a better way) - moved WF_WINDOWFLAGS into PG_Window class - moved PG_SB_xxx flags to PG_ScrollBar::ScrollDirection - fixed SigC::Object clashes for multiple class inheritances (inspired by Ulf) - moved constant widget id's into the corresponding classes - moved PG_OPEN_MODE into PG_FileArchive (now Mode) - fixed potential glitch in PG_SurfaceCache::Add(...) - applied patches from Ulf Lorenz: added a few comments to pgapplication.h removed obsolete function calls from pgapplication.cpp added param comment for PG_Application::RedrawBackground() documented PG_Application::PrintVideoTest() in PG_Application::Shutdown calling DeleteBackground() for freeing PG_Application::DeleteBackground(): setting my_background to 0 commented PG_Application::SetBulkMode() PG_LogConsole::LogVa(): removed useless function call PG_LogConsole::Done(): function now deletes PG_LogWindow added comments to pglog.h - applied patches from "H. C." :)) Win32 support. Requires VisualC.NET or GCC commented new background modes updated layout loader to handle new background modes changing the background results in redrawing the screen properly fixed disabling background PG_Draw::CreateRGBSurface() will check for invalid surface first before doing any work on it replaced some Redraw()s with Update()s disabling PG_LineEdit removes edit cursor fixed handling keys like '@' in PG_LineEdit PG_PopupMenu::trackMenu() takes care of exceeding the screen's height removed unnecessary Show() in PG_PopupMenu::trackMenu() removed unnecessary my_has_gradient assignment in PG_ThemeWidget fixed PG_ThemeWidget::SetBackground(SDL_Surface*, ...) bring a PG_Window only to front if it isn't yet (removes an unnecessarycall to Show()) added proper mouse wheel handling to PG_Sliders in paratest.cpp - major performance improvements after "cachegrinding" - more coming up ---------------------------- Whats new in ParaGUI 1.1.5 ? ---------------------------- - the version. ok it's the 1.0.4 tree with some binary incompatible changes. -> 1.1.5 - new background mode 9TILE - no more SendMessage (ok. there are still 1 or 2) using libsigc++ instead. - new sigXXX signal handlers - dynamic loading of SDL_image - performance improvements for complex layouts - silent mode development ---------------------------- Whats new in ParaGUI 1.0.4 ? ---------------------------- - fixed a stupid PG_Window bug (buttons not shown correctly) - made std:: the default workspace -> removed all std:: prefixes - fixed a bug in showing "hidden" child widgets - fixed a clipping bug in PG_ColumnItem - Win32 (VC++) build fixes for physfs - GNU build fixes (test dir), "make distcheck" passes now - PG_Widget::SetSizeByText changes (Thanks H.C. <sebh@gmx.de>) - added PG_RadioButton::SetFontColor methods (Thanks H.C. <sebh@gmx.de>) - fixed PG_WidgetList::Remove(All) methods (Thanks Ivan Stankovic <pokemon@fly.srk.fer.hr>) - new DevC++ workspaces (DevC++ >= 4.9.7.0) - fixed a bug in PG_MessageObject::PumpIntoEventQueue(..) MOUSEMOTIONEVENT don't need to be passed to ALL objects - added a method to PG_Application to clear and delete the background (void DeleteBackground()) (Thanks H.C. <sebh@gmx.de>) - fixed a potential memory leak in PG_Application resulting from changing non-scaled backgrounds (Thanks H.C. <sebh@gmx.de>) - added a method to PG_RichEdit to set the default alignment (void SetAutoVerticalResize(...)) (Thanks H.C. <sebh@gmx.de>) - added a method to PG_RichEdit to activate / deactivate auto vertical resize (void SetAlignment(...)) (Thanks H.C. <sebh@gmx.de>) - SetIcon(const char* filename), SetIcon(SDL_Surface* icon) for PG_Window's title bar (H.C. <sebh@gmx.de>) - another wrapper function for PG_Widget::my_internaldata->quitmodal which allows one to set it to false (H.C. <sebh@gmx.de>) - removed unnecessary Redraw() call in PG_RadioButton::SetText(...) (H.C. <sebh@gmx.de>) - fixed a bug in the message-pump caused by objects be deleted and still having pending messages for it. (Thanks Michael Bartl) - Added new fonts. Now using the open Bitstream Vera fonts. - convert theme images automatically to screen format (may break things) - added new PG_FileArchive::LoadSurface method with an option to specify the surface colorkey (Thanks Keith) - added PG_Application::FlushEventQueue method - merged patch from Steffen Blume <abszisse@web.de> Select[First,Next,Prev]Item for PG_DropDown - fixed several bug in PG_WidgetList Thanks Alexander Opitz <opitz@primacom.net> - fixed the layoutloader (child widgets are now shown properly) - fixed a bug in the PG_Application::GetWidget template - fixed userdata handling in PG_Widget Thanks Mark Junker <mjscod@gmx.de> ---------------------------- Whats new in ParaGUI 1.0.3 ? ---------------------------- - made PhysFS optional (like expat) - autoconf / automake fixes - fixed a problem in the destructor of PG_TimerObject - added Ruby bindings - added support for DevC++ - fixed wrong linebreaks in PG_RichEdit - added overloaded functions for PG_Application::GetWidget<WidgetType> - fixed autoconf macro to build nicely on Midori ---------------------------- Whats new in ParaGUI 1.0.2 ? ---------------------------- - Fixed a bug in DrawLineH, DrawLineV introduced in 1.0.1 - updated PhysFS to version 0.1.5 - removed unneccessary mutex locks while message processing - fixed a crash in PG_ListBox when deleting an item in the event handler - fixed Show()/Hide() on child widgets - added functions returning vectors of strings instead of char** to PG_FileArchive Thanks Andrew Ford <andrewhford@yahoo.com> - added PG_TimerObject - added a switch to disable dirty widget updates globally (PG_Application::DisableDirtyUpdates(bool)) - GCC 3.1 compilation fixes Thanks Guillaume Cottenceau <gc@mandrakesoft.com> - added functions to add callback handlers to existing menu items Thanks John Rainey <John.Rainey@symmetron.com> - added missing DECLSPEC to pgwidgetlistex.h Thanks Andrew Ford <andrewhford@yahoo.com> - added CodeWarrior and MacOS support Thanks Keith Swyer <ksswyer@adventus.com> - added wildcard matching for PG_FileArchive::GetFileList - added PG_FileArchive::OpenFileRWops - added PG_RadioButton:SetAlignment - missing DECLSPEC added to pgfont.h - added surface locking for direct pixel access rendering (text, gradient). - added new messagetype to process XML layout tags from the <head> section (MSG_XMLTAG). - fixed a clipping bug in PG_Widget::Hide() with simple backgrounds ---------------------------- Whats new in ParaGUI 1.0.1 ? ---------------------------- - Fixed permissions on zipped theme files - 8bit surface fixes - Enabling/Disabling of symlinks - fixed a potential crash in PG_ListBox (SelectItem(NULL)) - PG_Button: Added Get/SetBlendLevel() functions - SetBackground colorkey fixes - Borland C++ Builder fixes - remerge of expat (optional) - optimized DrawHLine, DrawVLine - fixed a widgetlist scrolling bug - fixed a window-resize bug - cached surfaces are generated in the screen format -------------------------------------- Whats new in ParaGUI 1.0 RC1 (Beta3) ? -------------------------------------- Bug fixes, bug fixes, ... :)) Cleaned up the font interface. Some performance tweaks (see PG_Widget::SetDirtyUpdate()). added PG_DataContainer to hold binary data. added Python support (./configure --enable-python, refer to the docs for a detailed description of the configuration options ) -------------------------------------- Whats new in ParaGUI 1.0 RC0 (Beta2) ? -------------------------------------- The really last thing i had to change was the internal structure of the library. The whole arrangement was also quite a mess. Now the lib is separated into these main parts: draw - all drawing and surface stuff fonts - font handling and rendering core - basic things like message handling, app class, ... themes - the theme loader widgets - all widget classes I also cleaned up the header files. Now there are only headers in the include dir that are needed by client applications. pgdrawobject.h has been removed - use pgdraw.h There are also some compatiblity macros in pgdraw.h that allow usage of some old style functions. e.g.: #define PG_DrawLine PG_Draw::DrawLine -------------------------------- Whats new in ParaGUI 1.0 Beta1 ? -------------------------------- The widget system in the prior versions was quite a mess. Now i decided to clean up the whole system and make it more *defined*. Due to this there are some changes in widget creation. The following rules apply: Now there are 2 basic widget types: PG_Widget: An unthemed widget that can have an internal drawing surface or not. PG_ThemeWidget: A themed widget (loads it's style from the theme definition) that can have an internal drawing surface or not. Widgets with drawing surfaces: ----------------------------- The content is drawn into the surface and blitted to the screen. Construction with internal surface: PG_Widget(PG_Widget* parent, const PG_Rect& rect, true); PG_ThemeWidget(PG_Widget* parent, const PG_Rect& rect, true); The param "true" indicates the creation of the drawing surfaces. Redrawing & Blitting: Redraw(bool doUpdate); This function redraws the widget (by calling eventDraw()). And calls Update(true) if doUpdate = true. Update(bool doBlit); This calls Blit() and updates the screen. Blit(); This function blits the widget surface to the screen and calls eventBlit() that can be used for custom blit behaviour. Widget without drawing surfaces: -------------------------------- The content of the widget is directly blitted to the screen. Construction: PG_Widget(PG_Widget* parent, const PG_Rect& rect); PG_ThemeWidget(PG_Widget* parent, const PG_Rect& rect); Blitting: Update(bool doBlit); This calls Blit() and updates the screen. Blit(); This function blits the widget content directly to the screen by calling eventBlit(). I hope this clarifies the widget behaviour stuff. Please contact me if you have further suggestions and additions. For backward compatibility the *old* widgettypes (PG_GradientWidget, PG_StaticFrame) still can be used but I definitely wouldn't suggest this. Please try to port your application to the new widgetclasses. Porting should be quite easy by replacing PG_GradientWidget, PG_StaticFrame with PG_ThemeWidget. I hope this clarifies the widget behaviour stuff. Please contact me if you have further suggestions and additions. Alexander Pipelka pipelka@teleweb.at
Things anyone could adopt: REDESIGN OF EVENT/MOUSE HANDLING -------------------------------- There are some major problems in the event/mouse handling code. Events for eventLeaveMouse and eventEnterMouse aren't handled the right way. I think it's the oldest part in ParaGUI and it seems it needs some redesign. A code sample can be found in the "test" directory (CVS or source-tarball >= 1.1.7). Take a look at "eventleavebug.cpp". CLEANUP/REWRITE OF PG_COLORS ---------------------------- pgcolors.[h|cpp] are autogenerated from the "make_colors.pike" script in the "bin" directory. I never really got acquainted with the pike scripting language. The script should be rewritten to use a more "common" language (e.g. Perl, Python, ...), CONSTRUCTOR CLEANUP ------------------- I would like to make ParaGUI "object factory" compliant. To achieve this any class *must* have an identical constructor: AnyPG_Class(PG_Widget* parent, const PG_Rect& r) or even better: AnyPG_Class(PG_Widget* parent, const PG_Rect& r = PG_Rect(0,0,0,0)) it's allowed to have more params in the constructor but these also must have default values. To make the change not to radical the current constructors can coexist with the *new* constructors. ADDING ITEMS TO (WIDGET)LISTS WITHOUT ADDWIDGET/ADDITEM ------------------------------------------------------- The current WidgetList/ListBox implementation isn't very clean. It should work this way: PG_ListBox mylist(NULL, PG_Rect(...)); PG_ListBoxItem item1(&mylist, ...); PG_ListBoxItem item2(&mylist, ...); PG_ListBoxItem item3(&mylist, ...); PG_ListBoxItem item4(&mylist, ...); mylist.Show(); Currently you need to call mylist.AddItem(..) for any item to be added. PG_WidgetList should (must) work the same way.