Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(212)

Side by Side Diff: third_party/WebKit/Source/platform/fonts/FontMetrics.h

Issue 2803483002: Adjust visual overflow rect for rounded/shifted ascent/descent (Closed)
Patch Set: - Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved. 2 * Copyright (C) Research In Motion Limited 2010-2011. All rights reserved.
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 28 matching lines...) Expand all
39 m_descent(0), 39 m_descent(0),
40 m_lineGap(0), 40 m_lineGap(0),
41 m_lineSpacing(0), 41 m_lineSpacing(0),
42 m_xHeight(0), 42 m_xHeight(0),
43 m_zeroWidth(0), 43 m_zeroWidth(0),
44 m_underlinethickness(0), 44 m_underlinethickness(0),
45 m_underlinePosition(0), 45 m_underlinePosition(0),
46 m_ascentInt(0), 46 m_ascentInt(0),
47 m_descentInt(0), 47 m_descentInt(0),
48 m_hasXHeight(false), 48 m_hasXHeight(false),
49 m_hasZeroWidth(false) {} 49 m_hasZeroWidth(false),
50 m_visualOverflowInflationForAscent(0),
51 m_visualOverflowInflationForDescent(0) {}
50 52
51 unsigned unitsPerEm() const { return m_unitsPerEm; } 53 unsigned unitsPerEm() const { return m_unitsPerEm; }
52 void setUnitsPerEm(unsigned unitsPerEm) { m_unitsPerEm = unitsPerEm; } 54 void setUnitsPerEm(unsigned unitsPerEm) { m_unitsPerEm = unitsPerEm; }
53 55
54 float floatAscent(FontBaseline baselineType = AlphabeticBaseline) const { 56 float floatAscent(FontBaseline baselineType = AlphabeticBaseline) const {
55 if (baselineType == AlphabeticBaseline) 57 if (baselineType == AlphabeticBaseline)
56 return m_ascent; 58 return m_ascent;
57 return floatHeight() / 2; 59 return floatHeight() / 2;
58 } 60 }
59 61
60 void setAscent(float ascent) { 62 void setAscent(float ascent) {
61 m_ascent = ascent; 63 m_ascent = ascent;
62 m_ascentInt = lroundf(ascent); 64 m_ascentInt = lroundf(ascent);
65 if (m_ascentInt < ascent)
66 m_visualOverflowInflationForAscent++;
eae 2017/04/07 17:41:57 FontMetrics already stores the rounded and unround
Xianzhu 2017/04/07 18:02:53 FontMetrics doesn't store the unrounded values in
63 } 67 }
64 68
65 float floatDescent(FontBaseline baselineType = AlphabeticBaseline) const { 69 float floatDescent(FontBaseline baselineType = AlphabeticBaseline) const {
66 if (baselineType == AlphabeticBaseline) 70 if (baselineType == AlphabeticBaseline)
67 return m_descent; 71 return m_descent;
68 return floatHeight() / 2; 72 return floatHeight() / 2;
69 } 73 }
70 74
71 void setDescent(float descent) { 75 void setDescent(float descent) {
72 m_descent = descent; 76 m_descent = descent;
73 m_descentInt = lroundf(descent); 77 m_descentInt = lroundf(descent);
78 if (m_descentInt < descent)
79 m_visualOverflowInflationForDescent++;
80 }
81
82 void setVisualOverflowInflations(int forAscent, int forDescent) {
83 m_visualOverflowInflationForAscent = forAscent;
84 m_visualOverflowInflationForDescent = forDescent;
85 }
86 int visualOverflowInflationForAscent() const {
87 return m_visualOverflowInflationForAscent;
88 }
89 int visualOverflowInflationForDescent() const {
90 return m_visualOverflowInflationForDescent;
74 } 91 }
75 92
76 float floatHeight(FontBaseline baselineType = AlphabeticBaseline) const { 93 float floatHeight(FontBaseline baselineType = AlphabeticBaseline) const {
77 return floatAscent() + floatDescent(); 94 return floatAscent() + floatDescent();
78 } 95 }
79 96
80 float floatLineGap() const { return m_lineGap; } 97 float floatLineGap() const { return m_lineGap; }
81 void setLineGap(float lineGap) { m_lineGap = lineGap; } 98 void setLineGap(float lineGap) { m_lineGap = lineGap; }
82 99
83 float floatLineSpacing() const { return m_lineSpacing; } 100 float floatLineSpacing() const { return m_lineSpacing; }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
160 m_ascent = 0; 177 m_ascent = 0;
161 m_descent = 0; 178 m_descent = 0;
162 m_ascentInt = 0; 179 m_ascentInt = 0;
163 m_descentInt = 0; 180 m_descentInt = 0;
164 m_lineGap = 0; 181 m_lineGap = 0;
165 m_lineSpacing = 0; 182 m_lineSpacing = 0;
166 m_xHeight = 0; 183 m_xHeight = 0;
167 m_hasXHeight = false; 184 m_hasXHeight = false;
168 m_underlinethickness = 0; 185 m_underlinethickness = 0;
169 m_underlinePosition = 0; 186 m_underlinePosition = 0;
187 m_visualOverflowInflationForAscent = 0;
188 m_visualOverflowInflationForDescent = 0;
170 } 189 }
171 190
172 unsigned m_unitsPerEm; 191 unsigned m_unitsPerEm;
173 float m_ascent; 192 float m_ascent;
174 float m_descent; 193 float m_descent;
175 float m_lineGap; 194 float m_lineGap;
176 float m_lineSpacing; 195 float m_lineSpacing;
177 float m_xHeight; 196 float m_xHeight;
178 float m_zeroWidth; 197 float m_zeroWidth;
179 float m_underlinethickness; 198 float m_underlinethickness;
180 float m_underlinePosition; 199 float m_underlinePosition;
181 int m_ascentInt; 200 int m_ascentInt;
182 int m_descentInt; 201 int m_descentInt;
183 bool m_hasXHeight; 202 bool m_hasXHeight;
184 bool m_hasZeroWidth; 203 bool m_hasZeroWidth;
204
205 // These are set to non-zero when ascent or descent is rounded or shifted
206 // to be smaller than the actual ascent or descent. When calculating visual
207 // overflows, we should add the inflations.
208 int m_visualOverflowInflationForAscent;
209 int m_visualOverflowInflationForDescent;
185 }; 210 };
186 211
187 } // namespace blink 212 } // namespace blink
188 213
189 #endif // FontMetrics_h 214 #endif // FontMetrics_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698