18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FillLayer.h"
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFillLayer::FillLayer(EFillLayerType type)
286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    : m_next(0)
296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    , m_image(FillLayer::initialFillImage(type))
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_xPosition(FillLayer::initialFillXPosition(type))
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_yPosition(FillLayer::initialFillYPosition(type))
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_attachment(FillLayer::initialFillAttachment(type))
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_clip(FillLayer::initialFillClip(type))
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_origin(FillLayer::initialFillOrigin(type))
35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_repeatX(FillLayer::initialFillRepeatX(type))
36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_repeatY(FillLayer::initialFillRepeatY(type))
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_composite(FillLayer::initialFillComposite(type))
38231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_sizeType(SizeNone)
39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_sizeLength(FillLayer::initialFillSizeLength(type))
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_imageSet(false)
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_attachmentSet(false)
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_clipSet(false)
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_originSet(false)
44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_repeatXSet(false)
45231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_repeatYSet(false)
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_xPosSet(false)
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_yPosSet(false)
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_compositeSet(type == MaskFillLayer)
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_type(type)
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFillLayer::FillLayer(const FillLayer& o)
546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    : m_next(o.m_next ? new FillLayer(*o.m_next) : 0)
556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    , m_image(o.m_image)
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_xPosition(o.m_xPosition)
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_yPosition(o.m_yPosition)
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_attachment(o.m_attachment)
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_clip(o.m_clip)
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_origin(o.m_origin)
61231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_repeatX(o.m_repeatX)
62231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_repeatY(o.m_repeatY)
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_composite(o.m_composite)
64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_sizeType(o.m_sizeType)
65231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_sizeLength(o.m_sizeLength)
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_imageSet(o.m_imageSet)
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_attachmentSet(o.m_attachmentSet)
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_clipSet(o.m_clipSet)
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_originSet(o.m_originSet)
70231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_repeatXSet(o.m_repeatXSet)
71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    , m_repeatYSet(o.m_repeatYSet)
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_xPosSet(o.m_xPosSet)
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_yPosSet(o.m_yPosSet)
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_compositeSet(o.m_compositeSet)
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_type(o.m_type)
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFillLayer::~FillLayer()
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    delete m_next;
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFillLayer& FillLayer::operator=(const FillLayer& o)
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_next != o.m_next) {
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        delete m_next;
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        m_next = o.m_next ? new FillLayer(*o.m_next) : 0;
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_image = o.m_image;
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_xPosition = o.m_xPosition;
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_yPosition = o.m_yPosition;
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_attachment = o.m_attachment;
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_clip = o.m_clip;
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_composite = o.m_composite;
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_origin = o.m_origin;
98231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    m_repeatX = o.m_repeatX;
99231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    m_repeatY = o.m_repeatY;
100231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    m_sizeType = o.m_sizeType;
101231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    m_sizeLength = o.m_sizeLength;
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_imageSet = o.m_imageSet;
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_attachmentSet = o.m_attachmentSet;
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_clipSet = o.m_clipSet;
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_compositeSet = o.m_compositeSet;
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_originSet = o.m_originSet;
108231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    m_repeatXSet = o.m_repeatXSet;
109231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    m_repeatYSet = o.m_repeatYSet;
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_xPosSet = o.m_xPosSet;
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_yPosSet = o.m_yPosSet;
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_type = o.m_type;
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return *this;
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FillLayer::operator==(const FillLayer& o) const
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // We do not check the "isSet" booleans for each property, since those are only used during initial construction
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // to propagate patterns into layers.  All layer comparisons happen after values have all been filled in anyway.
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return StyleImage::imagesEquivalent(m_image.get(), o.m_image.get()) && m_xPosition == o.m_xPosition && m_yPosition == o.m_yPosition &&
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project           m_attachment == o.m_attachment && m_clip == o.m_clip &&
124231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block           m_composite == o.m_composite && m_origin == o.m_origin && m_repeatX == o.m_repeatX &&
125231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block           m_repeatY == o.m_repeatY && m_sizeType == o.m_sizeType && m_sizeLength == o.m_sizeLength &&
126231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block           m_type == o.m_type && ((m_next && o.m_next) ? *m_next == *o.m_next : m_next == o.m_next);
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FillLayer::fillUnsetProperties()
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FillLayer* curr;
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (curr = this; curr && curr->isXPositionSet(); curr = curr->next()) { }
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (curr && curr != this) {
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // We need to fill in the remaining values with the pattern specified.
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        for (FillLayer* pattern = this; curr; curr = curr->next()) {
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            curr->m_xPosition = pattern->m_xPosition;
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            pattern = pattern->next();
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (pattern == curr || !pattern)
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                pattern = this;
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (curr = this; curr && curr->isYPositionSet(); curr = curr->next()) { }
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (curr && curr != this) {
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // We need to fill in the remaining values with the pattern specified.
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        for (FillLayer* pattern = this; curr; curr = curr->next()) {
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            curr->m_yPosition = pattern->m_yPosition;
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            pattern = pattern->next();
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (pattern == curr || !pattern)
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                pattern = this;
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (curr = this; curr && curr->isAttachmentSet(); curr = curr->next()) { }
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (curr && curr != this) {
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // We need to fill in the remaining values with the pattern specified.
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        for (FillLayer* pattern = this; curr; curr = curr->next()) {
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            curr->m_attachment = pattern->m_attachment;
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            pattern = pattern->next();
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (pattern == curr || !pattern)
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                pattern = this;
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (curr = this; curr && curr->isClipSet(); curr = curr->next()) { }
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (curr && curr != this) {
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // We need to fill in the remaining values with the pattern specified.
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        for (FillLayer* pattern = this; curr; curr = curr->next()) {
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            curr->m_clip = pattern->m_clip;
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            pattern = pattern->next();
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (pattern == curr || !pattern)
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                pattern = this;
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (curr = this; curr && curr->isCompositeSet(); curr = curr->next()) { }
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (curr && curr != this) {
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // We need to fill in the remaining values with the pattern specified.
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        for (FillLayer* pattern = this; curr; curr = curr->next()) {
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            curr->m_composite = pattern->m_composite;
1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            pattern = pattern->next();
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (pattern == curr || !pattern)
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                pattern = this;
1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (curr = this; curr && curr->isOriginSet(); curr = curr->next()) { }
1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (curr && curr != this) {
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // We need to fill in the remaining values with the pattern specified.
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        for (FillLayer* pattern = this; curr; curr = curr->next()) {
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            curr->m_origin = pattern->m_origin;
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            pattern = pattern->next();
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (pattern == curr || !pattern)
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                pattern = this;
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
198231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    for (curr = this; curr && curr->isRepeatXSet(); curr = curr->next()) { }
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (curr && curr != this) {
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // We need to fill in the remaining values with the pattern specified.
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        for (FillLayer* pattern = this; curr; curr = curr->next()) {
202231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            curr->m_repeatX = pattern->m_repeatX;
203231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            pattern = pattern->next();
204231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            if (pattern == curr || !pattern)
205231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block                pattern = this;
206231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        }
207231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    }
208231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
209231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    for (curr = this; curr && curr->isRepeatYSet(); curr = curr->next()) { }
210231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    if (curr && curr != this) {
211231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        // We need to fill in the remaining values with the pattern specified.
212231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block        for (FillLayer* pattern = this; curr; curr = curr->next()) {
213231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            curr->m_repeatY = pattern->m_repeatY;
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            pattern = pattern->next();
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (pattern == curr || !pattern)
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                pattern = this;
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (curr = this; curr && curr->isSizeSet(); curr = curr->next()) { }
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (curr && curr != this) {
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // We need to fill in the remaining values with the pattern specified.
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        for (FillLayer* pattern = this; curr; curr = curr->next()) {
224231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            curr->m_sizeType = pattern->m_sizeType;
225231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block            curr->m_sizeLength = pattern->m_sizeLength;
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            pattern = pattern->next();
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (pattern == curr || !pattern)
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                pattern = this;
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid FillLayer::cullEmptyLayers()
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FillLayer* next;
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    for (FillLayer* p = this; p; p = next) {
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        next = p->m_next;
2382bde8e466a4451c7319e3a072d118917957d6554Steve Block        if (next && !next->isImageSet()) {
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            delete next;
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            p->m_next = 0;
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            break;
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool FillLayer::containsImage(StyleImage* s) const
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (!s)
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return false;
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_image && *s == *m_image)
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return true;
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (m_next)
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return m_next->containsImage(s);
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
257d0825bca7fe65beaee391d30da42e937db621564Steve Blockbool FillLayer::imagesAreLoaded() const
258d0825bca7fe65beaee391d30da42e937db621564Steve Block{
259d0825bca7fe65beaee391d30da42e937db621564Steve Block    const FillLayer* curr;
260d0825bca7fe65beaee391d30da42e937db621564Steve Block    for (curr = this; curr; curr = curr->next()) {
261d0825bca7fe65beaee391d30da42e937db621564Steve Block        if (curr->m_image && !curr->m_image->isLoaded())
262d0825bca7fe65beaee391d30da42e937db621564Steve Block            return false;
263d0825bca7fe65beaee391d30da42e937db621564Steve Block    }
264d0825bca7fe65beaee391d30da42e937db621564Steve Block
265d0825bca7fe65beaee391d30da42e937db621564Steve Block    return true;
266d0825bca7fe65beaee391d30da42e937db621564Steve Block}
267d0825bca7fe65beaee391d30da42e937db621564Steve Block
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
269