Changeset 40877 in webkit


Ignore:
Timestamp:
Feb 11, 2009, 4:09:52 PM (17 years ago)
Author:
cmarrin@apple.com
Message:

Reviewed by Dave Hyatt.

https://bugs.webkit.org/show_bug.cgi?id=23905

Adds support for 3D CSS properties (transform-style-3d, perspective,
perspective-origin, and backface-visibility) to RenderStyle and friends

Location:
trunk/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r40876 r40877  
     12009-02-11  Chris Marrin  <cmarrin@apple.com>
     2
     3        Reviewed by Dave Hyatt.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=23905
     6
     7        Adds support for 3D CSS properties (transform-style-3d, perspective,
     8        perspective-origin, and backface-visibility) to RenderStyle and friends
     9
     10        * platform/graphics/transforms/TransformOperation.h
     11        * rendering/style/RenderStyle.cpp:
     12        (WebCore::RenderStyle::diff):
     13        (WebCore::RenderStyle::applyTransform):
     14        * rendering/style/RenderStyle.h:
     15        (WebCore::InheritedFlags::transformOriginZ):
     16        (WebCore::InheritedFlags::hasTransformRelatedProperty):
     17        (WebCore::InheritedFlags::transformStyle3D):
     18        (WebCore::InheritedFlags::backfaceVisibility):
     19        (WebCore::InheritedFlags::perspective):
     20        (WebCore::InheritedFlags::perspectiveOriginX):
     21        (WebCore::InheritedFlags::perspectiveOriginY):
     22        (WebCore::InheritedFlags::setTransformOriginZ):
     23        (WebCore::InheritedFlags::setTransformStyle3D):
     24        (WebCore::InheritedFlags::setBackfaceVisibility):
     25        (WebCore::InheritedFlags::setPerspective):
     26        (WebCore::InheritedFlags::setPerspectiveOriginX):
     27        (WebCore::InheritedFlags::setPerspectiveOriginY):
     28        (WebCore::InheritedFlags::initialTransformOriginZ):
     29        (WebCore::InheritedFlags::initialTransformStyle3D):
     30        (WebCore::InheritedFlags::initialBackfaceVisibility):
     31        (WebCore::InheritedFlags::initialPerspective):
     32        (WebCore::InheritedFlags::initialPerspectiveOriginX):
     33        (WebCore::InheritedFlags::initialPerspectiveOriginY):
     34        * rendering/style/RenderStyleConstants.h:
     35        (WebCore::):
     36        * rendering/style/StyleRareNonInheritedData.cpp:
     37        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
     38        (WebCore::StyleRareNonInheritedData::operator==):
     39        * rendering/style/StyleRareNonInheritedData.h:
     40        * rendering/style/StyleTransformData.cpp:
     41        (WebCore::StyleTransformData::StyleTransformData):
     42        (WebCore::StyleTransformData::operator==):
     43        * rendering/style/StyleTransformData.h:
     44
    1452009-02-11  Simon Fraser  <simon.fraser@apple.com>
    246
  • trunk/WebCore/platform/graphics/transforms/TransformOperation.h

    r40861 r40877  
    4444        SKEW_X, SKEW_Y, SKEW,
    4545        MATRIX,
    46 #if ENABLE(3D_TRANSFORMS)
    4746        SCALE_Z, SCALE_3D,
    4847        TRANSLATE_Z, TRANSLATE_3D,
     
    5049        MATRIX_3D,
    5150        PERSPECTIVE,
    52 #endif
    5351        IDENTITY, NONE
    5452    };
  • trunk/WebCore/rendering/style/RenderStyle.cpp

    r40863 r40877  
    336336        }
    337337
     338#if !USE(ACCELERATED_COMPOSITING)
     339        if (rareNonInheritedData.get() != other->rareNonInheritedData.get()) {
     340            if (rareNonInheritedData->m_transformStyle3D != other->rareNonInheritedData->m_transformStyle3D ||
     341                rareNonInheritedData->m_backfaceVisibility != other->rareNonInheritedData->m_backfaceVisibility ||
     342                rareNonInheritedData->m_perspective != other->rareNonInheritedData->m_perspective ||
     343                rareNonInheritedData->m_perspectiveOriginX != other->rareNonInheritedData->m_perspectiveOriginX ||
     344                rareNonInheritedData->m_perspectiveOriginY != other->rareNonInheritedData->m_perspectiveOriginY)
     345                return StyleDifferenceLayout;
     346        }
     347#endif
     348
    338349#if ENABLE(DASHBOARD_SUPPORT)
    339350        // If regions change, trigger a relayout to re-calc regions.
     
    482493        return StyleDifferenceRepaint;
    483494
     495#if USE(ACCELERATED_COMPOSITING)
     496    if (rareNonInheritedData.get() != other->rareNonInheritedData.get()) {
     497        if (rareNonInheritedData->m_transformStyle3D != other->rareNonInheritedData->m_transformStyle3D ||
     498            rareNonInheritedData->m_backfaceVisibility != other->rareNonInheritedData->m_backfaceVisibility ||
     499            rareNonInheritedData->m_perspective != other->rareNonInheritedData->m_perspective ||
     500            rareNonInheritedData->m_perspectiveOriginX != other->rareNonInheritedData->m_perspectiveOriginX ||
     501            rareNonInheritedData->m_perspectiveOriginY != other->rareNonInheritedData->m_perspectiveOriginY)
     502            return StyleDifferenceRecompositeLayer;
     503    }
     504#endif
     505
    484506    // Cursors are not checked, since they will be set appropriately in response to mouse events,
    485507    // so they don't need to cause any repaint or layout.
     
    634656            if (type != TransformOperation::TRANSLATE_X &&
    635657                    type != TransformOperation::TRANSLATE_Y &&
    636                     type != TransformOperation::TRANSLATE) {
     658                    type != TransformOperation::TRANSLATE &&
     659                    type != TransformOperation::TRANSLATE_Z &&
     660                    type != TransformOperation::TRANSLATE_3D
     661                    ) {
    637662                applyTransformOrigin = true;
    638663                break;
     
    641666    }
    642667
    643     if (applyTransformOrigin)
    644         transform.translate(transformOriginX().calcFloatValue(borderBoxSize.width()), transformOriginY().calcFloatValue(borderBoxSize.height()));
     668    if (applyTransformOrigin) {
     669        transform.translate3d(transformOriginX().calcFloatValue(borderBoxSize.width()), transformOriginY().calcFloatValue(borderBoxSize.height()), transformOriginZ());
     670    }
    645671
    646672    for (i = 0; i < s; i++)
    647673        rareNonInheritedData->m_transform->m_operations.operations()[i]->apply(transform, borderBoxSize);
    648674
    649     if (applyTransformOrigin)
    650         transform.translate(-transformOriginX().calcFloatValue(borderBoxSize.width()), -transformOriginY().calcFloatValue(borderBoxSize.height()));
     675    if (applyTransformOrigin) {
     676        transform.translate3d(-transformOriginX().calcFloatValue(borderBoxSize.width()), -transformOriginY().calcFloatValue(borderBoxSize.height()), -transformOriginZ());
     677    }
    651678}
    652679
  • trunk/WebCore/rendering/style/RenderStyle.h

    r40876 r40877  
    637637    Length transformOriginX() const { return rareNonInheritedData->m_transform->m_x; }
    638638    Length transformOriginY() const { return rareNonInheritedData->m_transform->m_y; }
     639    float transformOriginZ() const { return rareNonInheritedData->m_transform->m_z; }
    639640    bool hasTransform() const { return !rareNonInheritedData->m_transform->m_operations.operations().isEmpty(); }
     641   
     642    // Return true if any transform related property (currently transform, transformStyle3D or perspective)
     643    // indicates that we are transforming
     644    bool hasTransformRelatedProperty() const
     645    {
     646        return hasTransform() || rareNonInheritedData->m_transformStyle3D == TransformStyle3DPreserve3D || rareNonInheritedData->m_perspective > 0
     647        ;
     648    }
    640649
    641650    enum ApplyTransformOrigin { IncludeTransformOrigin, ExcludeTransformOrigin };
     
    659668    const Animation* transitionForProperty(int property) const;
    660669
     670    ETransformStyle3D transformStyle3D() const { return rareNonInheritedData->m_transformStyle3D; }
     671    EBackfaceVisibility backfaceVisibility() const { return rareNonInheritedData->m_backfaceVisibility; }
     672    float perspective() const { return rareNonInheritedData->m_perspective; }
     673    Length perspectiveOriginX() const { return rareNonInheritedData->m_perspectiveOriginX; }
     674    Length perspectiveOriginY() const { return rareNonInheritedData->m_perspectiveOriginY; }
     675   
    661676#if USE(ACCELERATED_COMPOSITING)
    662677    // When set, this ensures that styles compare as different. Used during accelerated animations.
     
    939954    void setTransformOriginX(Length l) { SET_VAR(rareNonInheritedData.access()->m_transform, m_x, l); }
    940955    void setTransformOriginY(Length l) { SET_VAR(rareNonInheritedData.access()->m_transform, m_y, l); }
     956    void setTransformOriginZ(float f) { SET_VAR(rareNonInheritedData.access()->m_transform, m_z, f); }
    941957    // End CSS3 Setters
    942958
     
    958974    void adjustAnimations();
    959975    void adjustTransitions();
     976
     977    void setTransformStyle3D(ETransformStyle3D b) { SET_VAR(rareNonInheritedData, m_transformStyle3D, b); }
     978    void setBackfaceVisibility(EBackfaceVisibility b) { SET_VAR(rareNonInheritedData, m_backfaceVisibility, b); }
     979    void setPerspective(float p) { SET_VAR(rareNonInheritedData, m_perspective, p); }
     980    void setPerspectiveOriginX(Length l) { SET_VAR(rareNonInheritedData, m_perspectiveOriginX, l); }
     981    void setPerspectiveOriginY(Length l) { SET_VAR(rareNonInheritedData, m_perspectiveOriginY, l); }
    960982
    961983#if USE(ACCELERATED_COMPOSITING)
     
    11261148    static Length initialTransformOriginY() { return Length(50.0, Percent); }
    11271149    static EPointerEvents initialPointerEvents() { return PE_AUTO; }
     1150    static float initialTransformOriginZ() { return 0; }
     1151    static ETransformStyle3D initialTransformStyle3D() { return TransformStyle3DFlat; }
     1152    static EBackfaceVisibility initialBackfaceVisibility() { return BackfaceVisibilityVisible; }
     1153    static float initialPerspective() { return 0; }
     1154    static Length initialPerspectiveOriginX() { return Length(50.0, Percent); }
     1155    static Length initialPerspectiveOriginY() { return Length(50.0, Percent); }
    11281156
    11291157    // Keep these at the end.
  • trunk/WebCore/rendering/style/RenderStyleConstants.h

    r40863 r40877  
    297297};
    298298
     299enum ETransformStyle3D {
     300    TransformStyle3DFlat, TransformStyle3DPreserve3D
     301};
     302
     303enum EBackfaceVisibility {
     304    BackfaceVisibilityVisible, BackfaceVisibilityHidden
     305};
     306
    299307} // namespace WebCore
    300308
  • trunk/WebCore/rendering/style/StyleRareNonInheritedData.cpp

    r40876 r40877  
    5050    , m_transitions(0)
    5151    , m_mask(FillLayer(MaskFillLayer))
     52    , m_transformStyle3D(RenderStyle::initialTransformStyle3D())
     53    , m_backfaceVisibility(RenderStyle::initialBackfaceVisibility())
     54    , m_perspective(RenderStyle::initialPerspective())
     55    , m_perspectiveOriginX(RenderStyle::initialPerspectiveOriginX())
     56    , m_perspectiveOriginY(RenderStyle::initialPerspectiveOriginY())
    5257#if ENABLE(XBL)
    5358    , bindingURI(0)
     
    8287    , m_mask(o.m_mask)
    8388    , m_maskBoxImage(o.m_maskBoxImage)
     89    , m_transformStyle3D(o.m_transformStyle3D)
     90    , m_backfaceVisibility(o.m_backfaceVisibility)
     91    , m_perspective(o.m_perspective)
     92    , m_perspectiveOriginX(o.m_perspectiveOriginX)
     93    , m_perspectiveOriginY(o.m_perspectiveOriginY)
    8494#if ENABLE(XBL)
    8595    , bindingURI(o.bindingURI ? o.bindingURI->copy() : 0)
     
    136146        && bindingsEquivalent(o)
    137147#endif
     148        && (m_transformStyle3D == o.m_transformStyle3D)
     149        && (m_backfaceVisibility == o.m_backfaceVisibility)
     150        && (m_perspective == o.m_perspective)
     151        && (m_perspectiveOriginX == o.m_perspectiveOriginX)
     152        && (m_perspectiveOriginY == o.m_perspectiveOriginY)
    138153        ;
    139154}
  • trunk/WebCore/rendering/style/StyleRareNonInheritedData.h

    r40876 r40877  
    3131#include "FillLayer.h"
    3232#include "NinePieceImage.h"
     33#include "StyleTransformData.h"
    3334#include <wtf/OwnPtr.h>
    3435#include <wtf/PassRefPtr.h>
     
    111112    NinePieceImage m_maskBoxImage;
    112113
     114    ETransformStyle3D m_transformStyle3D;
     115    EBackfaceVisibility m_backfaceVisibility;
     116    float m_perspective;
     117    Length m_perspectiveOriginX;
     118    Length m_perspectiveOriginY;
     119
    113120#if ENABLE(XBL)
    114121    OwnPtr<BindingURI> bindingURI; // The XBL binding URI list.
  • trunk/WebCore/rendering/style/StyleTransformData.cpp

    r36593 r40877  
    3131    , m_x(RenderStyle::initialTransformOriginX())
    3232    , m_y(RenderStyle::initialTransformOriginY())
     33    , m_z(RenderStyle::initialTransformOriginZ())
    3334{
    3435}
     
    3940    , m_x(o.m_x)
    4041    , m_y(o.m_y)
     42    , m_z(o.m_z)
    4143{
    4244}
     
    4446bool StyleTransformData::operator==(const StyleTransformData& o) const
    4547{
    46     return m_x == o.m_x && m_y == o.m_y && m_operations == o.m_operations;
     48    return m_x == o.m_x && m_y == o.m_y && m_z == o.m_z && m_operations == o.m_operations;
    4749}
    4850
  • trunk/WebCore/rendering/style/StyleTransformData.h

    r36593 r40877  
    4747    Length m_x;
    4848    Length m_y;
     49    float m_z;
    4950
    5051private:
Note: See TracChangeset for help on using the changeset viewer.