Robin Dunn [Thu, 20 Oct 2011 04:49:12 +0000 (04:49 +0000)]
Delegate wxGraphicsBitmap::ConvertToImage to the renderer so we do not end up with more than one definition of the method when building with both the GDI+ GC and the Cairo GC enabled at the same time.
Václav Slavík [Wed, 19 Oct 2011 16:20:17 +0000 (16:20 +0000)]
Cleanup of wxDataViewCtrl cell activation code.
Fix confusion of what cell activation is and inconsistence with native
handling in GTK+. Document the distinction between activating (~
editing) a cell and activating (double-clicking) the whole item.
Deprecate wxDataViewCustomRenderer::LeftClick() and Activate() methods,
replace them with single ActivateCell() that is called for both kinds of
activation.
Fix implementations so that ActivateCell() is not called on
double-click, when it shouldn't, and vice versa: don't send
wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED for cell activation.
Partially reverts r67099 -- restores old 2.9 signatures of compatibility
LeftClick() and Activate() methods.
Václav Slavík [Wed, 19 Oct 2011 16:20:01 +0000 (16:20 +0000)]
Allow using wxCompositeWindow<T> as wxDataViewCtrl inline editor.
wxDVC inline editing code attaches some event handlers to the editor
control; most importantly, it watches for Enter key and for focus
changes. If the editor control is a composite window, these events occur
in a sub control and never reach wxDVC code.
Fix this by forwarding events to the main window of the composite
control. Only events required by wxDVC are implemented for now.
Václav Slavík [Wed, 19 Oct 2011 16:19:58 +0000 (16:19 +0000)]
Fix NULL window argument to wxEVT_KILL_FOCUS when creating a TLW.
wxTopLevelWindowMSW::CreateDialog first moved and resized the newly
created window and only then called SubclassWin(). Because native focus
change occurred when moving the window, HWND->wxWindow association
wasn't yet filled in and wxFindWinFromHandle() would return NULL.
Václav Slavík [Wed, 19 Oct 2011 16:19:52 +0000 (16:19 +0000)]
Set wxFocusEvent's window value for wxEVT_KILL_FOCUS in wxGTK.
Note that it is still not set for wxEVT_SET_FOCUS, because it's not
immediately obvious how to obtain the previously focused window from
there. It's still better than always having the window NULL.
Vadim Zeitlin [Tue, 18 Oct 2011 21:57:02 +0000 (21:57 +0000)]
Added wxRichToolTip class.
It can be used to show more customizable tooltips than the native wxToolTip
but at the price of using generic implementation in some cases (actually
almost always now, with the exceptions of text control tooltips under MSW).
Extra features include:
- The balloon-like tooltip form.
- Possibility to show an icon.
- Title display in a different form.
More customization could be added later. It should be also possible to fully
implement this class natively under MSW.
Update the dialogs sample to show the rich tooltips in action.
Vadim Zeitlin [Tue, 18 Oct 2011 21:56:48 +0000 (21:56 +0000)]
Document and test behaviour of wxRegion methods when it is invalid.
Document which wxRegion methods can and can't be used when the region itself
is invalid.
Apply the minor changes to wxGTK (Xor() didn't do the right thing, Offset()
didn't assert) and wxOSX (Offset() crashed) to make their behaviour consistent
with wxMSW.
Add a (trivial, so far, but to be extended later) wxRegion unit test checking
that the methods do indeed behave as documented.
Vadim Zeitlin [Tue, 18 Oct 2011 21:56:42 +0000 (21:56 +0000)]
Fix SetShape() in wxOSX/Cocoa.
Explicitly erase the part of the window outside of its shape with a
transparent colour to ensure that it is indeed transparent and not just has
the default solid background.
Vadim Zeitlin [Tue, 18 Oct 2011 21:56:40 +0000 (21:56 +0000)]
Don't create a valid wxRegion when using default ctor in wxOSX.
Default constructing a wxRegion created an object that unexpectedly passed
IsOk() test in wxOSX. This was completely unexpected so don't do this and
leave default constructed wxRegion invalid, as in the other ports.
Update DoCombine() to be able to deal with the case of an invalid source
region in a way consistent with the other ports.
Vadim Zeitlin [Tue, 18 Oct 2011 21:56:36 +0000 (21:56 +0000)]
Don't interpret '&' specially in wxTextWrapper.
wxTextWrapper is used for the multiline text for which it doesn't make sense
to use mnemonics so don't interpret '&' specially in the text used with it.
Doing this also allows to remove the hack used in wxDialog::CreateTextSizer()
to deal with it that was used so far.
Vadim Zeitlin [Tue, 18 Oct 2011 21:56:34 +0000 (21:56 +0000)]
Use wxWindow::GetClientAreaOrigin() instead of MSW functions.
::AdjustWindowRectEx() doesn't seem to work correctly for wxPopupWindow and
still offsets the coordinates by the title bar height even if these windows
don't have WS_CAPTION style. Rather than try to work around this, simply use
wxWindow method instead of the Windows function as shape wxRegion offset.
Vadim Zeitlin [Tue, 18 Oct 2011 21:54:53 +0000 (21:54 +0000)]
Correct the direction passed to wxDataObject in wxGTK clipboard code.
We should quert for IsSupportedFormat(format, Set) before calling SetData()
with this format, not for IsSupportedFormat(Get) which is the default and was
used by the code.
Vadim Zeitlin [Mon, 17 Oct 2011 22:26:13 +0000 (22:26 +0000)]
Explicitly use _stati64() with MinGW-W64.
Although this compiler provides underscore-less versions of all POSIX
functions, this one only exists in a version with underscore, so use it to fix
compilation with it in ANSI build.
Steve Lamerton [Sun, 16 Oct 2011 15:59:31 +0000 (15:59 +0000)]
Export a couple of Carbon functions to allow wxWebView to build correctly. This was already done in the wxWebView branch but got missed in the merge to trunk.
Vadim Zeitlin [Sat, 15 Oct 2011 00:20:56 +0000 (00:20 +0000)]
Don't use wxMSW version of wxNonOwnedWindow at all under WinCE.
This class becomes completely trivial under WinCE as its functionality
(setting the window shape) can't be implemented under this platform, so just
don't compile it at all there.
This both (slightly) reduces the amount of #if checks and should make the code
(slightly) smaller.
Vadim Zeitlin [Thu, 13 Oct 2011 14:54:29 +0000 (14:54 +0000)]
Don't assert in wxDateTime::Format("%p") in locales not using AM/PM.
If a locale doesn't use AM/PM strings, strftime() can return an empty string
which does not indicate an error, so don't assert that strftime() failed in
this case.
Vadim Zeitlin [Thu, 13 Oct 2011 12:45:56 +0000 (12:45 +0000)]
Implement SetShape() for wxPopupWindow in wxGTK.
Move SetShape() implementation from wxTopLevelWindow to wxNonOwnedWindow so
that wxPopupWindow, which also inherits from the latter, could use it as well.
This makes it possible to have popup windows with irregular shapes in wxGTK as
well as in wxMSW and wxOSX.
Vadim Zeitlin [Wed, 12 Oct 2011 16:22:14 +0000 (16:22 +0000)]
Added wxWindow::GTKHandleRealized() virtual method to wxGTK.
This allows to easily do something in the derived classes when the widget is
realized, without having to deal with GTK+ signals. In particular, get rid of
another "realize" signal handler in wxTopLevelWindow and simply override this
virtual method there.
It also incidentally makes the callback code simpler as the window doesn't
need to be constantly dereferenced.
This shouldn't result in any changes to behaviour.
Vadim Zeitlin [Tue, 11 Oct 2011 17:14:09 +0000 (17:14 +0000)]
Update status bar labels properly after width change in wxMSW.
The labels were not updated (i.e. ellipsized or, on the contrary, displayed in
full) correctly after a status bar field was changed; there was even a FIXME
comment about this in the code.
Fix this by calling DoUpdateStatusText() when the field width is changed and
also update the field width after resetting the existing tooltips.
Vadim Zeitlin [Tue, 11 Oct 2011 17:08:02 +0000 (17:08 +0000)]
Don't delete wxTaskBarIcon in wxMSW wxNotificationMessage if we don't own it.
wxNotificationMessage can be associated with an existing wxTaskBarIcon under
wxMSW instead of creating its own one internally and in this case the icon
must not be deleted when the notification is hidden but it was always
destroyed unconditionally by wxNotificationIconEvtHandler created by
wxAutoNotifMsgImpl.
Fix this by only creating this helper event handler if we do own the icon.
Vadim Zeitlin [Tue, 11 Oct 2011 17:07:43 +0000 (17:07 +0000)]
Move SetBackgroundBitmap() from wxPanel to new wxCustomBackgroundWindow.
wxCustomBackgroundWindow is a new class allowing to set a custom bitmap for
the background of any window. The relevant code was mostly moved from wxPanel
to which it was added only recently (before 2.9.2) making it unnecessary to
preserve compatibility.
Vadim Zeitlin [Mon, 10 Oct 2011 10:53:23 +0000 (10:53 +0000)]
Move wxTopLevelWindow::SetShape() down to wxNonOwnedWindow.
Also add wxNonOwnedWindow for wxMSW (which previously simply typedef'd it to
wxWindow) and document this class now that it provides some user-visible
functionality.
Vadim Zeitlin [Sun, 9 Oct 2011 22:07:29 +0000 (22:07 +0000)]
Allow creating wxGraphicsFont without using wxFont.
This is mostly important to allow using wxImage-based wxGraphicsContext
without requiring X server connection under Unix: as wxFont can't be used
without X server, we needed another way to create wxGraphicsFont in this case.
Vadim Zeitlin [Sun, 9 Oct 2011 22:07:18 +0000 (22:07 +0000)]
Refactor wxGDIPlusFontData ctor to allow using it without wxGDIPlusContext.
wxGDIPlusFontData only needs wxGDIPlusContext to get the font unit to use, so
pass the font unit directly to the ctor to allow also using it when there is
no context at hand.
Vadim Zeitlin [Sun, 9 Oct 2011 22:07:16 +0000 (22:07 +0000)]
Simplify and rationalize wxGDIPlusContext class constructors.
Remove the now unnecessary default ctor from wxGDIPlusContext and
wxGDIPlusMeasuringContext and add a ctor taking just wxGraphicsRenderer that
can be useful to the derived classes instead.
Merge Init() and SetDefaults() and initialize everything at once in the new
Init() now.
Vadim Zeitlin [Sun, 9 Oct 2011 22:07:13 +0000 (22:07 +0000)]
Don't make private wxGraphicsContext-derived classes dynamically creatable.
This doesn't make any sense because classes such as wxGDIPlusContext,
wxGDIPlusMeasuringContext and wxMacCoreGraphicsContext are private and don't
need to be creatable by name (only renderers potentially need to be) and was
inconsistent with Unix/Cairo backend in which these classes were not dynamic.
So remove wxRTTI macros from them in wxMSW/wxOSX as well as this allows us to
get rid of unnecessary default ctors.
Vadim Zeitlin [Sun, 9 Oct 2011 22:07:10 +0000 (22:07 +0000)]
Fixed non-existent wxCairoContext default ctor.
wxCairoContext class declared default ctor which wasn't implemented and even
couldn't be implemented because its base class didn't have any default ctor
neither.
Fix this by providing a ctor taking wxGraphicsRenderer* and implement it.
Vadim Zeitlin [Sun, 9 Oct 2011 22:07:04 +0000 (22:07 +0000)]
No changes, just refactor wxCairoBitmapData ctor.
Extract the code for buffer and surface creation into separate helper
functions so that they could be reused by other constructors (to be added in
the next commits).
Also use cairo_format_stride_for_width(), if available, to compute the stride
for the surfaces we create instead of hard coding 4*width.
Vadim Zeitlin [Sun, 9 Oct 2011 22:02:05 +0000 (22:02 +0000)]
Implement EVT_MOUSE_CAPTURE_LOST handling for wxPopupTransientWindow.
Handle mouse capture lost events instead of polling for the mouse status in
EVT_IDLE handler. This is not only more efficient but also catches the cases
when the capture was lost before OnIdle() could be executed which could result
in assertion failures and, before the previous commit, even crashes.
The idle-time code is still used for wxOSX/Carbon because it doesn't seem to
generate mouse capture loss events currently -- but should be removed as soon
as support for these events is added.
Vadim Zeitlin [Sun, 9 Oct 2011 22:02:02 +0000 (22:02 +0000)]
Implement delayed destruction for wxPopupTransientWindow.
Windows of this class can be destroyed at any moment, even while some events
are still being processed, so delay the real destruction until we can be sure
that it's safe to delete the window.
This fixes problems (crashes due to dangling pointers) when the object is
deleted from the overridden OnDismiss(), for example.
Vadim Zeitlin [Sun, 9 Oct 2011 22:01:57 +0000 (22:01 +0000)]
Fix inheriting parent background colour in wxPanel in wxMSW.
wxPanel didn't inherit the background colour set for its parent any more in
wxMSW because its HasTransparentBackground() didn't return true unless the
panel was a child of wxNotebook. This was wrong because not only themed
notebook background should be inherited but also any solid background
explicitly set for a panel parent.
Fix this by returning true from MSWHasInheritableBackground(), which is used
by wxPanel::HasTransparentBackground() under MSW, if the window has an
explicitly set and inheritable background colour.
Václav Slavík [Sun, 9 Oct 2011 13:07:10 +0000 (13:07 +0000)]
Return true from wxDataViewMainWindow::ItemDeleted().
Presumably, 'false' indicates failure, but there's no failure here: if
an item is not visible, because its parent wasn't expanded yet, it's
perfectly OK that we don't need to do anything.
Václav Slavík [Fri, 7 Oct 2011 15:03:02 +0000 (15:03 +0000)]
Add columns focus and keyboard navigation to generic wxDataViewCtrl.
The UI tries to mimic Windows 7's Explorer's approach as much as
possible, taking inspiration in the GTK+ implementation when
appropriate. In particular, as long as the user doesn't use horizontal
navigation keys, everything looks as before and the user isn't bothered
with the existence of per-cell focus.
Vadim Zeitlin [Sun, 2 Oct 2011 13:15:19 +0000 (13:15 +0000)]
Fix current field highlighting in generic wxTimePickerCtrl under wxGTK.
In wxGTK, calling HighlightCurrentField() from EVT_SET_FOCUS handler was not
enough as the highlighting was overwritten by the default behaviour of
selecting the entire text control contents on focus gain.
Fix this by calling SetFocus() from HighlightCurrentField() before updating
the selection. This ensures that the correct field is always highlighted.
Vadim Zeitlin [Sun, 2 Oct 2011 12:58:48 +0000 (12:58 +0000)]
Use wxSP_WRAP for generic wxTimePicker spin button.
This ensures that the spin button arrows are always enabled, as they should
be, even under wxGTK where wxSpinButton disables its arrows on its own if its
value reaches the end of its range and wxSP_WRAP is not used.
Vadim Zeitlin [Sun, 2 Oct 2011 11:28:54 +0000 (11:28 +0000)]
Fix setting tooltips for wxSearchCtrl and other composite controls.
Propagate SetToolTip() call on wxCompositeWindow to all subwindows to ensure
that the tooltip is shown for all parts of the window.
Notice that this is still not ideal as the tooltip temporarily disappears when
mouse moves from one subwindow to another, instead of staying in place as it
does with "monolithic" windows and ideally we should find a way to avoid it
(should be possible at least under MSW with TTM_RELAYEVENT) but for now this
is already much better than nothing.
Vadim Zeitlin [Sun, 2 Oct 2011 11:28:40 +0000 (11:28 +0000)]
Restore correct wxSearchCtrl size in wxMSW after wxTextCtrl changes.
The code in generic wxSearchCtrl implementation was broken by the changes of
r69066 which deccreased the best height of border-less text controls.
Ideally we should probably change wxSearchCtrl::LayoutControls() to not be
sensitive at all to the exact value returned from wxTextCtrl::GetBestSize()
and just always centre everything vertically but this doesn't look simple to
do with the current code so just override wxSearchTextCtrl::DoGetBestSize() to
return the same size as wxTextCtrl used to return before to fix this for now.
Steve Lamerton [Sun, 2 Oct 2011 10:29:00 +0000 (10:29 +0000)]
Derive wxAuiNotebook from wxBookCtrlBase. Document wxAuiNotebookEvent which now derives from wxBookCtrlEvent. Update the notebook sample to add wxAuiNotebook as an option.
Robin Dunn [Fri, 30 Sep 2011 23:40:02 +0000 (23:40 +0000)]
Use wxAlphaPixelData if the source bitmap depth is 32 or if on wxGTK and there is a mask. Add a separate pass on MSW if there is a mask to adjust the cairo surface's alpha to match the mask.