From 16671f229af4d3ff3ca2a6612a8ebc6c89f45c24 Mon Sep 17 00:00:00 2001 From: Kevin Ollivier Date: Sun, 1 Nov 2009 00:58:04 +0000 Subject: [PATCH] Start on Get/SetStyle support for OS X Cocoa wxTextCtrl. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62531 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/osx/cocoa/private/textimpl.h | 3 ++ include/wx/osx/core/private.h | 1 + include/wx/osx/textctrl.h | 1 + src/osx/cocoa/textctrl.mm | 39 +++++++++++++++++++++++++ src/osx/textctrl_osx.cpp | 11 +++++++ 5 files changed, 55 insertions(+) diff --git a/include/wx/osx/cocoa/private/textimpl.h b/include/wx/osx/cocoa/private/textimpl.h index b405b19b1c..7505bc9882 100644 --- a/include/wx/osx/cocoa/private/textimpl.h +++ b/include/wx/osx/cocoa/private/textimpl.h @@ -57,6 +57,9 @@ public: virtual void SetSelection( long from , long to ); virtual void WriteText(const wxString& str) ; virtual void SetFont( const wxFont & font , const wxColour& foreground , long windowStyle, bool ignoreBlack = true ); + + virtual bool GetStyle(long position, wxTextAttr& style); + virtual void SetStyle(long start, long end, const wxTextAttr& style); protected: NSScrollView* m_scrollView; diff --git a/include/wx/osx/core/private.h b/include/wx/osx/core/private.h index 917f6a684a..9d3fbdb52f 100644 --- a/include/wx/osx/core/private.h +++ b/include/wx/osx/core/private.h @@ -556,6 +556,7 @@ public : virtual void GetSelection( long* from, long* to ) const = 0 ; virtual void WriteText( const wxString& str ) = 0 ; + virtual bool GetStyle( long position, wxTextAttr& style); virtual void SetStyle( long start, long end, const wxTextAttr& style ) ; virtual void Copy() ; virtual void Cut() ; diff --git a/include/wx/osx/textctrl.h b/include/wx/osx/textctrl.h index 76f52edf97..c7c934144a 100644 --- a/include/wx/osx/textctrl.h +++ b/include/wx/osx/textctrl.h @@ -93,6 +93,7 @@ public: // methods apply the given text style to the given selection or to // set/get the style which will be used for all appended text virtual bool SetFont( const wxFont &font ); + virtual bool GetStyle(long position, wxTextAttr& style); virtual bool SetStyle(long start, long end, const wxTextAttr& style); virtual bool SetDefaultStyle(const wxTextAttr& style); diff --git a/src/osx/cocoa/textctrl.mm b/src/osx/cocoa/textctrl.mm index 2c91b8bc27..e0bdfdfd20 100644 --- a/src/osx/cocoa/textctrl.mm +++ b/src/osx/cocoa/textctrl.mm @@ -429,6 +429,45 @@ void wxNSTextViewControl::SetFont( const wxFont & font , const wxColour& WXUNUSE [m_textView setFont: font.OSXGetNSFont()]; } +bool wxNSTextViewControl::GetStyle(long position, wxTextAttr& style) +{ + if (m_textView) { + NSTextStorage* storage = [m_textView textStorage]; + NSFont* font = [storage attribute:NSFontAttributeName atIndex:position effectiveRange:NULL]; + if (font) + style.SetFont(wxFont(font)); + NSColor* bgcolor = [storage attribute:NSBackgroundColorAttributeName atIndex:position effectiveRange:NULL]; + if (bgcolor) + style.SetBackgroundColour(wxColour(bgcolor)); + NSColor* fgcolor = [storage attribute:NSForegroundColorAttributeName atIndex:position effectiveRange:NULL]; + style.SetTextColour(wxColour(fgcolor)); + return true; + } + + return false; +} + +void wxNSTextViewControl::SetStyle(long start, + long end, + const wxTextAttr& style) +{ + if (m_textView) { + NSRange range = NSMakeRange(start, end-start); + NSTextStorage* storage = [m_textView textStorage]; + + wxFont font = style.GetFont(); + if (font.IsOk()) + [storage addAttribute:NSFontAttributeName value:style.GetFont().OSXGetNSFont() range:range]; + + wxColour bgcolor = style.GetBackgroundColour(); + if (bgcolor.IsOk()) + [storage addAttribute:NSBackgroundColorAttributeName value:bgcolor.OSXGetNSColor() range:range]; + + wxColour fgcolor = style.GetTextColour(); + if (fgcolor.IsOk()) + [storage addAttribute:NSForegroundColorAttributeName value:fgcolor.OSXGetNSColor() range:range]; + } +} // wxNSTextFieldControl diff --git a/src/osx/textctrl_osx.cpp b/src/osx/textctrl_osx.cpp index 1ff3094dbc..6edd282e97 100644 --- a/src/osx/textctrl_osx.cpp +++ b/src/osx/textctrl_osx.cpp @@ -373,6 +373,11 @@ wxSize wxTextCtrl::DoGetBestSize() const return wxSize(wText, hText); } +bool wxTextCtrl::GetStyle(long position, wxTextAttr& style) +{ + return GetTextPeer()->GetStyle(position, style); +} + // ---------------------------------------------------------------------------- // Undo/redo // ---------------------------------------------------------------------------- @@ -724,6 +729,12 @@ bool wxTextCtrl::MacSetupCursor( const wxPoint& pt ) // implementation base class // ---------------------------------------------------------------------------- +bool wxTextWidgetImpl::GetStyle(long WXUNUSED(position), + wxTextAttr& WXUNUSED(style)) +{ + return false; +} + void wxTextWidgetImpl::SetStyle(long WXUNUSED(start), long WXUNUSED(end), const wxTextAttr& WXUNUSED(style)) -- 2.45.2