зеркало из https://github.com/mozilla/gecko-dev.git
Bug 923341 - Part 1: Add a gfxSurfaceDrawable constructor for a DrawTarget. r=seth
This commit is contained in:
Родитель
c145795685
Коммит
35d6def1cc
|
@ -12,6 +12,9 @@
|
|||
#include "gfxXlibSurface.h"
|
||||
#endif
|
||||
|
||||
using namespace mozilla;
|
||||
using namespace mozilla::gfx;
|
||||
|
||||
gfxSurfaceDrawable::gfxSurfaceDrawable(gfxASurface* aSurface,
|
||||
const gfxIntSize aSize,
|
||||
const gfxMatrix aTransform)
|
||||
|
@ -21,6 +24,15 @@ gfxSurfaceDrawable::gfxSurfaceDrawable(gfxASurface* aSurface,
|
|||
{
|
||||
}
|
||||
|
||||
gfxSurfaceDrawable::gfxSurfaceDrawable(DrawTarget* aDrawTarget,
|
||||
const gfxIntSize aSize,
|
||||
const gfxMatrix aTransform)
|
||||
: gfxDrawable(aSize)
|
||||
, mDrawTarget(aDrawTarget)
|
||||
, mTransform(aTransform)
|
||||
{
|
||||
}
|
||||
|
||||
static gfxMatrix
|
||||
DeviceToImageTransform(gfxContext* aContext,
|
||||
const gfxMatrix& aUserSpaceToImageSpace)
|
||||
|
@ -105,7 +117,19 @@ gfxSurfaceDrawable::Draw(gfxContext* aContext,
|
|||
const GraphicsFilter& aFilter,
|
||||
const gfxMatrix& aTransform)
|
||||
{
|
||||
nsRefPtr<gfxPattern> pattern = new gfxPattern(mSurface);
|
||||
nsRefPtr<gfxPattern> pattern;
|
||||
if (mDrawTarget) {
|
||||
if (aContext->IsCairo()) {
|
||||
nsRefPtr<gfxASurface> source =
|
||||
gfxPlatform::GetPlatform()->GetThebesSurfaceForDrawTarget(mDrawTarget);
|
||||
pattern = new gfxPattern(source);
|
||||
} else {
|
||||
RefPtr<SourceSurface> source = mDrawTarget->Snapshot();
|
||||
pattern = new gfxPattern(source, Matrix());
|
||||
}
|
||||
} else {
|
||||
pattern = new gfxPattern(mSurface);
|
||||
}
|
||||
if (aRepeat) {
|
||||
pattern->SetExtend(gfxPattern::EXTEND_REPEAT);
|
||||
pattern->SetFilter(aFilter);
|
||||
|
@ -136,6 +160,13 @@ gfxSurfaceDrawable::Draw(gfxContext* aContext,
|
|||
already_AddRefed<gfxImageSurface>
|
||||
gfxSurfaceDrawable::GetAsImageSurface()
|
||||
{
|
||||
if (mDrawTarget) {
|
||||
// TODO: Find a way to implement this. The caller really wants a 'sub-image' of
|
||||
// the original, without having to do a copy. GetDataSurface() might just copy,
|
||||
// which isn't useful.
|
||||
return nullptr;
|
||||
|
||||
}
|
||||
return mSurface->GetAsImageSurface();
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "gfxRect.h"
|
||||
#include "gfxMatrix.h"
|
||||
#include "GraphicsFilter.h"
|
||||
#include "mozilla/gfx/2D.h"
|
||||
|
||||
class gfxASurface;
|
||||
class gfxImageSurface;
|
||||
|
@ -55,6 +56,8 @@ class gfxSurfaceDrawable : public gfxDrawable {
|
|||
public:
|
||||
gfxSurfaceDrawable(gfxASurface* aSurface, const gfxIntSize aSize,
|
||||
const gfxMatrix aTransform = gfxMatrix());
|
||||
gfxSurfaceDrawable(mozilla::gfx::DrawTarget* aDT, const gfxIntSize aSize,
|
||||
const gfxMatrix aTransform = gfxMatrix());
|
||||
virtual ~gfxSurfaceDrawable() {}
|
||||
|
||||
virtual bool Draw(gfxContext* aContext,
|
||||
|
@ -67,6 +70,7 @@ public:
|
|||
|
||||
protected:
|
||||
nsRefPtr<gfxASurface> mSurface;
|
||||
mozilla::RefPtr<mozilla::gfx::DrawTarget> mDrawTarget;
|
||||
const gfxMatrix mTransform;
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче