tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

DrawTargetOffset.h (8187B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef MOZILLA_GFX_DRAWTARGETOFFSET_H_
      8 #define MOZILLA_GFX_DRAWTARGETOFFSET_H_
      9 
     10 #include "2D.h"
     11 
     12 #include "Filters.h"
     13 #include "Logging.h"
     14 
     15 namespace mozilla {
     16 namespace gfx {
     17 
     18 class SourceSurfaceOffset : public SourceSurface {
     19 public:
     20  SourceSurfaceOffset(RefPtr<SourceSurface> aSurface, IntPoint aOffset)
     21      : mSurface(aSurface), mOffset(aOffset) {
     22    MOZ_RELEASE_ASSERT(mSurface);
     23  }
     24 
     25  virtual SurfaceType GetType() const override { return SurfaceType::OFFSET; }
     26  virtual IntSize GetSize() const override { return mSurface->GetSize(); }
     27  virtual IntRect GetRect() const override {
     28    return mSurface->GetRect() + mOffset;
     29  }
     30  virtual SurfaceFormat GetFormat() const override {
     31    return mSurface->GetFormat();
     32  }
     33  virtual already_AddRefed<DataSourceSurface> GetDataSurface() override {
     34    return mSurface->GetDataSurface();
     35  }
     36  virtual already_AddRefed<SourceSurface> GetUnderlyingSurface() override {
     37    return mSurface->GetUnderlyingSurface();
     38  }
     39  virtual SurfaceType GetUnderlyingType() const override {
     40    return mSurface->GetUnderlyingType();
     41  }
     42 
     43 private:
     44  RefPtr<SourceSurface> mSurface;
     45  IntPoint mOffset;
     46 };
     47 
     48 class DrawTargetOffset : public DrawTarget {
     49 public:
     50  DrawTargetOffset();
     51 
     52  bool Init(DrawTarget* aDrawTarget, IntPoint aOrigin);
     53 
     54  virtual bool IsValid() const override { return mDrawTarget->IsValid(); }
     55 
     56  // We'll pestimistically return true here
     57  virtual bool IsTiledDrawTarget() const override { return true; }
     58 
     59  virtual DrawTargetType GetType() const override {
     60    return mDrawTarget->GetType();
     61  }
     62  virtual BackendType GetBackendType() const override {
     63    return mDrawTarget->GetBackendType();
     64  }
     65  virtual already_AddRefed<SourceSurface> Snapshot() override;
     66  virtual already_AddRefed<SourceSurface> IntoLuminanceSource(
     67      LuminanceType aLuminanceType, float aOpacity) override;
     68  virtual void DetachAllSnapshots() override;
     69  virtual IntSize GetSize() const override { return mDrawTarget->GetSize(); }
     70  virtual IntRect GetRect() const override {
     71    return mDrawTarget->GetRect() + mOrigin;
     72  }
     73 
     74  virtual void Flush() override;
     75  virtual void DrawSurface(SourceSurface* aSurface, const Rect& aDest,
     76                           const Rect& aSource,
     77                           const DrawSurfaceOptions& aSurfOptions,
     78                           const DrawOptions& aOptions) override;
     79  virtual void DrawFilter(FilterNode* aNode, const Rect& aSourceRect,
     80                          const Point& aDestPoint,
     81                          const DrawOptions& aOptions = DrawOptions()) override;
     82  virtual void DrawSurfaceWithShadow(
     83      SourceSurface* aSurface, const Point& aDest, const ShadowOptions& aShadow,
     84      CompositionOp aOperator) override { /* Not implemented */
     85    MOZ_CRASH("GFX: DrawSurfaceWithShadow");
     86  }
     87 
     88  virtual void ClearRect(const Rect& aRect) override;
     89  virtual void MaskSurface(
     90      const Pattern& aSource, SourceSurface* aMask, Point aOffset,
     91      const DrawOptions& aOptions = DrawOptions()) override;
     92 
     93  virtual void CopySurface(SourceSurface* aSurface, const IntRect& aSourceRect,
     94                           const IntPoint& aDestination) override;
     95 
     96  virtual void FillRect(const Rect& aRect, const Pattern& aPattern,
     97                        const DrawOptions& aOptions = DrawOptions()) override;
     98  virtual void FillRoundedRect(
     99      const RoundedRect& aRect, const Pattern& aPattern,
    100      const DrawOptions& aOptions = DrawOptions()) override;
    101  virtual void StrokeRect(const Rect& aRect, const Pattern& aPattern,
    102                          const StrokeOptions& aStrokeOptions = StrokeOptions(),
    103                          const DrawOptions& aOptions = DrawOptions()) override;
    104  virtual void StrokeLine(const Point& aStart, const Point& aEnd,
    105                          const Pattern& aPattern,
    106                          const StrokeOptions& aStrokeOptions = StrokeOptions(),
    107                          const DrawOptions& aOptions = DrawOptions()) override;
    108  virtual void Stroke(const Path* aPath, const Pattern& aPattern,
    109                      const StrokeOptions& aStrokeOptions = StrokeOptions(),
    110                      const DrawOptions& aOptions = DrawOptions()) override;
    111  virtual void Fill(const Path* aPath, const Pattern& aPattern,
    112                    const DrawOptions& aOptions = DrawOptions()) override;
    113  virtual void FillGlyphs(ScaledFont* aFont, const GlyphBuffer& aBuffer,
    114                          const Pattern& aPattern,
    115                          const DrawOptions& aOptions = DrawOptions()) override;
    116  virtual void StrokeGlyphs(
    117      ScaledFont* aFont, const GlyphBuffer& aBuffer, const Pattern& aPattern,
    118      const StrokeOptions& aStrokeOptions = StrokeOptions(),
    119      const DrawOptions& aOptions = DrawOptions()) override;
    120  virtual void Mask(const Pattern& aSource, const Pattern& aMask,
    121                    const DrawOptions& aOptions = DrawOptions()) override;
    122  virtual void PushClip(const Path* aPath) override;
    123  virtual void PushClipRect(const Rect& aRect) override;
    124  virtual void PopClip() override;
    125  virtual bool RemoveAllClips() override {
    126    return mDrawTarget->RemoveAllClips();
    127  }
    128  virtual void PushLayer(bool aOpaque, Float aOpacity, SourceSurface* aMask,
    129                         const Matrix& aMaskTransform,
    130                         const IntRect& aBounds = IntRect(),
    131                         bool aCopyBackground = false) override;
    132  virtual void PushLayerWithBlend(
    133      bool aOpaque, Float aOpacity, SourceSurface* aMask,
    134      const Matrix& aMaskTransform, const IntRect& aBounds = IntRect(),
    135      bool aCopyBackground = false,
    136      CompositionOp = CompositionOp::OP_OVER) override;
    137  virtual bool Draw3DTransformedSurface(SourceSurface* aSurface,
    138                                        const Matrix4x4& aMatrix) override;
    139  virtual void PopLayer() override;
    140 
    141  virtual void SetTransform(const Matrix& aTransform) override;
    142 
    143  virtual void SetPermitSubpixelAA(bool aPermitSubpixelAA) override;
    144 
    145  virtual already_AddRefed<SourceSurface> CreateSourceSurfaceFromData(
    146      unsigned char* aData, const IntSize& aSize, int32_t aStride,
    147      SurfaceFormat aFormat) const override {
    148    return mDrawTarget->CreateSourceSurfaceFromData(aData, aSize, aStride,
    149                                                    aFormat);
    150  }
    151  virtual already_AddRefed<SourceSurface> OptimizeSourceSurface(
    152      SourceSurface* aSurface) const override {
    153    return mDrawTarget->OptimizeSourceSurface(aSurface);
    154  }
    155 
    156  virtual already_AddRefed<SourceSurface> CreateSourceSurfaceFromNativeSurface(
    157      const NativeSurface& aSurface) const override {
    158    return mDrawTarget->CreateSourceSurfaceFromNativeSurface(aSurface);
    159  }
    160 
    161  virtual already_AddRefed<DrawTarget> CreateSimilarDrawTarget(
    162      const IntSize& aSize, SurfaceFormat aFormat) const override {
    163    return mDrawTarget->CreateSimilarDrawTarget(aSize, aFormat);
    164  }
    165 
    166  virtual bool CanCreateSimilarDrawTarget(
    167      const IntSize& aSize, SurfaceFormat aFormat) const override {
    168    return mDrawTarget->CanCreateSimilarDrawTarget(aSize, aFormat);
    169  }
    170  virtual RefPtr<DrawTarget> CreateClippedDrawTarget(
    171      const Rect& aBounds, SurfaceFormat aFormat) override;
    172 
    173  virtual already_AddRefed<PathBuilder> CreatePathBuilder(
    174      FillRule aFillRule = FillRule::FILL_WINDING) const override {
    175    return mDrawTarget->CreatePathBuilder(aFillRule);
    176  }
    177 
    178  virtual already_AddRefed<GradientStops> CreateGradientStops(
    179      GradientStop* aStops, uint32_t aNumStops,
    180      ExtendMode aExtendMode = ExtendMode::CLAMP) const override {
    181    return mDrawTarget->CreateGradientStops(aStops, aNumStops, aExtendMode);
    182  }
    183  virtual already_AddRefed<FilterNode> CreateFilter(FilterType aType) override {
    184    return mDrawTarget->CreateFilter(aType);
    185  }
    186 
    187 private:
    188  RefPtr<DrawTarget> mDrawTarget;
    189  IntPoint mOrigin;
    190 };
    191 
    192 }  // namespace gfx
    193 }  // namespace mozilla
    194 
    195 #endif