X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/343ef639a9c054e4d1883156b38a6b02fd629fd7..36b52591b51e425b57f60e1cbed9a51d2f5767d9:/src/richtext/richtextctrl.cpp diff --git a/src/richtext/richtextctrl.cpp b/src/richtext/richtextctrl.cpp index 08f62df425..f5039443c5 100644 --- a/src/richtext/richtextctrl.cpp +++ b/src/richtext/richtextctrl.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: src/richtext/richeditctrl.cpp +// Name: src/richtext/richtextctrl.cpp // Purpose: A rich edit control // Author: Julian Smart // Modified by: @@ -230,7 +230,7 @@ bool wxRichTextCtrl::Create( wxWindow* parent, wxWindowID id, const wxString& va validator, name)) return false; - if (!GetFont().Ok()) + if (!GetFont().IsOk()) { SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT)); } @@ -456,6 +456,11 @@ void wxRichTextCtrl::OnPaint(wxPaintEvent& WXUNUSED(event)) if (GetCaret()) GetCaret()->Show(); PositionCaret(); +#else +#if !defined(__WXMAC__) + // Causes caret dropouts on Mac + PositionCaret(); +#endif #endif } @@ -563,12 +568,7 @@ void wxRichTextCtrl::OnLeftClick(wxMouseEvent& event) // For now, don't handle shift-click when we're selecting multiple objects. if (event.ShiftDown() && GetFocusObject() == oldFocusObject && m_selectionState == wxRichTextCtrlSelectionState_Normal) - { - if (!m_selection.IsValid()) - ExtendSelection(oldCaretPos, m_caretPosition, wxRICHTEXT_SHIFT_DOWN); - else - ExtendSelection(m_caretPosition, m_caretPosition, wxRICHTEXT_SHIFT_DOWN); - } + ExtendSelection(oldCaretPos, m_caretPosition, wxRICHTEXT_SHIFT_DOWN); else SelectNone(); } @@ -1221,6 +1221,7 @@ void wxRichTextCtrl::OnChar(wxKeyEvent& event) SetDefaultStyleToCursorStyle(); ScrollIntoView(m_caretPosition, WXK_RIGHT); + cmdEvent.SetPosition(m_caretPosition); GetEventHandler()->ProcessEvent(cmdEvent); Update(); @@ -1568,7 +1569,7 @@ bool wxRichTextCtrl::IsPositionVisible(long pos) const wxSize clientSize = GetClientSize(); clientSize.y -= GetBuffer().GetBottomMargin(); - return (rect.GetBottom() > (startY + GetBuffer().GetTopMargin())) && (rect.GetTop() < (startY + clientSize.y)); + return (rect.GetTop() >= (startY + GetBuffer().GetTopMargin())) && (rect.GetBottom() <= (startY + clientSize.y)); } void wxRichTextCtrl::SetCaretPosition(long position, bool showAtLineStart) @@ -2203,6 +2204,19 @@ void wxRichTextCtrl::OnSize(wxSizeEvent& event) event.Skip(); } +// Force any pending layout due to large buffer +void wxRichTextCtrl::ForceDelayedLayout() +{ + if (m_fullLayoutRequired) + { + m_fullLayoutRequired = false; + m_fullLayoutTime = 0; + GetBuffer().Invalidate(wxRICHTEXT_ALL); + ShowPosition(m_fullLayoutSavedPosition); + Refresh(false); + Update(); + } +} /// Idle-time processing void wxRichTextCtrl::OnIdle(wxIdleEvent& event) @@ -2309,7 +2323,7 @@ void wxRichTextCtrl::SetupScrollbars(bool atTop) void wxRichTextCtrl::PaintBackground(wxDC& dc) { wxColour backgroundColour = GetBackgroundColour(); - if (!backgroundColour.Ok()) + if (!backgroundColour.IsOk()) backgroundColour = wxSystemSettings::GetColour(wxSYS_COLOUR_3DFACE); // Clear the background @@ -2336,9 +2350,9 @@ bool wxRichTextCtrl::RecreateBuffer(const wxSize& size) if (sz.x < 1 || sz.y < 1) return false; - if (!m_bufferBitmap.Ok() || m_bufferBitmap.GetWidth() < sz.x || m_bufferBitmap.GetHeight() < sz.y) + if (!m_bufferBitmap.IsOk() || m_bufferBitmap.GetWidth() < sz.x || m_bufferBitmap.GetHeight() < sz.y) m_bufferBitmap = wxBitmap(sz.x, sz.y); - return m_bufferBitmap.Ok(); + return m_bufferBitmap.IsOk(); } #endif @@ -2650,12 +2664,12 @@ bool wxRichTextCtrl::WriteImage(const wxRichTextImageBlock& imageBlock, const wx bool wxRichTextCtrl::WriteImage(const wxBitmap& bitmap, wxBitmapType bitmapType, const wxRichTextAttr& textAttr) { - if (bitmap.Ok()) + if (bitmap.IsOk()) { wxRichTextImageBlock imageBlock; wxImage image = bitmap.ConvertToImage(); - if (image.Ok() && imageBlock.MakeImageBlock(image, bitmapType)) + if (image.IsOk() && imageBlock.MakeImageBlock(image, bitmapType)) return WriteImage(imageBlock, textAttr); } @@ -2911,13 +2925,19 @@ void wxRichTextCtrl::SetSelection(long from, long to) // Editing // ---------------------------------------------------------------------------- -void wxRichTextCtrl::Replace(long WXUNUSED(from), long WXUNUSED(to), +void wxRichTextCtrl::Replace(long from, long to, const wxString& value) { BeginBatchUndo(_("Replace")); + SetSelection(from, to); + + wxRichTextAttr attr = GetDefaultStyle(); + DeleteSelectedContent(); + SetDefaultStyle(attr); + DoWriteText(value, SetValue_SelectionOnly); EndBatchUndo(); @@ -3012,12 +3032,12 @@ void wxRichTextCtrl::Redo() bool wxRichTextCtrl::CanUndo() const { - return GetCommandProcessor()->CanUndo(); + return GetCommandProcessor()->CanUndo() && IsEditable(); } bool wxRichTextCtrl::CanRedo() const { - return GetCommandProcessor()->CanRedo(); + return GetCommandProcessor()->CanRedo() && IsEditable(); } // ----------------------------------------------------------------------------