summaryrefslogtreecommitdiffstats
path: root/ui/gfx/render_text_win.cc
diff options
context:
space:
mode:
authorasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-04 14:50:00 +0000
committerasvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-04 14:50:00 +0000
commitf9905327d7243185ccde9f06a8a1f3e19c184b9e (patch)
tree35a3a7af39b4ada6da84d5f023799e91374b6d2b /ui/gfx/render_text_win.cc
parent1272b1e6790224afe68736fd7528caf0a9a921d9 (diff)
downloadchromium_src-f9905327d7243185ccde9f06a8a1f3e19c184b9e.zip
chromium_src-f9905327d7243185ccde9f06a8a1f3e19c184b9e.tar.gz
chromium_src-f9905327d7243185ccde9f06a8a1f3e19c184b9e.tar.bz2
Re-land: Use a common font baseline in RenderText classes.
This ensures the text in different runs gets aligned along a common bottom baseline and that the correct font's baseline gets used in case of font fallback. Original CL: http://codereview.chromium.org/9968040/ BUG=105550 TEST=none TBR=msw Review URL: https://chromiumcodereview.appspot.com/9982001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@130618 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/gfx/render_text_win.cc')
-rw-r--r--ui/gfx/render_text_win.cc8
1 files changed, 7 insertions, 1 deletions
diff --git a/ui/gfx/render_text_win.cc b/ui/gfx/render_text_win.cc
index 58c4d13..cee9738 100644
--- a/ui/gfx/render_text_win.cc
+++ b/ui/gfx/render_text_win.cc
@@ -179,6 +179,7 @@ std::map<std::string, std::vector<Font> > RenderTextWin::cached_linked_fonts_;
RenderTextWin::RenderTextWin()
: RenderText(),
+ common_baseline_(0),
needs_layout_(false) {
memset(&script_control_, 0, sizeof(script_control_));
memset(&script_state_, 0, sizeof(script_state_));
@@ -464,7 +465,10 @@ void RenderTextWin::EnsureLayout() {
void RenderTextWin::DrawVisualText(Canvas* canvas) {
DCHECK(!needs_layout_);
- Point offset(GetOriginForSkiaDrawing());
+ Point offset(GetOriginForDrawing());
+ // Skia will draw glyphs with respect to the baseline.
+ offset.Offset(0, common_baseline_);
+
SkScalar x = SkIntToScalar(offset.x());
SkScalar y = SkIntToScalar(offset.y());
@@ -518,6 +522,7 @@ void RenderTextWin::ItemizeLogicalText() {
STLDeleteContainerPointers(runs_.begin(), runs_.end());
runs_.clear();
string_size_ = Size(0, GetFont().GetHeight());
+ common_baseline_ = 0;
if (text().empty())
return;
@@ -684,6 +689,7 @@ void RenderTextWin::LayoutVisualText() {
DCHECK(SUCCEEDED(hr));
string_size_.set_height(std::max(string_size_.height(),
run->font.GetHeight()));
+ common_baseline_ = std::max(common_baseline_, run->font.GetBaseline());
if (run->glyph_count > 0) {
run->advance_widths.reset(new int[run->glyph_count]);