gfx/skia/trunk/src/images/SkScaledBitmapSampler.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.

     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  */
     8 #ifndef SkScaledBitmapSampler_DEFINED
     9 #define SkScaledBitmapSampler_DEFINED
    11 #include "SkTypes.h"
    12 #include "SkColor.h"
    13 #include "SkImageDecoder.h"
    15 class SkBitmap;
    17 class SkScaledBitmapSampler {
    18 public:
    19     SkScaledBitmapSampler(int origWidth, int origHeight, int cellSize);
    21     int scaledWidth() const { return fScaledWidth; }
    22     int scaledHeight() const { return fScaledHeight; }
    24     int srcY0() const { return fY0; }
    25     int srcDX() const { return fDX; }
    26     int srcDY() const { return fDY; }
    28     enum SrcConfig {
    29         kGray,  // 1 byte per pixel
    30         kIndex, // 1 byte per pixel
    31         kRGB,   // 3 bytes per pixel
    32         kRGBX,  // 4 byes per pixel (ignore 4th)
    33         kRGBA,  // 4 bytes per pixel
    34         kRGB_565 // 2 bytes per pixel
    35     };
    37     // Given a dst bitmap (with pixels already allocated) and a src-config,
    38     // prepares iterator to process the src colors and write them into dst.
    39     // Returns false if the request cannot be fulfulled.
    40     bool begin(SkBitmap* dst, SrcConfig sc, const SkImageDecoder& decoder,
    41                const SkPMColor* = NULL);
    42     // call with row of src pixels, for y = 0...scaledHeight-1.
    43     // returns true if the row had non-opaque alpha in it
    44     bool next(const uint8_t* SK_RESTRICT src);
    46     // Like next(), but specifies the y value of the source row, so the
    47     // rows can come in any order. If the row is not part of the output
    48     // sample, it will be skipped. Only sampleInterlaced OR next should
    49     // be called for one SkScaledBitmapSampler.
    50     bool sampleInterlaced(const uint8_t* SK_RESTRICT src, int srcY);
    52     typedef bool (*RowProc)(void* SK_RESTRICT dstRow,
    53                             const uint8_t* SK_RESTRICT src,
    54                             int width, int deltaSrc, int y,
    55                             const SkPMColor[]);
    57 private:
    58     int fScaledWidth;
    59     int fScaledHeight;
    61     int fX0;    // first X coord to sample
    62     int fY0;    // first Y coord (scanline) to sample
    63     int fDX;    // step between X samples
    64     int fDY;    // step between Y samples
    66 #ifdef SK_DEBUG
    67     // Keep track of whether the caller is using next or sampleInterlaced.
    68     // Only one can be used per sampler.
    69     enum SampleMode {
    70         kUninitialized_SampleMode,
    71         kConsecutive_SampleMode,
    72         kInterlaced_SampleMode,
    73     };
    75     SampleMode fSampleMode;
    76 #endif
    78     // setup state
    79     char*   fDstRow; // points into bitmap's pixels
    80     size_t  fDstRowBytes;
    81     int     fCurrY; // used for dithering
    82     int     fSrcPixelSize;  // 1, 3, 4
    83     RowProc fRowProc;
    85     // optional reference to the src colors if the src is a palette model
    86     const SkPMColor* fCTable;
    88 #ifdef SK_DEBUG
    89     // Helper class allowing a test to have access to fRowProc.
    90     friend class RowProcTester;
    91 #endif
    92 };
    94 #endif

mercurial