Reviewed by Ken.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Dec 2004 01:02:30 +0000 (01:02 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 16 Dec 2004 01:02:30 +0000 (01:02 +0000)
        - fixed problem where plain-text would put a blank line between each <p> even when they have no margins

        * khtml/editing/visible_text.cpp: (khtml::TextIterator::exitNode): Add more checks and only set the
        "add one more newline" flag if the margin is sufficient. A more complete fix would ignore the node
        type altogether and use the render tree instead.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8220 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog-2005-08-23
WebCore/khtml/editing/visible_text.cpp

index 612df3bd594bb95ca27568b4ddf26adc10e9190e..ce806bd246792edb86cb7e158441d4af9612ec81 100644 (file)
@@ -1,3 +1,13 @@
+2004-12-15  Darin Adler  <darin@apple.com>
+
+        Reviewed by Ken.
+        
+        - fixed problem where plain-text would put a blank line between each <p> even when they have no margins
+
+        * khtml/editing/visible_text.cpp: (khtml::TextIterator::exitNode): Add more checks and only set the
+        "add one more newline" flag if the margin is sufficient. A more complete fix would ignore the node
+        type altogether and use the render tree instead.
+
 2004-12-14  John Sullivan  <sullivan@apple.com>
 
         Reviewed by Ken.
index 12cbaa36dfbce47bb4edd57c9d60090b4b29abe8..894c1a086172ffe9205fba66127aa55e522b1011 100644 (file)
@@ -390,10 +390,27 @@ void TextIterator::exitNode()
         case ID_H4:
         case ID_H5:
         case ID_H6:
-        case ID_P:
+        case ID_P: {
             endLine = true;
-            addNewline = true;
+
+            // FIXME: Some day we could do this for other tags.
+            // However, doing it just for the tags above makes it more likely
+            // we'll end up getting the right result without margin collapsing.
+            // For example: <div><p>text</p></div> will work right even if both
+            // the <div> and the <p> have bottom margins.
+            RenderObject *renderer = m_node->renderer();
+            if (renderer) {
+                RenderStyle *style = renderer->style();
+                if (style) {
+                    int bottomMargin = renderer->collapsedMarginBottom();
+                    int fontSize = style->htmlFont().getFontDef().computedPixelSize();
+                    if (bottomMargin * 2 >= fontSize) {
+                        addNewline = true;
+                    }
+                }
+            }
             break;
+        }
     }
 
     if (endLine && m_lastCharacter != '\n' && m_lastTextNode) {