Changeset 44758 in webkit
- Timestamp:
- Jun 17, 2009 7:52:28 AM (15 years ago)
- Location:
- trunk
- Files:
-
- 39 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r44757 r44758 1 2009-06-16 Kenneth Rohde Christiansen <kenneth.christiansen@openbossa.org> 2 3 Reviewed by Dave Hyatt and Adam Roben. 4 5 https://bugs.webkit.org/show_bug.cgi?id=26278 6 Patch that make WebCore have a RenderTheme per page 7 8 9 Create a different RenderTheme per page, so that RenderTheme has 10 access to page specific theming. This is needed for the Qt port, as Qt 11 supports setting the theme (style) per widget. 12 13 This change was suggested and discussed with Dave Hyatt. 14 15 More detailed: 16 17 1) Create a theme per page or one global one, depending on the needs 18 of the platform. 19 2) Add an accesser to the theme from RenderObject. 20 3) Change all uses of the theming to access the theme through 21 RenderObject, using the global default theme as fallback, when the 22 document of RenderObject has no page. 23 When we don't have access to a RenderObject, use the default theme. 24 4) Modify all RenderTheme platform implementations to work with the 25 above changes, still creating only one global theme. 26 27 28 * accessibility/AccessibilityRenderObject.cpp: 29 (WebCore::AccessibilityRenderObject::boundingBoxRect): 30 * css/CSSStyleSelector.cpp: 31 (WebCore::loadFullDefaultStyle): 32 (WebCore::CSSStyleSelector::styleForElement): 33 (WebCore::CSSStyleSelector::adjustRenderStyle): 34 (WebCore::CSSStyleSelector::applyProperty): 35 * dom/ContainerNode.cpp: 36 (WebCore::ContainerNode::setActive): 37 (WebCore::ContainerNode::setHovered): 38 * editing/SelectionController.cpp: 39 (WebCore::SelectionController::focusedOrActiveStateChanged): 40 * html/HTMLFormControlElement.cpp: 41 (WebCore::HTMLFormControlElement::parseMappedAttribute): 42 * html/HTMLInputElement.cpp: 43 (WebCore::HTMLInputElement::setChecked): 44 (WebCore::HTMLInputElement::setIndeterminate): 45 * page/Frame.cpp: 46 (WebCore::Frame::selectionLayoutChanged): 47 * page/FrameView.cpp: 48 (WebCore::FrameView::updateControlTints): 49 * page/Page.cpp: 50 (WebCore::Page::Page): 51 * page/Page.h: 52 (WebCore::Page::theme): 53 * platform/chromium/PopupMenuChromium.cpp: 54 (WebCore::PopupListBox::paintRow): 55 * platform/gtk/RenderThemeGtk.cpp: 56 (WebCore::RenderThemeGtk::create): 57 (WebCore::RenderTheme::themeForPage): 58 (WebCore::RenderThemeGtk::RenderThemeGtk): 59 (WebCore::RenderThemeGtk::~RenderThemeGtk): 60 (WebCore::RenderThemeGtk::gtkEntry): 61 (WebCore::RenderThemeGtk::gtkTreeView): 62 * platform/gtk/RenderThemeGtk.h: 63 * platform/qt/RenderThemeQt.cpp: 64 (WebCore::RenderThemeQt::create): 65 (WebCore::RenderTheme::themeForPage): 66 * platform/qt/RenderThemeQt.h: 67 * platform/win/PopupMenuWin.cpp: 68 (WebCore::PopupMenu::paint): 69 * rendering/RenderMediaControls.cpp: 70 (WebCore::determineState): 71 * platform/wx/RenderThemeWx.cpp: 72 (WebCore::RenderThemeWx::create): 73 (WebCore::RenderTheme::themeForPage): 74 * rendering/InlineTextBox.cpp: 75 (WebCore::InlineTextBox::paintTextMatchMarker): 76 * rendering/MediaControlElements.cpp: 77 (WebCore::MediaControlInputElement::hitTest): 78 * rendering/RenderObject.cpp: 79 (WebCore::RenderObject::theme): 80 * rendering/RenderObject.h: 81 * rendering/RenderTheme.cpp: 82 (WebCore::RenderTheme::adjustStyle): 83 * rendering/RenderTheme.h: 84 (WebCore::RenderTheme::defaultTheme): 85 * rendering/RenderThemeChromiumLinux.cpp: 86 (WebCore::RenderThemeChromiumLinux::create): 87 (WebCore::RenderTheme::themeForPage): 88 * rendering/RenderThemeChromiumLinux.h: 89 (WebCore::RenderThemeChromiumLinux::~RenderThemeChromiumLinux): 90 * rendering/RenderThemeChromiumMac.h: 91 * rendering/RenderThemeChromiumMac.mm: 92 (WebCore::RenderThemeChromiumMac::create): 93 (WebCore::RenderTheme::themeForPage): 94 * rendering/RenderThemeChromiumWin.cpp: 95 (WebCore::RenderThemeChromiumWin::create): 96 (WebCore::RenderTheme::themeForPage): 97 * rendering/RenderThemeChromiumWin.h: 98 (WebCore::RenderThemeChromiumWin::RenderThemeChromiumWin): 99 (WebCore::RenderThemeChromiumWin::~RenderThemeChromiumWin): 100 * rendering/RenderThemeMac.h: 101 * rendering/RenderThemeMac.mm: 102 (WebCore::RenderTheme::themeForPage): 103 * rendering/RenderThemeSafari.cpp: 104 (WebCore::RenderThemeSafari::create): 105 (WebCore::RenderTheme::themeForPage): 106 * rendering/RenderThemeSafari.h: 107 * rendering/RenderThemeWin.cpp: 108 (WebCore::RenderThemeWin::create): 109 (WebCore::RenderTheme::themeForPage): 110 * rendering/RenderThemeWin.h: 111 1 112 2009-06-17 Gavin Barraclough <barraclough@apple.com> 2 113 -
trunk/WebCore/accessibility/AccessibilityRenderObject.cpp
r44678 r44758 1009 1009 if (!r.isEmpty()) { 1010 1010 if (obj->style()->hasAppearance()) 1011 theme()->adjustRepaintRect(obj, r);1011 obj->theme()->adjustRepaintRect(obj, r); 1012 1012 result.unite(r); 1013 1013 } -
trunk/WebCore/css/CSSStyleSelector.cpp
r44449 r44758 527 527 528 528 // Strict-mode rules. 529 String defaultRules = String(html4UserAgentStyleSheet, sizeof(html4UserAgentStyleSheet)) + theme()->extraDefaultStyleSheet();529 String defaultRules = String(html4UserAgentStyleSheet, sizeof(html4UserAgentStyleSheet)) + RenderTheme::defaultTheme()->extraDefaultStyleSheet(); 530 530 CSSStyleSheet* defaultSheet = parseUASheet(defaultRules); 531 531 defaultStyle->addRulesFromSheet(defaultSheet, screenEval()); … … 533 533 534 534 // Quirks-mode rules. 535 String quirksRules = String(quirksUserAgentStyleSheet, sizeof(quirksUserAgentStyleSheet)) + theme()->extraQuirksStyleSheet();535 String quirksRules = String(quirksUserAgentStyleSheet, sizeof(quirksUserAgentStyleSheet)) + RenderTheme::defaultTheme()->extraQuirksStyleSheet(); 536 536 CSSStyleSheet* quirksSheet = parseUASheet(quirksRules); 537 537 defaultQuirksStyle->addRulesFromSheet(quirksSheet, screenEval()); … … 1139 1139 if (!loadedMediaStyleSheet && (e->hasTagName(videoTag) || e->hasTagName(audioTag))) { 1140 1140 loadedMediaStyleSheet = true; 1141 String mediaRules = String(mediaControlsUserAgentStyleSheet, sizeof(mediaControlsUserAgentStyleSheet)) + theme()->extraMediaControlsStyleSheet();1141 String mediaRules = String(mediaControlsUserAgentStyleSheet, sizeof(mediaControlsUserAgentStyleSheet)) + RenderTheme::defaultTheme()->extraMediaControlsStyleSheet(); 1142 1142 CSSStyleSheet* mediaControlsSheet = parseUASheet(mediaRules); 1143 1143 defaultStyle->addRulesFromSheet(mediaControlsSheet, screenEval()); … … 1590 1590 // Let the theme also have a crack at adjusting the style. 1591 1591 if (style->hasAppearance()) 1592 theme()->adjustStyle(this, style, e, m_hasUAAppearance, m_borderData, m_backgroundData, m_backgroundColor);1592 RenderTheme::defaultTheme()->adjustStyle(this, style, e, m_hasUAAppearance, m_borderData, m_backgroundData, m_backgroundColor); 1593 1593 1594 1594 #if ENABLE(SVG) … … 4293 4293 4294 4294 FontDescription fontDescription; 4295 theme()->systemFont(primitiveValue->getIdent(), fontDescription);4295 RenderTheme::defaultTheme()->systemFont(primitiveValue->getIdent(), fontDescription); 4296 4296 4297 4297 // Double-check and see if the theme did anything. If not, don't bother updating the font. … … 5696 5696 return col->color; 5697 5697 } 5698 return theme()->systemColor(cssValueId);5698 return RenderTheme::defaultTheme()->systemColor(cssValueId); 5699 5699 } 5700 5700 -
trunk/WebCore/dom/ContainerNode.cpp
r43152 r44758 799 799 setNeedsStyleRecalc(); 800 800 if (renderer() && renderer()->style()->hasAppearance()) { 801 if ( theme()->stateChanged(renderer(), PressedState))801 if (renderer()->theme()->stateChanged(renderer(), PressedState)) 802 802 reactsToPress = true; 803 803 } … … 841 841 setNeedsStyleRecalc(); 842 842 if (renderer() && renderer()->style()->hasAppearance()) 843 theme()->stateChanged(renderer(), HoverState);843 renderer()->theme()->stateChanged(renderer(), HoverState); 844 844 } 845 845 } -
trunk/WebCore/editing/SelectionController.cpp
r44429 r44758 46 46 #include "Page.h" 47 47 #include "Range.h" 48 #include "RenderTheme.h"49 48 #include "RenderView.h" 50 49 #include "TextIterator.h" … … 1268 1267 if (RenderObject* renderer = node->renderer()) 1269 1268 if (renderer && renderer->style()->hasAppearance()) 1270 theme()->stateChanged(renderer, FocusState);1269 renderer->theme()->stateChanged(renderer, FocusState); 1271 1270 } 1272 1271 -
trunk/WebCore/html/HTMLFormControlElement.cpp
r44100 r44758 72 72 setNeedsStyleRecalc(); 73 73 if (renderer() && renderer()->style()->hasAppearance()) 74 theme()->stateChanged(renderer(), EnabledState);74 renderer()->theme()->stateChanged(renderer(), EnabledState); 75 75 } 76 76 } else if (attr->name() == readonlyAttr) { … … 80 80 setNeedsStyleRecalc(); 81 81 if (renderer() && renderer()->style()->hasAppearance()) 82 theme()->stateChanged(renderer(), ReadOnlyState);82 renderer()->theme()->stateChanged(renderer(), ReadOnlyState); 83 83 } 84 84 } else -
trunk/WebCore/html/HTMLInputElement.cpp
r44218 r44758 882 882 883 883 checkedRadioButtons(this).addButton(this); 884 884 885 885 if (renderer() && renderer()->style()->hasAppearance()) 886 theme()->stateChanged(renderer(), CheckedState);886 renderer()->theme()->stateChanged(renderer(), CheckedState); 887 887 888 888 // Only send a change event for items in the document (avoid firing during … … 906 906 907 907 if (renderer() && renderer()->style()->hasAppearance()) 908 theme()->stateChanged(renderer(), CheckedState);908 renderer()->theme()->stateChanged(renderer(), CheckedState); 909 909 } 910 910 -
trunk/WebCore/page/Frame.cpp
r44416 r44758 623 623 // already blinking in the right location. 624 624 if (shouldBlink && !m_caretBlinkTimer.isActive()) { 625 if (double blinkInterval = theme()->caretBlinkInterval())625 if (double blinkInterval = page()->theme()->caretBlinkInterval()) 626 626 m_caretBlinkTimer.startRepeating(blinkInterval); 627 627 -
trunk/WebCore/page/FrameView.cpp
r44755 r44758 1297 1297 1298 1298 // Optimize the common case where we bring a window to the front while it's still empty. 1299 if (!m_frame || m_frame->loader()->url().isEmpty()) 1300 return; 1301 1302 if ( theme()->supportsControlTints() && m_frame->contentRenderer()) {1299 if (!m_frame || m_frame->loader()->url().isEmpty()) 1300 return; 1301 1302 if (m_frame->contentRenderer() && m_frame->contentRenderer()->theme()->supportsControlTints()) { 1303 1303 if (needsLayout()) 1304 1304 layout(); -
trunk/WebCore/page/Page.cpp
r44468 r44758 47 47 #include "ProgressTracker.h" 48 48 #include "RenderWidget.h" 49 #include "RenderTheme.h" 49 50 #include "ScriptController.h" 50 51 #include "SelectionController.h" … … 121 122 , m_customHTMLTokenizerTimeDelay(-1) 122 123 , m_customHTMLTokenizerChunkSize(-1) 124 , m_theme(RenderTheme::themeForPage(this)) 123 125 { 124 126 if (!allPages) { -
trunk/WebCore/page/Page.h
r42725 r44758 28 28 #include "LinkHash.h" 29 29 #include "PlatformString.h" 30 #include "RenderTheme.h" 30 31 #include <wtf/HashSet.h> 31 32 #include <wtf/OwnPtr.h> … … 79 80 Page(ChromeClient*, ContextMenuClient*, EditorClient*, DragClient*, InspectorClient*); 80 81 ~Page(); 81 82 83 RenderTheme* theme() const { return m_theme.get(); }; 84 82 85 static void refreshPlugins(bool reload); 83 86 PluginData* pluginData() const; … … 218 221 mutable RefPtr<PluginData> m_pluginData; 219 222 223 RefPtr<RenderTheme> m_theme; 224 220 225 EditorClient* m_editorClient; 221 226 -
trunk/WebCore/platform/chromium/PopupMenuChromium.cpp
r44500 r44758 774 774 Color backColor, textColor; 775 775 if (rowIndex == m_selectedIndex) { 776 backColor = theme()->activeListBoxSelectionBackgroundColor();777 textColor = theme()->activeListBoxSelectionForegroundColor();776 backColor = RenderTheme::defaultTheme()->activeListBoxSelectionBackgroundColor(); 777 textColor = RenderTheme::defaultTheme()->activeListBoxSelectionForegroundColor(); 778 778 } else { 779 779 backColor = style.backgroundColor(); -
trunk/WebCore/platform/gtk/RenderThemeGtk.cpp
r43250 r44758 3 3 * Copyright (C) 2007 Alp Toker <alp@atoker.com> 4 4 * Copyright (C) 2008 Collabora Ltd. 5 * Copyright (C) 2009 Kenneth Rohde Christiansen 5 6 * 6 7 * This library is free software; you can redistribute it and/or … … 35 36 namespace WebCore { 36 37 37 RenderTheme* theme() 38 { 39 static RenderThemeGtk gtkTheme; 40 return >kTheme; 41 } 42 43 static bool mozGtkInitialized = false; 38 PassRefPtr<RenderTheme> RenderThemeGtk::create() 39 { 40 return adoptRef(new RenderThemeGtk()); 41 } 42 43 PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 44 { 45 static RenderTheme* rt = RenderThemeGtk::create().releaseRef(); 46 return rt; 47 } 48 49 static int mozGtkRefCount = 0; 44 50 45 51 RenderThemeGtk::RenderThemeGtk() … … 49 55 , m_gtkTreeView(0) 50 56 { 51 if (!mozGtkInitialized) { 52 mozGtkInitialized = true; 57 if (!mozGtkRefCount) 53 58 moz_gtk_init(); 54 } 59 60 ++mozGtkRefCount; 55 61 } 56 62 57 63 RenderThemeGtk::~RenderThemeGtk() 58 64 { 59 if (mozGtkInitialized) { 65 --mozGtkRefCount; 66 67 if (!mozGtkRefCount) 60 68 moz_gtk_shutdown(); 61 mozGtkInitialized = false;62 }63 69 } 64 70 … … 471 477 472 478 m_gtkEntry = gtk_entry_new(); 473 g_signal_connect(m_gtkEntry, "style-set", G_CALLBACK(gtkStyleSetCallback), theme());479 g_signal_connect(m_gtkEntry, "style-set", G_CALLBACK(gtkStyleSetCallback), const_cast<RenderThemeGtk*>(this)); 474 480 gtk_container_add(gtkContainer(), m_gtkEntry); 475 481 gtk_widget_realize(m_gtkEntry); … … 484 490 485 491 m_gtkTreeView = gtk_tree_view_new(); 486 g_signal_connect(m_gtkTreeView, "style-set", G_CALLBACK(gtkStyleSetCallback), theme());492 g_signal_connect(m_gtkTreeView, "style-set", G_CALLBACK(gtkStyleSetCallback), const_cast<RenderThemeGtk*>(this)); 487 493 gtk_container_add(gtkContainer(), m_gtkTreeView); 488 494 gtk_widget_realize(m_gtkTreeView); -
trunk/WebCore/platform/gtk/RenderThemeGtk.h
r43250 r44758 6 6 * Copyright (C) 2007 Holger Hans Peter Freyther 7 7 * Copyright (C) 2007 Alp Toker <alp@atoker.com> 8 * Copyright (C) 2009 Kenneth Rohde Christiansen 8 9 * All rights reserved. 9 10 * … … 35 36 36 37 class RenderThemeGtk : public RenderTheme { 37 p ublic:38 private: 38 39 RenderThemeGtk(); 39 40 virtual ~RenderThemeGtk(); 41 42 public: 43 static PassRefPtr<RenderTheme> create(); 40 44 41 45 // A method asking if the theme's controls actually care about redrawing when hovered. -
trunk/WebCore/platform/qt/RenderThemeQt.cpp
r42887 r44758 107 107 } 108 108 109 RenderTheme* theme() 110 { 111 static RenderThemeQt rt; 112 return &rt; 109 PassRefPtr<RenderTheme> RenderThemeQt::create(Page* page) 110 { 111 return adoptRef(new RenderThemeQt(page)); 112 } 113 114 PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 115 { 116 if (page) 117 return RenderThemeQt::create(page); 118 119 static RenderTheme* fallback = RenderThemeQt::create(0).releaseRef(); 120 return fallback; 113 121 } 114 122 -
trunk/WebCore/platform/qt/RenderThemeQt.h
r42038 r44758 39 39 class RenderThemeQt : public RenderTheme 40 40 { 41 p ublic:41 private: 42 42 RenderThemeQt(); 43 43 virtual ~RenderThemeQt(); 44 45 public: 46 static PassRefPtr<RenderTheme> create(Page*); 44 47 45 48 virtual bool supportsHover(const RenderStyle*) const; -
trunk/WebCore/platform/win/PopupMenuWin.cpp
r42401 r44758 487 487 PopupMenuStyle itemStyle = client()->itemStyle(index); 488 488 if (index == focusedIndex()) { 489 optionBackgroundColor = theme()->activeListBoxSelectionBackgroundColor();490 optionTextColor = theme()->activeListBoxSelectionForegroundColor();489 optionBackgroundColor = RenderTheme::defaultTheme()->activeListBoxSelectionBackgroundColor(); 490 optionTextColor = RenderTheme::defaultTheme()->activeListBoxSelectionForegroundColor(); 491 491 } else { 492 492 optionBackgroundColor = itemStyle.backgroundColor(); … … 526 526 if (itemStyle.isVisible()) { 527 527 int textX = max(0, client()->clientPaddingLeft() - client()->clientInsetLeft()); 528 if ( theme()->popupOptionSupportsTextIndent() && itemStyle.textDirection() == LTR)528 if (RenderTheme::defaultTheme()->popupOptionSupportsTextIndent() && itemStyle.textDirection() == LTR) 529 529 textX += itemStyle.textIndent().calcMinValue(itemRect.width()); 530 530 int textY = itemRect.y() + itemFont.ascent() + (itemRect.height() - itemFont.height()) / 2; -
trunk/WebCore/platform/wx/RenderThemeWx.cpp
r43330 r44758 45 45 46 46 class RenderThemeWx : public RenderTheme { 47 private: 48 RenderThemeWx() : RenderTheme() { } 49 virtual ~RenderThemeWx(); 50 47 51 public: 48 RenderThemeWx() : RenderTheme() { }52 static PassRefPtr<RenderTheme> create(); 49 53 50 54 // A method asking if the theme's controls actually care about redrawing when hovered. … … 120 124 #endif 121 125 122 RenderTheme* theme() 123 { 124 static RenderThemeWx rt; 125 return &rt; 126 PassRefPtr<RenderTheme> RenderThemeWx::create() 127 { 128 return adoptRef(new RenderThemeWx()); 129 } 130 131 PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 132 { 133 static RenderTheme* rt = RenderThemeWx().create().releaseRef(); 134 return rt; 126 135 } 127 136 -
trunk/WebCore/rendering/InlineTextBox.cpp
r43664 r44758 33 33 #include "RenderArena.h" 34 34 #include "RenderBlock.h" 35 #include "RenderTheme.h"36 35 #include "Text.h" 37 36 #include "break_lines.h" … … 771 770 if (renderer()->document()->frame()->markedTextMatchesAreHighlighted()) { 772 771 Color color = marker.activeMatch ? 773 theme()->platformActiveTextSearchHighlightColor() :774 theme()->platformInactiveTextSearchHighlightColor();772 renderer()->theme()->platformActiveTextSearchHighlightColor() : 773 renderer()->theme()->platformInactiveTextSearchHighlightColor(); 775 774 pt->save(); 776 775 updateGraphicsContext(pt, color, color, 0); // Don't draw text at all! -
trunk/WebCore/rendering/MediaControlElements.cpp
r43747 r44758 160 160 { 161 161 if (renderer() && renderer()->style()->hasAppearance()) 162 return theme()->hitTestMediaControlPart(renderer(), absPoint);162 return renderer()->theme()->hitTestMediaControlPart(renderer(), absPoint); 163 163 164 164 return false; -
trunk/WebCore/rendering/RenderMediaControls.cpp
r44738 r44758 52 52 { 53 53 ThemeControlState result = 0; 54 if (theme()->isActive(o)) 54 RenderTheme* theme = o->theme(); 55 if (theme->isActive(o)) 55 56 result |= SafariTheme::ActiveState; 56 if (theme ()->isEnabled(o) && !theme()->isReadOnlyControl(o))57 if (theme->isEnabled(o) && !theme->isReadOnlyControl(o)) 57 58 result |= SafariTheme::EnabledState; 58 if (theme ()->isPressed(o))59 if (theme->isPressed(o)) 59 60 result |= SafariTheme::PressedState; 60 if (theme ()->isChecked(o))61 if (theme->isChecked(o)) 61 62 result |= SafariTheme::CheckedState; 62 if (theme ()->isIndeterminate(o))63 if (theme->isIndeterminate(o)) 63 64 result |= SafariTheme::IndeterminateCheckedState; 64 if (theme ()->isFocused(o))65 if (theme->isFocused(o)) 65 66 result |= SafariTheme::FocusedState; 66 if (theme ()->isDefault(o))67 if (theme->isDefault(o)) 67 68 result |= SafariTheme::DefaultState; 68 69 return result; -
trunk/WebCore/rendering/RenderObject.cpp
r44755 r44758 44 44 #include "RenderTableCol.h" 45 45 #include "RenderTableRow.h" 46 #include "RenderTheme.h"47 46 #include "RenderView.h" 48 47 #include "TransformState.h" … … 213 212 renderObjectCounter.decrement(); 214 213 #endif 214 } 215 216 RenderTheme* RenderObject::theme() const 217 { 218 ASSERT(document()->page()); 219 220 return document()->page()->theme(); 215 221 } 216 222 -
trunk/WebCore/rendering/RenderObject.h
r43922 r44758 49 49 class RenderFlow; 50 50 class RenderLayer; 51 class RenderTheme; 51 52 class TransformState; 52 53 class VisiblePosition; … … 137 138 RenderObject(Node*); 138 139 virtual ~RenderObject(); 140 141 RenderTheme* theme() const; 139 142 140 143 virtual const char* renderName() const = 0; -
trunk/WebCore/rendering/RenderTheme.cpp
r43367 r44758 63 63 style->setDisplay(BLOCK); 64 64 65 if (UAHasAppearance && theme()->isControlStyled(style, border, background, backgroundColor)) {65 if (UAHasAppearance && isControlStyled(style, border, background, backgroundColor)) { 66 66 if (part == MenulistPart) { 67 67 style->setAppearance(MenulistButtonPart); -
trunk/WebCore/rendering/RenderTheme.h
r42393 r44758 24 24 #define RenderTheme_h 25 25 26 #include "RenderObject.h"27 26 #if USE(NEW_THEME) 28 27 #include "Theme.h" … … 30 29 #include "ThemeTypes.h" 31 30 #endif 31 #include "RenderObject.h" 32 #include "RenderTheme.h" 32 33 #include "ScrollTypes.h" 34 #include <wtf/PassRefPtr.h> 35 #include <wtf/RefCounted.h> 33 36 34 37 namespace WebCore { … … 39 42 class CSSStyleSheet; 40 43 41 class RenderTheme { 44 class RenderTheme : public RefCounted<RenderTheme> { 45 protected: 46 RenderTheme(); 47 42 48 public: 43 RenderTheme();44 49 virtual ~RenderTheme() { } 50 51 // This function is to be implemented in your platform-specific theme implementation to hand back the 52 // appropriate platform theme. When the theme is needed in non-page dependent code, a default theme is 53 // used as fallback, which is returned for a nulled page, so the platform code needs to account for this. 54 static PassRefPtr<RenderTheme> themeForPage(Page* page); 55 56 // When the theme is needed in non-page dependent code, the defaultTheme() is used as fallback. 57 static inline PassRefPtr<RenderTheme> defaultTheme() 58 { 59 return themeForPage(0); 60 }; 45 61 46 62 // This method is called whenever style has been computed for an element and the appearance … … 258 274 }; 259 275 260 // Function to obtain the theme. This is implemented in your platform-specific theme implementation to hand261 // back the appropriate platform theme.262 RenderTheme* theme();263 264 276 } // namespace WebCore 265 277 -
trunk/WebCore/rendering/RenderThemeChromiumLinux.cpp
r44503 r44758 4 4 * Copyright (C) 2008 Collabora Ltd. 5 5 * Copyright (C) 2008, 2009 Google Inc. 6 * Copyright (C) 2009 Kenneth Rohde Christiansen 6 7 * 7 8 * This library is free software; you can redistribute it and/or … … 114 115 #endif 115 116 116 RenderTheme* theme() 117 { 118 static RenderThemeChromiumLinux theme; 119 return &theme; 117 PassRefPtr<RenderTheme> RenderThemeChromiumLinux::create() 118 { 119 return adoptRef(new RenderThemeChromiumLinux()); 120 } 121 122 PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 123 { 124 static RenderTheme* rt = RenderThemeChromiumLinux::create().releaseRef(); 125 return rt; 120 126 } 121 127 -
trunk/WebCore/rendering/RenderThemeChromiumLinux.h
r44503 r44758 8 8 * Copyright (C) 2008, 2009 Google, Inc. 9 9 * All rights reserved. 10 * Copyright (C) 2009 Kenneth Rohde Christiansen 10 11 * 11 12 * This library is free software; you can redistribute it and/or … … 35 36 class RenderThemeChromiumLinux : public RenderTheme { 36 37 public: 37 RenderThemeChromiumLinux(); 38 ~RenderThemeChromiumLinux() { } 38 static PassRefPtr<RenderTheme> create(); 39 39 40 40 virtual String extraDefaultStyleSheet(); … … 131 131 132 132 private: 133 RenderThemeChromiumLinux(); 134 ~RenderThemeChromiumLinux() { } 135 133 136 int menuListInternalPadding(RenderStyle*, int paddingType) const; 134 137 bool paintMediaButtonInternal(GraphicsContext*, const IntRect&, Image*); -
trunk/WebCore/rendering/RenderThemeChromiumMac.h
r42508 r44758 4 4 * Copyright (C) 2005 Apple Computer, Inc. 5 5 * Copyright (C) 2008, 2009 Google, Inc. 6 * Copyright (C) 2009 Kenneth Rohde Christiansen 6 7 * 7 8 * This library is free software; you can redistribute it and/or … … 42 43 class RenderThemeChromiumMac : public RenderTheme { 43 44 public: 44 RenderThemeChromiumMac(); 45 virtual ~RenderThemeChromiumMac(); 45 static PassRefPtr<RenderTheme> create(); 46 46 47 47 // A method to obtain the baseline position for a "leaf" control. This will only be used if a baseline … … 141 141 142 142 private: 143 RenderThemeChromiumMac(); 144 virtual ~RenderThemeChromiumMac(); 145 143 146 IntRect inflateRect(const IntRect&, const IntSize&, const int* margins, float zoomLevel = 1.0f) const; 144 147 -
trunk/WebCore/rendering/RenderThemeChromiumMac.mm
r43367 r44758 2 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 3 3 * Copyright (C) 2008, 2009 Google, Inc. 4 * Copyright (C) 2009 Kenneth Rohde Christiansen 4 5 * 5 6 * This library is free software; you can redistribute it and/or … … 125 126 } 126 127 127 RenderTheme* theme() 128 { 129 static RenderThemeChromiumMac* macTheme = new RenderThemeChromiumMac; 130 return macTheme; 128 PassRefPtr<RenderTheme> RenderThemeChromiumMac::create() 129 { 130 return adoptRef(new RenderThemeChromiumMac); 131 } 132 133 PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 134 { 135 static RenderTheme* rt = RenderThemeChromiumMac::create().releaseRef(); 136 return rt; 131 137 } 132 138 -
trunk/WebCore/rendering/RenderThemeChromiumWin.cpp
r44029 r44758 4 4 * Copyright (C) 2006 Apple Computer, Inc. 5 5 * Copyright (C) 2008, 2009 Google, Inc. 6 * Copyright (C) 2009 Kenneth Rohde Christiansen 6 7 * 7 8 * This library is free software; you can redistribute it and/or … … 266 267 #endif 267 268 268 // Implement WebCore::theme() for getting the global RenderTheme. 269 RenderTheme* theme() 270 { 271 static RenderThemeChromiumWin winTheme; 272 return &winTheme; 269 PassRefPtr<RenderTheme> RenderThemeChromiumWin::create() 270 { 271 return adoptRef(new RenderThemeChromiumWin); 272 } 273 274 PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 275 { 276 static RenderTheme* rt = RenderThemeChromiumWin::create().releaseRef(); 277 return rt; 273 278 } 274 279 -
trunk/WebCore/rendering/RenderThemeChromiumWin.h
r44029 r44758 45 45 class RenderThemeChromiumWin : public RenderTheme { 46 46 public: 47 RenderThemeChromiumWin() { } 48 ~RenderThemeChromiumWin() { } 47 static PassRefPtr<RenderTheme> create(); 49 48 50 49 virtual String extraDefaultStyleSheet(); … … 142 141 143 142 private: 143 RenderThemeChromiumWin() { } 144 ~RenderThemeChromiumWin() { } 145 144 146 unsigned determineState(RenderObject*); 145 147 unsigned determineSliderThumbState(RenderObject*); -
trunk/WebCore/rendering/RenderThemeMac.h
r41233 r44758 40 40 class RenderThemeMac : public RenderTheme { 41 41 public: 42 RenderThemeMac(); 43 virtual ~RenderThemeMac(); 42 static PassRefPtr<RenderTheme> create(); 44 43 45 44 // A method asking if the control changes its tint when the window has focus or not. … … 135 134 136 135 private: 136 RenderThemeMac(); 137 virtual ~RenderThemeMac(); 138 137 139 IntRect inflateRect(const IntRect&, const IntSize&, const int* margins, float zoomLevel = 1.0f) const; 138 140 -
trunk/WebCore/rendering/RenderThemeMac.mm
r44738 r44758 102 102 }; 103 103 104 RenderTheme* theme()105 { 106 static RenderTheme Mac* macTheme = new RenderThemeMac;107 return macTheme;104 PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 105 { 106 static RenderTheme* rt = RenderThemeMac::create().releaseRef(); 107 return rt; 108 108 } 109 109 -
trunk/WebCore/rendering/RenderThemeSafari.cpp
r43367 r44758 1 1 /* 2 2 * Copyright (C) 2007, 2008 Apple Inc. 3 * Copyright (C) 2009 Kenneth Rohde Christiansen 3 4 * 4 5 * This library is free software; you can redistribute it and/or … … 66 67 }; 67 68 68 RenderTheme* theme() 69 { 70 static RenderThemeSafari safariTheme; 71 static RenderThemeWin windowsTheme; 69 PassRefPtr<RenderTheme> RenderThemeSafari::create() 70 { 71 return adoptRef(new RenderThemeSafari); 72 } 73 74 PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 75 { 76 static RenderTheme* safariTheme = RenderThemeSafari::create().releaseRef(); 77 static RenderTheme* windowsTheme = RenderThemeWin::create().releaseRef(); 72 78 if (Settings::shouldPaintNativeControls()) 73 return &windowsTheme;74 return &safariTheme;79 return windowsTheme; // keep the reference of one. 80 return safariTheme; // keep the reference of one. 75 81 } 76 82 -
trunk/WebCore/rendering/RenderThemeSafari.h
r34693 r44758 1 1 /* 2 2 * Copyright (C) 2007, 2008 Apple Inc. 3 * Copyright (C) 2009 Kenneth Rohde Christiansen 3 4 * 4 5 * This library is free software; you can redistribute it and/or … … 47 48 class RenderThemeSafari : public RenderTheme { 48 49 public: 49 RenderThemeSafari(); 50 virtual ~RenderThemeSafari(); 50 static PassRefPtr<RenderTheme> create(); 51 51 52 52 // A method to obtain the baseline position for a "leaf" control. This will only be used if a baseline … … 138 138 139 139 private: 140 RenderThemeSafari(); 141 virtual ~RenderThemeSafari(); 142 140 143 IntRect inflateRect(const IntRect&, const IntSize&, const int* margins) const; 141 144 -
trunk/WebCore/rendering/RenderThemeWin.cpp
r44364 r44758 1 1 /* 2 2 * Copyright (C) 2006, 2007 Apple Inc. 3 * Copyright (C) 2009 Kenneth Rohde Christiansen 3 4 * 4 5 * This library is free software; you can redistribute it and/or … … 135 136 } 136 137 138 PassRefPtr<RenderTheme> RenderThemeWin::create() 139 { 140 return adoptRef(new RenderThemeWin); 141 } 142 137 143 #if !USE(SAFARI_THEME) 138 RenderTheme* theme()139 { 140 static RenderThemeWin winTheme;141 return &winTheme;144 PassRefPtr<RenderTheme> RenderTheme::themeForPage(Page* page) 145 { 146 static RenderThemeWin* winTheme = RenderThemeWin::create().releaseRef(); 147 return winTheme; 142 148 } 143 149 #endif -
trunk/WebCore/rendering/RenderThemeWin.h
r43522 r44758 3 3 * 4 4 * Copyright (C) 2006, 2008 Apple Computer, Inc. 5 * Copyright (C) 2009 Kenneth Rohde Christiansen 5 6 * 6 7 * This library is free software; you can redistribute it and/or … … 49 50 class RenderThemeWin : public RenderTheme { 50 51 public: 51 RenderThemeWin(); 52 ~RenderThemeWin(); 52 static PassRefPtr<RenderTheme> create(); 53 53 54 54 virtual String extraDefaultStyleSheet(); … … 136 136 137 137 private: 138 RenderThemeWin(); 139 ~RenderThemeWin(); 140 138 141 void addIntrinsicMargins(RenderStyle*) const; 139 142 void close(); -
trunk/WebKit/win/ChangeLog
r44739 r44758 1 2009-06-16 Kenneth Rohde Christiansen <kenneth.christiansen@openbossa.org> 2 3 Reviewed by Adam Roben. 4 5 Create a different RenderTheme per page, so that RenderTheme has 6 access to page specific theming. This is needed for the Qt port, as Qt 7 supports setting the theme (style) per widget. 8 9 This change was suggested and discussed with Dave Hyatt. 10 11 More detailed: 12 13 1) Create a theme per page or one global one, depending on the needs 14 of the platform. 15 2) Add an accesser to the theme from RenderObject. 16 3) Change all uses of the theming to access the theme through 17 RenderObject, using the global default theme as fallback, when the 18 document of RenderObject has no page. 19 When we don't have access to a RenderObject, use the default theme. 20 4) Modify all RenderTheme platform implementations to work with the 21 above changes, still creating only one global theme. 22 23 * WebView.cpp: 24 (WebViewWndProc): Get the theme from the associated page. 25 1 26 2009-06-16 Brian Weinstein <bweinstein@apple.com> 2 27 -
trunk/WebKit/win/WebView.cpp
r44739 r44758 1856 1856 if (Frame* coreFrame = core(mainFrameImpl)) { 1857 1857 webView->deleteBackingStore(); 1858 theme()->themeChanged();1858 coreFrame->page()->theme()->themeChanged(); 1859 1859 ScrollbarTheme::nativeTheme()->themeChanged(); 1860 1860 RECT windowRect;
Note: See TracChangeset
for help on using the changeset viewer.