Implement wxBG_STYLE_TRANSPARENT support for wxGTK.

Use composited windows if supported by GTK+ for wxWindows with this background
style.

Also add wxWindow::IsTransparentBackgroundSupported() and show how to use it
in the sample.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70569 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2012-02-11 16:26:52 +00:00
parent c3d3028a44
commit 1442168125
9 changed files with 297 additions and 24 deletions

View File

@@ -1755,11 +1755,57 @@ public:
@c wxBG_STYLE_PAINT is a simpler and more efficient solution to the same
problem.
Under wxGTK and wxOSX, you can use ::wxBG_STYLE_TRANSPARENT to obtain
full transparency of the window background. Note that wxGTK supports
this only since GTK 2.12 with a compositing manager enabled, call
IsTransparentBackgroundSupported() to check whether this is the case.
Also, on order for @c SetBackgroundStyle(wxBG_STYLE_TRANSPARENT) to
work, it must be called before Create(). If you're using your own
wxWindow-derived class you should write your code in the following way:
@code
class MyWidget : public wxWindow
{
public:
MyWidget(wxWindow* parent, ...)
: wxWindow() // Use default ctor here!
{
// Do this first:
SetBackgroundStyle(wxBG_STYLE_TRANSPARENT);
// And really create the window afterwards:
Create(parent, ...);
}
};
@endcode
@see SetBackgroundColour(), GetForegroundColour(),
SetTransparent()
SetTransparent(), IsTransparentBackgroundSupported()
*/
virtual bool SetBackgroundStyle(wxBackgroundStyle style);
/**
Checks whether using transparent background might work.
If this function returns @false, calling SetBackgroundStyle() with
::wxBG_STYLE_TRANSPARENT is not going to work. If it returns @true,
setting transparent style should normally succeed.
Notice that this function would typically be called on the parent of a
window you want to set transparent background style for as the window
for which this method is called must be fully created.
@param reason
If not @NULL, a reason message is provided if transparency is not
supported.
@return @true if background transparency is supported.
@since 2.9.4
*/
virtual bool IsTransparentBackgroundSupported(wxString *reason = NULL) const;
/**
Sets the font for this window. This function should not be called for the
parent window if you don't want its font to be inherited by its children,