diff options
Diffstat (limited to 'layout')
-rw-r--r-- | layout/forms/nsComboboxControlFrame.cpp | 3 | ||||
-rw-r--r-- | layout/forms/test/test_issue1970_manual.html | 35 | ||||
-rw-r--r-- | layout/generic/ReflowInput.cpp | 11 | ||||
-rw-r--r-- | layout/generic/ReflowInput.h | 5 |
4 files changed, 53 insertions, 1 deletions
diff --git a/layout/forms/nsComboboxControlFrame.cpp b/layout/forms/nsComboboxControlFrame.cpp index 459c6f7ecc..2d0395d7a1 100644 --- a/layout/forms/nsComboboxControlFrame.cpp +++ b/layout/forms/nsComboboxControlFrame.cpp @@ -1322,7 +1322,8 @@ nsComboboxDisplayFrame::Reflow(nsPresContext* aPresContext, // Note that the only way we can have a computed block size here is // if the combobox had a specified block size. If it didn't, size // based on what our rows look like, for lack of anything better. - state.SetComputedBSize(mComboBox->mListControlFrame->GetBSizeOfARow()); + //state.SetComputedBSize(mComboBox->mListControlFrame->GetBSizeOfARow()); + state.SetLineHeight(state.mParentReflowInput->GetLineHeight()); } WritingMode wm = aReflowInput.GetWritingMode(); nscoord computedISize = mComboBox->mDisplayISize - diff --git a/layout/forms/test/test_issue1970_manual.html b/layout/forms/test/test_issue1970_manual.html new file mode 100644 index 0000000000..223c6e845d --- /dev/null +++ b/layout/forms/test/test_issue1970_manual.html @@ -0,0 +1,35 @@ +<!doctype html>
+<html>
+<head>
+<meta charset="utf-8">
+<style>
+.fontA {
+ font-family: "Noto Sans";
+}
+.fontB {
+ font-family: "Noto Sans CJK TC";
+}
+.fontC {
+ font-family: "WenQuanYi Zen Hei";
+}
+</style>
+</head>
+<body>
+<p>No clipping of the font glyphs should occur.</p>
+<select>
+ <option>Latin Text jpg</option>
+</select>
+<select>
+ <option>漢字 jpg</option>
+</select>
+<select class="fontA">
+ <option>漢字 jpg</option>
+</select>
+<select class="fontB">
+ <option>漢字 jpg</option>
+</select>
+<select class="fontC">
+ <option>漢字 jpg</option>
+</select>
+</body>
+</html>
\ No newline at end of file diff --git a/layout/generic/ReflowInput.cpp b/layout/generic/ReflowInput.cpp index f308ebcdf5..01f36cc9db 100644 --- a/layout/generic/ReflowInput.cpp +++ b/layout/generic/ReflowInput.cpp @@ -2813,6 +2813,17 @@ nscoord ReflowInput::GetLineHeight() const { nsLayoutUtils::FontSizeInflationFor(mFrame)); } +void ReflowInput::SetLineHeight(nscoord aLineHeight) { + MOZ_ASSERT(aLineHeight >= 0, "aLineHeight must be >= 0!"); + + if (mLineHeight != aLineHeight) { + mLineHeight = aLineHeight; + // Setting used line height can change a frame's block-size if mFrame's + // block-size behaves as auto. + InitResizeFlags(mFrame->PresContext(), mFrame->GetType()); + } +} + /* static */ nscoord ReflowInput::CalcLineHeight(nsIContent* aContent, nsStyleContext* aStyleContext, diff --git a/layout/generic/ReflowInput.h b/layout/generic/ReflowInput.h index d8e0518399..a70549d8eb 100644 --- a/layout/generic/ReflowInput.h +++ b/layout/generic/ReflowInput.h @@ -747,6 +747,11 @@ public: * Get the used line-height property. The return value will be >= 0. */ nscoord GetLineHeight() const; + + /** + * Set the used line-height. aLineHeight must be >= 0. + */ + void SetLineHeight(nscoord aLineHeight); /** * Calculate the used line-height property without a reflow input instance. |