Home | History | Annotate | Download | only in shapes
      1 /*
      2  * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *
      8  * 1. Redistributions of source code must retain the above
      9  *    copyright notice, this list of conditions and the following
     10  *    disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above
     12  *    copyright notice, this list of conditions and the following
     13  *    disclaimer in the documentation and/or other materials
     14  *    provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER "AS IS" AND ANY
     17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
     20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
     21  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
     25  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
     26  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     27  * SUCH DAMAGE.
     28  */
     29 
     30 #include "config.h"
     31 #include "core/rendering/shapes/ShapeInfo.h"
     32 
     33 #include "core/rendering/RenderRegion.h"
     34 
     35 namespace WebCore {
     36 
     37 bool checkShapeImageOrigin(Document& document, ImageResource& imageResource)
     38 {
     39     if (imageResource.isAccessAllowed(document.securityOrigin()))
     40         return true;
     41 
     42     const KURL& url = imageResource.url();
     43     String urlString = url.isNull() ? "''" : url.elidedString();
     44     document.addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, "Unsafe attempt to load URL " + urlString + ".");
     45 
     46     return false;
     47 }
     48 
     49 template<class RenderType>
     50 const Shape* ShapeInfo<RenderType>::computedShape() const
     51 {
     52     if (Shape* shape = m_shape.get())
     53         return shape;
     54 
     55     WritingMode writingMode = m_renderer->style()->writingMode();
     56     Length margin = m_renderer->style()->shapeMargin();
     57     Length padding = m_renderer->style()->shapePadding();
     58     float shapeImageThreshold = m_renderer->style()->shapeImageThreshold();
     59     const ShapeValue* shapeValue = this->shapeValue();
     60     ASSERT(shapeValue);
     61 
     62     switch (shapeValue->type()) {
     63     case ShapeValue::Shape:
     64         ASSERT(shapeValue->shape());
     65         m_shape = Shape::createShape(shapeValue->shape(), m_shapeLogicalSize, writingMode, margin, padding);
     66         break;
     67     case ShapeValue::Image:
     68         ASSERT(shapeValue->image());
     69         m_shape = Shape::createShape(shapeValue->image(), shapeImageThreshold, m_shapeLogicalSize, writingMode, margin, padding);
     70         break;
     71     case ShapeValue::Box:
     72         m_shape = Shape::createLayoutBoxShape(m_shapeLogicalSize, writingMode, margin, padding);
     73         break;
     74     case ShapeValue::Outside:
     75         // Outside should have already resolved to a different shape value.
     76         ASSERT_NOT_REACHED();
     77     }
     78 
     79     ASSERT(m_shape);
     80     return m_shape.get();
     81 }
     82 
     83 template<class RenderType>
     84 SegmentList ShapeInfo<RenderType>::computeSegmentsForLine(LayoutUnit lineTop, LayoutUnit lineHeight) const
     85 {
     86     ASSERT(lineHeight >= 0);
     87     SegmentList segments;
     88 
     89     getIntervals((lineTop - logicalTopOffset()), std::min(lineHeight, shapeLogicalBottom() - lineTop), segments);
     90 
     91     for (size_t i = 0; i < segments.size(); i++) {
     92         segments[i].logicalLeft += logicalLeftOffset();
     93         segments[i].logicalRight += logicalLeftOffset();
     94     }
     95 
     96     return segments;
     97 }
     98 
     99 template class ShapeInfo<RenderBlock>;
    100 template class ShapeInfo<RenderBox>;
    101 }
    102