]> git.saurik.com Git - wxWidgets.git/commitdiff
guarding Update() on OSX not to be issued faster than 1/30 later than the last redraw
authorStefan Csomor <csomor@advancedconcepts.ch>
Tue, 31 Jan 2012 17:39:39 +0000 (17:39 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Tue, 31 Jan 2012 17:39:39 +0000 (17:39 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70488 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/osx/nonownedwnd.h
src/osx/nonownedwnd_osx.cpp
src/osx/window_osx.cpp

index 85c0eb1cd1c3ba25b34048318d94e77a0b45fe6b..a972612b2bb7dea4148c81e103d3b52b2d0175d1 100644 (file)
@@ -114,6 +114,8 @@ public:
     virtual void HandleResized( double timestampsec );
     virtual void HandleMoved( double timestampsec );
     virtual void HandleResizing( double timestampsec, wxRect* rect );
+    
+    void WindowWasPainted();
 
     virtual bool Destroy();
 
@@ -145,6 +147,8 @@ protected:
     static wxNonOwnedWindow *s_macDeactivateWindow;
 
 private :
+    static clock_t s_lastFlush;
+    
     wxRegion m_shape;
 #if wxUSE_GRAPHICS_CONTEXT
     wxGraphicsPath m_shapePath;
index 1d643a0fdb0eafa19eaa447492a99b59def57fbb..feea6b5d9ed779ba49270df50363ae4b22ec351a 100644 (file)
@@ -39,6 +39,8 @@
 
 wxWindow* g_MacLastWindow = NULL ;
 
+clock_t wxNonOwnedWindow::s_lastFlush = 0;
+
 // unified title and toolbar constant - not in Tiger headers, so we duplicate it here
 #define kWindowUnifiedTitleAndToolbarAttribute (1 << 7)
 
@@ -483,10 +485,18 @@ void wxNonOwnedWindow::DoGetClientSize( int *width, int *height ) const
        *height = h ;
 }
 
+void wxNonOwnedWindow::WindowWasPainted()
+{
+    s_lastFlush = clock();
+}
 
 void wxNonOwnedWindow::Update()
 {
-    m_nowpeer->Update();
+    if ( clock() - s_lastFlush > CLOCKS_PER_SEC / 30 )
+    {
+        s_lastFlush = clock();
+        m_nowpeer->Update();
+    }
 }
 
 WXWindow wxNonOwnedWindow::GetWXWindow() const
index 012deb900dec323d56548b82c1100bb1d4ac076b..2c13ea8cb5f0389f780405a7bdb9318dd190b2d1 100644 (file)
@@ -2099,6 +2099,11 @@ bool wxWindowMac::MacDoRedraw( long time )
     }
 
     m_updateRegion = formerUpdateRgn;
+
+    wxNonOwnedWindow* top = MacGetTopLevelWindow();
+    if (top)
+        top->WindowWasPainted() ;
+    
     return handled;
 }