OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All r
ights reserved. |
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
(...skipping 19 matching lines...) Expand all Loading... |
30 | 30 |
31 #include "CSSValueKeywords.h" | 31 #include "CSSValueKeywords.h" |
32 #include "core/css/CSSBorderImageSliceValue.h" | 32 #include "core/css/CSSBorderImageSliceValue.h" |
33 #include "core/css/CSSPrimitiveValue.h" | 33 #include "core/css/CSSPrimitiveValue.h" |
34 #include "core/css/CSSPrimitiveValueMappings.h" | 34 #include "core/css/CSSPrimitiveValueMappings.h" |
35 #include "core/css/CSSTimingFunctionValue.h" | 35 #include "core/css/CSSTimingFunctionValue.h" |
36 #include "core/css/Pair.h" | 36 #include "core/css/Pair.h" |
37 #include "core/css/Rect.h" | 37 #include "core/css/Rect.h" |
38 #include "core/css/resolver/StyleResolverState.h" | 38 #include "core/css/resolver/StyleResolverState.h" |
39 #include "core/platform/animation/CSSAnimationData.h" | 39 #include "core/platform/animation/CSSAnimationData.h" |
| 40 #include "core/rendering/style/BorderImageLengthBox.h" |
40 #include "core/rendering/style/FillLayer.h" | 41 #include "core/rendering/style/FillLayer.h" |
41 | 42 |
42 namespace WebCore { | 43 namespace WebCore { |
43 | 44 |
44 const RenderStyle* CSSToStyleMap::style() const | 45 const RenderStyle* CSSToStyleMap::style() const |
45 { | 46 { |
46 return m_state.style(); | 47 return m_state.style(); |
47 } | 48 } |
48 | 49 |
49 const RenderStyle* CSSToStyleMap::rootElementStyle() const | 50 const RenderStyle* CSSToStyleMap::rootElementStyle() const |
(...skipping 508 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
558 } else if (current->isPrimitiveValue()) { | 559 } else if (current->isPrimitiveValue()) { |
559 // Set the appropriate rules for stretch/round/repeat of the slices. | 560 // Set the appropriate rules for stretch/round/repeat of the slices. |
560 mapNinePieceImageRepeat(current, image); | 561 mapNinePieceImageRepeat(current, image); |
561 } | 562 } |
562 } | 563 } |
563 | 564 |
564 if (property == CSSPropertyWebkitBorderImage) { | 565 if (property == CSSPropertyWebkitBorderImage) { |
565 // We have to preserve the legacy behavior of -webkit-border-image and m
ake the border slices | 566 // We have to preserve the legacy behavior of -webkit-border-image and m
ake the border slices |
566 // also set the border widths. We don't need to worry about percentages,
since we don't even support | 567 // also set the border widths. We don't need to worry about percentages,
since we don't even support |
567 // those on real borders yet. | 568 // those on real borders yet. |
568 if (image.borderSlices().top().isFixed()) | 569 if (image.borderSlices().top().isLength() && image.borderSlices().top().
length().isFixed()) |
569 mutableStyle->setBorderTopWidth(image.borderSlices().top().value()); | 570 mutableStyle->setBorderTopWidth(image.borderSlices().top().length().
value()); |
570 if (image.borderSlices().right().isFixed()) | 571 if (image.borderSlices().right().isLength() && image.borderSlices().righ
t().length().isFixed()) |
571 mutableStyle->setBorderRightWidth(image.borderSlices().right().value
()); | 572 mutableStyle->setBorderRightWidth(image.borderSlices().right().lengt
h().value()); |
572 if (image.borderSlices().bottom().isFixed()) | 573 if (image.borderSlices().bottom().isLength() && image.borderSlices().bot
tom().length().isFixed()) |
573 mutableStyle->setBorderBottomWidth(image.borderSlices().bottom().val
ue()); | 574 mutableStyle->setBorderBottomWidth(image.borderSlices().bottom().len
gth().value()); |
574 if (image.borderSlices().left().isFixed()) | 575 if (image.borderSlices().left().isLength() && image.borderSlices().left(
).length().isFixed()) |
575 mutableStyle->setBorderLeftWidth(image.borderSlices().left().value()
); | 576 mutableStyle->setBorderLeftWidth(image.borderSlices().left().length(
).value()); |
576 } | 577 } |
577 } | 578 } |
578 | 579 |
579 void CSSToStyleMap::mapNinePieceImageSlice(CSSValue* value, NinePieceImage& imag
e) const | 580 void CSSToStyleMap::mapNinePieceImageSlice(CSSValue* value, NinePieceImage& imag
e) const |
580 { | 581 { |
581 if (!value || !value->isBorderImageSliceValue()) | 582 if (!value || !value->isBorderImageSliceValue()) |
582 return; | 583 return; |
583 | 584 |
584 // Retrieve the border image value. | 585 // Retrieve the border image value. |
585 CSSBorderImageSliceValue* borderImageSlice = toCSSBorderImageSliceValue(valu
e); | 586 CSSBorderImageSliceValue* borderImageSlice = toCSSBorderImageSliceValue(valu
e); |
(...skipping 16 matching lines...) Expand all Loading... |
602 if (slices->right()->isPercentage()) | 603 if (slices->right()->isPercentage()) |
603 box.m_right = Length(slices->right()->getDoubleValue(), Percent); | 604 box.m_right = Length(slices->right()->getDoubleValue(), Percent); |
604 else | 605 else |
605 box.m_right = Length(slices->right()->getIntValue(CSSPrimitiveValue::CSS
_NUMBER), Fixed); | 606 box.m_right = Length(slices->right()->getIntValue(CSSPrimitiveValue::CSS
_NUMBER), Fixed); |
606 image.setImageSlices(box); | 607 image.setImageSlices(box); |
607 | 608 |
608 // Set our fill mode. | 609 // Set our fill mode. |
609 image.setFill(borderImageSlice->m_fill); | 610 image.setFill(borderImageSlice->m_fill); |
610 } | 611 } |
611 | 612 |
612 LengthBox CSSToStyleMap::mapNinePieceImageQuad(CSSValue* value) const | 613 BorderImageLengthBox CSSToStyleMap::mapNinePieceImageQuad(CSSValue* value) const |
613 { | 614 { |
614 if (!value || !value->isPrimitiveValue()) | 615 if (!value || !value->isPrimitiveValue()) |
615 return LengthBox(); | 616 return BorderImageLengthBox(); |
616 | 617 |
617 // Get our zoom value. | 618 // Get our zoom value. |
618 float zoom = useSVGZoomRules() ? 1.0f : style()->effectiveZoom(); | 619 float zoom = useSVGZoomRules() ? 1.0f : style()->effectiveZoom(); |
619 | 620 |
620 // Retrieve the primitive value. | 621 // Retrieve the primitive value. |
621 CSSPrimitiveValue* borderWidths = toCSSPrimitiveValue(value); | 622 CSSPrimitiveValue* borderWidths = toCSSPrimitiveValue(value); |
622 | 623 |
623 // Set up a length box to represent our image slices. | 624 // Set up a length box to represent our image slices. |
624 LengthBox box; // Defaults to 'auto' so we don't have to handle that explici
tly below. | 625 BorderImageLengthBox box; // Defaults to 'auto' so we don't have to handle t
hat explicitly below. |
625 Quad* slices = borderWidths->getQuadValue(); | 626 Quad* slices = borderWidths->getQuadValue(); |
626 if (slices->top()->isNumber()) | 627 if (slices->top()->isNumber()) |
627 box.m_top = Length(slices->top()->getIntValue(), Relative); | 628 box.setTop(slices->top()->getIntValue()); |
628 else if (slices->top()->isPercentage()) | 629 else if (slices->top()->isPercentage()) |
629 box.m_top = Length(slices->top()->getDoubleValue(CSSPrimitiveValue::CSS_
PERCENTAGE), Percent); | 630 box.setTop(Length(slices->top()->getDoubleValue(CSSPrimitiveValue::CSS_P
ERCENTAGE), Percent)); |
630 else if (slices->top()->getValueID() != CSSValueAuto) | 631 else if (slices->top()->getValueID() != CSSValueAuto) |
631 box.m_top = slices->top()->computeLength<Length>(style(), rootElementSty
le(), zoom); | 632 box.setTop(slices->top()->computeLength<Length>(style(), rootElementStyl
e(), zoom)); |
632 | 633 |
633 if (slices->right()->isNumber()) | 634 if (slices->right()->isNumber()) |
634 box.m_right = Length(slices->right()->getIntValue(), Relative); | 635 box.setRight(slices->right()->getIntValue()); |
635 else if (slices->right()->isPercentage()) | 636 else if (slices->right()->isPercentage()) |
636 box.m_right = Length(slices->right()->getDoubleValue(CSSPrimitiveValue::
CSS_PERCENTAGE), Percent); | 637 box.setRight(Length(slices->right()->getDoubleValue(CSSPrimitiveValue::C
SS_PERCENTAGE), Percent)); |
637 else if (slices->right()->getValueID() != CSSValueAuto) | 638 else if (slices->right()->getValueID() != CSSValueAuto) |
638 box.m_right = slices->right()->computeLength<Length>(style(), rootElemen
tStyle(), zoom); | 639 box.setRight(slices->right()->computeLength<Length>(style(), rootElement
Style(), zoom)); |
639 | 640 |
640 if (slices->bottom()->isNumber()) | 641 if (slices->bottom()->isNumber()) |
641 box.m_bottom = Length(slices->bottom()->getIntValue(), Relative); | 642 box.setBottom(slices->bottom()->getIntValue()); |
642 else if (slices->bottom()->isPercentage()) | 643 else if (slices->bottom()->isPercentage()) |
643 box.m_bottom = Length(slices->bottom()->getDoubleValue(CSSPrimitiveValue
::CSS_PERCENTAGE), Percent); | 644 box.setBottom(Length(slices->bottom()->getDoubleValue(CSSPrimitiveValue:
:CSS_PERCENTAGE), Percent)); |
644 else if (slices->bottom()->getValueID() != CSSValueAuto) | 645 else if (slices->bottom()->getValueID() != CSSValueAuto) |
645 box.m_bottom = slices->bottom()->computeLength<Length>(style(), rootElem
entStyle(), zoom); | 646 box.setBottom(slices->bottom()->computeLength<Length>(style(), rootEleme
ntStyle(), zoom)); |
646 | 647 |
647 if (slices->left()->isNumber()) | 648 if (slices->left()->isNumber()) |
648 box.m_left = Length(slices->left()->getIntValue(), Relative); | 649 box.setLeft(slices->left()->getIntValue()); |
649 else if (slices->left()->isPercentage()) | 650 else if (slices->left()->isPercentage()) |
650 box.m_left = Length(slices->left()->getDoubleValue(CSSPrimitiveValue::CS
S_PERCENTAGE), Percent); | 651 box.setLeft(Length(slices->left()->getDoubleValue(CSSPrimitiveValue::CSS
_PERCENTAGE), Percent)); |
651 else if (slices->left()->getValueID() != CSSValueAuto) | 652 else if (slices->left()->getValueID() != CSSValueAuto) |
652 box.m_left = slices->left()->computeLength<Length>(style(), rootElementS
tyle(), zoom); | 653 box.setLeft(slices->left()->computeLength<Length>(style(), rootElementSt
yle(), zoom)); |
653 | 654 |
654 return box; | 655 return box; |
655 } | 656 } |
656 | 657 |
657 void CSSToStyleMap::mapNinePieceImageRepeat(CSSValue* value, NinePieceImage& ima
ge) const | 658 void CSSToStyleMap::mapNinePieceImageRepeat(CSSValue* value, NinePieceImage& ima
ge) const |
658 { | 659 { |
659 if (!value || !value->isPrimitiveValue()) | 660 if (!value || !value->isPrimitiveValue()) |
660 return; | 661 return; |
661 | 662 |
662 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 663 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
696 verticalRule = SpaceImageRule; | 697 verticalRule = SpaceImageRule; |
697 break; | 698 break; |
698 default: // CSSValueRepeat | 699 default: // CSSValueRepeat |
699 verticalRule = RepeatImageRule; | 700 verticalRule = RepeatImageRule; |
700 break; | 701 break; |
701 } | 702 } |
702 image.setVerticalRule(verticalRule); | 703 image.setVerticalRule(verticalRule); |
703 } | 704 } |
704 | 705 |
705 }; | 706 }; |
OLD | NEW |