gfx/skia/trunk/src/core/SkScan.h

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     2 /*
     3  * Copyright 2011 The Android Open Source Project
     4  *
     5  * Use of this source code is governed by a BSD-style license that can be
     6  * found in the LICENSE file.
     7  */
    10 #ifndef SkScan_DEFINED
    11 #define SkScan_DEFINED
    13 #include "SkRect.h"
    15 class SkRasterClip;
    16 class SkRegion;
    17 class SkBlitter;
    18 class SkPath;
    20 /** Defines a fixed-point rectangle, identical to the integer SkIRect, but its
    21     coordinates are treated as SkFixed rather than int32_t.
    22 */
    23 typedef SkIRect SkXRect;
    25 class SkScan {
    26 public:
    27     static void FillPath(const SkPath&, const SkIRect&, SkBlitter*);
    29     ///////////////////////////////////////////////////////////////////////////
    30     // rasterclip
    32     static void FillIRect(const SkIRect&, const SkRasterClip&, SkBlitter*);
    33     static void FillXRect(const SkXRect&, const SkRasterClip&, SkBlitter*);
    34     static void FillRect(const SkRect&, const SkRasterClip&, SkBlitter*);
    35     static void AntiFillRect(const SkRect&, const SkRasterClip&, SkBlitter*);
    36     static void AntiFillXRect(const SkXRect&, const SkRasterClip&, SkBlitter*);
    37     static void FillPath(const SkPath&, const SkRasterClip&, SkBlitter*);
    38     static void AntiFillPath(const SkPath&, const SkRasterClip&, SkBlitter*);
    39     static void FrameRect(const SkRect&, const SkPoint& strokeSize,
    40                           const SkRasterClip&, SkBlitter*);
    41     static void AntiFrameRect(const SkRect&, const SkPoint& strokeSize,
    42                               const SkRasterClip&, SkBlitter*);
    43     static void FillTriangle(const SkPoint pts[], const SkRasterClip&, SkBlitter*);
    44     static void HairLine(const SkPoint&, const SkPoint&, const SkRasterClip&,
    45                          SkBlitter*);
    46     static void AntiHairLine(const SkPoint&, const SkPoint&, const SkRasterClip&,
    47                              SkBlitter*);
    48     static void HairRect(const SkRect&, const SkRasterClip&, SkBlitter*);
    49     static void AntiHairRect(const SkRect&, const SkRasterClip&, SkBlitter*);
    50     static void HairPath(const SkPath&, const SkRasterClip&, SkBlitter*);
    51     static void AntiHairPath(const SkPath&, const SkRasterClip&, SkBlitter*);
    53 private:
    54     friend class SkAAClip;
    55     friend class SkRegion;
    57     static void FillIRect(const SkIRect&, const SkRegion* clip, SkBlitter*);
    58     static void FillXRect(const SkXRect&, const SkRegion* clip, SkBlitter*);
    59     static void FillRect(const SkRect&, const SkRegion* clip, SkBlitter*);
    60     static void AntiFillRect(const SkRect&, const SkRegion* clip, SkBlitter*);
    61     static void AntiFillXRect(const SkXRect&, const SkRegion*, SkBlitter*);
    62     static void FillPath(const SkPath&, const SkRegion& clip, SkBlitter*);
    63     static void AntiFillPath(const SkPath&, const SkRegion& clip, SkBlitter*,
    64                              bool forceRLE = false);
    65     static void FillTriangle(const SkPoint pts[], const SkRegion*, SkBlitter*);
    67     static void AntiFrameRect(const SkRect&, const SkPoint& strokeSize,
    68                               const SkRegion*, SkBlitter*);
    69     static void HairLineRgn(const SkPoint&, const SkPoint&, const SkRegion*,
    70                          SkBlitter*);
    71     static void AntiHairLineRgn(const SkPoint&, const SkPoint&, const SkRegion*,
    72                              SkBlitter*);
    73 };
    75 /** Assign an SkXRect from a SkIRect, by promoting the src rect's coordinates
    76     from int to SkFixed. Does not check for overflow if the src coordinates
    77     exceed 32K
    78 */
    79 static inline void XRect_set(SkXRect* xr, const SkIRect& src) {
    80     xr->fLeft = SkIntToFixed(src.fLeft);
    81     xr->fTop = SkIntToFixed(src.fTop);
    82     xr->fRight = SkIntToFixed(src.fRight);
    83     xr->fBottom = SkIntToFixed(src.fBottom);
    84 }
    86 /** Assign an SkXRect from a SkRect, by promoting the src rect's coordinates
    87     from SkScalar to SkFixed. Does not check for overflow if the src coordinates
    88     exceed 32K
    89 */
    90 static inline void XRect_set(SkXRect* xr, const SkRect& src) {
    91     xr->fLeft = SkScalarToFixed(src.fLeft);
    92     xr->fTop = SkScalarToFixed(src.fTop);
    93     xr->fRight = SkScalarToFixed(src.fRight);
    94     xr->fBottom = SkScalarToFixed(src.fBottom);
    95 }
    97 /** Round the SkXRect coordinates, and store the result in the SkIRect.
    98 */
    99 static inline void XRect_round(const SkXRect& xr, SkIRect* dst) {
   100     dst->fLeft = SkFixedRoundToInt(xr.fLeft);
   101     dst->fTop = SkFixedRoundToInt(xr.fTop);
   102     dst->fRight = SkFixedRoundToInt(xr.fRight);
   103     dst->fBottom = SkFixedRoundToInt(xr.fBottom);
   104 }
   106 /** Round the SkXRect coordinates out (i.e. use floor for left/top, and ceiling
   107     for right/bottom), and store the result in the SkIRect.
   108 */
   109 static inline void XRect_roundOut(const SkXRect& xr, SkIRect* dst) {
   110     dst->fLeft = SkFixedFloorToInt(xr.fLeft);
   111     dst->fTop = SkFixedFloorToInt(xr.fTop);
   112     dst->fRight = SkFixedCeilToInt(xr.fRight);
   113     dst->fBottom = SkFixedCeilToInt(xr.fBottom);
   114 }
   116 #endif

mercurial