Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | List of all members
SkScanClipper Class Reference

#include <SkScanPriv.h>

Public Member Functions

 SkScanClipper (SkBlitter *blitter, const SkRegion *clip, const SkIRect &bounds, bool skipRejectTest=false, bool boundsPreClipped=false)
 
SkBlittergetBlitter () const
 
const SkIRectgetClipRect () const
 

Detailed Description

Definition at line 18 of file SkScanPriv.h.

Constructor & Destructor Documentation

◆ SkScanClipper()

SkScanClipper::SkScanClipper ( SkBlitter blitter,
const SkRegion clip,
const SkIRect ir,
bool  skipRejectTest = false,
bool  irPreClipped = false 
)

If the caller is drawing an inverse-fill path, then it pass true for skipRejectTest, so we don't abort drawing just because the src bounds (ir) is outside of the clip.

Definition at line 519 of file SkScan_Path.cpp.

520 {
521 fBlitter = nullptr; // null means blit nothing
522 fClipRect = nullptr;
523
524 if (clip) {
525 fClipRect = &clip->getBounds();
526 if (!skipRejectTest && !SkIRect::Intersects(*fClipRect, ir)) { // completely clipped out
527 return;
528 }
529
530 if (clip->isRect()) {
531 if (!irPreClipped && fClipRect->contains(ir)) {
532#ifdef SK_DEBUG
533 fRectClipCheckBlitter.init(blitter, *fClipRect);
534 blitter = &fRectClipCheckBlitter;
535#endif
536 fClipRect = nullptr;
537 } else {
538 // only need a wrapper blitter if we're horizontally clipped
539 if (irPreClipped ||
540 fClipRect->fLeft > ir.fLeft || fClipRect->fRight < ir.fRight) {
541 fRectBlitter.init(blitter, *fClipRect);
542 blitter = &fRectBlitter;
543 } else {
544#ifdef SK_DEBUG
545 fRectClipCheckBlitter.init(blitter, *fClipRect);
546 blitter = &fRectClipCheckBlitter;
547#endif
548 }
549 }
550 } else {
551 fRgnBlitter.init(blitter, clip);
552 blitter = &fRgnBlitter;
553 }
554 }
555 fBlitter = blitter;
556}
static SkPath clip(const SkPath &path, const SkHalfPlane &plane)
Definition SkPath.cpp:3824
const SkRect & getBounds() const
Definition SkPath.cpp:420
bool isRect(SkRect *rect, bool *isClosed=nullptr, SkPathDirection *direction=nullptr) const
Definition SkPath.cpp:506
void init(SkBlitter *blitter, const SkIRect &clipRect)
Definition SkBlitter.h:183
void init(SkBlitter *blitter, const SkRegion *clipRgn)
Definition SkBlitter.h:216
static bool Intersects(const SkIRect &a, const SkIRect &b)
Definition SkRect.h:535
int32_t fLeft
smaller x-axis bounds
Definition SkRect.h:33
bool contains(int32_t x, int32_t y) const
Definition SkRect.h:463
int32_t fRight
larger x-axis bounds
Definition SkRect.h:35

Member Function Documentation

◆ getBlitter()

SkBlitter * SkScanClipper::getBlitter ( ) const
inline

Definition at line 23 of file SkScanPriv.h.

23{ return fBlitter; }

◆ getClipRect()

const SkIRect * SkScanClipper::getClipRect ( ) const
inline

Definition at line 24 of file SkScanPriv.h.

24{ return fClipRect; }

The documentation for this class was generated from the following files: