本文整理汇总了C++中NinePieceImage::borderSlices方法的典型用法代码示例。如果您正苦于以下问题:C++ NinePieceImage::borderSlices方法的具体用法?C++ NinePieceImage::borderSlices怎么用?C++ NinePieceImage::borderSlices使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NinePieceImage
的用法示例。
在下文中一共展示了NinePieceImage::borderSlices方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mapNinePieceImage
void CSSToStyleMap::mapNinePieceImage(CSSPropertyID property, CSSValue* value, NinePieceImage& image)
{
// If we're not a value list, then we are "none" and don't need to alter the empty image at all.
if (!is<CSSValueList>(value))
return;
// Retrieve the border image value.
CSSValueList& borderImage = downcast<CSSValueList>(*value);
// Set the image (this kicks off the load).
CSSPropertyID imageProperty;
if (property == CSSPropertyWebkitBorderImage)
imageProperty = CSSPropertyBorderImageSource;
else if (property == CSSPropertyWebkitMaskBoxImage)
imageProperty = CSSPropertyWebkitMaskBoxImageSource;
else
imageProperty = property;
for (auto& current : borderImage) {
if (is<CSSImageValue>(current.get()) || is<CSSImageGeneratorValue>(current.get())
#if ENABLE(CSS_IMAGE_SET)
|| is<CSSImageSetValue>(current.get())
#endif
)
image.setImage(styleImage(imageProperty, current.get()));
else if (is<CSSBorderImageSliceValue>(current.get()))
mapNinePieceImageSlice(current, image);
else if (is<CSSValueList>(current.get())) {
CSSValueList& slashList = downcast<CSSValueList>(current.get());
// Map in the image slices.
if (is<CSSBorderImageSliceValue>(slashList.item(0)))
mapNinePieceImageSlice(*slashList.item(0), image);
// Map in the border slices.
if (slashList.item(1))
image.setBorderSlices(mapNinePieceImageQuad(*slashList.item(1)));
// Map in the outset.
if (slashList.item(2))
image.setOutset(mapNinePieceImageQuad(*slashList.item(2)));
} else if (is<CSSPrimitiveValue>(current.get())) {
// Set the appropriate rules for stretch/round/repeat of the slices.
mapNinePieceImageRepeat(current, image);
}
}
if (property == CSSPropertyWebkitBorderImage) {
// We have to preserve the legacy behavior of -webkit-border-image and make the border slices
// also set the border widths. We don't need to worry about percentages, since we don't even support
// those on real borders yet.
if (image.borderSlices().top().isFixed())
style()->setBorderTopWidth(image.borderSlices().top().value());
if (image.borderSlices().right().isFixed())
style()->setBorderRightWidth(image.borderSlices().right().value());
if (image.borderSlices().bottom().isFixed())
style()->setBorderBottomWidth(image.borderSlices().bottom().value());
if (image.borderSlices().left().isFixed())
style()->setBorderLeftWidth(image.borderSlices().left().value());
}
}
示例2: mapNinePieceImage
void CSSToStyleMap::mapNinePieceImage(CSSPropertyID property, CSSValue* value, NinePieceImage& image)
{
// If we're not a value list, then we are "none" and don't need to alter the empty image at all.
if (!value || !value->isValueList())
return;
// Retrieve the border image value.
CSSValueList* borderImage = static_cast<CSSValueList*>(value);
// Set the image (this kicks off the load).
CSSPropertyID imageProperty;
if (property == CSSPropertyWebkitBorderImage)
imageProperty = CSSPropertyBorderImageSource;
else if (property == CSSPropertyWebkitMaskBoxImage)
imageProperty = CSSPropertyWebkitMaskBoxImageSource;
else
imageProperty = property;
for (unsigned i = 0 ; i < borderImage->length() ; ++i) {
CSSValue* current = borderImage->item(i);
if (current->isImageValue() || current->isImageGeneratorValue() || current->isImageSetValue())
image.setImage(styleImage(imageProperty, current));
else if (current->isBorderImageSliceValue())
mapNinePieceImageSlice(current, image);
else if (current->isValueList()) {
CSSValueList* slashList = static_cast<CSSValueList*>(current);
// Map in the image slices.
if (slashList->item(0) && slashList->item(0)->isBorderImageSliceValue())
mapNinePieceImageSlice(slashList->item(0), image);
// Map in the border slices.
if (slashList->item(1))
image.setBorderSlices(mapNinePieceImageQuad(slashList->item(1)));
// Map in the outset.
if (slashList->item(2))
image.setOutset(mapNinePieceImageQuad(slashList->item(2)));
} else if (current->isPrimitiveValue()) {
// Set the appropriate rules for stretch/round/repeat of the slices.
mapNinePieceImageRepeat(current, image);
}
}
if (property == CSSPropertyWebkitBorderImage) {
// We have to preserve the legacy behavior of -webkit-border-image and make the border slices
// also set the border widths. We don't need to worry about percentages, since we don't even support
// those on real borders yet.
if (image.borderSlices().top().isFixed())
style()->setBorderTopWidth(image.borderSlices().top().value());
if (image.borderSlices().right().isFixed())
style()->setBorderRightWidth(image.borderSlices().right().value());
if (image.borderSlices().bottom().isFixed())
style()->setBorderBottomWidth(image.borderSlices().bottom().value());
if (image.borderSlices().left().isFixed())
style()->setBorderLeftWidth(image.borderSlices().left().value());
}
}
示例3: ASSERT
NinePieceImageGrid::NinePieceImageGrid(const NinePieceImage& ninePieceImage, IntSize imageSize, IntRect borderImageArea,
const IntRectOutsets& borderWidths)
: m_borderImageArea(borderImageArea)
, m_imageSize(imageSize)
, m_horizontalTileRule((Image::TileRule)ninePieceImage.horizontalRule())
, m_verticalTileRule((Image::TileRule)ninePieceImage.verticalRule())
, m_fill(ninePieceImage.fill())
{
StyleImage* styleImage = ninePieceImage.image();
ASSERT(styleImage);
float imageScaleFactor = styleImage->imageScaleFactor();
m_top.slice = computeEdgeSlice(ninePieceImage.imageSlices().top(), imageSize.height()) * imageScaleFactor;
m_right.slice = computeEdgeSlice(ninePieceImage.imageSlices().right(), imageSize.width()) * imageScaleFactor;
m_bottom.slice = computeEdgeSlice(ninePieceImage.imageSlices().bottom(), imageSize.height()) * imageScaleFactor;
m_left.slice = computeEdgeSlice(ninePieceImage.imageSlices().left(), imageSize.width()) * imageScaleFactor;
m_top.width = computeEdgeWidth(ninePieceImage.borderSlices().top(), borderWidths.top(), m_top.slice,
borderImageArea.height());
m_right.width = computeEdgeWidth(ninePieceImage.borderSlices().right(), borderWidths.right(), m_right.slice,
borderImageArea.width());
m_bottom.width = computeEdgeWidth(ninePieceImage.borderSlices().bottom(), borderWidths.bottom(), m_bottom.slice,
borderImageArea.height());
m_left.width = computeEdgeWidth(ninePieceImage.borderSlices().left(), borderWidths.left(), m_left.slice,
borderImageArea.width());
// The spec says: Given Lwidth as the width of the border image area, Lheight as its height, and Wside as the border
// image width offset for the side, let f = min(Lwidth/(Wleft+Wright), Lheight/(Wtop+Wbottom)). If f < 1, then all W
// are reduced by multiplying them by f.
int borderSideWidth = std::max(1, m_left.width + m_right.width);
int borderSideHeight = std::max(1, m_top.width + m_bottom.width);
float borderSideScaleFactor = std::min((float)borderImageArea.width() / borderSideWidth,
(float)borderImageArea.height() / borderSideHeight);
if (borderSideScaleFactor < 1) {
m_top.width *= borderSideScaleFactor;
m_right.width *= borderSideScaleFactor;
m_bottom.width *= borderSideScaleFactor;
m_left.width *= borderSideScaleFactor;
}
}