/* * Copyright (C) 2000 Lars Knoll (knoll@kde.org) * (C) 2000 Antti Koivisto (koivisto@kde.org) * (C) 2000 Dirk Mueller (mueller@kde.org) * Copyright (C) 2003-2017 Apple Inc. All rights reserved. * Copyright (C) 2006 Graham Dennis (graham.dennis@gmail.com) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this library; see the file COPYING.LIB. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * */ #pragma once #include "BasicShapes.h" #include "CSSPropertyNames.h" #include "ClipPathOperation.h" #include "CounterDirectives.h" #include "CursorData.h" #include "DataRef.h" #include "FillLayer.h" #include "LengthPoint.h" #include "LineClampValue.h" #include "NinePieceImage.h" #include "ShapeValue.h" #include "StyleContentAlignmentData.h" #include "StyleSelfAlignmentData.h" #include "WillChangeData.h" #include #include namespace WebCore { class AnimationList; class ContentData; class ShadowData; class StyleDeprecatedFlexibleBoxData; class StyleFilterData; class StyleFlexibleBoxData; class StyleGridData; class StyleGridItemData; class StyleMarqueeData; class StyleMultiColData; class StyleReflection; class StyleResolver; class StyleScrollSnapArea; class StyleScrollSnapPort; class StyleTransformData; struct LengthSize; struct StyleDashboardRegion; // Page size type. // StyleRareNonInheritedData::pageSize is meaningful only when // StyleRareNonInheritedData::pageSizeType is PAGE_SIZE_RESOLVED. enum PageSizeType { PAGE_SIZE_AUTO, // size: auto PAGE_SIZE_AUTO_LANDSCAPE, // size: landscape PAGE_SIZE_AUTO_PORTRAIT, // size: portrait PAGE_SIZE_RESOLVED // Size is fully resolved. }; // This struct is for rarely used non-inherited CSS3, CSS2, and WebKit-specific properties. // By grouping them together, we save space, and only allocate this object when someone // actually uses one of these properties. class StyleRareNonInheritedData : public RefCounted { public: static Ref create() { return adoptRef(*new StyleRareNonInheritedData); } Ref copy() const; ~StyleRareNonInheritedData(); bool operator==(const StyleRareNonInheritedData&) const; bool operator!=(const StyleRareNonInheritedData& other) const { return !(*this == other); } bool contentDataEquivalent(const StyleRareNonInheritedData&) const; bool hasFilters() const; #if ENABLE(FILTERS_LEVEL_2) bool hasBackdropFilters() const; #endif bool hasOpacity() const { return opacity < 1; } bool hasAnimationsOrTransitions() const { return animations || transitions; } float opacity; float aspectRatioDenominator; float aspectRatioNumerator; float perspective; Length perspectiveOriginX; Length perspectiveOriginY; LineClampValue lineClamp; // An Apple extension. IntSize initialLetter; #if ENABLE(DASHBOARD_SUPPORT) Vector dashboardRegions; #endif DataRef deprecatedFlexibleBox; // Flexible box properties DataRef flexibleBox; DataRef marquee; // Marquee properties DataRef multiCol; // CSS3 multicol properties DataRef transform; // Transform properties (rotate, scale, skew, etc.) DataRef filter; // Filter operations (url, sepia, blur, etc.) #if ENABLE(FILTERS_LEVEL_2) DataRef backdropFilter; // Filter operations (url, sepia, blur, etc.) #endif DataRef grid; DataRef gridItem; #if ENABLE(CSS_SCROLL_SNAP) DataRef scrollSnapPort; DataRef scrollSnapArea; #endif std::unique_ptr content; std::unique_ptr counterDirectives; String altText; std::unique_ptr boxShadow; // For box-shadow decorations. RefPtr willChange; // Null indicates 'auto'. RefPtr boxReflect; std::unique_ptr animations; std::unique_ptr transitions; FillLayer mask; NinePieceImage maskBoxImage; LengthSize pageSize; LengthPoint objectPosition; RefPtr shapeOutside; Length shapeMargin; float shapeImageThreshold; RefPtr clipPath; Color textDecorationColor; Color visitedLinkTextDecorationColor; Color visitedLinkBackgroundColor; Color visitedLinkOutlineColor; Color visitedLinkBorderLeftColor; Color visitedLinkBorderRightColor; Color visitedLinkBorderTopColor; Color visitedLinkBorderBottomColor; int order; AtomicString flowThread; AtomicString regionThread; StyleContentAlignmentData alignContent; StyleSelfAlignmentData alignItems; StyleSelfAlignmentData alignSelf; StyleContentAlignmentData justifyContent; StyleSelfAlignmentData justifyItems; StyleSelfAlignmentData justifySelf; #if ENABLE(TOUCH_EVENTS) unsigned touchAction : 1; // TouchAction #endif unsigned regionFragment : 1; // RegionFragment unsigned pageSizeType : 2; // PageSizeType unsigned transformStyle3D : 1; // ETransformStyle3D unsigned backfaceVisibility : 1; // EBackfaceVisibility unsigned userDrag : 2; // EUserDrag unsigned textOverflow : 1; // Whether or not lines that spill out should be truncated with "..." unsigned marginBeforeCollapse : 2; // EMarginCollapse unsigned marginAfterCollapse : 2; // EMarginCollapse unsigned appearance : 6; // EAppearance unsigned borderFit : 1; // EBorderFit unsigned textCombine : 1; // CSS3 text-combine properties unsigned textDecorationStyle : 3; // TextDecorationStyle unsigned aspectRatioType : 2; #if ENABLE(CSS_COMPOSITING) unsigned effectiveBlendMode: 5; // EBlendMode unsigned isolation : 1; // Isolation #endif #if ENABLE(APPLE_PAY) unsigned applePayButtonStyle : 2; unsigned applePayButtonType : 3; #endif unsigned objectFit : 3; // ObjectFit unsigned breakBefore : 4; // BreakBetween unsigned breakAfter : 4; unsigned breakInside : 3; // BreakInside unsigned resize : 2; // EResize unsigned hasAttrContent : 1; unsigned isPlaceholderStyle : 1; private: StyleRareNonInheritedData(); StyleRareNonInheritedData(const StyleRareNonInheritedData&); }; } // namespace WebCore