[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677
trey
trey at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 08:45:26 UTC 2009
The following commit has been merged in the debian/unstable branch:
commit 005018953a6fac0fd4de71ba99d51039fbafd25e
Author: trey <trey at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Mon Jun 14 18:26:33 2004 +0000
A new CSS pseudo-class ".drag" is added. Analogous to the "hover" class,
this class determines styles used while an element is generating a drag
image.
Reviewed by hyatt.
* khtml/css/css_base.cpp:
(CSSSelector::extractPseudoType): Boilerplate for adding new class.
* khtml/css/css_base.h: Boilerplate for adding new class.
* khtml/css/cssstyleselector.cpp:
(khtml::CSSStyleSelector::checkOneSelector): Match new class against
elements being dragged.
* khtml/css/cssstyleselector.h:
(khtml::StyleSelector::): Boilerplate for adding new class.
* khtml/rendering/render_object.cpp:
(RenderObject::RenderObject): Init new member.
(RenderObject::isDragging): Return whether this object is being dragged.
(RenderObject::updateDragState): Paint us an all children with a new dragged state.
* khtml/rendering/render_object.h:
* khtml/rendering/render_style.h: Boilerplate for adding new class.
(khtml::RenderStyle::NonInheritedFlags::operator==):
(khtml::RenderStyle::setBitDefaults):
(khtml::RenderStyle::affectedByDragRules):
(khtml::RenderStyle::setAffectedByDragRules):
* kwq/KWQClipboard.mm:
(KWQClipboard::dragNSImage): Method rename.
* kwq/KWQKHTMLPart.h:
* kwq/KWQKHTMLPart.mm:
(KWQKHTMLPart::snapshotDragImage): Mark the element as being dragged before
we snapshot it, so new style class will apply.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@6827 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 3733cb2..5342382 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,36 @@
+2004-06-14 Trey Matteson <trey at apple.com>
+
+ A new CSS pseudo-class ".drag" is added. Analogous to the "hover" class,
+ this class determines styles used while an element is generating a drag
+ image.
+
+ Reviewed by hyatt.
+
+ * khtml/css/css_base.cpp:
+ (CSSSelector::extractPseudoType): Boilerplate for adding new class.
+ * khtml/css/css_base.h: Boilerplate for adding new class.
+ * khtml/css/cssstyleselector.cpp:
+ (khtml::CSSStyleSelector::checkOneSelector): Match new class against
+ elements being dragged.
+ * khtml/css/cssstyleselector.h:
+ (khtml::StyleSelector::): Boilerplate for adding new class.
+ * khtml/rendering/render_object.cpp:
+ (RenderObject::RenderObject): Init new member.
+ (RenderObject::isDragging): Return whether this object is being dragged.
+ (RenderObject::updateDragState): Paint us an all children with a new dragged state.
+ * khtml/rendering/render_object.h:
+ * khtml/rendering/render_style.h: Boilerplate for adding new class.
+ (khtml::RenderStyle::NonInheritedFlags::operator==):
+ (khtml::RenderStyle::setBitDefaults):
+ (khtml::RenderStyle::affectedByDragRules):
+ (khtml::RenderStyle::setAffectedByDragRules):
+ * kwq/KWQClipboard.mm:
+ (KWQClipboard::dragNSImage): Method rename.
+ * kwq/KWQKHTMLPart.h:
+ * kwq/KWQKHTMLPart.mm:
+ (KWQKHTMLPart::snapshotDragImage): Mark the element as being dragged before
+ we snapshot it, so new style class will apply.
+
2004-06-14 Ken Kocienda <kocienda at apple.com>
Reviewed by me
diff --git a/WebCore/khtml/css/css_base.cpp b/WebCore/khtml/css/css_base.cpp
index 5b8a73b..5e8d86c 100644
--- a/WebCore/khtml/css/css_base.cpp
+++ b/WebCore/khtml/css/css_base.cpp
@@ -167,6 +167,7 @@ void CSSSelector::extractPseudoType() const
static AtomicString after("after");
static AtomicString anyLink("-khtml-any-link");
static AtomicString before("before");
+ static AtomicString drag("drag");
static AtomicString empty("empty");
static AtomicString firstChild("first-child");
static AtomicString firstLetter("first-letter");
@@ -192,6 +193,8 @@ void CSSSelector::extractPseudoType() const
_pseudoType = PseudoAnyLink;
else if (value == before)
_pseudoType = PseudoBefore;
+ else if (value == drag)
+ _pseudoType = PseudoDrag;
else if (value == empty)
_pseudoType = PseudoEmpty;
else if (value == firstChild)
diff --git a/WebCore/khtml/css/css_base.h b/WebCore/khtml/css/css_base.h
index a5b18d2..d7cabab 100644
--- a/WebCore/khtml/css/css_base.h
+++ b/WebCore/khtml/css/css_base.h
@@ -144,6 +144,7 @@ namespace DOM {
PseudoVisited,
PseudoAnyLink,
PseudoHover,
+ PseudoDrag,
PseudoFocus,
PseudoActive,
PseudoTarget,
diff --git a/WebCore/khtml/css/cssstyleselector.cpp b/WebCore/khtml/css/cssstyleselector.cpp
index e3ab83a..3d88f3a 100644
--- a/WebCore/khtml/css/cssstyleselector.cpp
+++ b/WebCore/khtml/css/cssstyleselector.cpp
@@ -1243,6 +1243,17 @@ bool CSSStyleSelector::checkOneSelector(DOM::CSSSelector *sel, DOM::ElementImpl
}
break;
}
+ case CSSSelector::PseudoDrag: {
+ if (element == e && style)
+ style->setAffectedByDragRules(true);
+ if (e->renderer()) {
+ if (element != e)
+ e->renderer()->style()->setAffectedByDragRules(true);
+ if (e->renderer()->isDragging())
+ return true;
+ }
+ break;
+ }
case CSSSelector::PseudoFocus:
if (e && e->focused()) {
return true;
diff --git a/WebCore/khtml/css/cssstyleselector.h b/WebCore/khtml/css/cssstyleselector.h
index 3710387..50c24db 100644
--- a/WebCore/khtml/css/cssstyleselector.h
+++ b/WebCore/khtml/css/cssstyleselector.h
@@ -76,7 +76,8 @@ namespace khtml
None = 0x00,
Hover = 0x01,
Focus = 0x02,
- Active = 0x04
+ Active = 0x04,
+ Drag = 0x08
};
};
diff --git a/WebCore/khtml/rendering/render_object.cpp b/WebCore/khtml/rendering/render_object.cpp
index 248f069..0258b4a 100644
--- a/WebCore/khtml/rendering/render_object.cpp
+++ b/WebCore/khtml/rendering/render_object.cpp
@@ -149,6 +149,7 @@ m_inline( true ),
m_replaced( false ),
m_mouseInside( false ),
+m_isDragging( false ),
m_isSelectionBorder( false ),
m_hasOverflowClip(false)
{
@@ -1779,6 +1780,23 @@ bool RenderObject::mouseInside() const
return m_mouseInside;
}
+bool RenderObject::isDragging() const
+{
+ return m_isDragging;
+}
+
+void RenderObject::updateDragState(bool dragOn)
+{
+ bool valueChanged = (dragOn != m_isDragging);
+ m_isDragging = dragOn;
+ if (valueChanged && style()->affectedByDragRules())
+ element()->setChanged();
+ for (RenderObject* curr = firstChild(); curr; curr = curr->nextSibling())
+ curr->updateDragState(dragOn);
+ if (continuation())
+ continuation()->updateDragState(dragOn);
+}
+
bool RenderObject::nodeAtPoint(NodeInfo& info, int _x, int _y, int _tx, int _ty,
HitTestAction hitTestAction, bool inside)
{
diff --git a/WebCore/khtml/rendering/render_object.h b/WebCore/khtml/rendering/render_object.h
index 2a9bb24..33be313 100644
--- a/WebCore/khtml/rendering/render_object.h
+++ b/WebCore/khtml/rendering/render_object.h
@@ -265,6 +265,7 @@ public:
bool isCompact() const { return style()->display() == COMPACT; } // compact object
bool isRunIn() const { return style()->display() == RUN_IN; } // run-in object
bool mouseInside() const;
+ bool isDragging() const;
bool isReplaced() const { return m_replaced; } // a "replaced" element (see CSS)
bool shouldPaintBackgroundOrBorder() const { return m_paintBackground; }
bool needsLayout() const { return m_needsLayout || m_normalChildNeedsLayout || m_posChildNeedsLayout; }
@@ -285,6 +286,8 @@ public:
RenderStyle* getPseudoStyle(RenderStyle::PseudoId pseudo, RenderStyle* parentStyle = 0) const;
+ void updateDragState(bool dragOn);
+
RenderCanvas* canvas() const;
// don't even think about making this method virtual!
@@ -803,6 +806,7 @@ private:
bool m_inline : 1;
bool m_replaced : 1;
bool m_mouseInside : 1;
+ bool m_isDragging : 1;
bool m_isSelectionBorder : 1;
bool m_hasOverflowClip : 1;
diff --git a/WebCore/khtml/rendering/render_style.h b/WebCore/khtml/rendering/render_style.h
index 2e7eefa..fc87e41 100644
--- a/WebCore/khtml/rendering/render_style.h
+++ b/WebCore/khtml/rendering/render_style.h
@@ -809,6 +809,7 @@ protected:
(_styleType == other._styleType) &&
(_affectedByHover == other._affectedByHover) &&
(_affectedByActive == other._affectedByActive) &&
+ (_affectedByDrag == other._affectedByDrag) &&
(_pseudoBits == other._pseudoBits) &&
(_unicodeBidi == other._unicodeBidi);
}
@@ -834,6 +835,7 @@ protected:
PseudoId _styleType : 3;
bool _affectedByHover : 1;
bool _affectedByActive : 1;
+ bool _affectedByDrag : 1;
int _pseudoBits : 6;
EUnicodeBidi _unicodeBidi : 2;
} noninherited_flags;
@@ -900,6 +902,7 @@ protected:
noninherited_flags._styleType = NOPSEUDO;
noninherited_flags._affectedByHover = false;
noninherited_flags._affectedByActive = false;
+ noninherited_flags._affectedByDrag = false;
noninherited_flags._pseudoBits = 0;
noninherited_flags._unicodeBidi = initialUnicodeBidi();
}
@@ -922,9 +925,11 @@ public:
bool affectedByHoverRules() const { return noninherited_flags._affectedByHover; }
bool affectedByActiveRules() const { return noninherited_flags._affectedByActive; }
+ bool affectedByDragRules() const { return noninherited_flags._affectedByDrag; }
void setAffectedByHoverRules(bool b) { noninherited_flags._affectedByHover = b; }
void setAffectedByActiveRules(bool b) { noninherited_flags._affectedByActive = b; }
+ void setAffectedByDragRules(bool b) { noninherited_flags._affectedByDrag = b; }
bool operator==(const RenderStyle& other) const;
bool isFloating() const { return !(noninherited_flags._floating == FNONE); }
diff --git a/WebCore/kwq/KWQClipboard.mm b/WebCore/kwq/KWQClipboard.mm
index 22e1269..c567511 100644
--- a/WebCore/kwq/KWQClipboard.mm
+++ b/WebCore/kwq/KWQClipboard.mm
@@ -307,7 +307,7 @@ NSImage *KWQClipboard::dragNSImage(NSPoint *loc)
if (m_part) {
NSRect imageRect;
NSRect elementRect;
- result = m_part->elementImage(m_dragImageElement, &imageRect, &elementRect);
+ result = m_part->snapshotDragImage(m_dragImageElement, &imageRect, &elementRect);
if (loc) {
// Client specifies point relative to element, not the whole image, which may include child
// layers spread out all over the place.
diff --git a/WebCore/kwq/KWQKHTMLPart.h b/WebCore/kwq/KWQKHTMLPart.h
index 0a86dce..f434a0b 100644
--- a/WebCore/kwq/KWQKHTMLPart.h
+++ b/WebCore/kwq/KWQKHTMLPart.h
@@ -212,7 +212,7 @@ public:
QRect selectionRect() const;
NSRect visibleSelectionRect() const;
NSImage *selectionImage() const;
- NSImage *elementImage(DOM::Node node, NSRect *imageRect, NSRect *elementRect) const;
+ NSImage *snapshotDragImage(DOM::Node node, NSRect *imageRect, NSRect *elementRect) const;
NSFont *fontForCurrentPosition() const;
diff --git a/WebCore/kwq/KWQKHTMLPart.mm b/WebCore/kwq/KWQKHTMLPart.mm
index f82304e..5998336 100644
--- a/WebCore/kwq/KWQKHTMLPart.mm
+++ b/WebCore/kwq/KWQKHTMLPart.mm
@@ -2991,18 +2991,22 @@ NSImage *KWQKHTMLPart::selectionImage() const
return result;
}
-NSImage *KWQKHTMLPart::elementImage(DOM::Node node, NSRect *imageRect, NSRect *elementRect) const
+NSImage *KWQKHTMLPart::snapshotDragImage(DOM::Node node, NSRect *imageRect, NSRect *elementRect) const
{
RenderObject *renderer = node.handle()->renderer();
if (!renderer) {
return nil;
}
- d->m_doc->updateRendering();
+ renderer->updateDragState(true); // mark dragged nodes (so they pick up the right CSS)
+ d->m_doc->updateRendering(); // forces style recalc - needed since changing the drag state might
+ // imply new styles, plus JS could have changed other things
QRect topLevelRect;
NSRect paintingRect = renderer->paintingRootRect(topLevelRect);
- _elementToDraw = node; // invoke special drawing mode
+
+ _elementToDraw = node; // invoke special sub-tree drawing mode
NSImage *result = imageFromRect(paintingRect);
+ renderer->updateDragState(false);
_elementToDraw = 0;
if (elementRect) {
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list