Index: ui/gfx/render_text_mac.h |
=================================================================== |
--- ui/gfx/render_text_mac.h (revision 0) |
+++ ui/gfx/render_text_mac.h (revision 0) |
@@ -0,0 +1,96 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef UI_GFX_RENDER_TEXT_MAC_H_ |
+#define UI_GFX_RENDER_TEXT_MAC_H_ |
+ |
+#include <ApplicationServices/ApplicationServices.h> |
+ |
+#include <string> |
+#include <vector> |
+ |
+#include "base/mac/scoped_cftyperef.h" |
+#include "ui/gfx/render_text.h" |
+ |
+namespace gfx { |
+ |
+// RenderTextMac is the Mac implementation of RenderText that uses CoreText for |
+// layout and Skia for drawing. |
+// |
+// Note: The current implementation only supports drawing and sizing the text, |
+// but not text selection or cursor movement. |
+class RenderTextMac : public RenderText { |
+ public: |
+ RenderTextMac(); |
+ virtual ~RenderTextMac(); |
+ |
+ // Overridden from RenderText: |
+ virtual base::i18n::TextDirection GetTextDirection() OVERRIDE; |
+ virtual Size GetStringSize() OVERRIDE; |
+ virtual int GetBaseline() OVERRIDE; |
+ virtual SelectionModel FindCursorPosition(const Point& point) OVERRIDE; |
+ virtual std::vector<FontSpan> GetFontSpansForTesting() OVERRIDE; |
+ |
+ protected: |
+ // Overridden from RenderText: |
+ virtual SelectionModel AdjacentCharSelectionModel( |
+ const SelectionModel& selection, |
+ VisualCursorDirection direction) OVERRIDE; |
+ virtual SelectionModel AdjacentWordSelectionModel( |
+ const SelectionModel& selection, |
+ VisualCursorDirection direction) OVERRIDE; |
+ virtual void GetGlyphBounds(size_t index, |
+ ui::Range* xspan, |
+ int* height) OVERRIDE; |
+ virtual std::vector<Rect> GetSubstringBounds(ui::Range range) OVERRIDE; |
+ virtual bool IsCursorablePosition(size_t position) OVERRIDE; |
+ virtual void ResetLayout() OVERRIDE; |
+ virtual void EnsureLayout() OVERRIDE; |
+ virtual void DrawVisualText(Canvas* canvas) OVERRIDE; |
+ |
+ private: |
+ struct TextRun { |
+ CTRunRef ct_run; |
+ SkPoint origin; |
+ std::vector<uint16> glyphs; |
+ std::vector<SkPoint> glyph_positions; |
+ SkScalar width; |
+ std::string font_name; |
+ int font_style; |
+ SkScalar text_size; |
+ SkColor foreground; |
+ StyleRange style; |
+ |
+ TextRun(); |
+ ~TextRun(); |
+ }; |
+ |
+ // Applies RenderText styles to |attr_string| with the given |ct_font|. |
+ void ApplyStyles(CFMutableAttributedStringRef attr_string, CTFontRef ct_font); |
+ |
+ // Updates |runs_| based on |line_| and sets |runs_valid_| to true. |
+ void ComputeRuns(); |
+ |
+ // The Core Text line of text. Created by |EnsureLayout()|. |
+ base::mac::ScopedCFTypeRef<CTLineRef> line_; |
+ |
+ // Visual dimensions of the text. Computed by |EnsureLayout()|. |
+ Size string_size_; |
+ |
+ // Common baseline for this line of text. Computed by |EnsureLayout()|. |
+ SkScalar common_baseline_; |
+ |
+ // Visual text runs. Only valid if |runs_valid_| is true. Computed by |
+ // |ComputeRuns()|. |
+ std::vector<TextRun> runs_; |
+ |
+ // Indicates that |runs_| are valid, set by |ComputeRuns()|. |
+ bool runs_valid_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(RenderTextMac); |
+}; |
+ |
+} // namespace gfx |
+ |
+#endif // UI_GFX_RENDER_TEXT_MAC_H_ |