Thursday, December 14, 2006

WxWidgets 2.8.0

New release of WxWidgets has been released, 2.8.0. It's a culmination of a long work and it's replacing 2.6.0 as the stable release. You should read the Changelog before starting to use this, since it brought some big changes. Here's the list:

Changes in behaviour not resulting in compilation errors, please read this!
---------------------------------------------------------------------------

- For all wxInputStreams, Eof() becomes true after an attempt has been made
to read _past_ the end of file.
- wxFileName::DirExists() checks if the path of the file is a directory, not
if the whole name is a directory.
- wxDialog::CreateButtonSizer() may return NULL now, please see the manual.
- wxStaticBoxSizer now deletes the associated wxStaticBox when it is deleted.
- wxArray::Alloc() now works as reserve() and does not clear the array any more
- Windows calling CaptureMouse() are now required to handle the
wxEVT_MOUSE_CAPTURE_LOST event and not call ReleaseMouse() in this case.
- wxInputStream::GetC() now returns an int in the range 0 - 255 on success
instead of a char the range -128 - 127.


Changes in behaviour which may result in compilation errors
-----------------------------------------------------------

- Some classes (notably wxBitmap and wxImage) don't define operator==() as it
used to work in somewhat unexpected way as it compared only internal pointers
and not the object data. The code using it will have to be updated:
* If the object was compared with wxNullXXX, use IsOk() method instead
* If valid object need to be compared, use IsSameAs() to reproduce the old
behaviour or change the code to avoid comparing bitmaps &c.
- wxFontData::GetColour() now returns a const colour.
- wxDC objects can't be created directly now (this never worked, now it doesn't
even compile).
- wxCHECK family of macros now must be followed by a semicolon.
- wxMBConv::cMB2WC() and cWC2MB() take size of the input buffer and return
length of the converted string in all cases now.
- wxHtmlWindow::OnCellClicked() now returns bool.
- wxHtmlCell::OnMouseClick() was deprecated and replaced with
wxHtmlCell::ProcessMouseClick(); old code overriding OnMouseClick() will
continue to work with WXWIN_COMPATIBILITY_2_6, but should be rewritten to
use ProcessMouseClick().
- wxHtmlCell::GetCursor() was deprecated and replaced with
wxHtmlCell::GetMouseCursor(); old code overriding GetCursor() will
continue to work with WXWIN_COMPATIBILITY_2_6, but should be rewritten to
use GetMouseCursor().
- wxHtmlCell::AdjustPagebreak() signature has changed, update your code if you
override it.
- wxFontEnumerator::GetFacenames() and GetEncodings() now return arrays and
not pointers to arrays.
- SetDefaultItem() method was moved from wxPanel to wxTopLevelWindow
- wxDialog::OnOK/OnCancel() don't exist any more, use SetAffirmative/EscapeId()
- wxPathList doesn't derive from (deprecated) wxStringList any more
- wxGLContext class has no 1:1 coupling to a wxGLCanvas class any more.
As a consequence, the class interface changed largely. Code updates, if
any are required at all, are easy to accomplish though.


Deprecated methods since 2.6.x and their replacements
-----------------------------------------------------

- wxGetWorkingDirectory() deprecated in favour of wxGetCwd().
- wxDC::BeginDrawing() and wxDC::EndDrawing() deprecated, don't use them.
- wxWindowBase::GetBestFittingSize --> wxWindowBase::GetEffectiveMinSize.
- wxWindowBase::SetBestFittingSize --> wxWindowBase::SetInitialSize.
- Seeking on a zip stream returned from wxFileSystem without using the new
wxFS_SEEKABLE flags is deprecated. You can still seek, but use the flag.
- Constructor wxZipInputStream(const wxString& archive, const wxString& file)
deprecated in favour of wxFileSystem (other zip ctors are not deprecated).