gfx/skia/trunk/src/effects/SkPorterDuff.cpp

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.

     2 /*
     3  * Copyright 2011 Google Inc.
     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 #include "SkPorterDuff.h"
    11 #include "SkXfermode.h"
    13 /*  This file just exists as a compatibility layer, gluing the PorterDuff API
    14     into the (extended) SkXfermode API
    15  */
    17 #define MAKE_PAIR(mode) { SkPorterDuff::k##mode##_Mode, SkXfermode::k##mode##_Mode }
    19 // this table must be in SkPorterDuff::Mode order, so it can be indexed directly
    20 // with a porterduff mode.
    21 static const struct Pair {
    22     SkPorterDuff::Mode  fPD;
    23     SkXfermode::Mode    fXF;
    24 } gPairs[] = {
    25     MAKE_PAIR(Clear),
    26     MAKE_PAIR(Src),
    27     MAKE_PAIR(Dst),
    28     MAKE_PAIR(SrcOver),
    29     MAKE_PAIR(DstOver),
    30     MAKE_PAIR(SrcIn),
    31     MAKE_PAIR(DstIn),
    32     MAKE_PAIR(SrcOut),
    33     MAKE_PAIR(DstOut),
    34     MAKE_PAIR(SrcATop),
    35     MAKE_PAIR(DstATop),
    36     MAKE_PAIR(Xor),
    37     MAKE_PAIR(Darken),
    38     MAKE_PAIR(Lighten),
    39     MAKE_PAIR(Modulate),
    40     MAKE_PAIR(Screen),
    41     { SkPorterDuff::kAdd_Mode, SkXfermode::kPlus_Mode },
    42 #ifdef SK_BUILD_FOR_ANDROID
    43     MAKE_PAIR(Overlay),
    44 #endif
    45 };
    47 static bool find_pdmode(SkXfermode::Mode src, SkPorterDuff::Mode* dst) {
    48     const Pair* pairs = gPairs;
    49     for (size_t i = 0; i < SK_ARRAY_COUNT(gPairs); i++) {
    50         if (pairs[i].fXF == src) {
    51             if (dst) {
    52                 *dst = pairs[i].fPD;
    53             }
    54             return true;
    55         }
    56     }
    57     return false;
    58 }
    60 SkXfermode::Mode SkPorterDuff::ToXfermodeMode(Mode mode) {
    61     SkASSERT((unsigned)mode < SkPorterDuff::kModeCount);
    62     const Pair& pair = gPairs[mode];
    63     SkASSERT(pair.fPD == mode);
    64     return pair.fXF;
    65 }
    67 SkXfermode* SkPorterDuff::CreateXfermode(SkPorterDuff::Mode mode) {
    68     const Pair& pair = gPairs[mode];
    69     SkASSERT(pair.fPD == mode);
    70     return SkXfermode::Create(pair.fXF);
    71 }
    73 bool SkPorterDuff::IsMode(SkXfermode* xfer, Mode* pdmode) {
    74     SkXfermode::Mode xfmode;
    75     if (!SkXfermode::AsMode(xfer, &xfmode)) {
    76         return false;
    77     }
    78     return find_pdmode(xfmode, pdmode);
    79 }
    81 SkXfermodeProc SkPorterDuff::GetXfermodeProc(Mode mode) {
    82     return SkXfermode::GetProc(gPairs[mode].fXF);
    83 }
    85 SkXfermodeProc16 SkPorterDuff::GetXfermodeProc16(Mode mode, SkColor srcColor) {
    86     return SkXfermode::GetProc16(gPairs[mode].fXF, srcColor);
    87 }

mercurial