]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/shaped/shaped.cpp
use wxDC::GetMultiLineTextExtent() instead of duplicating its code in wxButton::DoGet...
[wxWidgets.git] / samples / shaped / shaped.cpp
index 7914ddc47f267e90908eb0f22d9953084d724ec5..5ade1330a7328642c77024c8c69b1c3f54180e18 100644 (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"
@@ -84,16 +85,16 @@ private:
     wxBitmap m_bmp;
     wxPoint  m_delta;
 
-    // any class wishing to process wxWindows events must use this macro
+    // any class wishing to process wxWidgets events must use this macro
     DECLARE_EVENT_TABLE()
 };
 
 
 // ----------------------------------------------------------------------------
-// event tables and other macros for wxWindows
+// event tables and other macros for wxWidgets
 // ----------------------------------------------------------------------------
 
-// the event tables connect the wxWindows events with the functions (event
+// the event tables connect the wxWidgets events with the functions (event
 // handlers) which process them. It can be also done at run-time, but for the
 // simple menu events like this the static method is much simpler.
 BEGIN_EVENT_TABLE(ShapedFrame, wxFrame)
@@ -111,7 +112,7 @@ BEGIN_EVENT_TABLE(ShapedFrame, wxFrame)
 END_EVENT_TABLE()
 
 
-// Create a new application object: this macro will allow wxWindows to create
+// Create a new application object: this macro will allow wxWidgets to create
 // the application object during program execution (it's better than using a
 // static object for many reasons) and also declares the accessor function
 // wxGetApp() which will return the reference of the right type (i.e. MyApp and
@@ -133,12 +134,13 @@ bool MyApp::OnInit()
 
     // Create the main application window
     ShapedFrame *frame = new ShapedFrame();
-    frame->Show(TRUE);
+    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
+    // loop and the application will run. If we returned false here, the
     // application would exit immediately.
-    return TRUE;
+    return true;
 }
 
 // ----------------------------------------------------------------------------
@@ -147,18 +149,29 @@ bool MyApp::OnInit()
 
 // frame constructor
 ShapedFrame::ShapedFrame()
-       : wxFrame((wxFrame *)NULL, -1, wxEmptyString,
-                 wxDefaultPosition, wxDefaultSize,
-                 wxSIMPLE_BORDER | wxFRAME_NO_TASKBAR)
+       : wxFrame((wxFrame *)NULL, wxID_ANY, wxEmptyString,
+                  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);
+    m_hasShape = false;
+    m_bmp = wxBitmap(_T("star.png"), wxBITMAP_TYPE_PNG);
     SetSize(wxSize(m_bmp.GetWidth(), m_bmp.GetHeight()));
+#ifndef __WXMAC__
+    // On wxMac the tooltip gets clipped by the window shape, YUCK!!
+#if wxUSE_TOOLTOP
     SetToolTip(wxT("Right-click to exit"));
-#ifdef __WXMSW__
+#endif
+#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
 }
@@ -169,13 +182,13 @@ void ShapedFrame::SetWindowShape()
     m_hasShape = SetShape(region);
 }
 
-void ShapedFrame::OnDoubleClick(wxMouseEvent& evt)
+void ShapedFrame::OnDoubleClick(wxMouseEvent& WXUNUSED(evt))
 {
     if (m_hasShape)
     {
         wxRegion region;
         SetShape(region);
-        m_hasShape = FALSE;
+        m_hasShape = false;
     }
     else
         SetWindowShape();
@@ -184,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;
@@ -191,33 +205,38 @@ void ShapedFrame::OnLeftDown(wxMouseEvent& evt)
     m_delta = wxPoint(dx, dy);
 }
 
-void ShapedFrame::OnLeftUp(wxMouseEvent& evt)
+void ShapedFrame::OnLeftUp(wxMouseEvent& WXUNUSED(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));
     }
 }
 
-void ShapedFrame::OnExit(wxMouseEvent& evt)
+void ShapedFrame::OnExit(wxMouseEvent& WXUNUSED(evt))
 {
     Close();
 }
 
-void ShapedFrame::OnPaint(wxPaintEvent& evt)
+void ShapedFrame::OnPaint(wxPaintEvent& WXUNUSED(evt))
 {
     wxPaintDC dc(this);
-    dc.DrawBitmap(m_bmp, 0, 0, TRUE);
+    dc.DrawBitmap(m_bmp, 0, 0, true);
 }
 
-void ShapedFrame::OnWindowCreate(wxWindowCreateEvent& evt)
+void ShapedFrame::OnWindowCreate(wxWindowCreateEvent& WXUNUSED(evt))
 {
     SetWindowShape();
 }