]> git.saurik.com Git - wxWidgets.git/blobdiff - utils/screenshotgen/src/autocapture.cpp
Removed dummy wxFont == operator implementation (IIRC was needed to compile with...
[wxWidgets.git] / utils / screenshotgen / src / autocapture.cpp
index 48f5dd0b1904350c30b7e5e5cbd570f8e5321aae..62ae1b88dce94d1d447635a712a6e6ef15a31eda 100644 (file)
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-    #pragma hdrstop
+#pragma hdrstop
 #endif
 
-// for all others, include the necessary headers
+// for all others, include the necessary headers wxWidgets headers)
 #ifndef WX_PRECOMP
-    #include "wx/wx.h"
+#include "wx/wx.h"
 #endif
 
-#include <wx/filename.h>
+#include "wx/filename.h"
+
 #include "autocapture.h"
 
+#ifdef __WXMAC__
+#include <cstring>
+#endif
+
 
 // ----------------------------------------------------------------------------
 // AutoCaptureMechanism
 // ----------------------------------------------------------------------------
 
 /* static */
-wxBitmap AutoCaptureMechanism::Capture(int x, int y, int width, int height)
+void AutoCaptureMechanism::Delay(int seconds)
+{
+       // TODO: Switch this to use wxTimer.
+
+    // Wait for 3 seconds
+    clock_t start = clock();
+    while (clock() - start < CLOCKS_PER_SEC * seconds)
+        wxYieldIfNeeded();
+}
+
+/* static */
+wxBitmap AutoCaptureMechanism::Capture(int x, int y, int width, int height, int delay)
 {
     // Somehow wxScreenDC.Blit() doesn't work under Mac for now. Here is a trick.
 #ifdef __WXMAC__
 
     // wxExecute(_T("screencapture -x ") + tempfile, wxEXEC_SYNC);
 
-    system("screencapture -x /tmp/wx_screen_capture.png");
+    char captureCommand[80] =""; // a reasonable max size is 80
+
+    sprintf(captureCommand, "sleep %d;%s", delay, "screencapture -x /tmp/wx_screen_capture.png");
+
+    system(captureCommand);
 
     wxBitmap fullscreen;
 
+    if(delay) Delay(delay);
+
     do
     {
         fullscreen = wxBitmap(_T("/tmp/wx_screen_capture.png"), wxBITMAP_TYPE_PNG);
@@ -46,6 +68,9 @@ wxBitmap AutoCaptureMechanism::Capture(int x, int y, int width, int height)
 
     wxBitmap screenshot = fullscreen.GetSubBitmap(wxRect(x,y,width,height));
 
+    // to prevent loading the old screenshot next time
+    system("rm /tmp/wx_screen_capture.png");
+
 #else // Under other paltforms, take a real screenshot
 
     // Create a DC for the whole screen area
@@ -83,10 +108,10 @@ wxBitmap AutoCaptureMechanism::Capture(int x, int y, int width, int height)
 }
 
 /* static */
-wxBitmap AutoCaptureMechanism::Capture(wxRect rect)
+wxBitmap AutoCaptureMechanism::Capture(wxRect rect, int delay)
 {
     wxPoint origin = rect.GetPosition();
-    return Capture(origin.x, origin.y, rect.GetWidth(), rect.GetHeight());
+    return Capture(origin.x, origin.y, rect.GetWidth(), rect.GetHeight(), delay);
 }
 
 void AutoCaptureMechanism::CaptureAll()
@@ -137,16 +162,10 @@ wxBitmap AutoCaptureMechanism::Capture(Control& ctrl)
                              ctrl.name, ctrl.name);
 
         choice = wxMessageBox(msg, caption, wxYES_NO, m_notebook);
-        if (choice == wxYES)
-        {
-            using std::clock;
-            using std::clock_t;
 
-            // Wait for 3 seconds
-            clock_t start = clock();
-            while (clock() - start < CLOCKS_PER_SEC * 3)
-                wxYieldIfNeeded();
-        }
+        #ifndef __WXMAC__  //not __WXMAC__
+        if (choice == wxYES)  Delay(3);
+        #endif
     }
 
     wxRect rect = GetRect(ctrl.ctrl, ctrl.flag);
@@ -166,10 +185,6 @@ wxBitmap AutoCaptureMechanism::Capture(Control& ctrl)
     ctrl.name.StartsWith(_T("wx"), &(ctrl.name));
     ctrl.name.MakeLower();
 
-       // AD-HOC FIX for wxHyperlink
-       if (ctrl.name == "generichyperlinkctrl")
-               ctrl.name = "hyperlinkctrl";
-
     // take the screenshot
     wxBitmap screenshot = Capture(rect);