OLD | NEW |
1 /* | 1 /* |
2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) | 2 * (C) 1999-2003 Lars Knoll (knoll@kde.org) |
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv
ed. | 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2012 Apple Inc. All rights reserv
ed. |
4 * | 4 * |
5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
9 * | 9 * |
10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
597 } | 597 } |
598 | 598 |
599 double CSSPrimitiveValue::computeLengthDouble(const CSSToLengthConversionData& c
onversionData) | 599 double CSSPrimitiveValue::computeLengthDouble(const CSSToLengthConversionData& c
onversionData) |
600 { | 600 { |
601 // The logic in this function is duplicated in MediaValues::computeLength | 601 // The logic in this function is duplicated in MediaValues::computeLength |
602 // because MediaValues::computeLength needs nearly identical logic, but we h
aven't found a way to make | 602 // because MediaValues::computeLength needs nearly identical logic, but we h
aven't found a way to make |
603 // CSSPrimitiveValue::computeLengthDouble more generic (to solve both cases)
without hurting performance. | 603 // CSSPrimitiveValue::computeLengthDouble more generic (to solve both cases)
without hurting performance. |
604 if (m_primitiveUnitType == CSS_CALC) | 604 if (m_primitiveUnitType == CSS_CALC) |
605 return m_value.calc->computeLengthPx(conversionData); | 605 return m_value.calc->computeLengthPx(conversionData); |
606 | 606 |
607 const RenderStyle& style = conversionData.style(); | |
608 const RenderStyle* rootStyle = conversionData.rootStyle(); | |
609 bool computingFontSize = conversionData.computingFontSize(); | |
610 | |
611 double factor; | 607 double factor; |
612 | 608 |
613 switch (primitiveType()) { | 609 switch (primitiveType()) { |
614 case CSS_EMS: | 610 case CSS_EMS: |
615 factor = computingFontSize ? style.fontDescription().specifiedSize()
: style.fontDescription().computedSize(); | 611 factor = conversionData.emFontSize(); |
616 break; | 612 break; |
617 case CSS_EXS: | 613 case CSS_EXS: |
618 // FIXME: We have a bug right now where the zoom will be applied twi
ce to EX units. | 614 factor = conversionData.exFontSize(); |
619 // We really need to compute EX using fontMetrics for the original s
pecifiedSize and not use | |
620 // our actual constructed rendering font. | |
621 if (style.fontMetrics().hasXHeight()) | |
622 factor = style.fontMetrics().xHeight(); | |
623 else | |
624 factor = (computingFontSize ? style.fontDescription().specifiedS
ize() : style.fontDescription().computedSize()) / 2.0; | |
625 break; | 615 break; |
626 case CSS_REMS: | 616 case CSS_REMS: |
627 if (rootStyle) | 617 factor = conversionData.remFontSize(); |
628 factor = computingFontSize ? rootStyle->fontDescription().specif
iedSize() : rootStyle->fontDescription().computedSize(); | |
629 else | |
630 factor = 1.0; | |
631 break; | 618 break; |
632 case CSS_CHS: | 619 case CSS_CHS: |
633 factor = style.fontMetrics().zeroWidth(); | 620 factor = conversionData.chFontSize(); |
634 break; | 621 break; |
635 case CSS_PX: | 622 case CSS_PX: |
636 factor = 1.0; | 623 factor = 1.0; |
637 break; | 624 break; |
638 case CSS_CM: | 625 case CSS_CM: |
639 factor = cssPixelsPerCentimeter; | 626 factor = cssPixelsPerCentimeter; |
640 break; | 627 break; |
641 case CSS_MM: | 628 case CSS_MM: |
642 factor = cssPixelsPerMillimeter; | 629 factor = cssPixelsPerMillimeter; |
643 break; | 630 break; |
(...skipping 24 matching lines...) Expand all Loading... |
668 return -1.0; | 655 return -1.0; |
669 default: | 656 default: |
670 ASSERT_NOT_REACHED(); | 657 ASSERT_NOT_REACHED(); |
671 return -1.0; | 658 return -1.0; |
672 } | 659 } |
673 | 660 |
674 // We do not apply the zoom factor when we are computing the value of the fo
nt-size property. The zooming | 661 // We do not apply the zoom factor when we are computing the value of the fo
nt-size property. The zooming |
675 // for font sizes is much more complicated, since we have to worry about enf
orcing the minimum font size preference | 662 // for font sizes is much more complicated, since we have to worry about enf
orcing the minimum font size preference |
676 // as well as enforcing the implicit "smart minimum." | 663 // as well as enforcing the implicit "smart minimum." |
677 double result = getDoubleValue() * factor; | 664 double result = getDoubleValue() * factor; |
678 if (computingFontSize || isFontRelativeLength()) | 665 if (isFontRelativeLength()) |
679 return result; | 666 return result; |
680 | 667 |
681 return result * conversionData.zoom(); | 668 return result * conversionData.zoom(); |
682 } | 669 } |
683 | 670 |
684 void CSSPrimitiveValue::accumulateLengthArray(CSSLengthArray& lengthArray, doubl
e multiplier) const | 671 void CSSPrimitiveValue::accumulateLengthArray(CSSLengthArray& lengthArray, doubl
e multiplier) const |
685 { | 672 { |
686 ASSERT(lengthArray.size() == LengthUnitTypeCount); | 673 ASSERT(lengthArray.size() == LengthUnitTypeCount); |
687 | 674 |
688 if (m_primitiveUnitType == CSS_CALC) { | 675 if (m_primitiveUnitType == CSS_CALC) { |
(...skipping 736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1425 visitor->trace(m_value.shape); | 1412 visitor->trace(m_value.shape); |
1426 break; | 1413 break; |
1427 default: | 1414 default: |
1428 break; | 1415 break; |
1429 } | 1416 } |
1430 #endif | 1417 #endif |
1431 CSSValue::traceAfterDispatch(visitor); | 1418 CSSValue::traceAfterDispatch(visitor); |
1432 } | 1419 } |
1433 | 1420 |
1434 } // namespace blink | 1421 } // namespace blink |
OLD | NEW |