class SkBitmap; class SkBlender; class SkData; class SkDevice; class SkImage; class SkMesh; class SkPDFDocument; class SkPaint; class SkPath; class SkRRect; class SkSpecialImage; class SkSurface; class SkSurfaceProps; class SkVertices; enumclass SkBlendMode; struct SkIRect; struct SkISize; struct SkImageInfo; struct SkPoint; struct SkRect;
namespace sktext { class GlyphRun; class GlyphRunList;
}
/** * \class SkPDFDevice * * An SkPDFDevice is the drawing context for a page or layer of PDF * content.
*/ class SkPDFDevice final : public SkClipStackDevice { public: /** * @param pageSize Page size in point units. * 1 point == 127/360 mm == 1/72 inch * @param document A non-null pointer back to the * PDFDocument object. The document is responsible for * de-duplicating across pages (via the SkPDFDocument) and * for early serializing of large immutable objects, such * as images (via SkPDFDocument::serialize()). * @param initialTransform Transform to be applied to the entire page.
*/
SkPDFDevice(SkISize pageSize, SkPDFDocument* document, const SkMatrix& initialTransform = SkMatrix::I());
/** * These are called inside the per-device-layer loop for each draw call. * When these are called, we have already applied any saveLayer * operations, and are handling any looping from the paint.
*/ void drawPaint(const SkPaint& paint) override; void drawPoints(SkCanvas::PointMode mode,
size_t count, const SkPoint[], const SkPaint& paint) override; void drawRect(const SkRect& r, const SkPaint& paint) override; void drawOval(const SkRect& oval, const SkPaint& paint) override; void drawRRect(const SkRRect& rr, const SkPaint& paint) override; void drawPath(const SkPath& origpath, const SkPaint& paint, bool pathIsMutable) override;
private: // TODO(vandebo): push most of SkPDFDevice's state into a core object in // order to get the right access levels without using friend. friendclass ScopedContentEntry;
class MarkedContentManager { public:
MarkedContentManager(SkPDFDocument* document, SkDynamicMemoryWStream* out);
~MarkedContentManager();
// Sets the current element identifier. Associate future draws with the structure element // with the given element identifier. Element identifier 0 is reserved to mean no structure // element. void setNextMarksElemId(int nextMarksElemId);
// The current element identifier. int elemId() const;
// Starts a marked-content sequence for a content item for the structure element with the // current element identifier. If there is an active marked-content sequence associated with // a different element identifier the active marked-content sequence will first be closed. // If there is no structure element with the current element identifier then the // marked-content sequence will not be started. void beginMark();
// Tests if there is an active marked-content sequence. bool hasActiveMark() const;
// Accumulates an upper left location for the active mark. The point is in PDF page space // and so is y-up. Only use if this.hasActiveMark() void accumulate(const SkPoint& p);
// Tests if this marked content manager made any marks. bool madeMarks() const { return fMadeMarks; }
// Set alpha to true if making a transparency group form x-objects.
SkPDFIndirectReference makeFormXObjectFromDevice(bool alpha = false);
SkPDFIndirectReference makeFormXObjectFromDevice(SkIRect bbox, bool alpha = false);
// If the paint or clip is such that we shouldn't draw anything, this // returns nullptr and does not create a content entry. // setUpContentEntry and finishContentEntry can be used directly, but // the preferred method is to use the ScopedContentEntry helper class.
SkDynamicMemoryWStream* setUpContentEntry(const SkClipStack* clipStack, const SkMatrix& matrix, const SkPaint& paint,
SkScalar,
SkPDFIndirectReference* dst); void finishContentEntry(const SkClipStack*, SkBlendMode, SkPDFIndirectReference, SkPath*); bool isContentEmpty();
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.