Added wxTLW::SetShape and implementations for wxGTK, wxMSW and an

empty stub for wxMac.
Added some generic helpers and a new ctor to wxRegion.
Added samples/shaped.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19857 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2003-03-28 23:05:05 +00:00
parent 7728856b75
commit 1542ea396a
59 changed files with 5861 additions and 1155 deletions

View File

@@ -144,6 +144,7 @@ ALL_SOURCES = \
common/radiocmn.cpp \
common/regex.cpp \
common/resource.cpp \
common/rgncmn.cpp \
common/sckaddr.cpp \
common/sckfile.cpp \
common/sckipc.cpp \
@@ -309,7 +310,6 @@ ALL_HEADERS = \
ctrlsub.h \
cursor.h \
dataobj.h \
date.h \
datetime.h \
datetime.inl \
datstrm.h \
@@ -483,7 +483,6 @@ ALL_HEADERS = \
tglbtn.h \
thread.h \
thrimpl.cpp \
time.h \
timer.h \
tipdlg.h \
tipwin.h \
@@ -740,6 +739,7 @@ COMMONOBJS = \
radiocmn.o \
regex.o \
resource.o \
rgncmn.o \
sckaddr.o \
sckfile.o \
sckipc.o \

View File

@@ -513,10 +513,10 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style )
m_fsIsShowing = show;
GdkWindow *window = m_widget->window;
wxX11FullScreenMethod method =
wxX11FullScreenMethod method =
wxGetFullScreenMethodX11((WXDisplay*)GDK_DISPLAY(),
(WXWindow)GDK_ROOT_WINDOW());
if (show)
{
m_fsSaveFlag = style;
@@ -538,7 +538,7 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style )
gdk_window_set_decorations(window, (GdkWMDecoration)0);
gdk_window_set_functions(window, (GdkWMFunction)0);
}
gdk_window_get_origin (m_widget->window, &root_x, &root_y);
gdk_window_get_geometry (m_widget->window, &client_x, &client_y,
&width, &height, NULL);
@@ -561,12 +561,12 @@ bool wxTopLevelWindowGTK::ShowFullScreen(bool show, long style )
gdk_window_set_decorations(window, (GdkWMDecoration)m_gdkDecor);
gdk_window_set_functions(window, (GdkWMFunction)m_gdkFunc);
}
wxSetFullScreenStateX11((WXDisplay*)GDK_DISPLAY(),
(WXWindow)GDK_ROOT_WINDOW(),
(WXWindow)GDK_WINDOW_XWINDOW(window),
show, &m_fsSaveFrame, method);
SetSize(m_fsSaveFrame.x, m_fsSaveFrame.y,
m_fsSaveFrame.width, m_fsSaveFrame.height);
}
@@ -973,4 +973,43 @@ void wxTopLevelWindowGTK::RemoveGrab()
}
}
// helper
static bool do_shape_combine_region(GdkWindow* window, const wxRegion& region)
{
if (window)
{
if (region.IsEmpty())
{
gdk_window_shape_combine_mask(window, NULL, 0, 0);
}
else
{
#ifdef __WXGTK20__
gdk_window_shape_combine_region(window, region.GetRegion(), 0, 0);
#else
wxBitmap bmp = region.ConvertToBitmap();
bmp.SetMask(new wxMask(bmp, *wxWHITE));
GdkBitmap* mask = bmp.GetMask()->GetBitmap();
gdk_window_shape_combine_mask(window, mask, 0, 0);
#endif
return TRUE;
}
}
return FALSE;
}
bool wxTopLevelWindowGTK::SetShape(const wxRegion& region)
{
GdkWindow *window = NULL;
if (m_wxwindow)
{
window = GTK_PIZZA(m_wxwindow)->bin_window;
do_shape_combine_region(window, region);
}
window = m_widget->window;
return do_shape_combine_region(window, region);
}
// vi:sts=4:sw=4:et