Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: ui/gfx/render_text.h

Issue 7511029: Implement Pango RenderText for Linux. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: fix compilation error. using ICU functions for utf8/utf16 conversion Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef UI_GFX_RENDER_TEXT_H_ 5 #ifndef UI_GFX_RENDER_TEXT_H_
6 #define UI_GFX_RENDER_TEXT_H_ 6 #define UI_GFX_RENDER_TEXT_H_
7 #pragma once 7 #pragma once
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <vector> 10 #include <vector>
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 CaretPlacement caret_placement() const { return caret_placement_; } 114 CaretPlacement caret_placement() const { return caret_placement_; }
115 void set_caret_placement(CaretPlacement placement) { 115 void set_caret_placement(CaretPlacement placement) {
116 caret_placement_ = placement; 116 caret_placement_ = placement;
117 } 117 }
118 118
119 bool Equals(const SelectionModel& sel) const; 119 bool Equals(const SelectionModel& sel) const;
120 120
121 private: 121 private:
122 void Init(size_t start, size_t end, size_t pos, CaretPlacement status); 122 void Init(size_t start, size_t end, size_t pos, CaretPlacement status);
123 123
124 // Logical selection start. If there is non-empty selection, the selection 124 // Logical selection start. If there is non-empty selection, if
125 // always starts visually at the leading edge of the selection_start. So, we 125 // selection_start_ is less than selection_end_, the selection starts visually
126 // do not need extra information for visual selection bounding. 126 // at the leading edge of the selection_start_. If selection_start_ is greater
127 // than selection_end_, the selection starts visually at the trailing edge of
128 // selection_start_'s previous grapheme. So, we do not need extra information
129 // for visual bounding.
127 size_t selection_start_; 130 size_t selection_start_;
128 131
129 // The logical cursor position that next character will be inserted into. 132 // The logical cursor position that next character will be inserted into.
130 // It is also the end of the selection. 133 // It is also the end of the selection.
131 size_t selection_end_; 134 size_t selection_end_;
132 135
133 // The following two fields are used to guide cursor visual position. 136 // The following two fields are used to guide cursor visual position.
134 // The index of the character that cursor is visually attached to. 137 // The index of the character that cursor is visually attached to.
135 size_t caret_pos_; 138 size_t caret_pos_;
136 // The visual placement of the cursor, relative to its associated character. 139 // The visual placement of the cursor, relative to its associated character.
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 void set_default_style(StyleRange style) { default_style_ = style; } 172 void set_default_style(StyleRange style) { default_style_ = style; }
170 173
171 const Rect& display_rect() const { return display_rect_; } 174 const Rect& display_rect() const { return display_rect_; }
172 virtual void SetDisplayRect(const Rect& r); 175 virtual void SetDisplayRect(const Rect& r);
173 176
174 // This cursor position corresponds to SelectionModel::selection_end. In 177 // This cursor position corresponds to SelectionModel::selection_end. In
175 // addition to representing the selection end, it's also where logical text 178 // addition to representing the selection end, it's also where logical text
176 // edits take place, and doesn't necessarily correspond to 179 // edits take place, and doesn't necessarily correspond to
177 // SelectionModel::caret_pos. 180 // SelectionModel::caret_pos.
178 size_t GetCursorPosition() const; 181 size_t GetCursorPosition() const;
179 void SetCursorPosition(const size_t position); 182 void SetCursorPosition(size_t position);
180 183
181 void SetCaretPlacement(SelectionModel::CaretPlacement placement) { 184 void SetCaretPlacement(SelectionModel::CaretPlacement placement) {
182 selection_model_.set_caret_placement(placement); 185 selection_model_.set_caret_placement(placement);
183 } 186 }
184 187
185 // Moves the cursor left or right. Cursor movement is visual, meaning that 188 // Moves the cursor left or right. Cursor movement is visual, meaning that
186 // left and right are relative to screen, not the directionality of the text. 189 // left and right are relative to screen, not the directionality of the text.
187 // If |select| is false, the selection range is emptied at the new position. 190 // If |select| is false, the selection range is emptied at the new position.
188 void MoveCursorLeft(BreakType break_type, bool select); 191 void MoveCursorLeft(BreakType break_type, bool select);
189 void MoveCursorRight(BreakType break_type, bool select); 192 void MoveCursorRight(BreakType break_type, bool select);
(...skipping 29 matching lines...) Expand all
219 222
220 const ui::Range& GetCompositionRange() const; 223 const ui::Range& GetCompositionRange() const;
221 void SetCompositionRange(const ui::Range& composition_range); 224 void SetCompositionRange(const ui::Range& composition_range);
222 225
223 // Apply |style_range| to the internal style model. 226 // Apply |style_range| to the internal style model.
224 virtual void ApplyStyleRange(StyleRange style_range); 227 virtual void ApplyStyleRange(StyleRange style_range);
225 228
226 // Apply |default_style_| over the entire text range. 229 // Apply |default_style_| over the entire text range.
227 virtual void ApplyDefaultStyle(); 230 virtual void ApplyDefaultStyle();
228 231
229 base::i18n::TextDirection GetTextDirection() const; 232 virtual base::i18n::TextDirection GetTextDirection();
230 233
231 // Get the width of the entire string. 234 // Get the width of the entire string.
232 virtual int GetStringWidth(); 235 virtual int GetStringWidth();
233 236
234 virtual void Draw(Canvas* canvas); 237 virtual void Draw(Canvas* canvas);
235 238
236 // Gets the SelectionModel from a visual point in local coordinates. 239 // Gets the SelectionModel from a visual point in local coordinates.
237 virtual SelectionModel FindCursorPosition(const Point& point); 240 virtual SelectionModel FindCursorPosition(const Point& point);
238 241
239 // Get the visual bounds containing the logical substring within |from| to 242 // Get the visual bounds containing the logical substring within |from| to
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 virtual SelectionModel GetRightSelectionModel(const SelectionModel& current, 277 virtual SelectionModel GetRightSelectionModel(const SelectionModel& current,
275 BreakType break_type); 278 BreakType break_type);
276 279
277 // Get the logical index of the grapheme preceeding the argument |position|. 280 // Get the logical index of the grapheme preceeding the argument |position|.
278 virtual size_t GetIndexOfPreviousGrapheme(size_t position); 281 virtual size_t GetIndexOfPreviousGrapheme(size_t position);
279 282
280 // Apply composition style (underline) to composition range and selection 283 // Apply composition style (underline) to composition range and selection
281 // style (foreground) to selection range. 284 // style (foreground) to selection range.
282 void ApplyCompositionAndSelectionStyles(StyleRanges* style_ranges) const; 285 void ApplyCompositionAndSelectionStyles(StyleRanges* style_ranges) const;
283 286
287 // Convert points from the text space to the view space and back.
288 // Handles the display area, display offset, and the application LTR/RTL mode.
289 // TODO(xji): Remove the functions from RenderTextWin.
msw 2011/08/23 08:01:01 You don't need this TODO, I'll take care of mergin
xji 2011/08/23 23:52:52 removed.
290 Point ToTextPoint(const Point& point);
291 Point ToViewPoint(const Point& point);
292
284 private: 293 private:
285 friend class RenderTextTest; 294 friend class RenderTextTest;
286 295
287 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, DefaultStyle); 296 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, DefaultStyle);
288 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, CustomDefaultStyle); 297 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, CustomDefaultStyle);
289 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, ApplyStyleRange); 298 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, ApplyStyleRange);
290 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, StyleRangesAdjust); 299 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, StyleRangesAdjust);
291 300
292 // Clear out |style_ranges_|. 301 // Clear out |style_ranges_|.
293 void ClearStyleRanges(); 302 void ClearStyleRanges();
294 303
304 // Set the cursor to |position|, with the caret trailing the previous
305 // grapheme, or if there is no previous grapheme, leading the cursor position.
306 // If |select| is false, the selection start is moved to the same position.
307 void MoveCursorTo(size_t position, bool select);
308
295 bool IsPositionAtWordSelectionBoundary(size_t pos); 309 bool IsPositionAtWordSelectionBoundary(size_t pos);
296 310
297 // Update the cached bounds and display offset to ensure that the current 311 // Update the cached bounds and display offset to ensure that the current
298 // cursor is within the visible display area. 312 // cursor is within the visible display area.
299 void UpdateCachedBoundsAndOffset(); 313 void UpdateCachedBoundsAndOffset();
300 314
315 // Returns the selection model of selection_start_.
316 // The returned value represents a cursor/caret position without a selection.
317 SelectionModel GetSelectionModelForSelectionStart();
318
301 // Logical UTF-16 string data to be drawn. 319 // Logical UTF-16 string data to be drawn.
302 string16 text_; 320 string16 text_;
303 321
304 // Logical selection range and visual cursor position. 322 // Logical selection range and visual cursor position.
305 SelectionModel selection_model_; 323 SelectionModel selection_model_;
306 324
307 // The cached cursor bounds; get these bounds with GetUpdatedCursorBounds. 325 // The cached cursor bounds; get these bounds with GetUpdatedCursorBounds.
308 Rect cursor_bounds_; 326 Rect cursor_bounds_;
309 327
310 // The cursor visibility and insert mode. 328 // The cursor visibility and insert mode.
(...skipping 21 matching lines...) Expand all
332 // SetCursorPosition, SetSelectionModel, Font related style change, and other 350 // SetCursorPosition, SetSelectionModel, Font related style change, and other
333 // operations that adjust the visible text bounds. 351 // operations that adjust the visible text bounds.
334 bool cached_bounds_and_offset_valid_; 352 bool cached_bounds_and_offset_valid_;
335 353
336 DISALLOW_COPY_AND_ASSIGN(RenderText); 354 DISALLOW_COPY_AND_ASSIGN(RenderText);
337 }; 355 };
338 356
339 } // namespace gfx 357 } // namespace gfx
340 358
341 #endif // UI_GFX_RENDER_TEXT_H_ 359 #endif // UI_GFX_RENDER_TEXT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698