[webkit-changes] cvs commit: WebCore/khtml/xml dom_nodeimpl.cpp
David
hyatt at opensource.apple.com
Thu Jul 28 19:40:41 PDT 2005
hyatt 05/07/28 19:40:41
Modified: khtml/html html_formimpl.cpp
khtml/rendering render_layer.cpp render_theme.cpp
render_theme.h
khtml/xml dom_nodeimpl.cpp
Log:
Test?
Revision Changes Path
1.179 +3 -7 WebCore/khtml/html/html_formimpl.cpp
Index: html_formimpl.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/html/html_formimpl.cpp,v
retrieving revision 1.178
retrieving revision 1.179
diff -u -r1.178 -r1.179
--- html_formimpl.cpp 27 Jul 2005 18:55:39 -0000 1.178
+++ html_formimpl.cpp 29 Jul 2005 02:40:40 -0000 1.179
@@ -44,6 +44,7 @@
#include "khtml_ext.h"
#include "rendering/render_form.h"
+#include "render_theme.h"
#include <kcharsets.h>
#include <kglobal.h>
@@ -865,9 +866,7 @@
if (oldDisabled != m_disabled) {
setChanged();
if (renderer() && renderer()->style()->hasAppearance())
- // FIXME: Let the theme decide whether a repaint is necessary.
- // Repaint the renderer when its disabled state changes so the theme will redraw properly.
- renderer()->repaint();
+ theme()->stateChanged(renderer(), EnabledState);
}
} else if (attr->name() == HTMLAttributes::readonly()) {
bool oldReadOnly = m_readOnly;
@@ -2083,10 +2082,7 @@
m_checked = _checked;
setChanged();
if (renderer() && renderer()->style()->hasAppearance())
- // FIXME: Let the theme decide whether a repaint is necessary.
- // Repaint the renderer when its checked state changes so the theme will redraw
- // properly.
- renderer()->repaint();
+ theme()->stateChanged(renderer(), CheckedState);
}
1.100 +5 -0 WebCore/khtml/rendering/render_layer.cpp
Index: render_layer.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_layer.cpp,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -r1.99 -r1.100
--- render_layer.cpp 18 Jul 2005 21:52:32 -0000 1.99
+++ render_layer.cpp 29 Jul 2005 02:40:40 -0000 1.100
@@ -47,6 +47,7 @@
#include "khtmlview.h"
#include "render_canvas.h"
#include "render_arena.h"
+#include "render_theme.h"
#include "xml/dom_docimpl.h"
#include "xml/dom2_eventsimpl.h"
#include "html/html_blockimpl.h"
@@ -1274,6 +1275,8 @@
if (curr->style()->affectedByHoverRules() ||
(curr->style()->affectedByActiveRules() && oldActive))
curr->element()->setChanged();
+ if (curr && curr->style()->hasAppearance())
+ theme()->stateChanged(renderer(), HoverState);
}
}
}
@@ -1288,6 +1291,8 @@
if ((curr->style()->affectedByHoverRules() && !oldInside) ||
(curr->style()->affectedByActiveRules() && oldActive != info.active()))
curr->element()->setChanged();
+ if (curr && curr->style()->hasAppearance() && !oldInside)
+ theme()->stateChanged(renderer(), HoverState);
}
}
}
1.6 +14 -0 WebCore/khtml/rendering/render_theme.cpp
Index: render_theme.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_theme.cpp,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- render_theme.cpp 28 Jul 2005 23:27:13 -0000 1.5
+++ render_theme.cpp 29 Jul 2005 02:40:40 -0000 1.6
@@ -82,6 +82,20 @@
return appearance != CheckboxAppearance && appearance != RadioAppearance;
}
+void RenderTheme::stateChanged(RenderObject* o, ControlState state) const
+{
+ // Default implementation assumes the controls dont respond to changes in :hover state
+ if (state == HoverState)
+ return;
+
+ // Assume pressed state is only responded to if the control is enabled.
+ if (state == PressedState && !isEnabled(o))
+ return;
+
+ // Repaint the control.
+ o->repaint();
+}
+
bool RenderTheme::isChecked(const RenderObject* o) const
{
if (!o->element())
1.6 +6 -0 WebCore/khtml/rendering/render_theme.h
Index: render_theme.h
===================================================================
RCS file: /cvs/root/WebCore/khtml/rendering/render_theme.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- render_theme.h 28 Jul 2005 21:28:00 -0000 1.5
+++ render_theme.h 29 Jul 2005 02:40:40 -0000 1.6
@@ -29,6 +29,8 @@
class RenderStyle;
+enum ControlState { HoverState, PressedState, FocusState, EnabledState, CheckedState };
+
class RenderTheme {
public:
RenderTheme() {}
@@ -64,6 +66,10 @@
// the theme needs to communicate this inflated rect to the engine so that it can invalidate the whole control.
virtual void adjustRepaintRect(const RenderObject* o, QRect& r) { }
+ // This method is called whenever a relevant state changes on a particular themed object, e.g., the mouse becomes pressed
+ // or a control becomes disabled.
+ virtual void stateChanged(RenderObject* o, ControlState state) const;
+
// This method is called whenever the theme changes on the system in order to flush cached resources from the
// old theme.
void themeChanged();
1.162 +3 -3 WebCore/khtml/xml/dom_nodeimpl.cpp
Index: dom_nodeimpl.cpp
===================================================================
RCS file: /cvs/root/WebCore/khtml/xml/dom_nodeimpl.cpp,v
retrieving revision 1.161
retrieving revision 1.162
diff -u -r1.161 -r1.162
--- dom_nodeimpl.cpp 27 Jul 2005 01:12:29 -0000 1.161
+++ dom_nodeimpl.cpp 29 Jul 2005 02:40:41 -0000 1.162
@@ -42,6 +42,7 @@
#include "rendering/render_object.h"
#include "rendering/render_text.h"
+#include "render_theme.h"
#include "ecma/kjs_binding.h"
#include "ecma/kjs_proxy.h"
@@ -2306,9 +2307,8 @@
if (m_render) {
if (m_render->style()->affectedByActiveRules())
setChanged();
- // FIXME: Let the theme decide if the repaint is necessary.
- if (m_render->style()->hasAppearance())
- m_render->repaint();
+ if (renderer() && renderer()->style()->hasAppearance())
+ theme()->stateChanged(renderer(), PressedState);
}
}
More information about the webkit-changes
mailing list