180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru/*
380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Copyright 2006 The Android Open Source Project
480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru *
580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * Use of this source code is governed by a BSD-style license that can be
680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru * found in the LICENSE file.
780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru */
880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#ifndef SkScanPriv_DEFINED
1180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#define SkScanPriv_DEFINED
1280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkScan.h"
1480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#include "SkBlitter.h"
1580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
1680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruclass SkScanClipper {
1780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Querupublic:
1880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkScanClipper(SkBlitter* blitter, const SkRegion* clip, const SkIRect& bounds,
1980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                  bool skipRejectTest = false);
2080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkBlitter*      getBlitter() const { return fBlitter; }
2280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkIRect*  getClipRect() const { return fClipRect; }
2380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
2480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruprivate:
2580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkRectClipBlitter   fRectBlitter;
2680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkRgnClipBlitter    fRgnBlitter;
2780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    SkBlitter*          fBlitter;
2880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru    const SkIRect*      fClipRect;
2980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru};
3080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3180bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// clipRect == null means path is entirely inside the clip
3280bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid sk_fill_path(const SkPath& path, const SkIRect* clipRect,
3380bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                  SkBlitter* blitter, int start_y, int stop_y, int shiftEdgesUp,
3480bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru                  const SkRegion& clipRgn);
3580bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
3680bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru// blit the rects above and below avoid, clipped to clip
3780bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid sk_blit_above(SkBlitter*, const SkIRect& avoid, const SkRegion& clip);
3880bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queruvoid sk_blit_below(SkBlitter*, const SkIRect& avoid, const SkRegion& clip);
3980bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru
4080bacfeb4bda06541e8695bd502229727bccfeaJean-Baptiste Queru#endif
41