gfx/skia/trunk/src/gpu/GrSWMaskHelper.h

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /*
     2  * Copyright 2012 Google Inc.
     3  *
     4  * Use of this source code is governed by a BSD-style license that can be
     5  * found in the LICENSE file.
     6  */
     8 #ifndef GrSWMaskHelper_DEFINED
     9 #define GrSWMaskHelper_DEFINED
    11 #include "GrColor.h"
    12 #include "GrDrawState.h"
    13 #include "SkBitmap.h"
    14 #include "SkDraw.h"
    15 #include "SkMatrix.h"
    16 #include "SkRasterClip.h"
    17 #include "SkRegion.h"
    18 #include "SkTypes.h"
    20 class GrAutoScratchTexture;
    21 class GrContext;
    22 class GrTexture;
    23 class SkPath;
    24 class SkStrokeRec;
    25 class GrDrawTarget;
    27 /**
    28  * The GrSWMaskHelper helps generate clip masks using the software rendering
    29  * path. It is intended to be used as:
    30  *
    31  *   GrSWMaskHelper helper(context);
    32  *   helper.init(...);
    33  *
    34  *      draw one or more paths/rects specifying the required boolean ops
    35  *
    36  *   toTexture();   // to get it from the internal bitmap to the GPU
    37  *
    38  * The result of this process will be the final mask (on the GPU) in the
    39  * upper left hand corner of the texture.
    40  */
    41 class GrSWMaskHelper : public SkNoncopyable {
    42 public:
    43     GrSWMaskHelper(GrContext* context)
    44     : fContext(context) {
    45     }
    47     // set up the internal state in preparation for draws. Since many masks
    48     // may be accumulated in the helper during creation, "resultBounds"
    49     // allows the caller to specify the region of interest - to limit the
    50     // amount of work.
    51     bool init(const SkIRect& resultBounds, const SkMatrix* matrix);
    53     // Draw a single rect into the accumulation bitmap using the specified op
    54     void draw(const SkRect& rect, SkRegion::Op op,
    55               bool antiAlias, uint8_t alpha);
    57     // Draw a single path into the accumuation bitmap using the specified op
    58     void draw(const SkPath& path, const SkStrokeRec& stroke, SkRegion::Op op,
    59               bool antiAlias, uint8_t alpha);
    61     // Helper function to get a scratch texture suitable for capturing the
    62     // result (i.e., right size & format)
    63     bool getTexture(GrAutoScratchTexture* texture);
    65     // Move the mask generation results from the internal bitmap to the gpu.
    66     void toTexture(GrTexture* texture);
    68     // Reset the internal bitmap
    69     void clear(uint8_t alpha) {
    70         fBM.eraseColor(SkColorSetARGB(alpha, alpha, alpha, alpha));
    71     }
    73     // Canonical usage utility that draws a single path and uploads it
    74     // to the GPU. The result is returned in "result".
    75     static GrTexture* DrawPathMaskToTexture(GrContext* context,
    76                                             const SkPath& path,
    77                                             const SkStrokeRec& stroke,
    78                                             const SkIRect& resultBounds,
    79                                             bool antiAlias,
    80                                             SkMatrix* matrix);
    82     // This utility routine is used to add a path's mask to some other draw.
    83     // The ClipMaskManager uses it to accumulate clip masks while the
    84     // GrSoftwarePathRenderer uses it to fulfill a drawPath call.
    85     // It draws with "texture" as a path mask into "target" using "rect" as
    86     // geometry and the current drawState. The current drawState is altered to
    87     // accommodate the mask.
    88     // Note that this method assumes that the GrPaint::kTotalStages slot in
    89     // the draw state can be used to hold the mask texture stage.
    90     // This method is really only intended to be used with the
    91     // output of DrawPathMaskToTexture.
    92     static void DrawToTargetWithPathMask(GrTexture* texture,
    93                                          GrDrawTarget* target,
    94                                          const SkIRect& rect);
    96 protected:
    97 private:
    98     GrContext*      fContext;
    99     SkMatrix        fMatrix;
   100     SkBitmap        fBM;
   101     SkDraw          fDraw;
   102     SkRasterClip    fRasterClip;
   104     typedef SkNoncopyable INHERITED;
   105 };
   107 #endif // GrSWMaskHelper_DEFINED

mercurial