Changeset 68864 in webkit
- Timestamp:
- Sep 30, 2010 10:09:08 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r68862 r68864 1 2010-09-30 Kent Tamura <tkent@chromium.org> 2 3 Reviewed by Chris Fleizach. 4 5 [Windows] Implement <input type=number> UI 6 https://bugs.webkit.org/show_bug.cgi?id=38381 7 8 Implement theme drawing for inner-spin-button. 9 No new tests. Existing tests for type=number will cover this change. 10 11 * rendering/RenderThemeWin.cpp: 12 (WebCore::RenderThemeWin::RenderThemeWin): 13 Handle m_spinButtonTheme. 14 (WebCore::RenderThemeWin::spinButtonTheme): ditto. 15 (WebCore::RenderThemeWin::close): ditto. 16 (WebCore::RenderThemeWin::determineClassicState): 17 Add ControlSubPart parameter, and add support for InnerSpinButtonPart. 18 (WebCore::RenderThemeWin::determineSpinButtonState): Added. 19 (WebCore::RenderThemeWin::getClassicThemeData): 20 Add ControlSubPart parameter, and handle InnerSpinButtonPart. 21 (WebCore::RenderThemeWin::getThemeData): ditto. 22 (WebCore::RenderThemeWin::adjustInnerSpinButtonStyle): 23 Set SM_CXVSCROLL value to the width. 24 (WebCore::RenderThemeWin::paintInnerSpinButton): 25 Call drawControl() for the upper part and the lower part. 26 * rendering/RenderThemeWin.h: 27 1 28 2010-09-30 Kent Tamura <tkent@chromium.org> 2 29 -
trunk/WebCore/rendering/RenderThemeWin.cpp
r67251 r68864 93 93 #define PBS_DEFAULTED 5 94 94 95 // Spin button parts 96 #define SPNP_UP 1 97 #define SPNP_DOWN 2 98 99 // Spin button states 100 #define DNS_NORMAL 1 101 #define DNS_HOT 2 102 #define DNS_PRESSED 3 103 #define DNS_DISABLED 4 104 #define UPS_NORMAL 1 105 #define UPS_HOT 2 106 #define UPS_PRESSED 3 107 #define UPS_DISABLED 4 108 109 95 110 SOFT_LINK_LIBRARY(uxtheme) 96 111 SOFT_LINK(uxtheme, OpenThemeData, HANDLE, WINAPI, (HWND hwnd, LPCWSTR pszClassList), (hwnd, pszClassList)) … … 155 170 , m_menuListTheme(0) 156 171 , m_sliderTheme(0) 172 , m_spinButtonTheme(0) 157 173 { 158 174 haveTheme = uxthemeLibrary() && IsThemeActive(); … … 193 209 m_sliderTheme = OpenThemeData(0, L"TrackBar"); 194 210 return m_sliderTheme; 211 } 212 213 HANDLE RenderThemeWin::spinButtonTheme() const 214 { 215 if (haveTheme && !m_spinButtonTheme) 216 m_spinButtonTheme = OpenThemeData(0, L"Spin"); 217 return m_spinButtonTheme; 195 218 } 196 219 … … 206 229 if (m_sliderTheme) 207 230 CloseThemeData(m_sliderTheme); 208 m_buttonTheme = m_textFieldTheme = m_menuListTheme = m_sliderTheme = 0; 231 if (m_spinButtonTheme) 232 CloseThemeData(m_spinButtonTheme); 233 m_buttonTheme = m_textFieldTheme = m_menuListTheme = m_sliderTheme = m_spinButtonTheme = 0; 209 234 210 235 haveTheme = uxthemeLibrary() && IsThemeActive(); … … 369 394 } 370 395 371 unsigned RenderThemeWin::determineClassicState(RenderObject* o )396 unsigned RenderThemeWin::determineClassicState(RenderObject* o, ControlSubPart subPart) 372 397 { 373 398 unsigned state = 0; … … 398 423 else if (isPressed(o)) 399 424 state |= DFCS_PUSHED; 425 break; 426 case InnerSpinButtonPart: { 427 bool isUpButton = subPart == SpinButtonUp; 428 state = isUpButton ? DFCS_SCROLLUP : DFCS_SCROLLDOWN; 429 if (!isEnabled(o) || isReadOnlyControl(o)) 430 state |= DFCS_INACTIVE; 431 else if (isPressed(o) && isUpButton == isSpinUpButtonPartPressed(o)) 432 state |= DFCS_PUSHED; 433 else if (isHovered(o) && isUpButton == isSpinUpButtonPartHovered(o)) 434 state |= DFCS_HOT; 435 break; 436 } 400 437 default: 401 438 break; … … 453 490 } 454 491 455 ThemeData RenderThemeWin::getClassicThemeData(RenderObject* o) 492 unsigned RenderThemeWin::determineSpinButtonState(RenderObject* o, ControlSubPart subPart) 493 { 494 bool isUpButton = subPart == SpinButtonUp; 495 unsigned result = isUpButton ? UPS_NORMAL : DNS_NORMAL; 496 if (!isEnabled(o) || isReadOnlyControl(o)) 497 result = isUpButton ? UPS_DISABLED : DNS_DISABLED; 498 else if (isPressed(o) && isUpButton == isSpinUpButtonPartPressed(o)) 499 result = isUpButton ? UPS_PRESSED : DNS_PRESSED; 500 else if (isHovered(o) && isUpButton == isSpinUpButtonPartHovered(o)) 501 result = isUpButton ? UPS_HOT : DNS_HOT; 502 return result; 503 } 504 505 ThemeData RenderThemeWin::getClassicThemeData(RenderObject* o, ControlSubPart subPart) 456 506 { 457 507 ThemeData result; … … 491 541 result.m_state = determineSliderThumbState(o); 492 542 break; 543 case InnerSpinButtonPart: 544 result.m_part = DFC_SCROLL; 545 result.m_state = determineClassicState(o, subPart); 546 break; 493 547 default: 494 548 break; … … 497 551 } 498 552 499 ThemeData RenderThemeWin::getThemeData(RenderObject* o )553 ThemeData RenderThemeWin::getThemeData(RenderObject* o, ControlSubPart subPart) 500 554 { 501 555 if (!haveTheme) 502 return getClassicThemeData(o );556 return getClassicThemeData(o, subPart); 503 557 504 558 ThemeData result; … … 549 603 result.m_part = TKP_THUMBRIGHT; 550 604 result.m_state = determineSliderThumbState(o); 605 break; 606 case InnerSpinButtonPart: 607 result.m_part = subPart == SpinButtonUp ? SPNP_UP : SPNP_DOWN; 608 result.m_state = determineSpinButtonState(o, subPart); 551 609 break; 552 610 } … … 619 677 } 620 678 679 void RenderThemeWin::adjustInnerSpinButtonStyle(CSSStyleSelector* selector, RenderStyle* style, Element* e) const 680 { 681 int width = ::GetSystemMetrics(SM_CXVSCROLL); 682 if (width <= 0) 683 width = 17; // Vista's default. 684 style->setWidth(Length(width, Fixed)); 685 style->setMinWidth(Length(width, Fixed)); 686 } 687 688 bool RenderThemeWin::paintInnerSpinButton(RenderObject* o, const PaintInfo& i, const IntRect& r) 689 { 690 // We split the specified rectangle into two vertically. We can't draw a 691 // spin button of which height is less than 2px. 692 if (r.height() < 2) 693 return false; 694 IntRect upRect(r); 695 upRect.setHeight(r.height() / 2); 696 IntRect downRect(r); 697 downRect.setY(upRect.bottom()); 698 downRect.setHeight(r.height() - upRect.height()); 699 drawControl(i.context, o, spinButtonTheme(), getThemeData(o, SpinButtonUp), upRect); 700 drawControl(i.context, o, spinButtonTheme(), getThemeData(o, SpinButtonDown), downRect); 701 return false; 702 } 703 621 704 void RenderThemeWin::setCheckboxSize(RenderStyle* style) const 622 705 { -
trunk/WebCore/rendering/RenderThemeWin.h
r67251 r68864 78 78 virtual bool paintButton(RenderObject*, const PaintInfo&, const IntRect&); 79 79 80 virtual void adjustInnerSpinButtonStyle(CSSStyleSelector*, RenderStyle*, Element*) const; 81 virtual bool paintInnerSpinButton(RenderObject*, const PaintInfo&, const IntRect&); 82 80 83 virtual bool paintTextField(RenderObject*, const PaintInfo&, const IntRect&); 81 84 … … 140 143 141 144 private: 145 enum ControlSubPart { 146 None, 147 SpinButtonDown, 148 SpinButtonUp, 149 }; 150 142 151 RenderThemeWin(); 143 152 ~RenderThemeWin(); … … 147 156 148 157 unsigned determineState(RenderObject*); 149 unsigned determineClassicState(RenderObject* );158 unsigned determineClassicState(RenderObject*, ControlSubPart = None); 150 159 unsigned determineSliderThumbState(RenderObject*); 151 160 unsigned determineButtonState(RenderObject*); 161 unsigned determineSpinButtonState(RenderObject*, ControlSubPart = None); 152 162 153 163 bool supportsFocus(ControlPart) const; 154 164 155 ThemeData getThemeData(RenderObject* );156 ThemeData getClassicThemeData(RenderObject* o );165 ThemeData getThemeData(RenderObject*, ControlSubPart = None); 166 ThemeData getClassicThemeData(RenderObject* o, ControlSubPart = None); 157 167 158 168 HANDLE buttonTheme() const; … … 160 170 HANDLE menuListTheme() const; 161 171 HANDLE sliderTheme() const; 172 HANDLE spinButtonTheme() const; 162 173 163 174 mutable HANDLE m_buttonTheme; … … 165 176 mutable HANDLE m_menuListTheme; 166 177 mutable HANDLE m_sliderTheme; 178 mutable HANDLE m_spinButtonTheme; 167 179 }; 168 180
Note: See TracChangeset
for help on using the changeset viewer.