void PaintPropertyTreeBuilder::walk(FrameView& frameView, const PaintPropertyTreeBuilderContext& context) { PaintPropertyTreeBuilderContext localContext(context); TransformationMatrix frameTranslate; frameTranslate.translate(frameView.x(), frameView.y()); // The frame owner applies paint offset already. // This assumption may change in the future. ASSERT(context.paintOffset == LayoutPoint()); RefPtr<TransformPaintPropertyNode> newTransformNodeForPreTranslation = TransformPaintPropertyNode::create(frameTranslate, FloatPoint3D(), context.currentTransform); localContext.transformForFixedPositioned = newTransformNodeForPreTranslation.get(); localContext.paintOffsetForFixedPositioned = LayoutPoint(); // This is going away in favor of Settings::rootLayerScrolls. DoubleSize scrollOffset = frameView.scrollOffsetDouble(); TransformationMatrix frameScroll; frameScroll.translate(-scrollOffset.width(), -scrollOffset.height()); RefPtr<TransformPaintPropertyNode> newTransformNodeForScrollTranslation = TransformPaintPropertyNode::create(frameScroll, FloatPoint3D(), newTransformNodeForPreTranslation); localContext.currentTransform = localContext.transformForOutOfFlowPositioned = newTransformNodeForScrollTranslation.get(); localContext.paintOffset = localContext.paintOffsetForOutOfFlowPositioned = LayoutPoint(); frameView.setPreTranslation(newTransformNodeForPreTranslation.release()); frameView.setScrollTranslation(newTransformNodeForScrollTranslation.release()); if (LayoutView* layoutView = frameView.layoutView()) walk(*layoutView, localContext); }
void PaintPropertyTreeBuilder::walk(LayoutObject& object, const PaintPropertyTreeBuilderContext& context) { PaintPropertyTreeBuilderContext localContext(context); deriveBorderBoxFromContainerContext(object, localContext); RefPtr<TransformPaintPropertyNode> newTransformNodeForPaintOffsetTranslation = createPaintOffsetTranslationIfNeeded(object, localContext); RefPtr<TransformPaintPropertyNode> newTransformNodeForTransform = createTransformIfNeeded(object, localContext); RefPtr<EffectPaintPropertyNode> newEffectNode = createEffectIfNeeded(object, localContext); RefPtr<ClipPaintPropertyNode> newClipNodeForOverflowClip = createOverflowClipIfNeeded(object, localContext); // TODO(trchen): Insert flattening transform here, as specified by // http://www.w3.org/TR/css3-transforms/#transform-style-property RefPtr<TransformPaintPropertyNode> newTransformNodeForPerspective = createPerspectiveIfNeeded(object, localContext); RefPtr<TransformPaintPropertyNode> newTransformNodeForScrollTranslation = createScrollTranslationIfNeeded(object, localContext); updateOutOfFlowContext(object, newTransformNodeForTransform, localContext); if (newTransformNodeForPaintOffsetTranslation || newTransformNodeForTransform || newEffectNode || newClipNodeForOverflowClip || newTransformNodeForPerspective || newTransformNodeForScrollTranslation) { OwnPtr<ObjectPaintProperties> updatedPaintProperties = ObjectPaintProperties::create( newTransformNodeForPaintOffsetTranslation.release(), newTransformNodeForTransform.release(), newEffectNode.release(), newClipNodeForOverflowClip.release(), newTransformNodeForPerspective.release(), newTransformNodeForScrollTranslation.release()); object.setObjectPaintProperties(updatedPaintProperties.release()); } else { object.clearObjectPaintProperties(); } for (LayoutObject* child = object.slowFirstChild(); child; child = child->nextSibling()) { if (child->isBoxModelObject() || child->isSVG()) walk(*child, localContext); } }
void SkSVGNode::render(const SkSVGRenderContext& ctx) const { SkSVGRenderContext localContext(ctx); if (this->onPrepareToRender(&localContext)) { this->onRender(localContext); } }
/******************* FUNCTION *********************/ void ProjectActionOld::genItLoopCCode ( ostream& out, const CMRProjectContext& context, int depth ) const { CMRProjectContext localContext(&context); //errors assert(name == "cmrSubBlock" && description == "cmrIteratorLoop"); //search the related iterator definition const CMRProjectEntity * entity = context.parent->find(eq->latexEntity); if (entity == NULL) { cerr << "Can't find the definition of iterator " << eq->compute << " in current context." << endl; abort(); } const CMRProjectIterator * iterator = dynamic_cast<const CMRProjectIterator*>(entity); if (iterator == NULL) { cerr << "Cuation, expect iterator " << eq->compute << " but get another type." << endl; context.printDebug(); abort(); } assert(iterator != NULL); CMRProjectLocalVariable localVar(eq->compute,eq->compute); localContext.addEntry(&localVar); out << genCCodeIndent(depth) << "for (int " << eq->compute << " = " << iterator->start << " ; " << eq->compute << " < " << iterator->end << " ; " << eq->compute << "++ )" <<endl; out << genCCodeIndent(depth) << "{" << endl; for (ConstIterator it = getFirstChild() ; ! it.isEnd() ; ++it) it->genCCode(out,it->context,depth+1); //it->genCCode(out,localContext,depth+1); out << genCCodeIndent(depth) << "}" << endl; //checkContext(localContext); }
/******************* FUNCTION *********************/ void ProjectActionOld::genRootElemCCode ( ostream& out, const CMRProjectContext& context, int depth ) const { CMRProjectContext localContext(&context); for (ConstIterator it = getFirstChild() ; ! it.isEnd() ; ++it) it->genCCode(out,it->context,depth+1); //it->genCCode(out,localContext,depth+1); //checkContext(localContext); }
void SkSVGNode::render(SkCanvas* canvas, const SkSVGRenderContext& ctx) const { SkTCopyOnFirstWrite<SkSVGRenderContext> localContext(ctx); fPresentationAttributes.applyTo(localContext); SkAutoCanvasRestore acr(canvas, false); const SkMatrix& m = this->onLocalMatrix(); if (!m.isIdentity()) { canvas->save(); canvas->concat(m); } this->onRender(canvas, *localContext); }
void PaintPropertyTreeBuilder::walk(FrameView& frameView, const PaintPropertyTreeBuilderContext& context) { PaintPropertyTreeBuilderContext localContext(context); // TODO(pdr): Creating paint properties for FrameView here will not be // needed once settings()->rootLayerScrolls() is enabled. // TODO(pdr): Make this conditional on the rootLayerScrolls setting. TransformationMatrix frameTranslate; frameTranslate.translate(frameView.x(), frameView.y()); // The frame owner applies paint offset already. // This assumption may change in the future. ASSERT(context.paintOffset == LayoutPoint()); RefPtr<TransformPaintPropertyNode> newTransformNodeForPreTranslation = TransformPaintPropertyNode::create(frameTranslate, FloatPoint3D(), context.currentTransform); localContext.transformForFixedPositioned = newTransformNodeForPreTranslation.get(); localContext.paintOffsetForFixedPositioned = LayoutPoint(); FloatRoundedRect contentClip(IntRect(IntPoint(), frameView.visibleContentSize())); RefPtr<ClipPaintPropertyNode> newClipNodeForContentClip = ClipPaintPropertyNode::create(newTransformNodeForPreTranslation.get(), contentClip, localContext.currentClip); localContext.currentClip = localContext.clipForOutOfFlowPositioned = localContext.clipForFixedPositioned = newClipNodeForContentClip.get(); DoubleSize scrollOffset = frameView.scrollOffsetDouble(); TransformationMatrix frameScroll; frameScroll.translate(-scrollOffset.width(), -scrollOffset.height()); RefPtr<TransformPaintPropertyNode> newTransformNodeForScrollTranslation = TransformPaintPropertyNode::create(frameScroll, FloatPoint3D(), newTransformNodeForPreTranslation); localContext.currentTransform = localContext.transformForOutOfFlowPositioned = newTransformNodeForScrollTranslation.get(); localContext.paintOffset = localContext.paintOffsetForOutOfFlowPositioned = LayoutPoint(); frameView.setPreTranslation(newTransformNodeForPreTranslation.release()); frameView.setScrollTranslation(newTransformNodeForScrollTranslation.release()); frameView.setContentClip(newClipNodeForContentClip.release()); if (LayoutView* layoutView = frameView.layoutView()) walk(*layoutView, localContext); for (Frame* child = frameView.frame().tree().firstChild(); child; child = child->tree().nextSibling()) { if (!child->isLocalFrame()) continue; if (FrameView* childView = toLocalFrame(child)->view()) walk(*childView, localContext); } }
void PaintPropertyTreeBuilder::walk(LayoutBoxModelObject& object, const PaintPropertyTreeBuilderContext& context) { ASSERT(object.isBox() != object.isLayoutInline()); // Either or. PaintPropertyTreeBuilderContext localContext(context); deriveBorderBoxFromContainerContext(object, localContext); RefPtr<TransformPaintPropertyNode> newTransformNodeForPaintOffsetTranslation = createPaintOffsetTranslationIfNeeded(object, localContext); RefPtr<TransformPaintPropertyNode> newTransformNodeForTransform = createTransformIfNeeded(object, localContext); RefPtr<EffectPaintPropertyNode> newEffectNode = createEffectIfNeeded(object, localContext); RefPtr<TransformPaintPropertyNode> newTransformNodeForPerspective = createPerspectiveIfNeeded(object, localContext); RefPtr<TransformPaintPropertyNode> newTransformNodeForScrollTranslation = createScrollTranslationIfNeeded(object, localContext); updateOutOfFlowContext(object, localContext); if (newTransformNodeForPaintOffsetTranslation || newTransformNodeForTransform || newEffectNode || newTransformNodeForPerspective || newTransformNodeForScrollTranslation) { OwnPtr<ObjectPaintProperties> updatedPaintProperties = ObjectPaintProperties::create( newTransformNodeForPaintOffsetTranslation.release(), newTransformNodeForTransform.release(), newEffectNode.release(), newTransformNodeForPerspective.release(), newTransformNodeForScrollTranslation.release()); object.setObjectPaintProperties(updatedPaintProperties.release()); } else { object.clearObjectPaintProperties(); } // TODO(trchen): Walk subframes for LayoutFrame. // TODO(trchen): Implement SVG walk. if (object.isSVGRoot()) { return; } for (LayoutObject* child = object.slowFirstChild(); child; child = child->nextSibling()) { if (child->isText()) continue; walk(toLayoutBoxModelObject(*child), localContext); } }
NativeImagePtr SVGImage::nativeImage(const GraphicsContext* targetContext) { ASSERT(targetContext); if (!m_page || !targetContext) return nullptr; auto platformContext = targetContext->platformContext(); ASSERT(platformContext); // Draw the SVG into a bitmap. COMPtr<ID2D1BitmapRenderTarget> nativeImageTarget; HRESULT hr = platformContext->CreateCompatibleRenderTarget(IntSize(rect().size()), &nativeImageTarget); ASSERT(SUCCEEDED(hr)); GraphicsContext localContext(nativeImageTarget.get()); draw(localContext, rect(), rect(), CompositeSourceOver, BlendModeNormal, ImageOrientationDescription()); COMPtr<ID2D1Bitmap> nativeImage; hr = nativeImageTarget->GetBitmap(&nativeImage); ASSERT(SUCCEEDED(hr)); return nativeImage; }
AcBr::ErrorStatus selectEntityByType(AcBrEntity*& pEnt, AcDb::SubentType& subType) { Acad::ErrorStatus acadReturnValue = Acad::eOk; AcBr::ErrorStatus returnValue = AcBr::eOk; // Query validation level AcBr::ValidationLevel vlevel = validationLevel(); // Query the subentity type subType = subtype(); // Query whether to select a database entity or create a new one Adesk::Boolean context = (subType != AcDb::kNullSubentType) ? Adesk::kFalse : localContext(); if (!context) { // Query the subentity by AutoCAD pick and get the subentity path AcDbFullSubentPath subPath(kNullSubent); acadReturnValue = selectEntity(subType, subPath); if (acadReturnValue != Acad::eOk) { acutPrintf(ACRX_T("\n Error in selectEntity: %d"), acadReturnValue); return (AcBr::ErrorStatus)acadReturnValue; } // Call the appropriate subentity constructor switch (subType) { case AcDb::kNullSubentType: pEnt = new AcBrBrep(); break; case AcDb::kFaceSubentType: pEnt = new AcBrFace(); break; case AcDb::kEdgeSubentType: pEnt = new AcBrEdge(); break; default: acutPrintf(ACRX_T("\n selectEntityByType: unsupported subentity type: %d\n"), subType); returnValue = (AcBr::ErrorStatus)Acad::eWrongSubentityType; return returnValue; } if (pEnt == NULL) { acutPrintf(ACRX_T("\n selectEntityByType: unable to allocate memory\n")); returnValue = (AcBr::ErrorStatus)Acad::eOutOfMemory; return returnValue; } returnValue = pEnt->set(subPath); if (returnValue != AcBr::eOk) { acutPrintf(ACRX_T("\n Error in AcBrEntity::set:")); errorReport(returnValue); return returnValue; } } else { // Create the entity as a local object AcDbEntity* pEntity; acadReturnValue = createEntity(pEntity); if (acadReturnValue != Acad::eOk) { acutPrintf(ACRX_T("\n Error in createEntity: %d"), acadReturnValue); return (AcBr::ErrorStatus)acadReturnValue; } if (pEntity == NULL) { acutPrintf(ACRX_T("\n selectEntityByType: unable to allocate memory\n")); returnValue = (AcBr::ErrorStatus)Acad::eOutOfMemory; return returnValue; } pEnt = new AcBrBrep(); if (pEnt == NULL) { acutPrintf(ACRX_T("\n selectEntityByType: unable to allocate memory\n")); returnValue = (AcBr::ErrorStatus)Acad::eOutOfMemory; return returnValue; } returnValue = ((AcBrBrep*)pEnt)->set((const AcDbEntity&)*pEntity); if (returnValue != AcBr::eOk) { acutPrintf(ACRX_T("\n Error in AcBrEntity::set:")); errorReport(returnValue); return returnValue; } } returnValue = pEnt->setValidationLevel(vlevel); if (returnValue != AcBr::eOk) { acutPrintf(ACRX_T("\n Error in AcBrEntity::setValidationLevel:")); errorReport(returnValue); return returnValue; } return returnValue; }
bool SkSVGNode::asPaint(const SkSVGRenderContext& ctx, SkPaint* paint) const { SkSVGRenderContext localContext(ctx); return this->onPrepareToRender(&localContext) && this->onAsPaint(localContext, paint); }