Shaped window support for wxMac, plus a wxSTAY_ON_TOP fix from Egon

<e_lub@yahoo.com>   wxMac requires knowledge before Create that SetShape
will be called so I also added the wxFRAME_SHAPED style flag.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20383 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2003-04-30 00:39:15 +00:00
parent e97251c58e
commit 6a7e641161
10 changed files with 424 additions and 13 deletions

View File

@@ -39,6 +39,7 @@
#include "wx/menu.h"
#include "wx/layout.h"
#include "wx/msgdlg.h"
#include "wx/image.h"
#endif
#include "wx/dcclient.h"
@@ -134,6 +135,7 @@ bool MyApp::OnInit()
// Create the main application window
ShapedFrame *frame = new ShapedFrame();
frame->Show(TRUE);
SetTopWindow(frame);
// success: wxApp::OnRun() will be called which will enter the main message
// loop and the application will run. If we returned FALSE here, the
@@ -148,19 +150,28 @@ bool MyApp::OnInit()
// frame constructor
ShapedFrame::ShapedFrame()
: wxFrame((wxFrame *)NULL, -1, wxEmptyString,
wxDefaultPosition, wxDefaultSize,
wxSIMPLE_BORDER | wxFRAME_NO_TASKBAR)
wxDefaultPosition, wxSize(100, 100), //wxDefaultSize,
0
| wxFRAME_SHAPED
| wxSIMPLE_BORDER
| wxFRAME_NO_TASKBAR
| wxSTAY_ON_TOP
)
{
m_hasShape = FALSE;
m_bmp = wxBitmap("star.png", wxBITMAP_TYPE_PNG);
SetSize(wxSize(m_bmp.GetWidth(), m_bmp.GetHeight()));
#if wxUSE_TOOLTIP
#ifndef __WXMAC__
// On wxMac the tooltip gets clipped by the window shape, YUCK!!
#if wxUSE_TOOLTOP
SetToolTip(wxT("Right-click to exit"));
#endif
#ifdef __WXMSW__
#endif
#ifndef __WXGTK__
// On wxGTK we can't do this yet because the window hasn't been created
// yet so we wait until the EVT_WINDOW_CREATE event happens. On wxMSW it
// has been created so we set the shape now.
// yet so we wait until the EVT_WINDOW_CREATE event happens. On wxMSW and
// wxMac the window has been created at this point so we go ahead and set
// the shape now.
SetWindowShape();
#endif
}
@@ -186,6 +197,7 @@ void ShapedFrame::OnDoubleClick(wxMouseEvent& evt)
void ShapedFrame::OnLeftDown(wxMouseEvent& evt)
{
CaptureMouse();
//printf("Mouse captured\n");
wxPoint pos = ClientToScreen(evt.GetPosition());
wxPoint origin = GetPosition();
int dx = pos.x - origin.x;
@@ -196,14 +208,19 @@ void ShapedFrame::OnLeftDown(wxMouseEvent& evt)
void ShapedFrame::OnLeftUp(wxMouseEvent& evt)
{
if (HasCapture())
{
ReleaseMouse();
//printf("Mouse released\n");
}
}
void ShapedFrame::OnMouseMove(wxMouseEvent& evt)
{
wxPoint pt = evt.GetPosition();
//printf("x:%d y:%d\n", pt.x, pt.y);
if (evt.Dragging() && evt.LeftIsDown())
{
wxPoint pos = ClientToScreen(evt.GetPosition());
wxPoint pos = ClientToScreen(pt);
Move(wxPoint(pos.x - m_delta.x, pos.y - m_delta.y));
}
}