| OLD | NEW |
| 1 /** | 1 /** |
| 2 * This file is part of the theme implementation for form controls in WebCore. | 2 * This file is part of the theme implementation for form controls in WebCore. |
| 3 * | 3 * |
| 4 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Computer, Inc. | 4 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2012 Apple Computer, Inc. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 #include "core/html/HTMLOptionElement.h" | 40 #include "core/html/HTMLOptionElement.h" |
| 41 #include "core/html/parser/HTMLParserIdioms.h" | 41 #include "core/html/parser/HTMLParserIdioms.h" |
| 42 #include "core/html/shadow/MediaControlElements.h" | 42 #include "core/html/shadow/MediaControlElements.h" |
| 43 #include "core/html/shadow/ShadowElementNames.h" | 43 #include "core/html/shadow/ShadowElementNames.h" |
| 44 #include "core/html/shadow/SpinButtonElement.h" | 44 #include "core/html/shadow/SpinButtonElement.h" |
| 45 #include "core/html/shadow/TextControlInnerElements.h" | 45 #include "core/html/shadow/TextControlInnerElements.h" |
| 46 #include "core/layout/LayoutMeter.h" | 46 #include "core/layout/LayoutMeter.h" |
| 47 #include "core/layout/LayoutView.h" | 47 #include "core/layout/LayoutView.h" |
| 48 #include "core/layout/PaintInfo.h" | 48 #include "core/layout/PaintInfo.h" |
| 49 #include "core/layout/style/AuthorStyleInfo.h" | 49 #include "core/layout/style/AuthorStyleInfo.h" |
| 50 #include "core/layout/style/LayoutStyle.h" | 50 #include "core/layout/style/ComputedStyle.h" |
| 51 #include "core/page/FocusController.h" | 51 #include "core/page/FocusController.h" |
| 52 #include "core/page/Page.h" | 52 #include "core/page/Page.h" |
| 53 #include "platform/FileMetadata.h" | 53 #include "platform/FileMetadata.h" |
| 54 #include "platform/FloatConversion.h" | 54 #include "platform/FloatConversion.h" |
| 55 #include "platform/RuntimeEnabledFeatures.h" | 55 #include "platform/RuntimeEnabledFeatures.h" |
| 56 #include "platform/fonts/FontSelector.h" | 56 #include "platform/fonts/FontSelector.h" |
| 57 #include "platform/graphics/GraphicsContextStateSaver.h" | 57 #include "platform/graphics/GraphicsContextStateSaver.h" |
| 58 #include "platform/text/PlatformLocale.h" | 58 #include "platform/text/PlatformLocale.h" |
| 59 #include "platform/text/StringTruncator.h" | 59 #include "platform/text/StringTruncator.h" |
| 60 #include "public/platform/Platform.h" | 60 #include "public/platform/Platform.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 81 } | 81 } |
| 82 | 82 |
| 83 LayoutTheme::LayoutTheme() | 83 LayoutTheme::LayoutTheme() |
| 84 : m_hasCustomFocusRingColor(false) | 84 : m_hasCustomFocusRingColor(false) |
| 85 #if USE(NEW_THEME) | 85 #if USE(NEW_THEME) |
| 86 , m_platformTheme(platformTheme()) | 86 , m_platformTheme(platformTheme()) |
| 87 #endif | 87 #endif |
| 88 { | 88 { |
| 89 } | 89 } |
| 90 | 90 |
| 91 void LayoutTheme::adjustStyle(LayoutStyle& style, Element* e, const AuthorStyleI
nfo& authorStyle) | 91 void LayoutTheme::adjustStyle(ComputedStyle& style, Element* e, const AuthorStyl
eInfo& authorStyle) |
| 92 { | 92 { |
| 93 ASSERT(style.hasAppearance()); | 93 ASSERT(style.hasAppearance()); |
| 94 | 94 |
| 95 // Force inline and table display styles to be inline-block (except for tabl
e- which is block) | 95 // Force inline and table display styles to be inline-block (except for tabl
e- which is block) |
| 96 ControlPart part = style.appearance(); | 96 ControlPart part = style.appearance(); |
| 97 if (style.display() == INLINE || style.display() == INLINE_TABLE || style.di
splay() == TABLE_ROW_GROUP | 97 if (style.display() == INLINE || style.display() == INLINE_TABLE || style.di
splay() == TABLE_ROW_GROUP |
| 98 || style.display() == TABLE_HEADER_GROUP || style.display() == TABLE_FOO
TER_GROUP | 98 || style.display() == TABLE_HEADER_GROUP || style.display() == TABLE_FOO
TER_GROUP |
| 99 || style.display() == TABLE_ROW || style.display() == TABLE_COLUMN_GROUP
|| style.display() == TABLE_COLUMN | 99 || style.display() == TABLE_ROW || style.display() == TABLE_COLUMN_GROUP
|| style.display() == TABLE_COLUMN |
| 100 || style.display() == TABLE_CELL || style.display() == TABLE_CAPTION) | 100 || style.display() == TABLE_CELL || style.display() == TABLE_CAPTION) |
| 101 style.setDisplay(INLINE_BLOCK); | 101 style.setDisplay(INLINE_BLOCK); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 LengthSize minControlSize = m_platformTheme->minimumControlSize(part, st
yle.font().fontDescription(), style.effectiveZoom()); | 179 LengthSize minControlSize = m_platformTheme->minimumControlSize(part, st
yle.font().fontDescription(), style.effectiveZoom()); |
| 180 if (minControlSize.width() != style.minWidth()) | 180 if (minControlSize.width() != style.minWidth()) |
| 181 style.setMinWidth(minControlSize.width()); | 181 style.setMinWidth(minControlSize.width()); |
| 182 if (minControlSize.height() != style.minHeight()) | 182 if (minControlSize.height() != style.minHeight()) |
| 183 style.setMinHeight(minControlSize.height()); | 183 style.setMinHeight(minControlSize.height()); |
| 184 | 184 |
| 185 // Font | 185 // Font |
| 186 FontDescription controlFont = m_platformTheme->controlFont(part, style.f
ont().fontDescription(), style.effectiveZoom()); | 186 FontDescription controlFont = m_platformTheme->controlFont(part, style.f
ont().fontDescription(), style.effectiveZoom()); |
| 187 if (controlFont != style.font().fontDescription()) { | 187 if (controlFont != style.font().fontDescription()) { |
| 188 // Reset our line-height | 188 // Reset our line-height |
| 189 style.setLineHeight(LayoutStyle::initialLineHeight()); | 189 style.setLineHeight(ComputedStyle::initialLineHeight()); |
| 190 | 190 |
| 191 // Now update our font. | 191 // Now update our font. |
| 192 if (style.setFontDescription(controlFont)) | 192 if (style.setFontDescription(controlFont)) |
| 193 style.font().update(nullptr); | 193 style.font().update(nullptr); |
| 194 } | 194 } |
| 195 } | 195 } |
| 196 default: | 196 default: |
| 197 break; | 197 break; |
| 198 } | 198 } |
| 199 #endif | 199 #endif |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 #endif | 541 #endif |
| 542 } | 542 } |
| 543 | 543 |
| 544 bool LayoutTheme::isControlContainer(ControlPart appearance) const | 544 bool LayoutTheme::isControlContainer(ControlPart appearance) const |
| 545 { | 545 { |
| 546 // There are more leaves than this, but we'll patch this function as we add
support for | 546 // There are more leaves than this, but we'll patch this function as we add
support for |
| 547 // more controls. | 547 // more controls. |
| 548 return appearance != CheckboxPart && appearance != RadioPart; | 548 return appearance != CheckboxPart && appearance != RadioPart; |
| 549 } | 549 } |
| 550 | 550 |
| 551 bool LayoutTheme::isControlStyled(const LayoutStyle& style, const AuthorStyleInf
o& authorStyle) const | 551 bool LayoutTheme::isControlStyled(const ComputedStyle& style, const AuthorStyleI
nfo& authorStyle) const |
| 552 { | 552 { |
| 553 switch (style.appearance()) { | 553 switch (style.appearance()) { |
| 554 case PushButtonPart: | 554 case PushButtonPart: |
| 555 case SquareButtonPart: | 555 case SquareButtonPart: |
| 556 case ButtonPart: | 556 case ButtonPart: |
| 557 case ProgressBarPart: | 557 case ProgressBarPart: |
| 558 case MeterPart: | 558 case MeterPart: |
| 559 case RelevancyLevelIndicatorPart: | 559 case RelevancyLevelIndicatorPart: |
| 560 case ContinuousCapacityLevelIndicatorPart: | 560 case ContinuousCapacityLevelIndicatorPart: |
| 561 case DiscreteCapacityLevelIndicatorPart: | 561 case DiscreteCapacityLevelIndicatorPart: |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 return true; | 593 return true; |
| 594 if (!renderer->styleRef().hasAppearance() && !node->isLink()) | 594 if (!renderer->styleRef().hasAppearance() && !node->isLink()) |
| 595 return true; | 595 return true; |
| 596 // We can't use LayoutTheme::isFocused because outline:auto might be | 596 // We can't use LayoutTheme::isFocused because outline:auto might be |
| 597 // specified to non-:focus rulesets. | 597 // specified to non-:focus rulesets. |
| 598 if (node->focused() && !node->shouldHaveFocusAppearance()) | 598 if (node->focused() && !node->shouldHaveFocusAppearance()) |
| 599 return false; | 599 return false; |
| 600 return true; | 600 return true; |
| 601 } | 601 } |
| 602 | 602 |
| 603 bool LayoutTheme::supportsFocusRing(const LayoutStyle& style) const | 603 bool LayoutTheme::supportsFocusRing(const ComputedStyle& style) const |
| 604 { | 604 { |
| 605 return (style.hasAppearance() && style.appearance() != TextFieldPart && styl
e.appearance() != TextAreaPart && style.appearance() != MenulistButtonPart && st
yle.appearance() != ListboxPart); | 605 return (style.hasAppearance() && style.appearance() != TextFieldPart && styl
e.appearance() != TextAreaPart && style.appearance() != MenulistButtonPart && st
yle.appearance() != ListboxPart); |
| 606 } | 606 } |
| 607 | 607 |
| 608 bool LayoutTheme::stateChanged(LayoutObject* o, ControlState state) const | 608 bool LayoutTheme::stateChanged(LayoutObject* o, ControlState state) const |
| 609 { | 609 { |
| 610 // Default implementation assumes the controls don't respond to changes in :
hover state | 610 // Default implementation assumes the controls don't respond to changes in :
hover state |
| 611 if (state == HoverControlState && !supportsHover(o->styleRef())) | 611 if (state == HoverControlState && !supportsHover(o->styleRef())) |
| 612 return false; | 612 return false; |
| 613 | 613 |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 735 { | 735 { |
| 736 Node* node = o->node(); | 736 Node* node = o->node(); |
| 737 if (!node || !node->isElementNode() || !toElement(node)->isSpinButtonElement
()) | 737 if (!node || !node->isElementNode() || !toElement(node)->isSpinButtonElement
()) |
| 738 return false; | 738 return false; |
| 739 SpinButtonElement* element = toSpinButtonElement(node); | 739 SpinButtonElement* element = toSpinButtonElement(node); |
| 740 return element->upDownState() == SpinButtonElement::Up; | 740 return element->upDownState() == SpinButtonElement::Up; |
| 741 } | 741 } |
| 742 | 742 |
| 743 #if !USE(NEW_THEME) | 743 #if !USE(NEW_THEME) |
| 744 | 744 |
| 745 void LayoutTheme::adjustCheckboxStyle(LayoutStyle& style, Element*) const | 745 void LayoutTheme::adjustCheckboxStyle(ComputedStyle& style, Element*) const |
| 746 { | 746 { |
| 747 // A summary of the rules for checkbox designed to match WinIE: | 747 // A summary of the rules for checkbox designed to match WinIE: |
| 748 // width/height - honored (WinIE actually scales its control for small width
s, but lets it overflow for small heights.) | 748 // width/height - honored (WinIE actually scales its control for small width
s, but lets it overflow for small heights.) |
| 749 // font-size - not honored (control has no text), but we use it to decide wh
ich control size to use. | 749 // font-size - not honored (control has no text), but we use it to decide wh
ich control size to use. |
| 750 setCheckboxSize(style); | 750 setCheckboxSize(style); |
| 751 | 751 |
| 752 // padding - not honored by WinIE, needs to be removed. | 752 // padding - not honored by WinIE, needs to be removed. |
| 753 style.resetPadding(); | 753 style.resetPadding(); |
| 754 | 754 |
| 755 // border - honored by WinIE, but looks terrible (just paints in the control
box and turns off the Windows XP theme) | 755 // border - honored by WinIE, but looks terrible (just paints in the control
box and turns off the Windows XP theme) |
| 756 // for now, we will not honor it. | 756 // for now, we will not honor it. |
| 757 style.resetBorder(); | 757 style.resetBorder(); |
| 758 } | 758 } |
| 759 | 759 |
| 760 void LayoutTheme::adjustRadioStyle(LayoutStyle& style, Element*) const | 760 void LayoutTheme::adjustRadioStyle(ComputedStyle& style, Element*) const |
| 761 { | 761 { |
| 762 // A summary of the rules for checkbox designed to match WinIE: | 762 // A summary of the rules for checkbox designed to match WinIE: |
| 763 // width/height - honored (WinIE actually scales its control for small width
s, but lets it overflow for small heights.) | 763 // width/height - honored (WinIE actually scales its control for small width
s, but lets it overflow for small heights.) |
| 764 // font-size - not honored (control has no text), but we use it to decide wh
ich control size to use. | 764 // font-size - not honored (control has no text), but we use it to decide wh
ich control size to use. |
| 765 setRadioSize(style); | 765 setRadioSize(style); |
| 766 | 766 |
| 767 // padding - not honored by WinIE, needs to be removed. | 767 // padding - not honored by WinIE, needs to be removed. |
| 768 style.resetPadding(); | 768 style.resetPadding(); |
| 769 | 769 |
| 770 // border - honored by WinIE, but looks terrible (just paints in the control
box and turns off the Windows XP theme) | 770 // border - honored by WinIE, but looks terrible (just paints in the control
box and turns off the Windows XP theme) |
| 771 // for now, we will not honor it. | 771 // for now, we will not honor it. |
| 772 style.resetBorder(); | 772 style.resetBorder(); |
| 773 } | 773 } |
| 774 | 774 |
| 775 void LayoutTheme::adjustButtonStyle(LayoutStyle& style, Element*) const | 775 void LayoutTheme::adjustButtonStyle(ComputedStyle& style, Element*) const |
| 776 { | 776 { |
| 777 } | 777 } |
| 778 | 778 |
| 779 void LayoutTheme::adjustInnerSpinButtonStyle(LayoutStyle&, Element*) const | 779 void LayoutTheme::adjustInnerSpinButtonStyle(ComputedStyle&, Element*) const |
| 780 { | 780 { |
| 781 } | 781 } |
| 782 #endif | 782 #endif |
| 783 | 783 |
| 784 void LayoutTheme::adjustMenuListStyle(LayoutStyle&, Element*) const | 784 void LayoutTheme::adjustMenuListStyle(ComputedStyle&, Element*) const |
| 785 { | 785 { |
| 786 } | 786 } |
| 787 | 787 |
| 788 IntSize LayoutTheme::meterSizeForBounds(const LayoutMeter*, const IntRect& bound
s) const | 788 IntSize LayoutTheme::meterSizeForBounds(const LayoutMeter*, const IntRect& bound
s) const |
| 789 { | 789 { |
| 790 return bounds.size(); | 790 return bounds.size(); |
| 791 } | 791 } |
| 792 | 792 |
| 793 bool LayoutTheme::supportsMeter(ControlPart) const | 793 bool LayoutTheme::supportsMeter(ControlPart) const |
| 794 { | 794 { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 818 double max = input->maximum(); | 818 double max = input->maximum(); |
| 819 ControlPart part = o->style()->appearance(); | 819 ControlPart part = o->style()->appearance(); |
| 820 // We don't support ticks on alternate sliders like MediaVolumeSliders. | 820 // We don't support ticks on alternate sliders like MediaVolumeSliders. |
| 821 if (part != SliderHorizontalPart && part != SliderVerticalPart) | 821 if (part != SliderHorizontalPart && part != SliderVerticalPart) |
| 822 return; | 822 return; |
| 823 bool isHorizontal = part == SliderHorizontalPart; | 823 bool isHorizontal = part == SliderHorizontalPart; |
| 824 | 824 |
| 825 IntSize thumbSize; | 825 IntSize thumbSize; |
| 826 LayoutObject* thumbRenderer = input->closedShadowRoot()->getElementById(Shad
owElementNames::sliderThumb())->layoutObject(); | 826 LayoutObject* thumbRenderer = input->closedShadowRoot()->getElementById(Shad
owElementNames::sliderThumb())->layoutObject(); |
| 827 if (thumbRenderer) { | 827 if (thumbRenderer) { |
| 828 const LayoutStyle& thumbStyle = thumbRenderer->styleRef(); | 828 const ComputedStyle& thumbStyle = thumbRenderer->styleRef(); |
| 829 int thumbWidth = thumbStyle.width().intValue(); | 829 int thumbWidth = thumbStyle.width().intValue(); |
| 830 int thumbHeight = thumbStyle.height().intValue(); | 830 int thumbHeight = thumbStyle.height().intValue(); |
| 831 thumbSize.setWidth(isHorizontal ? thumbWidth : thumbHeight); | 831 thumbSize.setWidth(isHorizontal ? thumbWidth : thumbHeight); |
| 832 thumbSize.setHeight(isHorizontal ? thumbHeight : thumbWidth); | 832 thumbSize.setHeight(isHorizontal ? thumbHeight : thumbWidth); |
| 833 } | 833 } |
| 834 | 834 |
| 835 IntSize tickSize = sliderTickSize(); | 835 IntSize tickSize = sliderTickSize(); |
| 836 float zoomFactor = o->style()->effectiveZoom(); | 836 float zoomFactor = o->style()->effectiveZoom(); |
| 837 FloatRect tickRect; | 837 FloatRect tickRect; |
| 838 int tickRegionSideMargin = 0; | 838 int tickRegionSideMargin = 0; |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 double LayoutTheme::animationDurationForProgressBar() const | 886 double LayoutTheme::animationDurationForProgressBar() const |
| 887 { | 887 { |
| 888 return 0; | 888 return 0; |
| 889 } | 889 } |
| 890 | 890 |
| 891 bool LayoutTheme::shouldHaveSpinButton(HTMLInputElement* inputElement) const | 891 bool LayoutTheme::shouldHaveSpinButton(HTMLInputElement* inputElement) const |
| 892 { | 892 { |
| 893 return inputElement->isSteppable() && inputElement->type() != InputTypeNames
::range; | 893 return inputElement->isSteppable() && inputElement->type() != InputTypeNames
::range; |
| 894 } | 894 } |
| 895 | 895 |
| 896 void LayoutTheme::adjustMenuListButtonStyle(LayoutStyle&, Element*) const | 896 void LayoutTheme::adjustMenuListButtonStyle(ComputedStyle&, Element*) const |
| 897 { | 897 { |
| 898 } | 898 } |
| 899 | 899 |
| 900 void LayoutTheme::adjustSliderThumbStyle(LayoutStyle& style, Element* element) c
onst | 900 void LayoutTheme::adjustSliderThumbStyle(ComputedStyle& style, Element* element)
const |
| 901 { | 901 { |
| 902 adjustSliderThumbSize(style, element); | 902 adjustSliderThumbSize(style, element); |
| 903 } | 903 } |
| 904 | 904 |
| 905 void LayoutTheme::adjustSliderThumbSize(LayoutStyle&, Element*) const | 905 void LayoutTheme::adjustSliderThumbSize(ComputedStyle&, Element*) const |
| 906 { | 906 { |
| 907 } | 907 } |
| 908 | 908 |
| 909 void LayoutTheme::adjustSearchFieldStyle(LayoutStyle&, Element*) const | 909 void LayoutTheme::adjustSearchFieldStyle(ComputedStyle&, Element*) const |
| 910 { | 910 { |
| 911 } | 911 } |
| 912 | 912 |
| 913 void LayoutTheme::adjustSearchFieldCancelButtonStyle(LayoutStyle&, Element*) con
st | 913 void LayoutTheme::adjustSearchFieldCancelButtonStyle(ComputedStyle&, Element*) c
onst |
| 914 { | 914 { |
| 915 } | 915 } |
| 916 | 916 |
| 917 void LayoutTheme::adjustSearchFieldDecorationStyle(LayoutStyle&, Element*) const | 917 void LayoutTheme::adjustSearchFieldDecorationStyle(ComputedStyle&, Element*) con
st |
| 918 { | 918 { |
| 919 } | 919 } |
| 920 | 920 |
| 921 void LayoutTheme::adjustSearchFieldResultsDecorationStyle(LayoutStyle&, Element*
) const | 921 void LayoutTheme::adjustSearchFieldResultsDecorationStyle(ComputedStyle&, Elemen
t*) const |
| 922 { | 922 { |
| 923 } | 923 } |
| 924 | 924 |
| 925 void LayoutTheme::platformColorsDidChange() | 925 void LayoutTheme::platformColorsDidChange() |
| 926 { | 926 { |
| 927 Page::platformColorsChanged(); | 927 Page::platformColorsChanged(); |
| 928 } | 928 } |
| 929 | 929 |
| 930 static FontDescription& getCachedFontDescription(CSSValueID systemFontID) | 930 static FontDescription& getCachedFontDescription(CSSValueID systemFontID) |
| 931 { | 931 { |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1118 bool LayoutTheme::supportsCalendarPicker(const AtomicString& type) const | 1118 bool LayoutTheme::supportsCalendarPicker(const AtomicString& type) const |
| 1119 { | 1119 { |
| 1120 return type == InputTypeNames::date | 1120 return type == InputTypeNames::date |
| 1121 || type == InputTypeNames::datetime | 1121 || type == InputTypeNames::datetime |
| 1122 || type == InputTypeNames::datetime_local | 1122 || type == InputTypeNames::datetime_local |
| 1123 || type == InputTypeNames::month | 1123 || type == InputTypeNames::month |
| 1124 || type == InputTypeNames::week; | 1124 || type == InputTypeNames::week; |
| 1125 } | 1125 } |
| 1126 #endif | 1126 #endif |
| 1127 | 1127 |
| 1128 bool LayoutTheme::shouldUseFallbackTheme(const LayoutStyle&) const | 1128 bool LayoutTheme::shouldUseFallbackTheme(const ComputedStyle&) const |
| 1129 { | 1129 { |
| 1130 return false; | 1130 return false; |
| 1131 } | 1131 } |
| 1132 | 1132 |
| 1133 void LayoutTheme::adjustStyleUsingFallbackTheme(LayoutStyle& style, Element* e) | 1133 void LayoutTheme::adjustStyleUsingFallbackTheme(ComputedStyle& style, Element* e
) |
| 1134 { | 1134 { |
| 1135 ControlPart part = style.appearance(); | 1135 ControlPart part = style.appearance(); |
| 1136 switch (part) { | 1136 switch (part) { |
| 1137 case CheckboxPart: | 1137 case CheckboxPart: |
| 1138 return adjustCheckboxStyleUsingFallbackTheme(style, e); | 1138 return adjustCheckboxStyleUsingFallbackTheme(style, e); |
| 1139 case RadioPart: | 1139 case RadioPart: |
| 1140 return adjustRadioStyleUsingFallbackTheme(style, e); | 1140 return adjustRadioStyleUsingFallbackTheme(style, e); |
| 1141 default: | 1141 default: |
| 1142 break; | 1142 break; |
| 1143 } | 1143 } |
| 1144 } | 1144 } |
| 1145 | 1145 |
| 1146 bool LayoutTheme::paintUsingFallbackTheme(LayoutObject* o, const PaintInfo& i, c
onst IntRect& r) | 1146 bool LayoutTheme::paintUsingFallbackTheme(LayoutObject* o, const PaintInfo& i, c
onst IntRect& r) |
| 1147 { | 1147 { |
| 1148 ControlPart part = o->style()->appearance(); | 1148 ControlPart part = o->style()->appearance(); |
| 1149 switch (part) { | 1149 switch (part) { |
| 1150 case CheckboxPart: | 1150 case CheckboxPart: |
| 1151 return paintCheckboxUsingFallbackTheme(o, i, r); | 1151 return paintCheckboxUsingFallbackTheme(o, i, r); |
| 1152 case RadioPart: | 1152 case RadioPart: |
| 1153 return paintRadioUsingFallbackTheme(o, i, r); | 1153 return paintRadioUsingFallbackTheme(o, i, r); |
| 1154 default: | 1154 default: |
| 1155 break; | 1155 break; |
| 1156 } | 1156 } |
| 1157 return true; | 1157 return true; |
| 1158 } | 1158 } |
| 1159 | 1159 |
| 1160 // static | 1160 // static |
| 1161 void LayoutTheme::setSizeIfAuto(LayoutStyle& style, const IntSize& size) | 1161 void LayoutTheme::setSizeIfAuto(ComputedStyle& style, const IntSize& size) |
| 1162 { | 1162 { |
| 1163 if (style.width().isIntrinsicOrAuto()) | 1163 if (style.width().isIntrinsicOrAuto()) |
| 1164 style.setWidth(Length(size.width(), Fixed)); | 1164 style.setWidth(Length(size.width(), Fixed)); |
| 1165 if (style.height().isAuto()) | 1165 if (style.height().isAuto()) |
| 1166 style.setHeight(Length(size.height(), Fixed)); | 1166 style.setHeight(Length(size.height(), Fixed)); |
| 1167 } | 1167 } |
| 1168 | 1168 |
| 1169 bool LayoutTheme::paintCheckboxUsingFallbackTheme(LayoutObject* o, const PaintIn
fo& i, const IntRect& r) | 1169 bool LayoutTheme::paintCheckboxUsingFallbackTheme(LayoutObject* o, const PaintIn
fo& i, const IntRect& r) |
| 1170 { | 1170 { |
| 1171 WebFallbackThemeEngine::ExtraParams extraParams; | 1171 WebFallbackThemeEngine::ExtraParams extraParams; |
| 1172 WebCanvas* canvas = i.context->canvas(); | 1172 WebCanvas* canvas = i.context->canvas(); |
| 1173 extraParams.button.checked = isChecked(o); | 1173 extraParams.button.checked = isChecked(o); |
| 1174 extraParams.button.indeterminate = isIndeterminate(o); | 1174 extraParams.button.indeterminate = isIndeterminate(o); |
| 1175 | 1175 |
| 1176 float zoomLevel = o->style()->effectiveZoom(); | 1176 float zoomLevel = o->style()->effectiveZoom(); |
| 1177 GraphicsContextStateSaver stateSaver(*i.context); | 1177 GraphicsContextStateSaver stateSaver(*i.context); |
| 1178 IntRect unzoomedRect = r; | 1178 IntRect unzoomedRect = r; |
| 1179 if (zoomLevel != 1) { | 1179 if (zoomLevel != 1) { |
| 1180 unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); | 1180 unzoomedRect.setWidth(unzoomedRect.width() / zoomLevel); |
| 1181 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); | 1181 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); |
| 1182 i.context->translate(unzoomedRect.x(), unzoomedRect.y()); | 1182 i.context->translate(unzoomedRect.x(), unzoomedRect.y()); |
| 1183 i.context->scale(zoomLevel, zoomLevel); | 1183 i.context->scale(zoomLevel, zoomLevel); |
| 1184 i.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); | 1184 i.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); |
| 1185 } | 1185 } |
| 1186 | 1186 |
| 1187 Platform::current()->fallbackThemeEngine()->paint(canvas, WebFallbackThemeEn
gine::PartCheckbox, getWebFallbackThemeState(this, o), WebRect(unzoomedRect), &e
xtraParams); | 1187 Platform::current()->fallbackThemeEngine()->paint(canvas, WebFallbackThemeEn
gine::PartCheckbox, getWebFallbackThemeState(this, o), WebRect(unzoomedRect), &e
xtraParams); |
| 1188 return false; | 1188 return false; |
| 1189 } | 1189 } |
| 1190 | 1190 |
| 1191 void LayoutTheme::adjustCheckboxStyleUsingFallbackTheme(LayoutStyle& style, Elem
ent*) const | 1191 void LayoutTheme::adjustCheckboxStyleUsingFallbackTheme(ComputedStyle& style, El
ement*) const |
| 1192 { | 1192 { |
| 1193 // If the width and height are both specified, then we have nothing to do. | 1193 // If the width and height are both specified, then we have nothing to do. |
| 1194 if (!style.width().isIntrinsicOrAuto() && !style.height().isAuto()) | 1194 if (!style.width().isIntrinsicOrAuto() && !style.height().isAuto()) |
| 1195 return; | 1195 return; |
| 1196 | 1196 |
| 1197 IntSize size = Platform::current()->fallbackThemeEngine()->getSize(WebFallba
ckThemeEngine::PartCheckbox); | 1197 IntSize size = Platform::current()->fallbackThemeEngine()->getSize(WebFallba
ckThemeEngine::PartCheckbox); |
| 1198 float zoomLevel = style.effectiveZoom(); | 1198 float zoomLevel = style.effectiveZoom(); |
| 1199 size.setWidth(size.width() * zoomLevel); | 1199 size.setWidth(size.width() * zoomLevel); |
| 1200 size.setHeight(size.height() * zoomLevel); | 1200 size.setHeight(size.height() * zoomLevel); |
| 1201 setSizeIfAuto(style, size); | 1201 setSizeIfAuto(style, size); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1223 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); | 1223 unzoomedRect.setHeight(unzoomedRect.height() / zoomLevel); |
| 1224 i.context->translate(unzoomedRect.x(), unzoomedRect.y()); | 1224 i.context->translate(unzoomedRect.x(), unzoomedRect.y()); |
| 1225 i.context->scale(zoomLevel, zoomLevel); | 1225 i.context->scale(zoomLevel, zoomLevel); |
| 1226 i.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); | 1226 i.context->translate(-unzoomedRect.x(), -unzoomedRect.y()); |
| 1227 } | 1227 } |
| 1228 | 1228 |
| 1229 Platform::current()->fallbackThemeEngine()->paint(canvas, WebFallbackThemeEn
gine::PartRadio, getWebFallbackThemeState(this, o), WebRect(unzoomedRect), &extr
aParams); | 1229 Platform::current()->fallbackThemeEngine()->paint(canvas, WebFallbackThemeEn
gine::PartRadio, getWebFallbackThemeState(this, o), WebRect(unzoomedRect), &extr
aParams); |
| 1230 return false; | 1230 return false; |
| 1231 } | 1231 } |
| 1232 | 1232 |
| 1233 void LayoutTheme::adjustRadioStyleUsingFallbackTheme(LayoutStyle& style, Element
*) const | 1233 void LayoutTheme::adjustRadioStyleUsingFallbackTheme(ComputedStyle& style, Eleme
nt*) const |
| 1234 { | 1234 { |
| 1235 // If the width and height are both specified, then we have nothing to do. | 1235 // If the width and height are both specified, then we have nothing to do. |
| 1236 if (!style.width().isIntrinsicOrAuto() && !style.height().isAuto()) | 1236 if (!style.width().isIntrinsicOrAuto() && !style.height().isAuto()) |
| 1237 return; | 1237 return; |
| 1238 | 1238 |
| 1239 IntSize size = Platform::current()->fallbackThemeEngine()->getSize(WebFallba
ckThemeEngine::PartRadio); | 1239 IntSize size = Platform::current()->fallbackThemeEngine()->getSize(WebFallba
ckThemeEngine::PartRadio); |
| 1240 float zoomLevel = style.effectiveZoom(); | 1240 float zoomLevel = style.effectiveZoom(); |
| 1241 size.setWidth(size.width() * zoomLevel); | 1241 size.setWidth(size.width() * zoomLevel); |
| 1242 size.setHeight(size.height() * zoomLevel); | 1242 size.setHeight(size.height() * zoomLevel); |
| 1243 setSizeIfAuto(style, size); | 1243 setSizeIfAuto(style, size); |
| 1244 | 1244 |
| 1245 // padding - not honored by WinIE, needs to be removed. | 1245 // padding - not honored by WinIE, needs to be removed. |
| 1246 style.resetPadding(); | 1246 style.resetPadding(); |
| 1247 | 1247 |
| 1248 // border - honored by WinIE, but looks terrible (just paints in the control
box and turns off the Windows XP theme) | 1248 // border - honored by WinIE, but looks terrible (just paints in the control
box and turns off the Windows XP theme) |
| 1249 // for now, we will not honor it. | 1249 // for now, we will not honor it. |
| 1250 style.resetBorder(); | 1250 style.resetBorder(); |
| 1251 } | 1251 } |
| 1252 | 1252 |
| 1253 } // namespace blink | 1253 } // namespace blink |
| OLD | NEW |