X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9f84eccdeaf8e3706f7861ce19da3a256814d83e..94a77ff7aff70d0a44ae62ca3173151ad2ce6e44:/samples/caret/caret.cpp diff --git a/samples/caret/caret.cpp b/samples/caret/caret.cpp index 538ab8fda1..4fbef96b2a 100644 --- a/samples/caret/caret.cpp +++ b/samples/caret/caret.cpp @@ -62,6 +62,7 @@ public: wxChar& CharAt(int x, int y) { return *(m_text + x + m_xChars * y); } // operations + void SetFontSize(int fontSize); void CreateCaret(); void MoveCaret(int x, int y); @@ -84,6 +85,9 @@ private: // move the caret to m_xCaret, m_yCaret void DoMoveCaret(); + // update the geometry + void ChangeSize(); + wxFont m_font; // the margin around the text (looks nicer) @@ -117,6 +121,7 @@ public: void OnQuit(wxCommandEvent& event); void OnAbout(wxCommandEvent& event); void OnSetBlinkTime(wxCommandEvent& event); + void OnSetFontSize(wxCommandEvent& event); void OnCaretMove(wxCommandEvent& event); private: @@ -137,6 +142,7 @@ enum Caret_Quit = 1, Caret_About, Caret_SetBlinkTime, + Caret_SetFontSize, Caret_Move, // controls start here (the numbers are, of course, arbitrary) @@ -154,6 +160,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) EVT_MENU(Caret_Quit, MyFrame::OnQuit) EVT_MENU(Caret_About, MyFrame::OnAbout) EVT_MENU(Caret_SetBlinkTime, MyFrame::OnSetBlinkTime) + EVT_MENU(Caret_SetFontSize, MyFrame::OnSetFontSize) EVT_MENU(Caret_Move, MyFrame::OnCaretMove) END_EVENT_TABLE() @@ -202,6 +209,7 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size) wxMenu *menuFile = new wxMenu; menuFile->Append(Caret_SetBlinkTime, _T("&Blink time...\tCtrl-B")); + menuFile->Append(Caret_SetFontSize, _T("&Font size...\tCtrl-S")); menuFile->Append(Caret_Move, _T("&Move caret\tCtrl-C")); menuFile->AppendSeparator(); menuFile->Append(Caret_About, _T("&About...\tCtrl-A"), _T("Show about dialog")); @@ -260,6 +268,23 @@ void MyFrame::OnSetBlinkTime(wxCommandEvent& WXUNUSED(event)) } } +void MyFrame::OnSetFontSize(wxCommandEvent& WXUNUSED(event)) +{ + long fontSize = wxGetNumberFromUser + ( + _T("The font size also determines the caret size so\nthis demonstrates resizing the caret."), + _T("Font size (in points):"), + _T("wxCaret sample"), + 12, 1, 100, + this + ); + + if ( fontSize != -1 ) + { + m_canvas->SetFontSize((int)fontSize); + } +} + // ---------------------------------------------------------------------------- // MyCanvas // ---------------------------------------------------------------------------- @@ -281,8 +306,7 @@ MyCanvas::MyCanvas( wxWindow *parent ) SetBackgroundColour(*wxWHITE); - m_font = wxFont(12, wxFONTFAMILY_TELETYPE, - wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); + SetFontSize(12); m_xCaret = m_yCaret = m_xChars = m_yChars = 0; @@ -299,16 +323,30 @@ MyCanvas::~MyCanvas() void MyCanvas::CreateCaret() { + wxCaret *caret = new wxCaret(this, m_widthChar, m_heightChar); + SetCaret(caret); + + caret->Move(m_xMargin, m_yMargin); + caret->Show(); +} + +void MyCanvas::SetFontSize(int fontSize) +{ + m_font = wxFont(fontSize, wxFONTFAMILY_TELETYPE, + wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); + wxClientDC dc(this); dc.SetFont(m_font); m_heightChar = dc.GetCharHeight(); m_widthChar = dc.GetCharWidth(); - wxCaret *caret = new wxCaret(this, m_widthChar, m_heightChar); - SetCaret(caret); + wxCaret *caret = GetCaret(); + if ( caret ) + { + caret->SetSize(m_widthChar, m_heightChar); - caret->Move(m_xMargin, m_yMargin); - caret->Show(); + ChangeSize(); + } } void MyCanvas::MoveCaret(int x, int y) @@ -327,10 +365,18 @@ void MyCanvas::DoMoveCaret() m_yMargin + m_yCaret * m_heightChar); } -void MyCanvas::OnSize( wxSizeEvent &event ) +void MyCanvas::OnSize(wxSizeEvent& event) { - m_xChars = (event.GetSize().x - 2*m_xMargin) / m_widthChar; - m_yChars = (event.GetSize().y - 2*m_yMargin) / m_heightChar; + ChangeSize(); + + event.Skip(); +} + +void MyCanvas::ChangeSize() +{ + wxSize size = GetClientSize(); + m_xChars = (size.x - 2*m_xMargin) / m_widthChar; + m_yChars = (size.y - 2*m_yMargin) / m_heightChar; if ( !m_xChars ) m_xChars = 1; if ( !m_yChars ) @@ -348,8 +394,6 @@ void MyCanvas::OnSize( wxSizeEvent &event ) frame->SetStatusText(msg, 1); } - - event.Skip(); } // NB: this method is horrible inefficient especially because the caret @@ -383,7 +427,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) void MyCanvas::OnChar( wxKeyEvent &event ) { - switch ( event.KeyCode() ) + switch ( event.GetKeyCode() ) { case WXK_LEFT: PrevChar(); @@ -415,9 +459,9 @@ void MyCanvas::OnChar( wxKeyEvent &event ) break; default: - if ( !event.AltDown() && wxIsprint(event.KeyCode()) ) + if ( !event.AltDown() && wxIsprint(event.GetKeyCode()) ) { - wxChar ch = (wxChar)event.KeyCode(); + wxChar ch = (wxChar)event.GetKeyCode(); CharAt(m_xCaret, m_yCaret) = ch; wxCaretSuspend cs(this);