]> git.saurik.com Git - wxWidgets.git/commitdiff
implementing rollover and pressed image for bitmapbutton on osx_cocoa
authorStefan Csomor <csomor@advancedconcepts.ch>
Thu, 8 Oct 2009 18:38:43 +0000 (18:38 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Thu, 8 Oct 2009 18:38:43 +0000 (18:38 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62335 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/osx/bmpbuttn.h
include/wx/osx/cocoa/private.h
include/wx/osx/core/private.h
src/osx/bmpbuttn_osx.cpp
src/osx/carbon/bmpbuttn.cpp
src/osx/cocoa/bmpbuttn.mm
src/osx/cocoa/button.mm
src/osx/cocoa/window.mm

index 9cb9bb70ce5e0f9a0e31c38ed25b4741f4299cc9..94c97608b5b546f549da2a2de2595cfec1057b13 100644 (file)
@@ -40,11 +40,15 @@ public:
                 const wxString& name = wxButtonNameStr);
 
 protected:
+    void OnEnterWindow( wxMouseEvent& event);
+    void OnLeaveWindow( wxMouseEvent& event);
+    
     virtual wxSize DoGetBestSize() const;
 
     virtual void DoSetBitmap(const wxBitmap& bitmap, State which);
 
     DECLARE_DYNAMIC_CLASS(wxBitmapButton)
+    DECLARE_EVENT_TABLE()
 };
 
 #endif // _WX_OSX_BMPBUTTN_H_
index a6ac933584924e8c49fefe91ea5f19b4a036956d..d9bf8338d126c65e9be18a5a65940a17d5ad8040 100644 (file)
@@ -261,6 +261,7 @@ protected :
 
     @interface wxNSButton : NSButton
     {
+        NSTrackingRectTag rectTag;
     }
 
     @end
index 418b6f8e4ac0b5ee83b2c46faaa0693a34d7a3c6..a011a3d5a9fe66a8e91a52a65c49c55ba939de8d 100644 (file)
@@ -587,6 +587,19 @@ public :
     virtual void CheckSpelling(bool WXUNUSED(check)) { }
 };
 
+//
+// common interface bitmapbuttons
+//
+
+class wxBitmapButtonImpl
+{
+    public :
+    wxBitmapButtonImpl(){}
+    virtual ~wxBitmapButtonImpl(){}
+    
+    virtual void SetPressedBitmap( const wxBitmap& bitmap ) = 0;
+} ;
+
 //
 // common interface for search controls
 //
index d22411f27ee8a54a7d5629035278874c583a033c..6264a9baa8c0b95c9eabff8c0ff1cd979dff97c2 100644 (file)
 
 IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton)
 
+BEGIN_EVENT_TABLE(wxBitmapButton, wxButton)
+    EVT_ENTER_WINDOW(wxBitmapButton::OnEnterWindow)
+    EVT_LEAVE_WINDOW(wxBitmapButton::OnLeaveWindow)
+END_EVENT_TABLE()
+
 #include "wx/osx/private.h"
 
 //---------------------------------------------------------------------------
@@ -70,6 +75,12 @@ void wxBitmapButton::DoSetBitmap(const wxBitmap& bitmap, State which)
     {
         m_peer->SetBitmap( bitmap );
     }
+    else if ( which == State_Pressed )
+    {
+        wxBitmapButtonImpl* bi = dynamic_cast<wxBitmapButtonImpl*> (m_peer);
+        if ( bi )
+            bi->SetPressedBitmap(bitmap);
+    }
 }
 
 wxSize wxBitmapButton::DoGetBestSize() const
@@ -86,4 +97,16 @@ wxSize wxBitmapButton::DoGetBestSize() const
     return best;
 }
 
+void wxBitmapButton::OnEnterWindow( wxMouseEvent& WXUNUSED(event))
+{
+    if ( DoGetBitmap( State_Current ).IsOk() )
+        m_peer->SetBitmap( DoGetBitmap( State_Current ) );       
+}
+
+void wxBitmapButton::OnLeaveWindow( wxMouseEvent& WXUNUSED(event))
+{
+    if ( DoGetBitmap( State_Current ).IsOk() )
+        m_peer->SetBitmap( DoGetBitmap( State_Normal ) );       
+}
+
 #endif // wxUSE_BMPBUTTON
index cde7745150b52ef07375677fe5fe4d923b09ee26..55147f94e469b51986e74d1ef054b034968b8827 100644 (file)
@@ -27,7 +27,7 @@ namespace
 
 // define a derived class to override SetBitmap() and also to provide
 // InitButtonContentInfo() helper used by CreateBitmapButton()
-class wxMacBitmapButton : public wxMacControl
+class wxMacBitmapButton : public wxMacControl, public wxBitmapButtonImpl
 {
 public:
     wxMacBitmapButton(wxWindowMac* peer, const wxBitmap& bitmap, int style)
@@ -70,6 +70,11 @@ public:
                                 m_isIcon ? kControlContentIconRef : 0);
     }
 
+    void SetPressedBitmap( const wxBitmap& WXUNUSED(bitmap) )
+    {
+        // not implemented under Carbon
+    }    
+    
 private:
     // helper function: returns true if the given bitmap is of one of standard
     // sizes supported by OS X icons
index d3c0092ba0ad296c5ae12d13f3bfc4daf928226b..ccfc8c98819a0031979b04bea38a157a493b84eb 100644 (file)
 
 #include "wx/osx/private.h"
 
+class wxBitmapButtonCocoaImpl : public wxWidgetCocoaImpl, public wxBitmapButtonImpl
+{
+    public :
+    wxBitmapButtonCocoaImpl( wxWindowMac* peer , WXWidget w) : wxWidgetCocoaImpl(peer,w)
+    {
+    }
+    
+    void SetPressedBitmap( const wxBitmap& bitmap )
+    {
+        wxNSButton* button = (wxNSButton*) m_osxView;
+        [button setAlternateImage: bitmap.GetNSImage()];
+        [button setButtonType:NSMomentaryChangeButton];
+    }
+} ;
+
 wxWidgetImplType* wxWidgetImpl::CreateBitmapButton( wxWindowMac* wxpeer,
                                     wxWindowMac* WXUNUSED(parent),
                                     wxWindowID WXUNUSED(id),
@@ -55,7 +70,7 @@ wxWidgetImplType* wxWidgetImpl::CreateBitmapButton( wxWindowMac* wxpeer,
         [v setImage:bitmap.GetNSImage() ];
 
     [v setButtonType:NSMomentaryPushInButton];
-    wxWidgetCocoaImpl* c = new wxWidgetCocoaImpl( wxpeer, v );
+    wxWidgetCocoaImpl* c = new wxBitmapButtonCocoaImpl( wxpeer, v );
     return c;
 }
 
index 57512e1ccb8fb13e457e21d31efa033660ae9b74..f83027bf6b79840f7e10c0ab2367916680283f3a 100644 (file)
@@ -82,6 +82,16 @@ wxSize wxButton::GetDefaultSize()
     }
 }
 
+- (void) setTrackingTag: (NSTrackingRectTag)tag
+{
+    rectTag = tag;
+}
+
+- (NSTrackingRectTag) trackingTag
+{
+    return rectTag;
+}
+
 @end
 
 namespace
index 26d42af3f6a5ee4df9b0e55228b972f54078d172..59b06c142f1e83a98706f45f6bea1bc5e92ebb06 100644 (file)
@@ -1683,6 +1683,7 @@ void wxWidgetCocoaImpl::SetBitmap( const wxBitmap& bitmap )
     if (  [m_osxView respondsToSelector:@selector(setImage:)] )
     {
         [m_osxView setImage:bitmap.GetNSImage()];
+        [m_osxView setNeedsDisplay:YES];
     }
 }