本文整理汇总了C++中gfxMatrix::Transform方法的典型用法代码示例。如果您正苦于以下问题:C++ gfxMatrix::Transform方法的具体用法?C++ gfxMatrix::Transform怎么用?C++ gfxMatrix::Transform使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类gfxMatrix
的用法示例。
在下文中一共展示了gfxMatrix::Transform方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: imageSizeGfx
/* [noscript] void draw(in gfxContext aContext,
* in gfxGraphicsFilter aFilter,
* [const] in gfxMatrix aUserSpaceToImageSpace,
* [const] in gfxRect aFill,
* [const] in nsIntRect aSubimage,
* [const] in nsIntSize aViewportSize,
* in PRUint32 aFlags); */
NS_IMETHODIMP
VectorImage::Draw(gfxContext* aContext,
gfxPattern::GraphicsFilter aFilter,
const gfxMatrix& aUserSpaceToImageSpace,
const gfxRect& aFill,
const nsIntRect& aSubimage,
const nsIntSize& aViewportSize,
PRUint32 aFlags)
{
NS_ENSURE_ARG_POINTER(aContext);
if (mError || !mIsFullyLoaded)
return NS_ERROR_FAILURE;
if (mIsDrawing) {
NS_WARNING("Refusing to make re-entrant call to VectorImage::Draw");
return NS_ERROR_FAILURE;
}
mIsDrawing = true;
if (aViewportSize != mLastRenderedSize) {
mSVGDocumentWrapper->UpdateViewportBounds(aViewportSize);
mLastRenderedSize = aViewportSize;
}
mSVGDocumentWrapper->FlushImageTransformInvalidation();
nsIntSize imageSize = mHaveRestrictedRegion ?
mRestrictedRegion.Size() : aViewportSize;
// XXXdholbert Do we need to convert image size from
// CSS pixels to dev pixels here? (is gfxCallbackDrawable's 2nd arg in dev
// pixels?)
gfxIntSize imageSizeGfx(imageSize.width, imageSize.height);
// Based on imgFrame::Draw
gfxRect sourceRect = aUserSpaceToImageSpace.Transform(aFill);
gfxRect imageRect(0, 0, imageSize.width, imageSize.height);
gfxRect subimage(aSubimage.x, aSubimage.y, aSubimage.width, aSubimage.height);
nsRefPtr<gfxDrawingCallback> cb =
new SVGDrawingCallback(mSVGDocumentWrapper,
mHaveRestrictedRegion ?
mRestrictedRegion :
nsIntRect(nsIntPoint(0, 0), aViewportSize),
aFlags);
nsRefPtr<gfxDrawable> drawable = new gfxCallbackDrawable(cb, imageSizeGfx);
gfxUtils::DrawPixelSnapped(aContext, drawable,
aUserSpaceToImageSpace,
subimage, sourceRect, imageRect, aFill,
gfxASurface::ImageFormatARGB32, aFilter);
mIsDrawing = false;
return NS_OK;
}
示例2: InnerImage
NS_IMETHODIMP
ClippedImage::Draw(gfxContext* aContext,
gfxPattern::GraphicsFilter aFilter,
const gfxMatrix& aUserSpaceToImageSpace,
const gfxRect& aFill,
const nsIntRect& aSubimage,
const nsIntSize& aViewportSize,
const SVGImageContext* aSVGContext,
uint32_t aWhichFrame,
uint32_t aFlags)
{
if (!ShouldClip()) {
return InnerImage()->Draw(aContext, aFilter, aUserSpaceToImageSpace,
aFill, aSubimage, aViewportSize, aSVGContext,
aWhichFrame, aFlags);
}
// Check for tiling. If we need to tile then we need to create a
// gfxCallbackDrawable to handle drawing for us.
gfxRect sourceRect = aUserSpaceToImageSpace.Transform(aFill);
if (MustCreateSurface(aContext, aUserSpaceToImageSpace, sourceRect, aSubimage, aFlags)) {
// Create a temporary surface containing a single tile of this image.
// GetFrame will call DrawSingleTile internally.
nsRefPtr<gfxASurface> surface;
GetFrameInternal(aViewportSize, aSVGContext, aWhichFrame, aFlags, getter_AddRefs(surface));
NS_ENSURE_TRUE(surface, NS_ERROR_FAILURE);
// Create a drawable from that surface.
nsRefPtr<gfxSurfaceDrawable> drawable =
new gfxSurfaceDrawable(surface, gfxIntSize(mClip.width, mClip.height));
// Draw.
gfxRect imageRect(0, 0, mClip.width, mClip.height);
gfxRect subimage(aSubimage.x, aSubimage.y, aSubimage.width, aSubimage.height);
gfxUtils::DrawPixelSnapped(aContext, drawable, aUserSpaceToImageSpace,
subimage, sourceRect, imageRect, aFill,
gfxASurface::ImageFormatARGB32, aFilter);
return NS_OK;
}
// Determine the appropriate subimage for the inner image.
nsIntRect innerSubimage(aSubimage);
innerSubimage.MoveBy(mClip.x, mClip.y);
innerSubimage.Intersect(mClip);
return DrawSingleTile(aContext, aFilter, aUserSpaceToImageSpace, aFill, innerSubimage,
aViewportSize, aSVGContext, aWhichFrame, aFlags);
}
示例3: viewportSize
nsresult
ClippedImage::DrawSingleTile(gfxContext* aContext,
gfxPattern::GraphicsFilter aFilter,
const gfxMatrix& aUserSpaceToImageSpace,
const gfxRect& aFill,
const nsIntRect& aSubimage,
const nsIntSize& aViewportSize,
const SVGImageContext* aSVGContext,
uint32_t aWhichFrame,
uint32_t aFlags)
{
MOZ_ASSERT(!MustCreateSurface(aContext, aUserSpaceToImageSpace,
aUserSpaceToImageSpace.Transform(aFill),
aSubimage - nsIntPoint(mClip.x, mClip.y), aFlags),
"DrawSingleTile shouldn't need to create a surface");
// Make the viewport reflect the original image's size.
nsIntSize viewportSize(aViewportSize);
int32_t imgWidth, imgHeight;
if (NS_SUCCEEDED(InnerImage()->GetWidth(&imgWidth)) &&
NS_SUCCEEDED(InnerImage()->GetHeight(&imgHeight))) {
viewportSize = nsIntSize(imgWidth, imgHeight);
} else {
MOZ_ASSERT(false, "If ShouldClip() led us to draw then we should never get here");
}
// Add a translation to the transform to reflect the clipping region.
gfxMatrix transform(aUserSpaceToImageSpace);
transform.Multiply(gfxMatrix().Translate(gfxPoint(mClip.x, mClip.y)));
// "Clamp the source rectangle" to the clipping region's width and height.
// Really, this means modifying the transform to get the results we want.
gfxRect sourceRect = transform.Transform(aFill);
if (sourceRect.width > mClip.width || sourceRect.height > mClip.height) {
gfxMatrix clampSource;
clampSource.Translate(gfxPoint(sourceRect.x, sourceRect.y));
clampSource.Scale(ClampFactor(sourceRect.width, mClip.width),
ClampFactor(sourceRect.height, mClip.height));
clampSource.Translate(gfxPoint(-sourceRect.x, -sourceRect.y));
transform.Multiply(clampSource);
}
return InnerImage()->Draw(aContext, aFilter, transform, aFill, aSubimage,
viewportSize, aSVGContext, aWhichFrame, aFlags);
}
示例4: dirtyArea
bool
TabChild::RecvPDocumentRendererNativeIDConstructor(
PDocumentRendererNativeIDChild *__a,
const PRInt32& aX,
const PRInt32& aY,
const PRInt32& aW,
const PRInt32& aH,
const nsString& bgcolor,
const PRUint32& flags,
const bool& flush,
const gfxMatrix& aMatrix,
const PRUint32& aNativeID)
{
mozilla::ipc::DocumentRendererNativeIDChild* render =
static_cast<mozilla::ipc::DocumentRendererNativeIDChild*>(__a);
nsCOMPtr<nsIWebBrowser> browser = do_QueryInterface(mWebNav);
if (!browser)
return true; // silently ignore
nsCOMPtr<nsIDOMWindow> window;
if (NS_FAILED(browser->GetContentDOMWindow(getter_AddRefs(window))) ||
!window)
return true; // silently ignore
render->RenderDocument(window, aX, aY, aW, aH, bgcolor, flags, flush,
aMatrix, aNativeID);
gfxRect dirtyArea(0, 0, nsPresContext::AppUnitsToIntCSSPixels(aW),
nsPresContext::AppUnitsToIntCSSPixels(aH));
dirtyArea = aMatrix.Transform(dirtyArea);
return PDocumentRendererNativeIDChild::Send__delete__(__a, dirtyArea.X(), dirtyArea.Y(),
dirtyArea.Width(), dirtyArea.Height(),
aNativeID);
}