[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