=== Overview ===
commitd294c82006c913be50c01092e139f8580f3cc3e5
authordwk <dwk@b022f027-f587-4676-bc72-f0cf7b603704>
Thu, 14 Feb 2008 23:47:51 +0000 (14 23:47 +0000)
committerdwk <dwk@b022f027-f587-4676-bc72-f0cf7b603704>
Thu, 14 Feb 2008 23:47:51 +0000 (14 23:47 +0000)
tree4744df6f0128eb6f906998605edec03aeca55fcd
parent40b8afb371f6efb01b7a9f69e784fdf1f7e542c4
=== Overview ===
+ free_widget() modularization
+ WIDGET_FONT
    - Fonts become widgets
    - Fonts are part of themes
    - TTF_Font references eliminated
    - Comparison
+ New error code
    - Multiple streams
+ Win32 executables
    - Generating Win32 executables with Makewins
    - -include
    - Running Win32 executables with wine
+ Minor modifications
    - Minor additions
    - Minor refactorings
    - Minor deletions
    - Bugfixes
+ Miscellaneous
    - Todo
    - Notes

=== free_widget() modularization ===

free_widget() was broken up into callback functions, like paint_widget() etc. Every widget type has a free_*() function. The functions are named after the structures; for example, the theme one is free_theme_data() for struct theme_data_t, because there is already another struct theme_t and free_theme().

=== WIDGET_FONT ===

*** Fonts become widgets ***
Made fonts into widgets. font.c was moved to src/widget. WIDGET_FONT acts like normal widgets, with init_font(), rescale_font(), and free_font().

This has made rescaling code much simpler. Just rescale_widget() has to be called now, nothing else.

*** Fonts are part of themes ***
At the moment, a theme consists of two fonts, one monospace, one sans serif. As such, "font" widgets are specified in resource files along with the rest of the resource data.

Fonts are no longer specified in the top-level XML resource files, such as ./xuni.xml.

*** TTF_Font references eliminated ***
TTF_Font is now only used in font.c. (The only other place SDL_ttf code is used is in graphics.c, for initialization and quitting.) It would likely be very easy to make xuni use a different font library now.

Functions and structures that used to use TTF_Fonts now generally use struct widget_ts, where the widget type is WIDGET_FONT.

*** Comparison ***
Font names no longer default to, for example, "gui/FreeSans.ttf". This means that the xuni library does not rely on a font being there by default, and so it is even more autonomous. Widgets can also now use either font.

On the other hand, if a font is missing, there is no default location for that type of font. (Perhaps a list of fonts would be a good idea, like CSS?) And, if a font is missing, it is no longer replaced with another truetype font -- the built-in SDL_gfx font is used.

=== New error code ===

*** Multiple streams ***
Modifications to error.c mean that it now no longer uses LOG_FILE ("xuni.xml") to write error messages. Instead, xuni users can register any number of streams to write error messages to. Streams can be ready-opened streams or filenames. As before, files are opened and closed for each message, to prevent many files from being open, and to ensure the data will be written even if xuni crashes.

If no streams were registered or none could be written to, stderr is used.

Note that closing streams is the responsibility of the application code. This shouldn't be a problem -- fcloseall() could always be used.

=== Win32 executables ===

*** Generating Win32 executables with Makewins ***
Re-updated the Makewins so that Win32 executables can be created automatically with wine. (Just type ./winmake.)

The Makewins are basically just copies of Makefiles with a few minor changes. Note that they will not work on other systems, as they use other scripts and executables like winmake and egcc.

*** -include ***
Made every "include depend" into "-include depend", so that "depend: No such file or directory" errors no longer occur.

*** Running Win32 executables with wine ***
To run the Win32 executables with wine, ./runwin is required.

Wine does not run the Windows executables properly. Images with names of "" are attempted to be loaded, the screen goes black except for the xuni window, and widgets are not initialized properly. Some widgets end up with types like 1162170950, and as fonts became widgets it crashes while trying to use them.

SVN version 80 worked better, with the old font code. Images still weren't loaded properly, but at least using the same theme again would cause most of them to load.

Native windows systems have no trouble with the generated xuni executables, however.

=== Minor modifications ===

*** Minor additions ***
- Added many items to the TODO list.
- Added some comments to explain large commented-out sections of gui.c.

*** Minor refactorings ***
- render_restricted_text() was moved from graphics.c to the new font.c. graphics.c does not need to know about fonts now.

*** Minor deletions ***
- Using the older Windows gcc 3.4.2 found several unprototyped functions. As a result, several files now include a few more standard header files.
- Deleted some commented-out code in graphics.c and gui.c.
- For some reason, xuni.c was including menu.h! It isn't any longer.

*** Bugfixes ***
- Added a hack to disallow clicking on a panel, like "options graphics", which, when clicked, used to toggle fullscreen. (WID group collision.)
- When the xuni window loses focus, any textbox data is now preserved, not reverted. (See the last change in loop.c.)
- Tried to make unclickable widgets actually work, unsuccessfully. (See box.c.)
- Attempted to fix the wine crash in image.c (new line 66).

=== Miscellaneous ===

*** Todo ***
- The depend files need to be generated every compilation time, to avoid build errors.
- rescale_widget() does unnecessary work. Though reposition_widget() helped some, it probably needs to be split up further still.
- The TODO file really needs to be in a different format. Perhaps an official bug tracking system should be used.

*** Notes ***
- struct xuni_t now contains only three members: smode, theme, and gui.
- error.c uses a global variable in a very similar way to memory.c. Perhaps this functionality could be encapsulated.
- xuni_memory_free_all() must be called after xuni_error_quit(), because the latter uses the garbage collector.
- The Makewins print lots of warnings and errors, but still compile properly. This is due to src/Makewin trying to build src/resource/libexpat.c.
- xuni is now over 9,000 lines once again, even counting all the old commented-out code in font.c.
64 files changed:
Makewin
TODO
editor.xml
gui/data.xml
gui/editor.xml
runwin [new file with mode: 0755]
src/Makefile
src/Makewin [copied from src/Makefile with 77% similarity]
src/depend
src/editor/Makefile
src/editor/Makewin
src/editor/editor.c
src/editor/editor.h
src/error.c
src/error.h
src/font.h [deleted file]
src/graphics.c
src/graphics.h
src/gui.c
src/loop.c
src/memory.c
src/resource/Makefile
src/resource/Makewin [copied from src/resource/Makefile with 73% similarity]
src/resource/libexpat.c
src/test/Makefile
src/test/Makewin
src/test/game.c
src/test/main.c
src/test/main.h
src/test/menu.c
src/test/menu.h
src/test/options.c
src/widget/Makefile
src/widget/Makewin
src/widget/box.c
src/widget/box.h
src/widget/button.c
src/widget/button.h
src/widget/checkbox.c
src/widget/checkbox.h
src/widget/combobox.c
src/widget/combobox.h
src/widget/depend
src/widget/font.c [moved from src/font.c with 62% similarity]
src/widget/font.h [new file with mode: 0644]
src/widget/image.c
src/widget/image.h
src/widget/label.c
src/widget/label.h
src/widget/listbox.c
src/widget/listbox.h
src/widget/panel.c
src/widget/panel.h
src/widget/scrollbar.c
src/widget/scrollbar.h
src/widget/textbox.c
src/widget/textbox.h
src/widget/theme.c
src/widget/theme.h
src/widget/widgets.c
src/widget/widgets.h
src/xuni.c
winmake [new file with mode: 0755]
xuni.xml