| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "ui/gfx/render_text_linux.h" | 5 #include "ui/gfx/render_text_linux.h" |
| 6 | 6 |
| 7 #include <pango/pangocairo.h> | 7 #include <pango/pangocairo.h> |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 } | 76 } |
| 77 | 77 |
| 78 RenderTextLinux::~RenderTextLinux() { | 78 RenderTextLinux::~RenderTextLinux() { |
| 79 ResetLayout(); | 79 ResetLayout(); |
| 80 } | 80 } |
| 81 | 81 |
| 82 Size RenderTextLinux::GetStringSize() { | 82 Size RenderTextLinux::GetStringSize() { |
| 83 EnsureLayout(); | 83 EnsureLayout(); |
| 84 int width = 0, height = 0; | 84 int width = 0, height = 0; |
| 85 pango_layout_get_pixel_size(layout_, &width, &height); | 85 pango_layout_get_pixel_size(layout_, &width, &height); |
| 86 return Size(width, height); | 86 // Keep a consistent height between this particular string's PangoLayout and |
| 87 // potentially larger text supported by the FontList. |
| 88 return Size(width, std::max(height, font_list().GetHeight())); |
| 87 } | 89 } |
| 88 | 90 |
| 89 int RenderTextLinux::GetBaseline() { | 91 int RenderTextLinux::GetBaseline() { |
| 90 EnsureLayout(); | 92 EnsureLayout(); |
| 91 return PANGO_PIXELS(pango_layout_get_baseline(layout_)); | 93 // Keep a consistent baseline between this particular string's PangoLayout and |
| 94 // potentially larger text supported by the FontList. |
| 95 return std::max(PANGO_PIXELS(pango_layout_get_baseline(layout_)), |
| 96 font_list().GetBaseline()); |
| 92 } | 97 } |
| 93 | 98 |
| 94 SelectionModel RenderTextLinux::FindCursorPosition(const Point& point) { | 99 SelectionModel RenderTextLinux::FindCursorPosition(const Point& point) { |
| 95 EnsureLayout(); | 100 EnsureLayout(); |
| 96 | 101 |
| 97 if (text().empty()) | 102 if (text().empty()) |
| 98 return SelectionModel(0, CURSOR_FORWARD); | 103 return SelectionModel(0, CURSOR_FORWARD); |
| 99 | 104 |
| 100 Point p(ToTextPoint(point)); | 105 Point p(ToTextPoint(point)); |
| 101 | 106 |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 357 DCHECK(italic == styles()[ITALIC].breaks().end()); | 362 DCHECK(italic == styles()[ITALIC].breaks().end()); |
| 358 | 363 |
| 359 pango_layout_set_attributes(layout, attrs); | 364 pango_layout_set_attributes(layout, attrs); |
| 360 pango_attr_list_unref(attrs); | 365 pango_attr_list_unref(attrs); |
| 361 } | 366 } |
| 362 | 367 |
| 363 void RenderTextLinux::DrawVisualText(Canvas* canvas) { | 368 void RenderTextLinux::DrawVisualText(Canvas* canvas) { |
| 364 DCHECK(layout_); | 369 DCHECK(layout_); |
| 365 | 370 |
| 366 // Skia will draw glyphs with respect to the baseline. | 371 // Skia will draw glyphs with respect to the baseline. |
| 367 Vector2d offset(GetTextOffset() + | 372 Vector2d offset(GetTextOffset() + Vector2d(0, GetBaseline())); |
| 368 Vector2d(0, PANGO_PIXELS(pango_layout_get_baseline(layout_)))); | |
| 369 | 373 |
| 370 SkScalar x = SkIntToScalar(offset.x()); | 374 SkScalar x = SkIntToScalar(offset.x()); |
| 371 SkScalar y = SkIntToScalar(offset.y()); | 375 SkScalar y = SkIntToScalar(offset.y()); |
| 372 | 376 |
| 373 std::vector<SkPoint> pos; | 377 std::vector<SkPoint> pos; |
| 374 std::vector<uint16> glyphs; | 378 std::vector<uint16> glyphs; |
| 375 | 379 |
| 376 internal::SkiaTextRenderer renderer(canvas); | 380 internal::SkiaTextRenderer renderer(canvas); |
| 377 ApplyFadeEffects(&renderer); | 381 ApplyFadeEffects(&renderer); |
| 378 ApplyTextShadows(&renderer); | 382 ApplyTextShadows(&renderer); |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 int glyph_index) const { | 496 int glyph_index) const { |
| 493 return LayoutIndexToTextIndex(run->item->offset + | 497 return LayoutIndexToTextIndex(run->item->offset + |
| 494 run->glyphs->log_clusters[glyph_index]); | 498 run->glyphs->log_clusters[glyph_index]); |
| 495 } | 499 } |
| 496 | 500 |
| 497 RenderText* RenderText::CreateInstance() { | 501 RenderText* RenderText::CreateInstance() { |
| 498 return new RenderTextLinux; | 502 return new RenderTextLinux; |
| 499 } | 503 } |
| 500 | 504 |
| 501 } // namespace gfx | 505 } // namespace gfx |
| OLD | NEW |