Changeset 60822 in webkit
- Timestamp:
- Jun 7, 2010 11:26:06 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 16 added
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r60805 r60822 1 2010-06-07 MORITA Hajime <morrita@google.com> 2 3 Reviewed by Kent Tamura. 4 5 [Mac] <meter> elements should be rendered as level indicators. 6 https://bugs.webkit.org/show_bug.cgi?id=40217 7 8 * fast/dom/HTMLMeterElement/meter-appearances-capacity.html: Added. 9 * fast/dom/HTMLMeterElement/meter-appearances-rating-relevancy.html: Added. 10 * fast/dom/HTMLMeterElement/meter-optimums.html: Added. 11 * platform/chromium/test_expectations.txt: 12 * platform/gtk/Skipped: 13 * platform/mac/Skipped: removed <meter> related tests. 14 * platform/mac/fast/dom/HTMLMeterElement/meter-appearances-capacity-expected.checksum: Added. 15 * platform/mac/fast/dom/HTMLMeterElement/meter-appearances-capacity-expected.png: Added. 16 * platform/mac/fast/dom/HTMLMeterElement/meter-appearances-capacity-expected.txt: Added. 17 * platform/mac/fast/dom/HTMLMeterElement/meter-appearances-rating-relevancy-expected.checksum: Added. 18 * platform/mac/fast/dom/HTMLMeterElement/meter-appearances-rating-relevancy-expected.png: Added. 19 * platform/mac/fast/dom/HTMLMeterElement/meter-appearances-rating-relevancy-expected.txt: Added. 20 * platform/mac/fast/dom/HTMLMeterElement/meter-element-expected.checksum: Added. 21 * platform/mac/fast/dom/HTMLMeterElement/meter-element-expected.png: Added. 22 * platform/mac/fast/dom/HTMLMeterElement/meter-element-expected.txt: Copied from LayoutTests/platform/qt/fast/dom/HTMLMeterElement/meter-element-expected.txt. 23 * platform/mac/fast/dom/HTMLMeterElement/meter-optimums-expected.checksum: Added. 24 * platform/mac/fast/dom/HTMLMeterElement/meter-optimums-expected.png: Added. 25 * platform/mac/fast/dom/HTMLMeterElement/meter-optimums-expected.txt: Added. 26 * platform/win/Skipped: 27 1 28 2010-06-07 Martin Robinson <mrobinson@igalia.com> 2 29 -
trunk/LayoutTests/platform/chromium/test_expectations.txt
r60706 r60822 2628 2628 BUGWK37074 DEFER : fast/dom/HTMLMeterElement/meter-element.html = MISSING 2629 2629 BUGWK37074 DEFER : fast/dom/HTMLMeterElement/set-meter-properties.html = TEXT 2630 BUGWK37074 DEFER : fast/dom/HTMLMeterElement/meter-appearances-capacity.html = MISSING 2631 BUGWK37074 DEFER : fast/dom/HTMLMeterElement/meter-appearances-rating-relevancy.html = MISSING 2632 BUGWK37074 DEFER : fast/dom/HTMLMeterElement/meter-optimums.html = MISSING 2630 2633 2631 2634 // WebKit roll 56004 -> 56026 -
trunk/LayoutTests/platform/gtk/Skipped
r60805 r60822 5697 5697 fast/dom/HTMLMeterElement/meter-element.html 5698 5698 fast/dom/HTMLMeterElement/set-meter-properties.html 5699 fast/dom/HTMLMeterElement/meter-appearances-capacity.html 5700 fast/dom/HTMLMeterElement/meter-appearances-rating-relevancy.html 5701 fast/dom/HTMLMeterElement/meter-optimums.html 5699 5702 5700 5703 # Needs mock support, and build slave Geolocation service -
trunk/LayoutTests/platform/mac/Skipped
r60685 r60822 136 136 # The animation causes the result of this test to depend on the speed of executing it, and that will cause it to be flaky 137 137 fast/dom/HTMLProgressElement/progress-element.html 138 139 # meter element is not supported140 fast/dom/HTMLMeterElement/meter-element.html141 fast/dom/HTMLMeterElement/set-meter-properties.html142 138 143 139 # event.dataTransfer.setData('text/uri-list') not correctly implemented on Mac -
trunk/LayoutTests/platform/win/Skipped
r60727 r60822 836 836 fast/dom/HTMLMeterElement/meter-element.html 837 837 fast/dom/HTMLMeterElement/set-meter-properties.html 838 fast/dom/HTMLMeterElement/meter-appearances-capacity.html 839 fast/dom/HTMLMeterElement/meter-appearances-rating-relevancy.html 840 fast/dom/HTMLMeterElement/meter-optimums.html 838 841 839 842 # No Widgets 1.0 support -
trunk/WebCore/ChangeLog
r60820 r60822 1 2010-06-07 MORITA Hajime <morrita@google.com> 2 3 Reviewed by Kent Tamura. 4 5 [Mac] <meter> elements should be rendered as level indicators. 6 https://bugs.webkit.org/show_bug.cgi?id=40217 7 8 Implemented RenderThemeMac::paintMeter() using NSLevelIndicatorCell. 9 10 This change also added new -webkit-appearance values to select the 11 style of level indicators: 12 13 - relevancy-level-indicator, 14 - continuous-capacity-level-indicator, 15 - discrete-capacity-level-indicator, and 16 - rating-level-indicator. 17 18 The size of elements are adjusted based on the bounds of the indicator 19 to make room for painting whole indicator cells. 20 21 Tests: fast/dom/HTMLMeterElement/meter-appearances-capacity.html 22 fast/dom/HTMLMeterElement/meter-appearances-rating-relevancy.html 23 fast/dom/HTMLMeterElement/meter-optimums.html 24 25 * css/CSSPrimitiveValueMappings.h: 26 (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): 27 * css/CSSValueKeywords.in: 28 * html/HTMLMeterElement.cpp: 29 (WebCore::HTMLMeterElement::gaugeRegion): 30 * html/HTMLMeterElement.h: 31 (WebCore::HTMLMeterElement::): 32 * platform/ThemeTypes.h: 33 (WebCore::): 34 * rendering/RenderMeter.cpp: 35 (WebCore::RenderMeter::calcWidth): 36 (WebCore::RenderMeter::calcHeight): 37 * rendering/RenderMeter.h: 38 * rendering/RenderTheme.cpp: 39 (WebCore::RenderTheme::adjustStyle): 40 (WebCore::RenderTheme::paint): 41 (WebCore::RenderTheme::paintBorderOnly): 42 (WebCore::RenderTheme::paintDecorations): 43 (WebCore::RenderTheme::meterSizeForBounds): 44 * rendering/RenderTheme.h: 45 * rendering/RenderThemeMac.h: 46 * rendering/RenderThemeMac.mm: 47 (WebCore::RenderThemeMac::meterSizeForBounds): 48 (WebCore::RenderThemeMac::paintMeter): 49 (WebCore::RenderThemeMac::levelIndicatorStyleFor): 50 (WebCore::RenderThemeMac::levelIndicatorFor): 51 1 52 2010-06-07 MORITA Hajime <morrita@google.com> 2 53 -
trunk/WebCore/css/CSSPrimitiveValueMappings.h
r59541 r60822 279 279 m_value.ident = CSSValueMeter; 280 280 break; 281 case RelevancyLevelIndicatorPart: 282 m_value.ident = CSSValueRelevancyLevelIndicator; 283 break; 284 case ContinuousCapacityLevelIndicatorPart: 285 m_value.ident = CSSValueContinuousCapacityLevelIndicator; 286 break; 287 case DiscreteCapacityLevelIndicatorPart: 288 m_value.ident = CSSValueDiscreteCapacityLevelIndicator; 289 break; 290 case RatingLevelIndicatorPart: 291 m_value.ident = CSSValueRatingLevelIndicator; 292 break; 281 293 case OuterSpinButtonPart: 282 294 m_value.ident = CSSValueOuterSpinButton; -
trunk/WebCore/css/CSSValueKeywords.in
r59541 r60822 605 605 searchfield-cancel-button 606 606 textfield 607 caps-lock-indicator 608 relevancy-level-indicator 609 continuous-capacity-level-indicator 610 discrete-capacity-level-indicator 611 rating-level-indicator 607 612 textarea 608 caps-lock-indicator609 613 610 614 # -
trunk/WebCore/html/HTMLMeterElement.cpp
r60799 r60822 164 164 } 165 165 166 HTMLMeterElement::GaugeRegion HTMLMeterElement::gaugeRegion() const 167 { 168 double lowValue = low(); 169 double highValue = high(); 170 double theValue = value(); 171 double optimumValue = optimum(); 172 173 if (optimumValue <= lowValue) { 174 // The optimum range stays under low 175 if (theValue <= lowValue) 176 return GaugeRegionOptimum; 177 if (theValue <= highValue) 178 return GaugeRegionSuboptimal; 179 return GaugeRegionEvenLessGood; 180 } 181 182 if (highValue <= optimumValue) { 183 // The optimum range stays over high 184 if (highValue <= theValue) 185 return GaugeRegionOptimum; 186 if (lowValue <= theValue) 187 return GaugeRegionSuboptimal; 188 return GaugeRegionEvenLessGood; 189 } 190 191 // The optimum range stays between high and low 192 if (lowValue < highValue && theValue < highValue) 193 return GaugeRegionOptimum; 194 if (theValue == min() || max() == theValue) 195 return GaugeRegionEvenLessGood; 196 return GaugeRegionSuboptimal; 197 } 198 166 199 } // namespace 167 200 #endif -
trunk/WebCore/html/HTMLMeterElement.h
r59773 r60822 31 31 static PassRefPtr<HTMLMeterElement> create(const QualifiedName&, Document*); 32 32 33 enum GaugeRegion { 34 GaugeRegionOptimum, 35 GaugeRegionSuboptimal, 36 GaugeRegionEvenLessGood 37 }; 38 33 39 double min() const; 34 40 void setMin(double, ExceptionCode&); … … 49 55 void setOptimum(double, ExceptionCode&); 50 56 57 GaugeRegion gaugeRegion() const; 51 58 private: 52 59 HTMLMeterElement(const QualifiedName&, Document*); -
trunk/WebCore/platform/ThemeTypes.h
r59541 r60822 57 57 SliderThumbVerticalPart, CaretPart, SearchFieldPart, SearchFieldDecorationPart, 58 58 SearchFieldResultsDecorationPart, SearchFieldResultsButtonPart, 59 SearchFieldCancelButtonPart, TextFieldPart, TextAreaPart, CapsLockIndicatorPart 59 SearchFieldCancelButtonPart, TextFieldPart, CapsLockIndicatorPart, 60 RelevancyLevelIndicatorPart, ContinuousCapacityLevelIndicatorPart, DiscreteCapacityLevelIndicatorPart, RatingLevelIndicatorPart, 61 TextAreaPart 60 62 }; 61 63 -
trunk/WebCore/rendering/RenderMeter.cpp
r59541 r60822 38 38 } 39 39 40 void RenderMeter::calcWidth() 41 { 42 RenderBox::calcWidth(); 43 setWidth(theme()->meterSizeForBounds(this, frameRect()).width()); 44 } 45 46 void RenderMeter::calcHeight() 47 { 48 RenderBox::calcHeight(); 49 setHeight(theme()->meterSizeForBounds(this, frameRect()).height()); 50 } 51 40 52 void RenderMeter::layout() 41 53 { -
trunk/WebCore/rendering/RenderMeter.h
r59541 r60822 39 39 virtual void layout(); 40 40 virtual void updateFromElement(); 41 virtual void calcWidth(); 42 virtual void calcHeight(); 41 43 }; 42 44 -
trunk/WebCore/rendering/RenderTheme.cpp
r60767 r60822 223 223 #if ENABLE(METER_TAG) 224 224 case MeterPart: 225 case RelevancyLevelIndicatorPart: 226 case ContinuousCapacityLevelIndicatorPart: 227 case DiscreteCapacityLevelIndicatorPart: 228 case RatingLevelIndicatorPart: 225 229 return adjustMeterStyle(selector, style, e); 226 230 #endif … … 285 289 #if ENABLE(METER_TAG) 286 290 case MeterPart: 291 case RelevancyLevelIndicatorPart: 292 case ContinuousCapacityLevelIndicatorPart: 293 case DiscreteCapacityLevelIndicatorPart: 294 case RatingLevelIndicatorPart: 287 295 return paintMeter(o, paintInfo, r); 288 296 #endif … … 383 391 #if ENABLE(METER_TAG) 384 392 case MeterPart: 393 case RelevancyLevelIndicatorPart: 394 case ContinuousCapacityLevelIndicatorPart: 395 case DiscreteCapacityLevelIndicatorPart: 396 case RatingLevelIndicatorPart: 385 397 #endif 386 398 #if ENABLE(PROGRESS_TAG) … … 424 436 #if ENABLE(METER_TAG) 425 437 case MeterPart: 438 case RelevancyLevelIndicatorPart: 439 case ContinuousCapacityLevelIndicatorPart: 440 case DiscreteCapacityLevelIndicatorPart: 441 case RatingLevelIndicatorPart: 426 442 #endif 427 443 #if ENABLE(PROGRESS_TAG) … … 892 908 { 893 909 style->setBoxShadow(0); 910 } 911 912 IntSize RenderTheme::meterSizeForBounds(const RenderMeter*, const IntRect& bounds) const 913 { 914 return bounds.size(); 894 915 } 895 916 -
trunk/WebCore/rendering/RenderTheme.h
r59541 r60822 40 40 class PopupMenu; 41 41 class RenderMenuList; 42 #if ENABLE(METER_TAG) 43 class RenderMeter; 44 #endif 42 45 #if ENABLE(PROGRESS_TAG) 43 46 class RenderProgress; … … 189 192 virtual String formatMediaControlsCurrentTime(float currentTime, float duration) const; 190 193 virtual String formatMediaControlsRemainingTime(float currentTime, float duration) const; 194 #endif 195 196 #if ENABLE(METER_TAG) 197 virtual IntSize meterSizeForBounds(const RenderMeter*, const IntRect&) const; 191 198 #endif 192 199 -
trunk/WebCore/rendering/RenderThemeMac.h
r58943 r60822 80 80 81 81 virtual bool paintCapsLockIndicator(RenderObject*, const RenderObject::PaintInfo&, const IntRect&); 82 83 #if ENABLE(METER_TAG) 84 virtual IntSize meterSizeForBounds(const RenderMeter*, const IntRect&) const; 85 virtual bool paintMeter(RenderObject*, const RenderObject::PaintInfo&, const IntRect&); 86 #endif 82 87 83 88 #if ENABLE(PROGRESS_TAG) … … 202 207 NSSliderCell* sliderThumbVertical() const; 203 208 209 #if ENABLE(METER_TAG) 210 NSLevelIndicatorStyle levelIndicatorStyleFor(ControlPart) const; 211 NSLevelIndicatorCell* levelIndicatorFor(const RenderMeter*) const; 212 #endif 213 204 214 private: 205 215 mutable RetainPtr<NSPopUpButtonCell> m_popupButton; … … 208 218 mutable RetainPtr<NSSliderCell> m_sliderThumbHorizontal; 209 219 mutable RetainPtr<NSSliderCell> m_sliderThumbVertical; 220 mutable RetainPtr<NSLevelIndicatorCell> m_levelIndicator; 210 221 211 222 bool m_isSliderThumbHorizontalPressed; -
trunk/WebCore/rendering/RenderThemeMac.mm
r60767 r60822 52 52 #import "RenderProgress.h" 53 53 54 #if ENABLE(METER_TAG) 55 #include "RenderMeter.h" 56 #include "HTMLMeterElement.h" 57 #endif 58 54 59 #ifdef BUILDING_ON_TIGER 55 60 typedef int NSInteger; … … 802 807 return false; 803 808 } 804 809 810 #if ENABLE(METER_TAG) 811 812 IntSize RenderThemeMac::meterSizeForBounds(const RenderMeter* renderMeter, const IntRect& bounds) const 813 { 814 if (NoControlPart == renderMeter->style()->appearance()) 815 return bounds.size(); 816 817 NSLevelIndicatorCell* cell = levelIndicatorFor(renderMeter); 818 // Makes enough room for cell's intrinsic size. 819 NSSize cellSize = [cell cellSizeForBounds:IntRect(IntPoint(), bounds.size())]; 820 return IntSize(bounds.width() < cellSize.width ? cellSize.width : bounds.width(), 821 bounds.height() < cellSize.height ? cellSize.height : bounds.height()); 822 } 823 824 bool RenderThemeMac::paintMeter(RenderObject* renderObject, const RenderObject::PaintInfo& paintInfo, const IntRect& rect) 825 { 826 if (!renderObject->isMeter()) 827 return true; 828 829 // Becaue NSLevelIndicatorCell doesn't support vertical gauge, we use a portable version 830 if (rect.width() < rect.height()) 831 return RenderTheme::paintMeter(renderObject, paintInfo, rect); 832 833 NSLevelIndicatorCell* cell = levelIndicatorFor(toRenderMeter(renderObject)); 834 paintInfo.context->save(); 835 [cell drawWithFrame:rect inView:documentViewFor(renderObject)]; 836 [cell setControlView:nil]; 837 paintInfo.context->restore(); 838 839 return false; 840 } 841 842 NSLevelIndicatorStyle RenderThemeMac::levelIndicatorStyleFor(ControlPart part) const 843 { 844 switch (part) { 845 case RelevancyLevelIndicatorPart: 846 return NSRelevancyLevelIndicatorStyle; 847 case DiscreteCapacityLevelIndicatorPart: 848 return NSDiscreteCapacityLevelIndicatorStyle; 849 case RatingLevelIndicatorPart: 850 return NSRatingLevelIndicatorStyle; 851 case MeterPart: 852 case ContinuousCapacityLevelIndicatorPart: 853 default: 854 return NSContinuousCapacityLevelIndicatorStyle; 855 } 856 857 } 858 859 NSLevelIndicatorCell* RenderThemeMac::levelIndicatorFor(const RenderMeter* renderMeter) const 860 { 861 RenderStyle* style = renderMeter->style(); 862 ASSERT(style->appearance() != NoControlPart); 863 864 if (!m_levelIndicator) 865 m_levelIndicator.adoptNS([[NSLevelIndicatorCell alloc] initWithLevelIndicatorStyle:NSContinuousCapacityLevelIndicatorStyle]); 866 NSLevelIndicatorCell* cell = m_levelIndicator.get(); 867 868 HTMLMeterElement* element = static_cast<HTMLMeterElement*>(renderMeter->node()); 869 double value = element->value(); 870 871 // Because NSLevelIndicatorCell does not support optimum-in-the-middle type coloring, 872 // we explicitly control the color instead giving low and high value to NSLevelIndicatorCell as is. 873 switch (element->gaugeRegion()) { 874 case HTMLMeterElement::GaugeRegionOptimum: 875 // Make meter the green 876 [cell setWarningValue:value + 1]; 877 [cell setCriticalValue:value + 2]; 878 break; 879 case HTMLMeterElement::GaugeRegionSuboptimal: 880 // Make the meter yellow 881 [cell setWarningValue:value - 1]; 882 [cell setCriticalValue:value + 1]; 883 break; 884 case HTMLMeterElement::GaugeRegionEvenLessGood: 885 // Make the meter red 886 [cell setWarningValue:value - 2]; 887 [cell setCriticalValue:value - 1]; 888 break; 889 } 890 891 [cell setLevelIndicatorStyle:levelIndicatorStyleFor(style->appearance())]; 892 [cell setBaseWritingDirection:style->direction() == LTR ? NSWritingDirectionLeftToRight : NSWritingDirectionRightToLeft]; 893 [cell setMinValue:element->min()]; 894 [cell setMaxValue:element->max()]; 895 RetainPtr<NSNumber> valueObject = [NSNumber numberWithDouble:value]; 896 [cell setObjectValue:valueObject.get()]; 897 898 return cell; 899 } 900 901 #endif 902 805 903 #if ENABLE(PROGRESS_TAG) 806 904
Note: See TracChangeset
for help on using the changeset viewer.