File: OffscreenCanvasRenderingContext2D.h

package info (click to toggle)
chromium-browser 57.0.2987.98-1~deb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 2,637,852 kB
  • ctags: 2,544,394
  • sloc: cpp: 12,815,961; ansic: 3,676,222; python: 1,147,112; asm: 526,608; java: 523,212; xml: 286,794; perl: 92,654; sh: 86,408; objc: 73,271; makefile: 27,698; cs: 18,487; yacc: 13,031; tcl: 12,957; pascal: 4,875; ml: 4,716; lex: 3,904; sql: 3,862; ruby: 1,982; lisp: 1,508; php: 1,368; exp: 404; awk: 325; csh: 117; jsp: 39; sed: 37
file content (114 lines) | stat: -rw-r--r-- 3,779 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef OffscreenCanvasRenderingContext2D_h
#define OffscreenCanvasRenderingContext2D_h

#include "core/html/canvas/CanvasContextCreationAttributes.h"
#include "core/html/canvas/CanvasRenderingContext.h"
#include "core/html/canvas/CanvasRenderingContextFactory.h"
#include "modules/canvas2d/BaseRenderingContext2D.h"
#include <memory>

namespace blink {

class MODULES_EXPORT OffscreenCanvasRenderingContext2D final
    : public CanvasRenderingContext,
      public BaseRenderingContext2D {
  DEFINE_WRAPPERTYPEINFO();
  USING_GARBAGE_COLLECTED_MIXIN(OffscreenCanvasRenderingContext2D);

 public:
  class Factory : public CanvasRenderingContextFactory {
   public:
    Factory() {}
    ~Factory() override {}

    CanvasRenderingContext* create(
        ScriptState* scriptState,
        OffscreenCanvas* canvas,
        const CanvasContextCreationAttributes& attrs) override {
      return new OffscreenCanvasRenderingContext2D(scriptState, canvas, attrs);
    }

    CanvasRenderingContext::ContextType getContextType() const override {
      return CanvasRenderingContext::Context2d;
    }
  };

  ScriptPromise commit(ScriptState*, ExceptionState&);

  // CanvasRenderingContext implementation
  ~OffscreenCanvasRenderingContext2D() override;
  ContextType getContextType() const override { return Context2d; }
  bool is2d() const override { return true; }
  void setOffscreenCanvasGetContextResult(OffscreenRenderingContext&) final;
  void setIsHidden(bool) final { ASSERT_NOT_REACHED(); }
  void stop() final { ASSERT_NOT_REACHED(); }
  void setCanvasGetContextResult(RenderingContext&) final {}
  void clearRect(double x, double y, double width, double height) override {
    BaseRenderingContext2D::clearRect(x, y, width, height);
  }
  PassRefPtr<Image> getImage(AccelerationHint, SnapshotReason) const final;
  ImageData* toImageData(SnapshotReason) override;
  void reset() override;

  // BaseRenderingContext2D implementation
  bool originClean() const final;
  void setOriginTainted() final;
  bool wouldTaintOrigin(CanvasImageSource*, ExecutionContext*) final;

  int width() const final;
  int height() const final;

  bool hasImageBuffer() const final;
  ImageBuffer* imageBuffer() const final;

  bool parseColorOrCurrentColor(Color&, const String& colorString) const final;

  SkCanvas* drawingCanvas() const final;
  SkCanvas* existingDrawingCanvas() const final;
  void disableDeferral(DisableDeferralReason) final;

  AffineTransform baseTransform() const final;
  void didDraw(const SkIRect& dirtyRect) final;

  bool stateHasFilter() final;
  sk_sp<SkImageFilter> stateGetFilter() final;
  void snapshotStateForFilter() final {}

  void validateStateStack() const final;

  bool hasAlpha() const final { return creationAttributes().alpha(); }
  bool isContextLost() const override;

  ImageBitmap* transferToImageBitmap(ScriptState*) final;

  ColorBehavior drawImageColorBehavior() const final;

 protected:
  OffscreenCanvasRenderingContext2D(
      ScriptState*,
      OffscreenCanvas*,
      const CanvasContextCreationAttributes& attrs);
  DECLARE_VIRTUAL_TRACE();

 private:
  bool m_needsMatrixClipRestore = false;
  std::unique_ptr<ImageBuffer> m_imageBuffer;

  bool isPaintable() const final;

  RefPtr<StaticBitmapImage> transferToStaticBitmapImage();
};

DEFINE_TYPE_CASTS(OffscreenCanvasRenderingContext2D,
                  CanvasRenderingContext,
                  context,
                  context->is2d() && context->offscreenCanvas(),
                  context.is2d() && context.offscreenCanvas());

}  // namespace blink

#endif  // OffscreenCanvasRenderingContext2D_h