From 666eb27551d3fcc12b175d77490be9f8a3277b6c Mon Sep 17 00:00:00 2001 From: "jonlee@apple.com" Date: Thu, 19 Jan 2012 22:56:14 +0000 Subject: [PATCH] Add text-overflow support that allows placeholder and value text to show an ellipsis when not focused https://bugs.webkit.org/show_bug.cgi?id=76118 Reviewed by Dan Bernstein. Source/WebCore: Tests: fast/css/text-overflow-input-focus-placeholder-expected.html fast/css/text-overflow-input-focus-placeholder.html fast/css/text-overflow-input-focus-value-expected.html fast/css/text-overflow-input-focus-value.html fast/css/text-overflow-input.html * rendering/RenderTextControlSingleLine.cpp: (WebCore::RenderTextControlSingleLine::styleDidChange): When the style of the text control changes, we update the text overflow property of the placeholder. (WebCore::RenderTextControlSingleLine::createInnerTextStyle): When the style of the text control changes, we update the text overflow property of the inner text block. (WebCore::RenderTextControlSingleLine::textShouldBeTruncated): The text of the value and placeholder should only contain the ellipsis if the input's text-overflow property is set to ellipsis, and the input is not focused. * rendering/RenderTextControlSingleLine.h: LayoutTests: * fast/css/text-overflow-input-focus-placeholder-expected.html: Added. * fast/css/text-overflow-input-focus-placeholder.html: Added. * fast/css/text-overflow-input-focus-value-expected.html: Added. * fast/css/text-overflow-input-focus-value.html: Added. * fast/css/text-overflow-input.html: Added. New baselines: * platform/mac/fast/css/text-overflow-input-expected.png: Added. * platform/mac/fast/css/text-overflow-input-expected.txt: Added. Needs baselines: * platform/chromium/test_expectations.txt: * platform/gtk/test_expectations.txt: * platform/qt/test_expectations.txt: * platform/win/test_expectations.txt: git-svn-id: http://svn.webkit.org/repository/webkit/trunk@105451 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- LayoutTests/ChangeLog | 24 ++ ...-overflow-input-focus-placeholder-expected.html | 10 + .../css/text-overflow-input-focus-placeholder.html | 15 ++ .../text-overflow-input-focus-value-expected.html | 10 + .../fast/css/text-overflow-input-focus-value.html | 15 ++ LayoutTests/fast/css/text-overflow-input.html | 66 ++++++ .../platform/chromium/test_expectations.txt | 3 + LayoutTests/platform/gtk/test_expectations.txt | 3 + .../mac/fast/css/text-overflow-input-expected.png | Bin 0 -> 52493 bytes .../mac/fast/css/text-overflow-input-expected.txt | 242 +++++++++++++++++++++ LayoutTests/platform/qt/test_expectations.txt | 3 + LayoutTests/platform/win/test_expectations.txt | 3 + Source/WebCore/ChangeLog | 23 ++ .../rendering/RenderTextControlSingleLine.cpp | 10 + .../rendering/RenderTextControlSingleLine.h | 1 + 15 files changed, 428 insertions(+) create mode 100644 LayoutTests/fast/css/text-overflow-input-focus-placeholder-expected.html create mode 100644 LayoutTests/fast/css/text-overflow-input-focus-placeholder.html create mode 100644 LayoutTests/fast/css/text-overflow-input-focus-value-expected.html create mode 100644 LayoutTests/fast/css/text-overflow-input-focus-value.html create mode 100644 LayoutTests/fast/css/text-overflow-input.html create mode 100644 LayoutTests/platform/mac/fast/css/text-overflow-input-expected.png create mode 100644 LayoutTests/platform/mac/fast/css/text-overflow-input-expected.txt diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog index ae54ef3..d921d16 100644 --- a/LayoutTests/ChangeLog +++ b/LayoutTests/ChangeLog @@ -1,3 +1,27 @@ +2012-01-19 Jon Lee + + Add text-overflow support that allows placeholder and value text to show an ellipsis when not focused + https://bugs.webkit.org/show_bug.cgi?id=76118 + + + Reviewed by Dan Bernstein. + + * fast/css/text-overflow-input-focus-placeholder-expected.html: Added. + * fast/css/text-overflow-input-focus-placeholder.html: Added. + * fast/css/text-overflow-input-focus-value-expected.html: Added. + * fast/css/text-overflow-input-focus-value.html: Added. + * fast/css/text-overflow-input.html: Added. + + New baselines: + * platform/mac/fast/css/text-overflow-input-expected.png: Added. + * platform/mac/fast/css/text-overflow-input-expected.txt: Added. + + Needs baselines: + * platform/chromium/test_expectations.txt: + * platform/gtk/test_expectations.txt: + * platform/qt/test_expectations.txt: + * platform/win/test_expectations.txt: + 2012-01-19 Adam Barth Add a V8-specific baseline for fast/regex/syntax-errors.html. diff --git a/LayoutTests/fast/css/text-overflow-input-focus-placeholder-expected.html b/LayoutTests/fast/css/text-overflow-input-focus-placeholder-expected.html new file mode 100644 index 0000000..07bbc64 --- /dev/null +++ b/LayoutTests/fast/css/text-overflow-input-focus-placeholder-expected.html @@ -0,0 +1,10 @@ + + + +text-overflow + + +

This test makes sure that the ellipsis disappears on the placeholder when a text input is focused.

+ + + \ No newline at end of file diff --git a/LayoutTests/fast/css/text-overflow-input-focus-placeholder.html b/LayoutTests/fast/css/text-overflow-input-focus-placeholder.html new file mode 100644 index 0000000..a0dd4fa --- /dev/null +++ b/LayoutTests/fast/css/text-overflow-input-focus-placeholder.html @@ -0,0 +1,15 @@ + + + +text-overflow + + + +

This test makes sure that the ellipsis disappears on the placeholder when a text input is focused.

+ + + \ No newline at end of file diff --git a/LayoutTests/fast/css/text-overflow-input-focus-value-expected.html b/LayoutTests/fast/css/text-overflow-input-focus-value-expected.html new file mode 100644 index 0000000..873fab72 --- /dev/null +++ b/LayoutTests/fast/css/text-overflow-input-focus-value-expected.html @@ -0,0 +1,10 @@ + + + +text-overflow + + +

This test makes sure that the ellipsis disappears on the value when a text input is focused.

+ + + \ No newline at end of file diff --git a/LayoutTests/fast/css/text-overflow-input-focus-value.html b/LayoutTests/fast/css/text-overflow-input-focus-value.html new file mode 100644 index 0000000..d906001 --- /dev/null +++ b/LayoutTests/fast/css/text-overflow-input-focus-value.html @@ -0,0 +1,15 @@ + + + +text-overflow + + + +

This test makes sure that the ellipsis disappears on the value when a text input is focused.

+ + + \ No newline at end of file diff --git a/LayoutTests/fast/css/text-overflow-input.html b/LayoutTests/fast/css/text-overflow-input.html new file mode 100644 index 0000000..d9b4ba0 --- /dev/null +++ b/LayoutTests/fast/css/text-overflow-input.html @@ -0,0 +1,66 @@ + + + +text-overflow on form controls + + + +

This test is a basic check for using text-overflow.

+

+ Apply "text-overflow:clip" to inputs. The following input should be clipped:
+ + + + +
+ + + + + +

+

+ Apply "text-overflow:ellipsis" to inputs. The following input should show an ellipsis:
+ + + + +
+ + + + + +

+

+ Dynamic style change text-overflow:
+ Clip to ellipsis (should show ellipsis): + + +
+ Ellipsis to clip (should not show ellipsis): + + +
+ +

+ + \ No newline at end of file diff --git a/LayoutTests/platform/chromium/test_expectations.txt b/LayoutTests/platform/chromium/test_expectations.txt index 37bc892..20f1528 100644 --- a/LayoutTests/platform/chromium/test_expectations.txt +++ b/LayoutTests/platform/chromium/test_expectations.txt @@ -3892,6 +3892,9 @@ BUGWK65711 : svg/text/append-text-node-to-tspan.html = IMAGE+TEXT IMAGE // Uint8ClampedArray still not implemented. BUGWK74455 : fast/js/dfg-uint8clampedarray.html = TEXT +// Needs baseline +BUGWK76118 : fast/css/text-overflow-input.html = MISSING + // Text layout should have changed, kerning should look more natural. We previously didn't relayout // the text when moving to a new view target, and thus didn't update the scaledFont. BUGWK76446 : svg/custom/linking-a-03-b-all.svg = IMAGE+TEXT diff --git a/LayoutTests/platform/gtk/test_expectations.txt b/LayoutTests/platform/gtk/test_expectations.txt index f0b79d2..36deae5 100644 --- a/LayoutTests/platform/gtk/test_expectations.txt +++ b/LayoutTests/platform/gtk/test_expectations.txt @@ -99,4 +99,7 @@ BUGWK74270 : fast/forms/basic-selects.html = FAIL // New test, needs image results added. BUGWK75570 : http/tests/media/video-buffering-repaints-controls.html = IMAGE +// Needs baseline +BUGWK76118 : fast/css/text-overflow-input.html = MISSING + BUGWK76639 : fast/table/multiple-captions-crash3.html = IMAGE FAIL diff --git a/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.png b/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.png new file mode 100644 index 0000000000000000000000000000000000000000..7249e39bd230e3ba19f8e0037b6d455d4d870211 GIT binary patch literal 52493 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 ?a;_a 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 U^mc`%mH?;2u}2SSUr+z^FUIQM;Q#;t literal 0 HcmV?d00001 diff --git a/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.txt b/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.txt new file mode 100644 index 0000000..840e8a5 --- /dev/null +++ b/LayoutTests/platform/mac/fast/css/text-overflow-input-expected.txt @@ -0,0 +1,242 @@ +layer at (0,0) size 800x600 + RenderView at (0,0) size 800x600 +layer at (0,0) size 800x290 + RenderBlock {HTML} at (0,0) size 800x290 + RenderBody {BODY} at (8,16) size 784x258 + RenderBlock {P} at (0,0) size 784x18 + RenderText {#text} at (0,0) size 308x18 + text run at (0,0) width 308: "This test is a basic check for using text-overflow." + RenderBlock {P} at (0,34) size 784x64 + RenderText {#text} at (0,0) size 481x18 + text run at (0,0) width 481: "Apply \"text-overflow:clip\" to inputs. The following input should be clipped:" + RenderBR {BR} at (481,0) size 0x18 + RenderTextControl {INPUT} at (2,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (129,20) size 4x18 + text run at (129,20) width 4: " " + RenderTextControl {INPUT} at (135,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderDeprecatedFlexibleBox {DIV} at (3,3) size 119x13 + RenderBlock {DIV} at (0,1) size 8x11 + RenderBlock {DIV} at (8,0) size 98x13 + RenderBlock {DIV} at (106,1) size 13x11 + RenderText {#text} at (262,20) size 4x18 + text run at (262,20) width 4: " " + RenderTextControl {INPUT} at (268,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (395,20) size 4x18 + text run at (395,20) width 4: " " + RenderTextControl {INPUT} at (401,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderDeprecatedFlexibleBox {DIV} at (3,3) size 119x13 + RenderBlock {DIV} at (0,1) size 8x11 + RenderBlock {DIV} at (8,0) size 98x13 + RenderBlock {DIV} at (106,1) size 13x11 + RenderText {#text} at (528,20) size 4x18 + text run at (528,20) width 4: " " + RenderTextControl {INPUT} at (534,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderBR {BR} at (661,20) size 0x18 + RenderTextControl {INPUT} at (2,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (129,43) size 4x18 + text run at (129,43) width 4: " " + RenderTextControl {INPUT} at (135,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderDeprecatedFlexibleBox {DIV} at (3,3) size 119x13 + RenderBlock {DIV} at (0,1) size 8x11 + RenderBlock {DIV} at (8,0) size 98x13 + RenderBlock {DIV} at (106,1) size 13x11 + RenderText {#text} at (262,43) size 4x18 + text run at (262,43) width 4: " " + RenderTextControl {INPUT} at (268,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (395,43) size 4x18 + text run at (395,43) width 4: " " + RenderTextControl {INPUT} at (401,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderDeprecatedFlexibleBox {DIV} at (3,3) size 119x13 + RenderBlock {DIV} at (0,1) size 8x11 + RenderBlock {DIV} at (8,0) size 98x13 + RenderBlock {DIV} at (106,1) size 13x11 + RenderText {#text} at (528,43) size 4x18 + text run at (528,43) width 4: " " + RenderTextControl {INPUT} at (534,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (0,0) size 0x0 + RenderBlock {P} at (0,114) size 784x64 + RenderText {#text} at (0,0) size 536x18 + text run at (0,0) width 536: "Apply \"text-overflow:ellipsis\" to inputs. The following input should show an ellipsis:" + RenderBR {BR} at (536,0) size 0x18 + RenderTextControl {INPUT} at (2,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (129,20) size 4x18 + text run at (129,20) width 4: " " + RenderTextControl {INPUT} at (135,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderDeprecatedFlexibleBox {DIV} at (3,3) size 119x13 + RenderBlock {DIV} at (0,1) size 8x11 + RenderBlock {DIV} at (8,0) size 98x13 + RenderBlock {DIV} at (106,1) size 13x11 + RenderText {#text} at (262,20) size 4x18 + text run at (262,20) width 4: " " + RenderTextControl {INPUT} at (268,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (395,20) size 4x18 + text run at (395,20) width 4: " " + RenderTextControl {INPUT} at (401,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderDeprecatedFlexibleBox {DIV} at (3,3) size 119x13 + RenderBlock {DIV} at (0,1) size 8x11 + RenderBlock {DIV} at (8,0) size 98x13 + RenderBlock {DIV} at (106,1) size 13x11 + RenderText {#text} at (528,20) size 4x18 + text run at (528,20) width 4: " " + RenderTextControl {INPUT} at (534,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderBR {BR} at (661,20) size 0x18 + RenderTextControl {INPUT} at (2,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (129,43) size 4x18 + text run at (129,43) width 4: " " + RenderTextControl {INPUT} at (135,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderDeprecatedFlexibleBox {DIV} at (3,3) size 119x13 + RenderBlock {DIV} at (0,1) size 8x11 + RenderBlock {DIV} at (8,0) size 98x13 + RenderBlock {DIV} at (106,1) size 13x11 + RenderText {#text} at (262,43) size 4x18 + text run at (262,43) width 4: " " + RenderTextControl {INPUT} at (268,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (395,43) size 4x18 + text run at (395,43) width 4: " " + RenderTextControl {INPUT} at (401,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderDeprecatedFlexibleBox {DIV} at (3,3) size 119x13 + RenderBlock {DIV} at (0,1) size 8x11 + RenderBlock {DIV} at (8,0) size 98x13 + RenderBlock {DIV} at (106,1) size 13x11 + RenderText {#text} at (528,43) size 4x18 + text run at (528,43) width 4: " " + RenderTextControl {INPUT} at (534,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (0,0) size 0x0 + RenderBlock {P} at (0,194) size 784x64 + RenderText {#text} at (0,0) size 233x18 + text run at (0,0) width 233: "Dynamic style change text-overflow:" + RenderBR {BR} at (233,0) size 0x18 + RenderText {#text} at (0,20) size 239x18 + text run at (0,20) width 239: "Clip to ellipsis (should show ellipsis): " + RenderTextControl {INPUT} at (241,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (368,20) size 4x18 + text run at (368,20) width 4: " " + RenderTextControl {INPUT} at (374,20) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (501,20) size 4x18 + text run at (501,20) width 4: " " + RenderBR {BR} at (0,0) size 0x0 + RenderText {#text} at (0,43) size 262x18 + text run at (0,43) width 262: "Ellipsis to clip (should not show ellipsis): " + RenderTextControl {INPUT} at (264,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (391,43) size 4x18 + text run at (391,43) width 4: " " + RenderTextControl {INPUT} at (397,43) size 125x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] + RenderText {#text} at (524,43) size 4x18 + text run at (524,43) width 4: " " + RenderBR {BR} at (0,0) size 0x0 +layer at (13,73) size 119x13 + RenderBlock {DIV} at (3,3) size 119x13 +layer at (13,73) size 119x13 scrollWidth 298 + RenderBlock {DIV} at (3,3) size 119x13 [color=#A9A9A9] + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (154,73) size 98x13 + RenderBlock {DIV} at (0,0) size 98x13 +layer at (154,73) size 98x13 scrollWidth 298 + RenderBlock {DIV} at (11,3) size 98x13 [color=#A9A9A9] + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (279,73) size 119x13 scrollWidth 298 + RenderBlock {DIV} at (3,3) size 119x13 + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (420,73) size 98x13 scrollWidth 298 + RenderBlock {DIV} at (0,0) size 98x13 + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (545,73) size 119x13 scrollWidth 342 + RenderBlock {DIV} at (3,3) size 119x13 + RenderText {#text} at (1,0) size 340x13 + text run at (1,0) width 340: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" +layer at (13,96) size 119x13 + RenderBlock {DIV} at (3,3) size 119x13 +layer at (13,96) size 119x13 scrollX 178 scrollWidth 297 + RenderBlock {DIV} at (3,3) size 119x13 [color=#A9A9A9] + RenderText {#text} at (-177,0) size 296x13 + text run at (-177,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (154,96) size 98x13 + RenderBlock {DIV} at (0,0) size 98x13 +layer at (154,96) size 98x13 scrollX 199 scrollWidth 297 + RenderBlock {DIV} at (11,3) size 98x13 [color=#A9A9A9] + RenderText {#text} at (-198,0) size 296x13 + text run at (-198,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (279,96) size 119x13 scrollX 178 scrollWidth 297 + RenderBlock {DIV} at (3,3) size 119x13 + RenderText {#text} at (-177,0) size 296x13 + text run at (-177,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (420,96) size 98x13 scrollX 199 scrollWidth 297 + RenderBlock {DIV} at (0,0) size 98x13 + RenderText {#text} at (-198,0) size 296x13 + text run at (-198,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (545,96) size 119x13 scrollX 222 scrollWidth 341 + RenderBlock {DIV} at (3,3) size 119x13 + RenderText {#text} at (-221,0) size 340x13 + text run at (-221,0) width 339 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" +layer at (13,153) size 119x13 + RenderBlock {DIV} at (3,3) size 119x13 +layer at (13,153) size 119x13 scrollWidth 298 + RenderBlock {DIV} at (3,3) size 119x13 [color=#A9A9A9] + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (154,153) size 98x13 + RenderBlock {DIV} at (0,0) size 98x13 +layer at (154,153) size 98x13 scrollWidth 298 + RenderBlock {DIV} at (11,3) size 98x13 [color=#A9A9A9] + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (279,153) size 119x13 scrollWidth 298 + RenderBlock {DIV} at (3,3) size 119x13 + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (420,153) size 98x13 scrollWidth 298 + RenderBlock {DIV} at (0,0) size 98x13 + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (545,153) size 119x13 scrollWidth 342 + RenderBlock {DIV} at (3,3) size 119x13 + RenderText {#text} at (1,0) size 340x13 + text run at (1,0) width 340: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" +layer at (13,176) size 119x13 + RenderBlock {DIV} at (3,3) size 119x13 +layer at (13,176) size 119x13 scrollX 178 scrollWidth 297 + RenderBlock {DIV} at (3,3) size 119x13 [color=#A9A9A9] + RenderText {#text} at (-177,0) size 296x13 + text run at (-177,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (154,176) size 98x13 + RenderBlock {DIV} at (0,0) size 98x13 +layer at (154,176) size 98x13 scrollX 199 scrollWidth 297 + RenderBlock {DIV} at (11,3) size 98x13 [color=#A9A9A9] + RenderText {#text} at (-198,0) size 296x13 + text run at (-198,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (279,176) size 119x13 scrollX 178 scrollWidth 297 + RenderBlock {DIV} at (3,3) size 119x13 + RenderText {#text} at (-177,0) size 296x13 + text run at (-177,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (420,176) size 98x13 scrollX 199 scrollWidth 297 + RenderBlock {DIV} at (0,0) size 98x13 + RenderText {#text} at (-198,0) size 296x13 + text run at (-198,0) width 295: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (545,176) size 119x13 scrollX 222 scrollWidth 341 + RenderBlock {DIV} at (3,3) size 119x13 + RenderText {#text} at (-221,0) size 340x13 + text run at (-221,0) width 339 RTL: "\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}\x{2022}" +layer at (252,233) size 119x13 + RenderBlock {DIV} at (3,3) size 119x13 +layer at (252,233) size 119x13 scrollWidth 298 + RenderBlock {DIV} at (3,3) size 119x13 [color=#A9A9A9] + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (385,233) size 119x13 scrollWidth 298 + RenderBlock {DIV} at (3,3) size 119x13 + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (275,256) size 119x13 + RenderBlock {DIV} at (3,3) size 119x13 +layer at (275,256) size 119x13 scrollWidth 298 + RenderBlock {DIV} at (3,3) size 119x13 [color=#A9A9A9] + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" +layer at (408,256) size 119x13 scrollWidth 298 + RenderBlock {DIV} at (3,3) size 119x13 + RenderText {#text} at (1,0) size 296x13 + text run at (1,0) width 296: "Lorem ipsum dolor sit amet, consectetur adipiscing elit" diff --git a/LayoutTests/platform/qt/test_expectations.txt b/LayoutTests/platform/qt/test_expectations.txt index f20a512..c6aa334 100644 --- a/LayoutTests/platform/qt/test_expectations.txt +++ b/LayoutTests/platform/qt/test_expectations.txt @@ -24,3 +24,6 @@ BUGWK74270 : fast/forms/basic-selects.html = FAIL // The test hits an ASSERT in Debug. BUGWK68859 DEBUG : fast/dynamic/crash-paint-no-documentElement-renderer.html = CRASH + +// Needs baseline +BUGWK76118 : fast/css/text-overflow-input.html = MISSING diff --git a/LayoutTests/platform/win/test_expectations.txt b/LayoutTests/platform/win/test_expectations.txt index a34724c..50ed0c8 100644 --- a/LayoutTests/platform/win/test_expectations.txt +++ b/LayoutTests/platform/win/test_expectations.txt @@ -125,3 +125,6 @@ BUGWK74888 : fast/repaint/table-section-repaint.html = TEXT // New test, needs image results added. BUGWK75570 : http/tests/media/video-buffering-repaints-controls.html = IMAGE + +// Needs baseline +BUGWK76118 : fast/css/text-overflow-input.html = MISSING diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog index 9dedd90..d3a2a43 100755 --- a/Source/WebCore/ChangeLog +++ b/Source/WebCore/ChangeLog @@ -1,3 +1,26 @@ +2012-01-19 Jon Lee + + Add text-overflow support that allows placeholder and value text to show an ellipsis when not focused + https://bugs.webkit.org/show_bug.cgi?id=76118 + + + Reviewed by Dan Bernstein. + + Tests: fast/css/text-overflow-input-focus-placeholder-expected.html + fast/css/text-overflow-input-focus-placeholder.html + fast/css/text-overflow-input-focus-value-expected.html + fast/css/text-overflow-input-focus-value.html + fast/css/text-overflow-input.html + + * rendering/RenderTextControlSingleLine.cpp: + (WebCore::RenderTextControlSingleLine::styleDidChange): When the style of the text control + changes, we update the text overflow property of the placeholder. + (WebCore::RenderTextControlSingleLine::createInnerTextStyle): When the style of the text control + changes, we update the text overflow property of the inner text block. + (WebCore::RenderTextControlSingleLine::textShouldBeTruncated): The text of the value and placeholder should + only contain the ellipsis if the input's text-overflow property is set to ellipsis, and the input is not focused. + * rendering/RenderTextControlSingleLine.h: + 2012-01-19 Mark Hahnenberg Implement a new allocator for backing stores diff --git a/Source/WebCore/rendering/RenderTextControlSingleLine.cpp b/Source/WebCore/rendering/RenderTextControlSingleLine.cpp index cd6593f..912ee0c 100644 --- a/Source/WebCore/rendering/RenderTextControlSingleLine.cpp +++ b/Source/WebCore/rendering/RenderTextControlSingleLine.cpp @@ -26,6 +26,7 @@ #include "CSSFontSelector.h" #include "CSSStyleSelector.h" +#include "CSSValueKeywords.h" #include "Chrome.h" #include "Frame.h" #include "FrameSelection.h" @@ -330,6 +331,8 @@ void RenderTextControlSingleLine::styleDidChange(StyleDifference diff, const Ren containerRenderer->style()->setHeight(Length()); containerRenderer->style()->setWidth(Length()); } + if (HTMLElement* placeholder = inputElement()->placeholderElement()) + placeholder->ensureInlineStyleDecl()->setProperty(CSSPropertyTextOverflow, textShouldBeTruncated() ? CSSValueEllipsis : CSSValueClip); setHasOverflowClip(false); } @@ -490,6 +493,7 @@ PassRefPtr RenderTextControlSingleLine::createInnerTextStyle(const textBlockStyle->setWordWrap(NormalWordWrap); textBlockStyle->setOverflowX(OHIDDEN); textBlockStyle->setOverflowY(OHIDDEN); + textBlockStyle->setTextOverflow(textShouldBeTruncated() ? TextOverflowEllipsis : TextOverflowClip); if (m_desiredInnerTextHeight >= 0) textBlockStyle->setHeight(Length(m_desiredInnerTextHeight, Fixed)); @@ -542,6 +546,12 @@ EVisibility RenderTextControlSingleLine::visibilityForCancelButton() const return (style()->visibility() == HIDDEN || inputElement()->value().isEmpty()) ? HIDDEN : VISIBLE; } +bool RenderTextControlSingleLine::textShouldBeTruncated() const +{ + return document()->focusedNode() != node() + && style()->textOverflow() == TextOverflowEllipsis; +} + const AtomicString& RenderTextControlSingleLine::autosaveName() const { return static_cast(node())->getAttribute(autosaveAttr); diff --git a/Source/WebCore/rendering/RenderTextControlSingleLine.h b/Source/WebCore/rendering/RenderTextControlSingleLine.h index 83a64c1..554b77b 100644 --- a/Source/WebCore/rendering/RenderTextControlSingleLine.h +++ b/Source/WebCore/rendering/RenderTextControlSingleLine.h @@ -86,6 +86,7 @@ private: virtual RenderStyle* textBaseStyle() const; EVisibility visibilityForCancelButton() const; + bool textShouldBeTruncated() const; const AtomicString& autosaveName() const; // PopupMenuClient methods -- 2.7.4