diff options
author | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-04 14:50:00 +0000 |
---|---|---|
committer | asvitkine@chromium.org <asvitkine@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-04 14:50:00 +0000 |
commit | f9905327d7243185ccde9f06a8a1f3e19c184b9e (patch) | |
tree | 35a3a7af39b4ada6da84d5f023799e91374b6d2b /ui/gfx/render_text_win.cc | |
parent | 1272b1e6790224afe68736fd7528caf0a9a921d9 (diff) | |
download | chromium_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.cc | 8 |
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]); |