]> git.saurik.com Git - wxWidgets.git/blobdiff - samples/scroll/scroll.cpp
fix sizing of extra control
[wxWidgets.git] / samples / scroll / scroll.cpp
index 7e42ebf2c6a582d2b5e5a2930057386c5bf64f1c..c879b87686d164459213e547f0707cc25c77dac1 100644 (file)
@@ -273,6 +273,7 @@ protected: // event stuff
     void OnMouseLeftDown(wxMouseEvent& event);
     void OnMouseLeftUp(wxMouseEvent& event);
     void OnMouseMove(wxMouseEvent& event);
+    void OnMouseCaptureLost(wxMouseCaptureLostEvent& event);
     void OnScroll(wxScrollWinEvent& event);
 
     DECLARE_EVENT_TABLE()
@@ -534,16 +535,11 @@ MyAutoScrollWindow::MyAutoScrollWindow( wxWindow *parent )
                              wxDefaultPosition,
                              SMALL_BUTTON );
 
-    // We need to do this here, because wxADJUST_MINSIZE below
-    // will cause the initial size to be ignored for Best/Min size.
-    // It would be nice to fix the sizers to handle this a little
-    // more cleanly.
-
     m_button->SetSizeHints( SMALL_BUTTON.GetWidth(), SMALL_BUTTON.GetHeight() );
 
     innersizer->Add( m_button,
                      0,
-                     wxALIGN_CENTER | wxALL | wxADJUST_MINSIZE,
+                     wxALIGN_CENTER | wxALL,
                      20 );
 
     innersizer->Add( new wxStaticText( this, wxID_ANY, _T("This is just") ),
@@ -672,6 +668,9 @@ void MyFrame::OnAbout( wxCommandEvent &WXUNUSED(event) )
 
 bool MyApp::OnInit()
 {
+    if ( !wxApp::OnInit() )
+        return false;
+
     wxFrame *frame = new MyFrame();
     frame->Show( true );
 
@@ -698,7 +697,7 @@ void MyScrolledWindowDumb::OnDraw(wxDC& dc)
         CalcScrolledPosition(0, y, NULL, &yPhys);
 
         dc.DrawText(wxString::Format(_T("Line %u (logical %d, physical %d)"),
-                                     line, y, yPhys), 0, y);
+                                     unsigned(line), y, yPhys), 0, y);
         y += m_hLine;
     }
 }
@@ -727,7 +726,7 @@ void MyScrolledWindowSmart::OnDraw(wxDC& dc)
         CalcScrolledPosition(0, y, NULL, &yPhys);
 
         dc.DrawText(wxString::Format(_T("Line %u (logical %d, physical %d)"),
-                                     line, y, yPhys), 0, y);
+                                     unsigned(line), y, yPhys), 0, y);
         y += m_hLine;
     }
 }
@@ -740,6 +739,7 @@ BEGIN_EVENT_TABLE(MyAutoTimedScrollingWindow, wxScrolledWindow)
     EVT_LEFT_DOWN(MyAutoTimedScrollingWindow::OnMouseLeftDown)
     EVT_LEFT_UP(MyAutoTimedScrollingWindow::OnMouseLeftUp)
     EVT_MOTION(MyAutoTimedScrollingWindow::OnMouseMove)
+    EVT_MOUSE_CAPTURE_LOST(MyAutoTimedScrollingWindow::OnMouseCaptureLost)
     EVT_SCROLLWIN(MyAutoTimedScrollingWindow::OnScroll)
 END_EVENT_TABLE()
 
@@ -934,7 +934,9 @@ void MyAutoTimedScrollingWindow::OnDraw(wxDC& dc)
     wxBrush selBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT)
             , wxSOLID);
     dc.SetPen(*wxTRANSPARENT_PEN);
-    wxString str = sm_testData;
+    const wxString str = sm_testData;
+    size_t strLength = str.length();
+    wxString::const_iterator str_i;
 
     // draw the characters
     // 1. for each update region
@@ -945,6 +947,7 @@ void MyAutoTimedScrollingWindow::OnDraw(wxDC& dc)
         for (int chY = updRectInGChars.y
                 ; chY <= updRectInGChars.y + updRectInGChars.height; ++chY) {
             // 3. for each character in the row
+            bool isFirstX = true;
             for (int chX = updRectInGChars.x
                     ; chX <= updRectInGChars.x + updRectInGChars.width
                     ; ++chX) {
@@ -966,10 +969,15 @@ void MyAutoTimedScrollingWindow::OnDraw(wxDC& dc)
                 size_t charIndex = chY * sm_lineLen + chX;
                 if (chY < sm_lineCnt &&
                     chX < sm_lineLen &&
-                    charIndex < str.Length())
+                    charIndex < strLength)
                 {
-                    dc.DrawText(str.Mid(charIndex,1),
-                                charPos.x, charPos.y);
+                    if (isFirstX)
+                    {
+                        str_i = str.begin() + charIndex;
+                        isFirstX = false;
+                    }
+                    dc.DrawText(*str_i, charPos.x, charPos.y);
+                    ++str_i;
                 }
             }
         }
@@ -1010,6 +1018,12 @@ void MyAutoTimedScrollingWindow::OnMouseMove(wxMouseEvent& event)
     }
 }
 
+void MyAutoTimedScrollingWindow::OnMouseCaptureLost(wxMouseCaptureLostEvent& WXUNUSED(event))
+{
+    // we only capture mouse for timed scrolling, so nothing is needed here
+    // other than making sure to not call event.Skip()
+}
+
 void MyAutoTimedScrollingWindow::OnScroll(wxScrollWinEvent& event)
 {
     // need to move the cursor when autoscrolling