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_pango.h" | 5 #include "ui/gfx/render_text_pango.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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
48 } | 48 } |
49 | 49 |
50 // Sets underline metrics on |renderer| according to Pango font |desc|. | 50 // Sets underline metrics on |renderer| according to Pango font |desc|. |
51 void SetPangoUnderlineMetrics(PangoFontDescription *desc, | 51 void SetPangoUnderlineMetrics(PangoFontDescription *desc, |
52 internal::SkiaTextRenderer* renderer) { | 52 internal::SkiaTextRenderer* renderer) { |
53 PangoFontMetrics* metrics = GetPangoFontMetrics(desc); | 53 PangoFontMetrics* metrics = GetPangoFontMetrics(desc); |
54 int thickness = pango_font_metrics_get_underline_thickness(metrics); | 54 int thickness = pango_font_metrics_get_underline_thickness(metrics); |
55 // Pango returns the position "above the baseline". Change its sign to convert | 55 // Pango returns the position "above the baseline". Change its sign to convert |
56 // it to a vertical offset from the baseline. | 56 // it to a vertical offset from the baseline. |
57 int position = -pango_font_metrics_get_underline_position(metrics); | 57 int position = -pango_font_metrics_get_underline_position(metrics); |
58 pango_quantize_line_geometry(&thickness, &position); | 58 |
59 // Note: pango_quantize_line_geometry() guarantees pixel boundaries, so | 59 // Note: pango_quantize_line_geometry() guarantees pixel boundaries, so |
60 // PANGO_PIXELS() is safe to use. | 60 // PANGO_PIXELS() is safe to use. |
61 renderer->SetUnderlineMetrics(PANGO_PIXELS(thickness), | 61 pango_quantize_line_geometry(&thickness, &position); |
62 PANGO_PIXELS(position)); | 62 int thickness_pixels = PANGO_PIXELS(thickness); |
63 int position_pixels = PANGO_PIXELS(position); | |
64 | |
65 // Ugly hack: make sure that underlines don't get clipped. See | |
66 // http://crbug.com/393117. | |
67 int descent_pixels = PANGO_PIXELS(pango_font_metrics_get_descent(metrics)); | |
Daniel Erat
2014/08/28 20:37:23
it's also possible that this isn't the right fix a
msw
2014/08/29 00:41:55
I honestly don't know the Pango underline code tha
| |
68 position_pixels = std::min(position_pixels, | |
69 descent_pixels - thickness_pixels); | |
70 | |
71 renderer->SetUnderlineMetrics(thickness_pixels, position_pixels); | |
63 } | 72 } |
64 | 73 |
65 } // namespace | 74 } // namespace |
66 | 75 |
67 // TODO(xji): index saved in upper layer is utf16 index. Pango uses utf8 index. | 76 // TODO(xji): index saved in upper layer is utf16 index. Pango uses utf8 index. |
68 // Since caret_pos is used internally, we could save utf8 index for caret_pos | 77 // Since caret_pos is used internally, we could save utf8 index for caret_pos |
69 // to avoid conversion. | 78 // to avoid conversion. |
70 | 79 |
71 RenderTextPango::RenderTextPango() | 80 RenderTextPango::RenderTextPango() |
72 : layout_(NULL), | 81 : layout_(NULL), |
(...skipping 430 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
503 int glyph_index) const { | 512 int glyph_index) const { |
504 return LayoutIndexToTextIndex(run->item->offset + | 513 return LayoutIndexToTextIndex(run->item->offset + |
505 run->glyphs->log_clusters[glyph_index]); | 514 run->glyphs->log_clusters[glyph_index]); |
506 } | 515 } |
507 | 516 |
508 RenderText* RenderText::CreateNativeInstance() { | 517 RenderText* RenderText::CreateNativeInstance() { |
509 return new RenderTextPango; | 518 return new RenderTextPango; |
510 } | 519 } |
511 | 520 |
512 } // namespace gfx | 521 } // namespace gfx |
OLD | NEW |