| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008, 2009 Apple Computer, Inc. | 2 * Copyright (C) 2007, 2008, 2009 Apple Computer, Inc. |
| 3 * Copyright (C) 2010, 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2010, 2011 Google Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions | 6 * modification, are permitted provided that the following conditions |
| 7 * are met: | 7 * are met: |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 49 #include "core/editing/ApplyStyleCommand.h" | 49 #include "core/editing/ApplyStyleCommand.h" |
| 50 #include "core/editing/Editor.h" | 50 #include "core/editing/Editor.h" |
| 51 #include "core/editing/FrameSelection.h" | 51 #include "core/editing/FrameSelection.h" |
| 52 #include "core/editing/HTMLInterchange.h" | 52 #include "core/editing/HTMLInterchange.h" |
| 53 #include "core/editing/htmlediting.h" | 53 #include "core/editing/htmlediting.h" |
| 54 #include "core/frame/LocalFrame.h" | 54 #include "core/frame/LocalFrame.h" |
| 55 #include "core/html/HTMLFontElement.h" | 55 #include "core/html/HTMLFontElement.h" |
| 56 #include "core/html/HTMLSpanElement.h" | 56 #include "core/html/HTMLSpanElement.h" |
| 57 #include "core/layout/LayoutBox.h" | 57 #include "core/layout/LayoutBox.h" |
| 58 #include "core/layout/LayoutObject.h" | 58 #include "core/layout/LayoutObject.h" |
| 59 #include "core/layout/style/LayoutStyle.h" | 59 #include "core/layout/style/ComputedStyle.h" |
| 60 | 60 |
| 61 namespace blink { | 61 namespace blink { |
| 62 | 62 |
| 63 static const CSSPropertyID& textDecorationPropertyForEditing() | 63 static const CSSPropertyID& textDecorationPropertyForEditing() |
| 64 { | 64 { |
| 65 static const CSSPropertyID property = RuntimeEnabledFeatures::css3TextDecora
tionsEnabled() ? CSSPropertyTextDecorationLine : CSSPropertyTextDecoration; | 65 static const CSSPropertyID property = RuntimeEnabledFeatures::css3TextDecora
tionsEnabled() ? CSSPropertyTextDecorationLine : CSSPropertyTextDecoration; |
| 66 return property; | 66 return property; |
| 67 } | 67 } |
| 68 | 68 |
| 69 // Editing style properties must be preserved during editing operation. | 69 // Editing style properties must be preserved during editing operation. |
| (...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 464 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> computedStyleAtPosition = CS
SComputedStyleDeclaration::create(node); | 464 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> computedStyleAtPosition = CS
SComputedStyleDeclaration::create(node); |
| 465 m_mutableStyle = propertiesToInclude == AllProperties && computedStyleAtPosi
tion ? computedStyleAtPosition->copyProperties() : editingStyleFromComputedStyle
(computedStyleAtPosition); | 465 m_mutableStyle = propertiesToInclude == AllProperties && computedStyleAtPosi
tion ? computedStyleAtPosition->copyProperties() : editingStyleFromComputedStyle
(computedStyleAtPosition); |
| 466 | 466 |
| 467 if (propertiesToInclude == EditingPropertiesInEffect) { | 467 if (propertiesToInclude == EditingPropertiesInEffect) { |
| 468 if (RefPtrWillBeRawPtr<CSSValue> value = backgroundColorInEffect(node)) | 468 if (RefPtrWillBeRawPtr<CSSValue> value = backgroundColorInEffect(node)) |
| 469 m_mutableStyle->setProperty(CSSPropertyBackgroundColor, value->cssTe
xt()); | 469 m_mutableStyle->setProperty(CSSPropertyBackgroundColor, value->cssTe
xt()); |
| 470 if (RefPtrWillBeRawPtr<CSSValue> value = computedStyleAtPosition->getPro
pertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect)) | 470 if (RefPtrWillBeRawPtr<CSSValue> value = computedStyleAtPosition->getPro
pertyCSSValue(CSSPropertyWebkitTextDecorationsInEffect)) |
| 471 m_mutableStyle->setProperty(CSSPropertyTextDecoration, value->cssTex
t()); | 471 m_mutableStyle->setProperty(CSSPropertyTextDecoration, value->cssTex
t()); |
| 472 } | 472 } |
| 473 | 473 |
| 474 if (node && node->computedStyle()) { | 474 if (node && node->ensureComputedStyle()) { |
| 475 const LayoutStyle* layoutStyle = node->computedStyle(); | 475 const ComputedStyle* computedStyle = node->ensureComputedStyle(); |
| 476 removeTextFillAndStrokeColorsIfNeeded(layoutStyle); | 476 removeTextFillAndStrokeColorsIfNeeded(computedStyle); |
| 477 replaceFontSizeByKeywordIfPossible(layoutStyle, computedStyleAtPosition.
get()); | 477 replaceFontSizeByKeywordIfPossible(computedStyle, computedStyleAtPositio
n.get()); |
| 478 } | 478 } |
| 479 | 479 |
| 480 m_fixedPitchFontType = computedStyleAtPosition->fixedPitchFontType(); | 480 m_fixedPitchFontType = computedStyleAtPosition->fixedPitchFontType(); |
| 481 extractFontSizeDelta(); | 481 extractFontSizeDelta(); |
| 482 } | 482 } |
| 483 | 483 |
| 484 void EditingStyle::removeTextFillAndStrokeColorsIfNeeded(const LayoutStyle* layo
utStyle) | 484 void EditingStyle::removeTextFillAndStrokeColorsIfNeeded(const ComputedStyle* co
mputedStyle) |
| 485 { | 485 { |
| 486 // If a node's text fill color is currentColor, then its children use | 486 // If a node's text fill color is currentColor, then its children use |
| 487 // their font-color as their text fill color (they don't | 487 // their font-color as their text fill color (they don't |
| 488 // inherit it). Likewise for stroke color. | 488 // inherit it). Likewise for stroke color. |
| 489 if (layoutStyle->textFillColor().isCurrentColor()) | 489 if (computedStyle->textFillColor().isCurrentColor()) |
| 490 m_mutableStyle->removeProperty(CSSPropertyWebkitTextFillColor); | 490 m_mutableStyle->removeProperty(CSSPropertyWebkitTextFillColor); |
| 491 if (layoutStyle->textStrokeColor().isCurrentColor()) | 491 if (computedStyle->textStrokeColor().isCurrentColor()) |
| 492 m_mutableStyle->removeProperty(CSSPropertyWebkitTextStrokeColor); | 492 m_mutableStyle->removeProperty(CSSPropertyWebkitTextStrokeColor); |
| 493 } | 493 } |
| 494 | 494 |
| 495 void EditingStyle::setProperty(CSSPropertyID propertyID, const String& value, bo
ol important) | 495 void EditingStyle::setProperty(CSSPropertyID propertyID, const String& value, bo
ol important) |
| 496 { | 496 { |
| 497 if (!m_mutableStyle) | 497 if (!m_mutableStyle) |
| 498 m_mutableStyle = MutableStylePropertySet::create(); | 498 m_mutableStyle = MutableStylePropertySet::create(); |
| 499 | 499 |
| 500 m_mutableStyle->setProperty(propertyID, value, important); | 500 m_mutableStyle->setProperty(propertyID, value, important); |
| 501 } | 501 } |
| 502 | 502 |
| 503 void EditingStyle::replaceFontSizeByKeywordIfPossible(const LayoutStyle* layoutS
tyle, CSSComputedStyleDeclaration* computedStyle) | 503 void EditingStyle::replaceFontSizeByKeywordIfPossible(const ComputedStyle* compu
tedStyle, CSSComputedStyleDeclaration* cssComputedStyle) |
| 504 { | 504 { |
| 505 ASSERT(layoutStyle); | 505 ASSERT(computedStyle); |
| 506 if (layoutStyle->fontDescription().keywordSize()) | 506 if (computedStyle->fontDescription().keywordSize()) |
| 507 m_mutableStyle->setProperty(CSSPropertyFontSize, computedStyle->getFontS
izeCSSValuePreferringKeyword()->cssText()); | 507 m_mutableStyle->setProperty(CSSPropertyFontSize, cssComputedStyle->getFo
ntSizeCSSValuePreferringKeyword()->cssText()); |
| 508 } | 508 } |
| 509 | 509 |
| 510 void EditingStyle::extractFontSizeDelta() | 510 void EditingStyle::extractFontSizeDelta() |
| 511 { | 511 { |
| 512 if (!m_mutableStyle) | 512 if (!m_mutableStyle) |
| 513 return; | 513 return; |
| 514 | 514 |
| 515 if (m_mutableStyle->getPropertyCSSValue(CSSPropertyFontSize)) { | 515 if (m_mutableStyle->getPropertyCSSValue(CSSPropertyFontSize)) { |
| 516 // Explicit font size overrides any delta. | 516 // Explicit font size overrides any delta. |
| 517 m_mutableStyle->removeProperty(CSSPropertyWebkitFontSizeDelta); | 517 m_mutableStyle->removeProperty(CSSPropertyWebkitFontSizeDelta); |
| (...skipping 903 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1421 , m_applyItalic(false) | 1421 , m_applyItalic(false) |
| 1422 , m_applyUnderline(false) | 1422 , m_applyUnderline(false) |
| 1423 , m_applyLineThrough(false) | 1423 , m_applyLineThrough(false) |
| 1424 , m_applySubscript(false) | 1424 , m_applySubscript(false) |
| 1425 , m_applySuperscript(false) | 1425 , m_applySuperscript(false) |
| 1426 { | 1426 { |
| 1427 Document* document = position.document(); | 1427 Document* document = position.document(); |
| 1428 if (!style || !style->style() || !document || !document->frame() || !positio
n.element()) | 1428 if (!style || !style->style() || !document || !document->frame() || !positio
n.element()) |
| 1429 return; | 1429 return; |
| 1430 | 1430 |
| 1431 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> computedStyle = position.com
putedStyle(); | 1431 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> computedStyle = position.ens
ureComputedStyle(); |
| 1432 // FIXME: take care of background-color in effect | 1432 // FIXME: take care of background-color in effect |
| 1433 RefPtrWillBeRawPtr<MutableStylePropertySet> mutableStyle = getPropertiesNotI
n(style->style(), computedStyle.get()); | 1433 RefPtrWillBeRawPtr<MutableStylePropertySet> mutableStyle = getPropertiesNotI
n(style->style(), computedStyle.get()); |
| 1434 ASSERT(mutableStyle); | 1434 ASSERT(mutableStyle); |
| 1435 | 1435 |
| 1436 reconcileTextDecorationProperties(mutableStyle.get()); | 1436 reconcileTextDecorationProperties(mutableStyle.get()); |
| 1437 if (!document->frame()->editor().shouldStyleWithCSS()) | 1437 if (!document->frame()->editor().shouldStyleWithCSS()) |
| 1438 extractTextStyles(document, mutableStyle.get(), computedStyle->fixedPitc
hFontType()); | 1438 extractTextStyles(document, mutableStyle.get(), computedStyle->fixedPitc
hFontType()); |
| 1439 | 1439 |
| 1440 // Changing the whitespace style in a tab span would collapse the tab into a
space. | 1440 // Changing the whitespace style in a tab span would collapse the tab into a
space. |
| 1441 if (isTabHTMLSpanElementTextNode(position.deprecatedNode()) || isTabHTMLSpan
Element((position.deprecatedNode()))) | 1441 if (isTabHTMLSpanElementTextNode(position.deprecatedNode()) || isTabHTMLSpan
Element((position.deprecatedNode()))) |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1679 { | 1679 { |
| 1680 for (Node* ancestor = node; ancestor; ancestor = ancestor->parentNode()) { | 1680 for (Node* ancestor = node; ancestor; ancestor = ancestor->parentNode()) { |
| 1681 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> ancestorStyle = CSSCompu
tedStyleDeclaration::create(ancestor); | 1681 RefPtrWillBeRawPtr<CSSComputedStyleDeclaration> ancestorStyle = CSSCompu
tedStyleDeclaration::create(ancestor); |
| 1682 if (!hasTransparentBackgroundColor(ancestorStyle.get())) | 1682 if (!hasTransparentBackgroundColor(ancestorStyle.get())) |
| 1683 return ancestorStyle->getPropertyCSSValue(CSSPropertyBackgroundColor
); | 1683 return ancestorStyle->getPropertyCSSValue(CSSPropertyBackgroundColor
); |
| 1684 } | 1684 } |
| 1685 return nullptr; | 1685 return nullptr; |
| 1686 } | 1686 } |
| 1687 | 1687 |
| 1688 } | 1688 } |
| OLD | NEW |