X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/621ae37407179f28e22751601eeb0e3136ed9a80..710526dea59c13462ada8e31abe31bb5a0ef3806:/src/richtext/richtextctrl.cpp diff --git a/src/richtext/richtextctrl.cpp b/src/richtext/richtextctrl.cpp index ae7de57722..bac9d50f61 100644 --- a/src/richtext/richtextctrl.cpp +++ b/src/richtext/richtextctrl.cpp @@ -109,18 +109,22 @@ wxRichTextCtrl::wxRichTextCtrl(wxWindow* parent, const wxString& value, const wxPoint& pos, const wxSize& size, - long style) + long style, + const wxValidator& validator, + const wxString& name) : wxScrollHelper(this) { Init(); - Create(parent, id, value, pos, size, style); + Create(parent, id, value, pos, size, style, validator, name); } /// Creation -bool wxRichTextCtrl::Create( wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, long style) +bool wxRichTextCtrl::Create( wxWindow* parent, wxWindowID id, const wxString& value, const wxPoint& pos, const wxSize& size, long style, + const wxValidator& validator, const wxString& name) { if (!wxTextCtrlBase::Create(parent, id, pos, size, - style|wxFULL_REPAINT_ON_RESIZE)) + style|wxFULL_REPAINT_ON_RESIZE, + validator, name)) return false; if (!GetFont().Ok()) @@ -130,10 +134,14 @@ bool wxRichTextCtrl::Create( wxWindow* parent, wxWindowID id, const wxString& va GetBuffer().Reset(); GetBuffer().SetRichTextCtrl(this); + + SetCaret(new wxCaret(this, wxRICHTEXT_DEFAULT_CARET_WIDTH, 16)); + GetCaret()->Show(); if (style & wxTE_READONLY) SetEditable(false); + // The base attributes must all have default values wxTextAttrEx attributes; attributes.SetFont(GetFont()); attributes.SetTextColour(*wxBLACK); @@ -142,6 +150,8 @@ bool wxRichTextCtrl::Create( wxWindow* parent, wxWindowID id, const wxString& va attributes.SetLineSpacing(10); attributes.SetParagraphSpacingAfter(10); attributes.SetParagraphSpacingBefore(0); + attributes.SetTextEffects(0); + attributes.SetTextEffectFlags(wxTEXT_ATTR_EFFECT_STRIKETHROUGH|wxTEXT_ATTR_EFFECT_CAPITALS); SetBasicStyle(attributes); @@ -154,7 +164,7 @@ bool wxRichTextCtrl::Create( wxWindow* parent, wxWindowID id, const wxString& va SetBackgroundStyle(wxBG_STYLE_CUSTOM); // Tell the sizers to use the given or best size - SetBestFittingSize(size); + SetInitialSize(size); #if wxRICHTEXT_BUFFERED_PAINTING // Create a buffer @@ -241,7 +251,7 @@ void wxRichTextCtrl::Clear() /// Painting void wxRichTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) { - if (GetCaret()) + if (GetCaret() && GetCaret()->IsVisible()) GetCaret()->Hide(); { @@ -260,7 +270,11 @@ void wxRichTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) // Paint the background PaintBackground(dc); - wxRect drawingArea(GetLogicalPoint(wxPoint(0, 0)), GetClientSize()); + // wxRect drawingArea(GetLogicalPoint(wxPoint(0, 0)), GetClientSize()); + + wxRect drawingArea(GetUpdateRegion().GetBox()); + drawingArea.SetPosition(GetLogicalPoint(drawingArea.GetPosition())); + wxRect availableSpace(GetClientSize()); if (GetBuffer().GetDirty()) { @@ -272,7 +286,7 @@ void wxRichTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) GetBuffer().Draw(dc, GetBuffer().GetRange(), GetInternalSelectionRange(), drawingArea, 0 /* descent */, 0 /* flags */); } - if (GetCaret()) + if (GetCaret() && !GetCaret()->IsVisible()) GetCaret()->Show(); PositionCaret(); @@ -285,21 +299,24 @@ void wxRichTextCtrl::OnEraseBackground(wxEraseEvent& WXUNUSED(event)) void wxRichTextCtrl::OnSetFocus(wxFocusEvent& WXUNUSED(event)) { - wxCaret* caret = new wxCaret(this, wxRICHTEXT_DEFAULT_CARET_WIDTH, 16); - SetCaret(caret); - caret->Show(); - PositionCaret(); + if (GetCaret()) + { + if (!GetCaret()->IsVisible()) + GetCaret()->Show(); + PositionCaret(); + } - if (!IsFrozen()) - Refresh(false); + // if (!IsFrozen()) + // Refresh(false); } void wxRichTextCtrl::OnKillFocus(wxFocusEvent& WXUNUSED(event)) { - SetCaret(NULL); + if (GetCaret() && GetCaret()->IsVisible()) + GetCaret()->Hide(); - if (!IsFrozen()) - Refresh(false); + // if (!IsFrozen()) + // Refresh(false); } /// Left-click @@ -416,13 +433,11 @@ void wxRichTextCtrl::OnMoveMouse(wxMouseEvent& event) { if (attr.HasFlag(wxTEXT_ATTR_URL)) { - if (GetCursor() != m_urlCursor) - SetCursor(m_urlCursor); + SetCursor(m_urlCursor); } else if (!attr.HasFlag(wxTEXT_ATTR_URL)) { - if (GetCursor() != m_textCursor) - SetCursor(m_textCursor); + SetCursor(m_textCursor); } } } @@ -2945,6 +2960,18 @@ long wxRichTextCtrl::GetFirstVisiblePosition() const return 0; } +/// Get the first visible point in the window +wxPoint wxRichTextCtrl::GetFirstVisiblePoint() const +{ + int ppuX, ppuY; + int startXUnits, startYUnits; + + GetScrollPixelsPerUnit(& ppuX, & ppuY); + GetViewStart(& startXUnits, & startYUnits); + + return wxPoint(startXUnits * ppuX, startYUnits * ppuY); +} + /// The adjusted caret position is the character position adjusted to take /// into account whether we're at the start of a paragraph, in which case /// style information should be taken from the next position, not current one.