Index: ui/gfx/render_text_linux.h |
=================================================================== |
--- ui/gfx/render_text_linux.h (revision 97884) |
+++ ui/gfx/render_text_linux.h (working copy) |
@@ -6,6 +6,8 @@ |
#define UI_GFX_RENDER_TEXT_LINUX_H_ |
#pragma once |
+#include <pango/pango.h> |
+ |
#include "ui/gfx/render_text.h" |
namespace gfx { |
@@ -16,7 +18,90 @@ |
RenderTextLinux(); |
virtual ~RenderTextLinux(); |
-private: |
+ // Overridden from RenderText: |
+ virtual void SetText(const string16& text) OVERRIDE; |
+ virtual void SetDisplayRect(const Rect&r) OVERRIDE; |
+ virtual void ApplyStyleRange(StyleRange style_range) OVERRIDE; |
+ virtual void ApplyDefaultStyle() OVERRIDE; |
+ virtual base::i18n::TextDirection GetTextDirection() OVERRIDE; |
+ virtual int GetStringWidth() OVERRIDE; |
+ virtual void Draw(Canvas* canvas) OVERRIDE; |
+ virtual SelectionModel FindCursorPosition(const Point& point) OVERRIDE; |
+ virtual Rect GetCursorBounds(const SelectionModel& position, |
+ bool insert_mode) OVERRIDE; |
+ |
+ protected: |
+ // Overridden from RenderText: |
+ virtual SelectionModel GetLeftSelectionModel(const SelectionModel& current, |
+ BreakType break_type) OVERRIDE; |
+ virtual SelectionModel GetRightSelectionModel(const SelectionModel& current, |
+ BreakType break_type) OVERRIDE; |
+ virtual size_t GetIndexOfPreviousGrapheme(size_t position) OVERRIDE; |
+ |
+ private: |
+ enum RelativeLogicalPosition { |
+ PREVIOUS, |
+ NEXT |
+ }; |
+ |
+ // Get the SelectionModels corresponding to the left or right text ends. |
+ // The returned value represents a cursor/caret position without a selection. |
+ SelectionModel LeftEndSelectionModel(); |
+ SelectionModel RightEndSelectionModel(); |
+ |
+ // Returns the run that contains |position|. Return NULL if not found. |
+ GSList* GetRunContainingPosition(size_t position) const; |
+ |
+ // Given |utf16_index_of_current_grapheme|, returns the UTF8 or UTF16 index of |
+ // next grapheme in the text if |pos| is NEXT, otherwise, returns the index of |
+ // previous grapheme. Returns 0 if there is no previous grapheme, and returns |
+ // the |text_| length if there is no next grapheme. |
msw
2011/08/24 08:55:30
See my other comment about handling this behavior
|
+ size_t Utf8IndexOfAdjacentGrapheme(size_t utf16_index_of_current_grapheme, |
+ RelativeLogicalPosition pos) const; |
+ size_t Utf16IndexOfAdjacentGrapheme(size_t utf16_index_of_current_grapheme, |
+ RelativeLogicalPosition pos) const; |
+ |
+ // Given a |run|, returns the SelectionModel that contains the logical first |
+ // or last caret position inside (not at a boundary of) the run. |
+ // The returned value represents a cursor/caret position without a selection. |
+ SelectionModel FirstSelectionModelInsideRun(const PangoItem* run) const; |
+ SelectionModel LastSelectionModelInsideRun(const PangoItem* run) const; |
+ |
+ // Get the selection model that visually left or right of |current| by one |
+ // grapheme. |
+ // The returned value represents a cursor/caret position without a selection. |
+ SelectionModel LeftSelectionModel(const SelectionModel& current); |
+ SelectionModel RightSelectionModel(const SelectionModel& current); |
+ |
+ // Create, setup, and return pango layout and pango layout line if |layout_| |
+ // is NULL. Otherwise, return the cached |layout_|. |
+ PangoLayout* EnsureLayout(); |
+ |
+ // Unref |layout_| and |pango_line_|. Set them to NULL. |
+ void ResetLayout(); |
+ |
+ // Setup pango attribute: foreground, background, font, strike. |
+ void SetupPangoAttributes(PangoLayout* layout); |
+ |
+ // Append one pango attribute |pango_attr| into pango attribute list |attrs|. |
+ void AppendPangoAttribute(size_t start, |
+ size_t end, |
+ PangoAttribute* pango_attr, |
+ PangoAttrList* attrs); |
+ |
+ // Returns |run|'s visually previous run. |
+ GSList* GetPreviousRun(GSList* run) const; |
+ |
+ // Returns the last run in |layout_line_|. |
+ GSList* GetLastRun() const; |
+ |
+ size_t Utf16IndexToUtf8Index(size_t index) const; |
+ size_t Utf8IndexToUtf16Index(size_t index) const; |
+ |
+ PangoLayout* layout_; |
+ |
+ PangoLayoutLine* layout_line_; |
+ |
DISALLOW_COPY_AND_ASSIGN(RenderTextLinux); |
}; |