Home | History | Annotate | Download | only in style
      1 /*
      2  * Copyright (C) 1999 Antti Koivisto (koivisto (at) kde.org)
      3  * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
      4  *
      5  * This library is free software; you can redistribute it and/or
      6  * modify it under the terms of the GNU Library General Public
      7  * License as published by the Free Software Foundation; either
      8  * version 2 of the License, or (at your option) any later version.
      9  *
     10  * This library is distributed in the hope that it will be useful,
     11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13  * Library General Public License for more details.
     14  *
     15  * You should have received a copy of the GNU Library General Public License
     16  * along with this library; see the file COPYING.LIB.  If not, write to
     17  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     18  * Boston, MA 02110-1301, USA.
     19  *
     20  */
     21 
     22 #include "config.h"
     23 #include "StyleRareInheritedData.h"
     24 
     25 #include "CursorList.h"
     26 #include "QuotesData.h"
     27 #include "RenderStyle.h"
     28 #include "RenderStyleConstants.h"
     29 #include "ShadowData.h"
     30 
     31 namespace WebCore {
     32 
     33 StyleRareInheritedData::StyleRareInheritedData()
     34     : textStrokeWidth(RenderStyle::initialTextStrokeWidth())
     35 #ifdef ANDROID_CSS_TAP_HIGHLIGHT_COLOR
     36     , tapHighlightColor(RenderStyle::initialTapHighlightColor())
     37 #endif
     38     , textShadow(0)
     39     , indent(RenderStyle::initialTextIndent())
     40     , m_effectiveZoom(RenderStyle::initialZoom())
     41     , widows(RenderStyle::initialWidows())
     42     , orphans(RenderStyle::initialOrphans())
     43     , textSecurity(RenderStyle::initialTextSecurity())
     44     , userModify(READ_ONLY)
     45     , wordBreak(RenderStyle::initialWordBreak())
     46     , wordWrap(RenderStyle::initialWordWrap())
     47     , nbspMode(NBNORMAL)
     48     , khtmlLineBreak(LBNORMAL)
     49     , textSizeAdjust(RenderStyle::initialTextSizeAdjust())
     50     , resize(RenderStyle::initialResize())
     51     , userSelect(RenderStyle::initialUserSelect())
     52     , colorSpace(ColorSpaceDeviceRGB)
     53     , speak(SpeakNormal)
     54     , hyphens(HyphensManual)
     55     , textEmphasisFill(TextEmphasisFillFilled)
     56     , textEmphasisMark(TextEmphasisMarkNone)
     57     , textEmphasisPosition(TextEmphasisPositionOver)
     58     , m_lineBoxContain(RenderStyle::initialLineBoxContain())
     59     , hyphenationLimitBefore(-1)
     60     , hyphenationLimitAfter(-1)
     61 {
     62 }
     63 
     64 StyleRareInheritedData::StyleRareInheritedData(const StyleRareInheritedData& o)
     65     : RefCounted<StyleRareInheritedData>()
     66     , textStrokeColor(o.textStrokeColor)
     67     , textStrokeWidth(o.textStrokeWidth)
     68     , textFillColor(o.textFillColor)
     69 #ifdef ANDROID_CSS_TAP_HIGHLIGHT_COLOR
     70     , tapHighlightColor(o.tapHighlightColor)
     71 #endif
     72     , textShadow(o.textShadow ? new ShadowData(*o.textShadow) : 0)
     73     , highlight(o.highlight)
     74     , cursorData(o.cursorData)
     75     , indent(o.indent)
     76     , m_effectiveZoom(o.m_effectiveZoom)
     77     , widows(o.widows)
     78     , orphans(o.orphans)
     79     , textSecurity(o.textSecurity)
     80     , userModify(o.userModify)
     81     , wordBreak(o.wordBreak)
     82     , wordWrap(o.wordWrap)
     83     , nbspMode(o.nbspMode)
     84     , khtmlLineBreak(o.khtmlLineBreak)
     85     , textSizeAdjust(o.textSizeAdjust)
     86     , resize(o.resize)
     87     , userSelect(o.userSelect)
     88     , colorSpace(o.colorSpace)
     89     , speak(o.speak)
     90     , hyphens(o.hyphens)
     91     , textEmphasisFill(o.textEmphasisFill)
     92     , textEmphasisMark(o.textEmphasisMark)
     93     , textEmphasisPosition(o.textEmphasisPosition)
     94     , m_lineBoxContain(o.m_lineBoxContain)
     95     , hyphenationString(o.hyphenationString)
     96     , hyphenationLimitBefore(o.hyphenationLimitBefore)
     97     , hyphenationLimitAfter(o.hyphenationLimitAfter)
     98     , locale(o.locale)
     99     , textEmphasisCustomMark(o.textEmphasisCustomMark)
    100 {
    101 }
    102 
    103 StyleRareInheritedData::~StyleRareInheritedData()
    104 {
    105     delete textShadow;
    106 }
    107 
    108 static bool cursorDataEquivalent(const CursorList* c1, const CursorList* c2)
    109 {
    110     if (c1 == c2)
    111         return true;
    112     if ((!c1 && c2) || (c1 && !c2))
    113         return false;
    114     return (*c1 == *c2);
    115 }
    116 
    117 bool StyleRareInheritedData::operator==(const StyleRareInheritedData& o) const
    118 {
    119     return textStrokeColor == o.textStrokeColor
    120         && textStrokeWidth == o.textStrokeWidth
    121         && textFillColor == o.textFillColor
    122         && textEmphasisColor == o.textEmphasisColor
    123         && shadowDataEquivalent(o)
    124         && highlight == o.highlight
    125         && cursorDataEquivalent(cursorData.get(), o.cursorData.get())
    126         && indent == o.indent
    127         && m_effectiveZoom == o.m_effectiveZoom
    128         && widows == o.widows
    129         && orphans == o.orphans
    130         && textSecurity == o.textSecurity
    131         && userModify == o.userModify
    132         && wordBreak == o.wordBreak
    133         && wordWrap == o.wordWrap
    134         && nbspMode == o.nbspMode
    135         && khtmlLineBreak == o.khtmlLineBreak
    136         && textSizeAdjust == o.textSizeAdjust
    137 #ifdef ANDROID_CSS_TAP_HIGHLIGHT_COLOR
    138         && tapHighlightColor == o.tapHighlightColor
    139 #endif
    140         && resize == o.resize
    141         && userSelect == o.userSelect
    142         && colorSpace == o.colorSpace
    143         && speak == o.speak
    144         && hyphens == o.hyphens
    145         && hyphenationLimitBefore == o.hyphenationLimitBefore
    146         && hyphenationLimitAfter == o.hyphenationLimitAfter
    147         && textEmphasisFill == o.textEmphasisFill
    148         && textEmphasisMark == o.textEmphasisMark
    149         && textEmphasisPosition == o.textEmphasisPosition
    150         && m_lineBoxContain == o.m_lineBoxContain
    151         && hyphenationString == o.hyphenationString
    152         && locale == o.locale
    153         && textEmphasisCustomMark == o.textEmphasisCustomMark
    154         && *quotes == *o.quotes;
    155 }
    156 
    157 bool StyleRareInheritedData::shadowDataEquivalent(const StyleRareInheritedData& o) const
    158 {
    159     if ((!textShadow && o.textShadow) || (textShadow && !o.textShadow))
    160         return false;
    161     if (textShadow && o.textShadow && (*textShadow != *o.textShadow))
    162         return false;
    163     return true;
    164 }
    165 
    166 } // namespace WebCore
    167