1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/2d/DrawTargetSkia.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,142 @@ 1.4 +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*- 1.5 + * This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +#ifndef _MOZILLA_GFX_SOURCESURFACESKIA_H 1.10 +#define _MOZILLA_GFX_SOURCESURFACESKIA_H 1.11 + 1.12 +#ifdef USE_SKIA_GPU 1.13 +#include "skia/GrContext.h" 1.14 +#include "skia/GrGLInterface.h" 1.15 +#endif 1.16 + 1.17 +#include "skia/SkCanvas.h" 1.18 + 1.19 +#include "2D.h" 1.20 +#include "Rect.h" 1.21 +#include "PathSkia.h" 1.22 +#include <sstream> 1.23 +#include <vector> 1.24 + 1.25 +namespace mozilla { 1.26 +namespace gfx { 1.27 + 1.28 +class SourceSurfaceSkia; 1.29 + 1.30 +class DrawTargetSkia : public DrawTarget 1.31 +{ 1.32 +public: 1.33 + MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(DrawTargetSkia) 1.34 + DrawTargetSkia(); 1.35 + virtual ~DrawTargetSkia(); 1.36 + 1.37 + virtual BackendType GetType() const { return BackendType::SKIA; } 1.38 + virtual TemporaryRef<SourceSurface> Snapshot(); 1.39 + virtual IntSize GetSize() { return mSize; } 1.40 + virtual void Flush(); 1.41 + virtual void DrawSurface(SourceSurface *aSurface, 1.42 + const Rect &aDest, 1.43 + const Rect &aSource, 1.44 + const DrawSurfaceOptions &aSurfOptions = DrawSurfaceOptions(), 1.45 + const DrawOptions &aOptions = DrawOptions()); 1.46 + virtual void DrawFilter(FilterNode *aNode, 1.47 + const Rect &aSourceRect, 1.48 + const Point &aDestPoint, 1.49 + const DrawOptions &aOptions = DrawOptions()); 1.50 + virtual void DrawSurfaceWithShadow(SourceSurface *aSurface, 1.51 + const Point &aDest, 1.52 + const Color &aColor, 1.53 + const Point &aOffset, 1.54 + Float aSigma, 1.55 + CompositionOp aOperator); 1.56 + virtual void ClearRect(const Rect &aRect); 1.57 + virtual void CopySurface(SourceSurface *aSurface, 1.58 + const IntRect &aSourceRect, 1.59 + const IntPoint &aDestination); 1.60 + virtual void FillRect(const Rect &aRect, 1.61 + const Pattern &aPattern, 1.62 + const DrawOptions &aOptions = DrawOptions()); 1.63 + virtual void StrokeRect(const Rect &aRect, 1.64 + const Pattern &aPattern, 1.65 + const StrokeOptions &aStrokeOptions = StrokeOptions(), 1.66 + const DrawOptions &aOptions = DrawOptions()); 1.67 + virtual void StrokeLine(const Point &aStart, 1.68 + const Point &aEnd, 1.69 + const Pattern &aPattern, 1.70 + const StrokeOptions &aStrokeOptions = StrokeOptions(), 1.71 + const DrawOptions &aOptions = DrawOptions()); 1.72 + virtual void Stroke(const Path *aPath, 1.73 + const Pattern &aPattern, 1.74 + const StrokeOptions &aStrokeOptions = StrokeOptions(), 1.75 + const DrawOptions &aOptions = DrawOptions()); 1.76 + virtual void Fill(const Path *aPath, 1.77 + const Pattern &aPattern, 1.78 + const DrawOptions &aOptions = DrawOptions()); 1.79 + virtual void FillGlyphs(ScaledFont *aFont, 1.80 + const GlyphBuffer &aBuffer, 1.81 + const Pattern &aPattern, 1.82 + const DrawOptions &aOptions = DrawOptions(), 1.83 + const GlyphRenderingOptions *aRenderingOptions = nullptr); 1.84 + virtual void Mask(const Pattern &aSource, 1.85 + const Pattern &aMask, 1.86 + const DrawOptions &aOptions = DrawOptions()); 1.87 + virtual void MaskSurface(const Pattern &aSource, 1.88 + SourceSurface *aMask, 1.89 + Point aOffset, 1.90 + const DrawOptions &aOptions = DrawOptions()); 1.91 + virtual void PushClip(const Path *aPath); 1.92 + virtual void PushClipRect(const Rect& aRect); 1.93 + virtual void PopClip(); 1.94 + virtual TemporaryRef<SourceSurface> CreateSourceSurfaceFromData(unsigned char *aData, 1.95 + const IntSize &aSize, 1.96 + int32_t aStride, 1.97 + SurfaceFormat aFormat) const; 1.98 + virtual TemporaryRef<SourceSurface> OptimizeSourceSurface(SourceSurface *aSurface) const; 1.99 + virtual TemporaryRef<SourceSurface> 1.100 + CreateSourceSurfaceFromNativeSurface(const NativeSurface &aSurface) const; 1.101 + virtual TemporaryRef<DrawTarget> 1.102 + CreateSimilarDrawTarget(const IntSize &aSize, SurfaceFormat aFormat) const; 1.103 + virtual TemporaryRef<PathBuilder> CreatePathBuilder(FillRule aFillRule = FillRule::FILL_WINDING) const; 1.104 + virtual TemporaryRef<GradientStops> CreateGradientStops(GradientStop *aStops, uint32_t aNumStops, ExtendMode aExtendMode = ExtendMode::CLAMP) const; 1.105 + virtual TemporaryRef<FilterNode> CreateFilter(FilterType aType); 1.106 + virtual void SetTransform(const Matrix &aTransform); 1.107 + virtual void *GetNativeSurface(NativeSurfaceType aType); 1.108 + 1.109 + bool Init(const IntSize &aSize, SurfaceFormat aFormat); 1.110 + void Init(unsigned char* aData, const IntSize &aSize, int32_t aStride, SurfaceFormat aFormat); 1.111 + 1.112 +#ifdef USE_SKIA_GPU 1.113 + bool InitWithGrContext(GrContext* aGrContext, 1.114 + const IntSize &aSize, 1.115 + SurfaceFormat aFormat) MOZ_OVERRIDE; 1.116 +#endif 1.117 + 1.118 + operator std::string() const { 1.119 + std::stringstream stream; 1.120 + stream << "DrawTargetSkia(" << this << ")"; 1.121 + return stream.str(); 1.122 + } 1.123 + 1.124 +private: 1.125 + friend class SourceSurfaceSkia; 1.126 + void SnapshotDestroyed(); 1.127 + 1.128 + void MarkChanged(); 1.129 + 1.130 + SkRect SkRectCoveringWholeSurface() const; 1.131 + 1.132 +#ifdef USE_SKIA_GPU 1.133 + SkRefPtr<GrContext> mGrContext; 1.134 + uint32_t mTexture; 1.135 +#endif 1.136 + 1.137 + IntSize mSize; 1.138 + SkRefPtr<SkCanvas> mCanvas; 1.139 + SourceSurfaceSkia* mSnapshot; 1.140 +}; 1.141 + 1.142 +} 1.143 +} 1.144 + 1.145 +#endif // _MOZILLA_GFX_SOURCESURFACESKIA_H