зеркало из https://github.com/mozilla/pjs.git
[qpainter] Add getters for QImage; also make OptimizeImages a noop
The QPainter back end knows how to create a QImage from an image surface while painting, so no need to copy the image.
This commit is contained in:
Родитель
6bf5d757c2
Коммит
e78405c784
|
@ -1451,6 +1451,28 @@ cairo_qpainter_surface_get_qpainter (cairo_surface_t *surface)
|
|||
return qs->p;
|
||||
}
|
||||
|
||||
QImage *
|
||||
cairo_qpainter_surface_get_qimage (cairo_surface_t *surface)
|
||||
{
|
||||
cairo_qpainter_surface_t *qs = (cairo_qpainter_surface_t*) surface;
|
||||
|
||||
if (surface->type != CAIRO_SURFACE_TYPE_QPAINTER)
|
||||
return NULL;
|
||||
|
||||
return qs->image;
|
||||
}
|
||||
|
||||
cairo_surface_t *
|
||||
cairo_qpainter_surface_get_image (cairo_surface_t *surface)
|
||||
{
|
||||
cairo_qpainter_surface_t *qs = (cairo_qpainter_surface_t*) surface;
|
||||
|
||||
if (surface->type != CAIRO_SURFACE_TYPE_QPAINTER)
|
||||
return NULL;
|
||||
|
||||
return (cairo_surface_t*) qs->image_equiv;
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO:
|
||||
*
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
#if CAIRO_HAS_QPAINTER_SURFACE
|
||||
|
||||
class QPainter;
|
||||
class QImage;
|
||||
|
||||
CAIRO_BEGIN_DECLS
|
||||
|
||||
|
@ -60,6 +61,12 @@ cairo_qpainter_surface_create_with_qpixmap (int width,
|
|||
cairo_public QPainter *
|
||||
cairo_qpainter_surface_get_qpainter (cairo_surface_t *surface);
|
||||
|
||||
cairo_public cairo_surface_t *
|
||||
cairo_qpainter_surface_get_image (cairo_surface_t *surface);
|
||||
|
||||
cairo_public QImage *
|
||||
cairo_qpainter_surface_get_qimage (cairo_surface_t *surface);
|
||||
|
||||
CAIRO_END_DECLS
|
||||
|
||||
#else /* CAIRO_HAS_QPAINTER_SURFACE */
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
#include "gfxImageSurface.h"
|
||||
|
||||
class QPainter;
|
||||
class QImage;
|
||||
|
||||
class THEBES_API gfxQPainterSurface : public gfxASurface {
|
||||
public:
|
||||
|
@ -55,6 +56,9 @@ public:
|
|||
|
||||
QPainter *GetQPainter() { return mPainter; }
|
||||
|
||||
QImage *GetQImage();
|
||||
already_AddRefed<gfxImageSurface> GetImageSurface();
|
||||
|
||||
protected:
|
||||
QPainter *mPainter;
|
||||
};
|
||||
|
|
|
@ -60,6 +60,9 @@ public:
|
|||
already_AddRefed<gfxASurface> CreateOffscreenSurface(const gfxIntSize& size,
|
||||
gfxASurface::gfxImageFormat imageFormat);
|
||||
|
||||
already_AddRefed<gfxASurface> OptimizeImage(gfxImageSurface *aSurface,
|
||||
gfxASurface::gfxImageFormat format);
|
||||
|
||||
nsresult GetFontList(const nsACString& aLangGroup,
|
||||
const nsACString& aGenericFamily,
|
||||
nsStringArray& aListOfFonts);
|
||||
|
|
|
@ -36,6 +36,7 @@
|
|||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "gfxQPainterSurface.h"
|
||||
#include "gfxImageSurface.h"
|
||||
|
||||
#include "cairo-qpainter.h"
|
||||
|
||||
|
@ -77,3 +78,29 @@ gfxQPainterSurface::gfxQPainterSurface(cairo_surface_t *csurf)
|
|||
gfxQPainterSurface::~gfxQPainterSurface()
|
||||
{
|
||||
}
|
||||
|
||||
QImage *
|
||||
gfxQPainterSurface::GetQImage()
|
||||
{
|
||||
if (!mSurfaceValid)
|
||||
return nsnull;
|
||||
|
||||
return cairo_qpainter_surface_get_qimage(CairoSurface());
|
||||
}
|
||||
|
||||
already_AddRefed<gfxImageSurface>
|
||||
gfxQPainterSurface::GetImageSurface()
|
||||
{
|
||||
if (!mSurfaceValid)
|
||||
return nsnull;
|
||||
|
||||
cairo_surface_t *isurf = cairo_qpainter_surface_get_image(CairoSurface());
|
||||
if (!isurf)
|
||||
return nsnull;
|
||||
|
||||
if (cairo_surface_get_type(isurf) == CAIRO_SURFACE_TYPE_IMAGE)
|
||||
return nsnull;
|
||||
|
||||
nsRefPtr<gfxImageSurface> asurf = new gfxImageSurface(isurf);
|
||||
return asurf.forget();
|
||||
}
|
||||
|
|
|
@ -126,6 +126,31 @@ gfxQtPlatform::CreateOffscreenSurface(const gfxIntSize& size,
|
|||
return newSurface.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<gfxASurface>
|
||||
gfxQtPlatform::OptimizeImage(gfxImageSurface *aSurface,
|
||||
gfxASurface::gfxImageFormat format)
|
||||
{
|
||||
NS_ADDREF(aSurface);
|
||||
return aSurface;
|
||||
|
||||
#if 0
|
||||
const gfxIntSize& surfaceSize = aSurface->GetSize();
|
||||
|
||||
nsRefPtr<gfxASurface> optSurface = CreateOffscreenSurface(surfaceSize, format);
|
||||
if (!optSurface || optSurface->CairoStatus() != 0)
|
||||
return nsnull;
|
||||
|
||||
gfxContext tmpCtx(optSurface);
|
||||
tmpCtx.SetOperator(gfxContext::OPERATOR_SOURCE);
|
||||
tmpCtx.SetSource(aSurface);
|
||||
tmpCtx.Paint();
|
||||
|
||||
gfxASurface *ret = optSurface;
|
||||
NS_ADDREF(ret);
|
||||
return ret;
|
||||
#endif
|
||||
}
|
||||
|
||||
nsresult
|
||||
gfxQtPlatform::GetFontList(const nsACString& aLangGroup,
|
||||
const nsACString& aGenericFamily,
|
||||
|
|
Загрузка…
Ссылка в новой задаче