diff options
Diffstat (limited to 'gfx/skia/skia/src/pdf/SkPDFGraphicStackState.h')
-rw-r--r-- | gfx/skia/skia/src/pdf/SkPDFGraphicStackState.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/gfx/skia/skia/src/pdf/SkPDFGraphicStackState.h b/gfx/skia/skia/src/pdf/SkPDFGraphicStackState.h new file mode 100644 index 0000000000..2ea890c1b0 --- /dev/null +++ b/gfx/skia/skia/src/pdf/SkPDFGraphicStackState.h @@ -0,0 +1,41 @@ +// Copyright 2019 Google LLC. +// Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. +#ifndef SkPDFGraphicStackState_DEFINED +#define SkPDFGraphicStackState_DEFINED + +#include "include/core/SkColor.h" +#include "include/core/SkMatrix.h" +#include "include/core/SkScalar.h" +#include "include/private/base/SkFloatingPoint.h" +#include "src/core/SkClipStack.h" + +class SkDynamicMemoryWStream; + +// It is important to not confuse SkPDFGraphicStackState with SkPDFGraphicState, the +// later being our representation of an object in the PDF file. +struct SkPDFGraphicStackState { + struct Entry { + SkMatrix fMatrix = SkMatrix::I(); + uint32_t fClipStackGenID = SkClipStack::kWideOpenGenID; + SkColor4f fColor = {SK_FloatNaN, SK_FloatNaN, SK_FloatNaN, SK_FloatNaN}; + SkScalar fTextScaleX = 1; // Zero means we don't care what the value is. + int fShaderIndex = -1; + int fGraphicStateIndex = -1; + }; + // Must use stack for matrix, and for clip, plus one for no matrix or clip. + inline static constexpr int kMaxStackDepth = 2; + Entry fEntries[kMaxStackDepth + 1]; + int fStackDepth = 0; + SkDynamicMemoryWStream* fContentStream; + + SkPDFGraphicStackState(SkDynamicMemoryWStream* s = nullptr) : fContentStream(s) {} + void updateClip(const SkClipStack* clipStack, const SkIRect& bounds); + void updateMatrix(const SkMatrix& matrix); + void updateDrawingState(const Entry& state); + void push(); + void pop(); + void drainStack(); + Entry* currentEntry() { return &fEntries[fStackDepth]; } +}; + +#endif // SkPDFGraphicStackState_DEFINED |