aboutsummaryrefslogtreecommitdiffstats
path: root/include/core
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:36 -0800
committerThe Android Open Source Project <initial-contribution@android.com>2009-03-03 18:28:36 -0800
commit6eb364108744656fcd23a96a478aa772cd4e85bc (patch)
tree4b825dc642cb6eb9a060e54bf8d69288fbee4904 /include/core
parenta23c4e24d873b11674987f97f1946e1c4d97e782 (diff)
downloadexternal_skia-6eb364108744656fcd23a96a478aa772cd4e85bc.zip
external_skia-6eb364108744656fcd23a96a478aa772cd4e85bc.tar.gz
external_skia-6eb364108744656fcd23a96a478aa772cd4e85bc.tar.bz2
auto import from //depot/cupcake/@135843
Diffstat (limited to 'include/core')
-rw-r--r--include/core/Sk64.h245
-rw-r--r--include/core/SkAutoKern.h62
-rw-r--r--include/core/SkBitmap.h665
-rw-r--r--include/core/SkBlitter.h143
-rw-r--r--include/core/SkBounder.h72
-rw-r--r--include/core/SkBuffer.h141
-rw-r--r--include/core/SkCanvas.h794
-rw-r--r--include/core/SkChunkAlloc.h61
-rw-r--r--include/core/SkColor.h155
-rw-r--r--include/core/SkColorFilter.h125
-rw-r--r--include/core/SkColorPriv.h657
-rw-r--r--include/core/SkColorShader.h63
-rw-r--r--include/core/SkComposeShader.h66
-rw-r--r--include/core/SkDeque.h74
-rw-r--r--include/core/SkDescriptor.h187
-rw-r--r--include/core/SkDevice.h142
-rw-r--r--include/core/SkDither.h205
-rw-r--r--include/core/SkDraw.h124
-rw-r--r--include/core/SkDrawFilter.h56
-rw-r--r--include/core/SkDrawLooper.h64
-rw-r--r--include/core/SkEndian.h98
-rw-r--r--include/core/SkFDot6.h67
-rw-r--r--include/core/SkFixed.h253
-rw-r--r--include/core/SkFlattenable.h207
-rw-r--r--include/core/SkFloatBits.h150
-rw-r--r--include/core/SkFloatingPoint.h75
-rw-r--r--include/core/SkFontHost.h128
-rw-r--r--include/core/SkGeometry.h163
-rw-r--r--include/core/SkGlobals.h67
-rw-r--r--include/core/SkGraphics.h46
-rw-r--r--include/core/SkMMapStream.h38
-rw-r--r--include/core/SkMallocPixelRef.h60
-rw-r--r--include/core/SkMask.h86
-rw-r--r--include/core/SkMaskFilter.h100
-rw-r--r--include/core/SkMath.h230
-rw-r--r--include/core/SkMatrix.h479
-rw-r--r--include/core/SkOSFile.h85
-rw-r--r--include/core/SkPackBits.h86
-rw-r--r--include/core/SkPaint.h814
-rw-r--r--include/core/SkPath.h588
-rw-r--r--include/core/SkPathEffect.h144
-rw-r--r--include/core/SkPathMeasure.h115
-rw-r--r--include/core/SkPerspIter.h55
-rw-r--r--include/core/SkPicture.h143
-rw-r--r--include/core/SkPixelRef.h158
-rw-r--r--include/core/SkPoint.h288
-rw-r--r--include/core/SkPorterDuff.h79
-rw-r--r--include/core/SkPostConfig.h226
-rw-r--r--include/core/SkPreConfig.h81
-rw-r--r--include/core/SkPtrRecorder.h48
-rw-r--r--include/core/SkRandom.h110
-rw-r--r--include/core/SkRasterizer.h50
-rw-r--r--include/core/SkReader32.h115
-rw-r--r--include/core/SkRect.h435
-rw-r--r--include/core/SkRefCnt.h134
-rw-r--r--include/core/SkRegion.h352
-rw-r--r--include/core/SkScalar.h254
-rw-r--r--include/core/SkScalarCompare.h34
-rw-r--r--include/core/SkScalerContext.h225
-rw-r--r--include/core/SkScan.h123
-rw-r--r--include/core/SkShader.h184
-rw-r--r--include/core/SkStream.h315
-rw-r--r--include/core/SkString.h170
-rw-r--r--include/core/SkStroke.h71
-rw-r--r--include/core/SkTDArray.h293
-rw-r--r--include/core/SkTDStack.h120
-rw-r--r--include/core/SkTDict.h169
-rw-r--r--include/core/SkTRegistry.h51
-rw-r--r--include/core/SkTSearch.h167
-rw-r--r--include/core/SkTemplates.h217
-rw-r--r--include/core/SkThread.h68
-rw-r--r--include/core/SkThread_platform.h71
-rw-r--r--include/core/SkTime.h72
-rw-r--r--include/core/SkTypeface.h131
-rw-r--r--include/core/SkTypes.h377
-rw-r--r--include/core/SkUnPreMultiply.h63
-rw-r--r--include/core/SkUnitMapper.h38
-rw-r--r--include/core/SkUserConfig.h144
-rw-r--r--include/core/SkUtils.h140
-rw-r--r--include/core/SkWriter32.h112
-rw-r--r--include/core/SkXfermode.h115
81 files changed, 0 insertions, 14178 deletions
diff --git a/include/core/Sk64.h b/include/core/Sk64.h
deleted file mode 100644
index 538ae7e..0000000
--- a/include/core/Sk64.h
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef Sk64_DEFINED
-#define Sk64_DEFINED
-
-#include "SkFixed.h"
-#include "SkMath.h"
-
-/** \class Sk64
-
- Sk64 is a 64-bit math package that does not require long long support from the compiler.
-*/
-struct Sk64 {
- int32_t fHi; //!< the high 32 bits of the number (including sign)
- uint32_t fLo; //!< the low 32 bits of the number
-
- /** Returns non-zero if the Sk64 can be represented as a signed 32 bit integer
- */
- SkBool is32() const { return fHi == ((int32_t)fLo >> 31); }
-
- /** Returns non-zero if the Sk64 cannot be represented as a signed 32 bit integer
- */
- SkBool is64() const { return fHi != ((int32_t)fLo >> 31); }
-
- /** Returns non-zero if the Sk64 can be represented as a signed 48 bit integer. Used to know
- if we can shift the value down by 16 to treat it as a SkFixed.
- */
- SkBool isFixed() const;
-
- /** Return the signed 32 bit integer equivalent. Asserts that is32() returns non-zero.
- */
- int32_t get32() const { SkASSERT(this->is32()); return (int32_t)fLo; }
-
- /** Return the number >> 16. Asserts that this does not loose any significant high bits.
- */
- SkFixed getFixed() const {
- SkASSERT(this->isFixed());
-
- uint32_t sum = fLo + (1 << 15);
- int32_t hi = fHi;
- if (sum < fLo) {
- hi += 1;
- }
- return (hi << 16) | (sum >> 16);
- }
-
- /** Return the number >> 30. Asserts that this does not loose any
- significant high bits.
- */
- SkFract getFract() const;
-
- /** Returns the square-root of the number as a signed 32 bit value. */
- int32_t getSqrt() const;
-
- /** Returns the number of leading zeros of the absolute value of this.
- Will return in the range [0..64]
- */
- int getClzAbs() const;
-
- /** Returns non-zero if the number is zero */
- SkBool isZero() const { return (fHi | fLo) == 0; }
-
- /** Returns non-zero if the number is non-zero */
- SkBool nonZero() const { return fHi | fLo; }
-
- /** Returns non-zero if the number is negative (number < 0) */
- SkBool isNeg() const { return (uint32_t)fHi >> 31; }
-
- /** Returns non-zero if the number is positive (number > 0) */
- SkBool isPos() const { return ~(fHi >> 31) & (fHi | fLo); }
-
- /** Returns -1,0,+1 based on the sign of the number */
- int getSign() const { return (fHi >> 31) | Sk32ToBool(fHi | fLo); }
-
- /** Negate the number */
- void negate();
-
- /** If the number < 0, negate the number
- */
- void abs();
-
- /** Returns the number of bits needed to shift the Sk64 to the right
- in order to make it fit in a signed 32 bit integer.
- */
- int shiftToMake32() const;
-
- /** Set the number to zero */
- void setZero() { fHi = fLo = 0; }
-
- /** Set the high and low 32 bit values of the number */
- void set(int32_t hi, uint32_t lo) { fHi = hi; fLo = lo; }
-
- /** Set the number to the specified 32 bit integer */
- void set(int32_t a) { fHi = a >> 31; fLo = a; }
-
- /** Set the number to the product of the two 32 bit integers */
- void setMul(int32_t a, int32_t b);
-
- /** extract 32bits after shifting right by bitCount.
- Note: itCount must be [0..63].
- Asserts that no significant high bits were lost.
- */
- int32_t getShiftRight(unsigned bitCount) const;
-
- /** Shift the number left by the specified number of bits.
- @param bits How far to shift left, must be [0..63]
- */
- void shiftLeft(unsigned bits);
-
- /** Shift the number right by the specified number of bits.
- @param bits How far to shift right, must be [0..63]. This
- performs an arithmetic right-shift (sign extending).
- */
- void shiftRight(unsigned bits);
-
- /** Shift the number right by the specified number of bits, but
- round the result.
- @param bits How far to shift right, must be [0..63]. This
- performs an arithmetic right-shift (sign extending).
- */
- void roundRight(unsigned bits);
-
- /** Add the specified 32 bit integer to the number */
- void add(int32_t lo) {
- int32_t hi = lo >> 31; // 0 or -1
- uint32_t sum = fLo + (uint32_t)lo;
-
- fHi = fHi + hi + (sum < fLo);
- fLo = sum;
- }
-
- /** Add the specified Sk64 to the number */
- void add(int32_t hi, uint32_t lo) {
- uint32_t sum = fLo + lo;
-
- fHi = fHi + hi + (sum < fLo);
- fLo = sum;
- }
-
- /** Add the specified Sk64 to the number */
- void add(const Sk64& other) { this->add(other.fHi, other.fLo); }
-
- /** Subtract the specified Sk64 from the number. (*this) = (*this) - num
- */
- void sub(const Sk64& num);
-
- /** Subtract the number from the specified Sk64. (*this) = num - (*this)
- */
- void rsub(const Sk64& num);
-
- /** Multiply the number by the specified 32 bit integer
- */
- void mul(int32_t);
-
- enum DivOptions {
- kTrunc_DivOption, //!< truncate the result when calling div()
- kRound_DivOption //!< round the result when calling div()
- };
-
- /** Divide the number by the specified 32 bit integer, using the specified
- divide option (either truncate or round).
- */
- void div(int32_t, DivOptions);
-
- /** return (this + other >> 16) as a 32bit result */
- SkFixed addGetFixed(const Sk64& other) const {
- return this->addGetFixed(other.fHi, other.fLo);
- }
-
- /** return (this + Sk64(hi, lo) >> 16) as a 32bit result */
- SkFixed addGetFixed(int32_t hi, uint32_t lo) const {
-#ifdef SK_DEBUG
- Sk64 tmp(*this);
- tmp.add(hi, lo);
-#endif
-
- uint32_t sum = fLo + lo;
- hi += fHi + (sum < fLo);
- lo = sum;
-
- sum = lo + (1 << 15);
- if (sum < lo)
- hi += 1;
-
- hi = (hi << 16) | (sum >> 16);
- SkASSERT(hi == tmp.getFixed());
- return hi;
- }
-
- /** Return the result of dividing the number by denom, treating the answer
- as a SkFixed. (*this) << 16 / denom. It is an error for denom to be 0.
- */
- SkFixed getFixedDiv(const Sk64& denom) const;
-
- friend bool operator==(const Sk64& a, const Sk64& b) {
- return a.fHi == b.fHi && a.fLo == b.fLo;
- }
-
- friend bool operator!=(const Sk64& a, const Sk64& b) {
- return a.fHi != b.fHi || a.fLo != b.fLo;
- }
-
- friend bool operator<(const Sk64& a, const Sk64& b) {
- return a.fHi < b.fHi || (a.fHi == b.fHi && a.fLo < b.fLo);
- }
-
- friend bool operator<=(const Sk64& a, const Sk64& b) {
- return a.fHi < b.fHi || (a.fHi == b.fHi && a.fLo <= b.fLo);
- }
-
- friend bool operator>(const Sk64& a, const Sk64& b) {
- return a.fHi > b.fHi || (a.fHi == b.fHi && a.fLo > b.fLo);
- }
-
- friend bool operator>=(const Sk64& a, const Sk64& b) {
- return a.fHi > b.fHi || (a.fHi == b.fHi && a.fLo >= b.fLo);
- }
-
-#ifdef SkLONGLONG
- SkLONGLONG getLongLong() const;
-#endif
-
-#ifdef SK_DEBUG
- /** @cond UNIT_TEST */
- static void UnitTest();
- /** @endcond */
-#endif
-};
-
-#endif
-
diff --git a/include/core/SkAutoKern.h b/include/core/SkAutoKern.h
deleted file mode 100644
index 023cb6b..0000000
--- a/include/core/SkAutoKern.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* libs/graphics/sgl/SkAutoKern.h
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#ifndef SkAutoKern_DEFINED
-#define SkAutoKern_DEFINED
-
-#include "SkScalerContext.h"
-
-#define SkAutoKern_AdjustF(prev, next) (((next) - (prev) + 32) >> 6 << 16)
-#define SkAutoKern_AdjustS(prev, next) SkIntToScalar(((next) - (prev) + 32) >> 6)
-
-/* this is a helper class to perform auto-kerning
- * the adjust() method returns a SkFixed corresponding
- * to a +1/0/-1 pixel adjustment
- */
-
-class SkAutoKern {
-public:
- SkAutoKern() : fPrevRsbDelta(0) {}
-
- SkFixed adjust(const SkGlyph& glyph)
- {
-// if (SkAbs32(glyph.fLsbDelta) > 47 || SkAbs32(glyph.fRsbDelta) > 47)
-// printf("------- %d> L %d R %d\n", glyph.f_GlyphID, glyph.fLsbDelta, glyph.fRsbDelta);
-
-#if 0
- int distort = fPrevRsbDelta - glyph.fLsbDelta;
-
- fPrevRsbDelta = glyph.fRsbDelta;
-
- if (distort >= 32)
- return -SK_Fixed1;
- else if (distort < -32)
- return +SK_Fixed1;
- else
- return 0;
-#else
- SkFixed adjust = SkAutoKern_AdjustF(fPrevRsbDelta, glyph.fLsbDelta);
- fPrevRsbDelta = glyph.fRsbDelta;
- return adjust;
-#endif
- }
-private:
- int fPrevRsbDelta;
-};
-
-#endif
-
diff --git a/include/core/SkBitmap.h b/include/core/SkBitmap.h
deleted file mode 100644
index 96c804d..0000000
--- a/include/core/SkBitmap.h
+++ /dev/null
@@ -1,665 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkBitmap_DEFINED
-#define SkBitmap_DEFINED
-
-#include "Sk64.h"
-#include "SkColor.h"
-#include "SkPoint.h"
-#include "SkRefCnt.h"
-
-struct SkIRect;
-class SkColorTable;
-class SkPaint;
-class SkPixelRef;
-class SkRegion;
-class SkFlattenableReadBuffer;
-class SkFlattenableWriteBuffer;
-
-/** \class SkBitmap
-
- The SkBitmap class specifies a raster bitmap. A bitmap has an integer width
- and height, and a format (config), and a pointer to the actual pixels.
- Bitmaps can be drawn into a SkCanvas, but they are also used to specify the target
- of a SkCanvas' drawing operations.
-*/
-class SkBitmap {
-public:
- class Allocator;
-
- enum Config {
- kNo_Config, //!< bitmap has not been configured
- kA1_Config, //!< 1-bit per pixel, (0 is transparent, 1 is opaque)
- kA8_Config, //!< 8-bits per pixel, with only alpha specified (0 is transparent, 0xFF is opaque)
- kIndex8_Config, //!< 8-bits per pixel, using SkColorTable to specify the colors
- kRGB_565_Config, //!< 16-bits per pixel, (see SkColorPriv.h for packing)
- kARGB_4444_Config, //!< 16-bits per pixel, (see SkColorPriv.h for packing)
- kARGB_8888_Config, //!< 32-bits per pixel, (see SkColorPriv.h for packing)
- kRLE_Index8_Config,
-
- kConfigCount
- };
-
- /** Default construct creates a bitmap with zero width and height, and no pixels.
- Its config is set to kNo_Config.
- */
- SkBitmap();
- /** Constructor initializes the new bitmap by copying the src bitmap. All fields are copied,
- but ownership of the pixels remains with the src bitmap.
- */
- SkBitmap(const SkBitmap& src);
- /** Decrements our (shared) pixel ownership if needed.
- */
- ~SkBitmap();
-
- /** Copies the src bitmap into this bitmap. Ownership of the src bitmap's pixels remains
- with the src bitmap.
- */
- SkBitmap& operator=(const SkBitmap& src);
- /** Swap the fields of the two bitmaps. This routine is guaranteed to never fail or throw.
- */
- // This method is not exported to java.
- void swap(SkBitmap& other);
-
- /** Return true iff the bitmap has empty dimensions.
- */
- bool empty() const { return 0 == fWidth || 0 == fHeight; }
-
- /** Return true iff the bitmap has no pixels nor a pixelref. Note: this can
- return true even if the dimensions of the bitmap are > 0 (see empty()).
- */
- bool isNull() const { return NULL == fPixels && NULL == fPixelRef; }
-
- /** Return the config for the bitmap.
- */
- Config config() const { return (Config)fConfig; }
- /** DEPRECATED, use config()
- */
- Config getConfig() const { return this->config(); }
- /** Return the bitmap's width, in pixels.
- */
- int width() const { return fWidth; }
- /** Return the bitmap's height, in pixels.
- */
- int height() const { return fHeight; }
- /** Return the number of bytes between subsequent rows of the bitmap.
- */
- int rowBytes() const { return fRowBytes; }
-
- /** Return the shift amount per pixel (i.e. 0 for 1-byte per pixel, 1 for
- 2-bytes per pixel configs, 2 for 4-bytes per pixel configs). Return 0
- for configs that are not at least 1-byte per pixel (e.g. kA1_Config
- or kNo_Config)
- */
- int shiftPerPixel() const { return fBytesPerPixel >> 1; }
-
- /** Return the number of bytes per pixel based on the config. If the config
- does not have at least 1 byte per (e.g. kA1_Config) then 0 is returned.
- */
- int bytesPerPixel() const { return fBytesPerPixel; }
-
- /** Return the rowbytes expressed as a number of pixels (like width and
- height). Note, for 1-byte per pixel configs like kA8_Config, this will
- return the same as rowBytes(). Is undefined for configs that are less
- than 1-byte per pixel (e.g. kA1_Config)
- */
- int rowBytesAsPixels() const { return fRowBytes >> (fBytesPerPixel >> 1); }
-
- /** Return the address of the pixels for this SkBitmap.
- */
- void* getPixels() const { return fPixels; }
-
- /** Return the byte size of the pixels, based on the height and rowBytes.
- Note this truncates the result to 32bits. Call getSize64() to detect
- if the real size exceeds 32bits.
- */
- size_t getSize() const { return fHeight * fRowBytes; }
-
- /** Return the byte size of the pixels, based on the height and rowBytes.
- This routine is slightly slower than getSize(), but does not truncate
- the answer to 32bits.
- */
- Sk64 getSize64() const {
- Sk64 size;
- size.setMul(fHeight, fRowBytes);
- return size;
- }
-
- /** Returns true if the bitmap is opaque (has no translucent/transparent pixels).
- */
- bool isOpaque() const;
- /** Specify if this bitmap's pixels are all opaque or not. Is only meaningful for configs
- that support per-pixel alpha (RGB32, A1, A8).
- */
- void setIsOpaque(bool);
-
- /** Reset the bitmap to its initial state (see default constructor). If we are a (shared)
- owner of the pixels, that ownership is decremented.
- */
- void reset();
-
- /** Given a config and a width, this computes the optimal rowBytes value. This is called automatically
- if you pass 0 for rowBytes to setConfig().
- */
- static int ComputeRowBytes(Config c, int width);
-
- /** Return the bytes-per-pixel for the specified config. If the config is
- not at least 1-byte per pixel, return 0, including for kNo_Config.
- */
- static int ComputeBytesPerPixel(Config c);
-
- /** Return the shift-per-pixel for the specified config. If the config is
- not at least 1-byte per pixel, return 0, including for kNo_Config.
- */
- static int ComputeShiftPerPixel(Config c) {
- return ComputeBytesPerPixel(c) >> 1;
- }
-
- static Sk64 ComputeSize64(Config, int width, int height);
- static size_t ComputeSize(Config, int width, int height);
-
- /** Set the bitmap's config and dimensions. If rowBytes is 0, then
- ComputeRowBytes() is called to compute the optimal value. This resets
- any pixel/colortable ownership, just like reset().
- */
- void setConfig(Config, int width, int height, int rowBytes = 0);
- /** Use this to assign a new pixel address for an existing bitmap. This
- will automatically release any pixelref previously installed. Only call
- this if you are handling ownership/lifetime of the pixel memory.
-
- If the bitmap retains a reference to the colortable (assuming it is
- not null) it will take care of incrementing the reference count.
-
- @param pixels Address for the pixels, managed by the caller.
- @param ctable ColorTable (or null) that matches the specified pixels
- */
- void setPixels(void* p, SkColorTable* ctable = NULL);
-
- /** Use the standard HeapAllocator to create the pixelref that manages the
- pixel memory. It will be sized based on the current width/height/config.
- If this is called multiple times, a new pixelref object will be created
- each time.
-
- If the bitmap retains a reference to the colortable (assuming it is
- not null) it will take care of incrementing the reference count.
-
- @param ctable ColorTable (or null) to use with the pixels that will
- be allocated. Only used if config == Index8_Config
- @return true if the allocation succeeds. If not the pixelref field of
- the bitmap will be unchanged.
- */
- bool allocPixels(SkColorTable* ctable = NULL) {
- return this->allocPixels(NULL, ctable);
- }
-
- /** Use the specified Allocator to create the pixelref that manages the
- pixel memory. It will be sized based on the current width/height/config.
- If this is called multiple times, a new pixelref object will be created
- each time.
-
- If the bitmap retains a reference to the colortable (assuming it is
- not null) it will take care of incrementing the reference count.
-
- @param allocator The Allocator to use to create a pixelref that can
- manage the pixel memory for the current
- width/height/config. If allocator is NULL, the standard
- HeapAllocator will be used.
- @param ctable ColorTable (or null) to use with the pixels that will
- be allocated. Only used if config == Index8_Config.
- If it is non-null and the config is not Index8, it will
- be ignored.
- @return true if the allocation succeeds. If not the pixelref field of
- the bitmap will be unchanged.
- */
- bool allocPixels(Allocator* allocator, SkColorTable* ctable);
-
- /** Return the current pixelref object, of any
- */
- SkPixelRef* pixelRef() const { return fPixelRef; }
- /** Return the offset into the pixelref, if any. Will return 0 if there is
- no pixelref installed.
- */
- size_t pixelRefOffset() const { return fPixelRefOffset; }
- /** Assign a pixelref and optional offset. Pixelrefs are reference counted,
- so the existing one (if any) will be unref'd and the new one will be
- ref'd.
- */
- SkPixelRef* setPixelRef(SkPixelRef* pr, size_t offset = 0);
-
- /** Call this to ensure that the bitmap points to the current pixel address
- in the pixelref. Balance it with a call to unlockPixels(). These calls
- are harmless if there is no pixelref.
- */
- void lockPixels() const;
- /** When you are finished access the pixel memory, call this to balance a
- previous call to lockPixels(). This allows pixelrefs that implement
- cached/deferred image decoding to know when there are active clients of
- a given image.
- */
- void unlockPixels() const;
-
- /** Call this to be sure that the bitmap is valid enough to be drawn (i.e.
- it has non-null pixels, and if required by its config, it has a
- non-null colortable. Returns true if all of the above are met.
- */
- bool readyToDraw() const {
- return this->getPixels() != NULL &&
- ((this->config() != kIndex8_Config && this->config() != kRLE_Index8_Config) ||
- fColorTable != NULL);
- }
-
- /** Return the bitmap's colortable (if any). Does not affect the colortable's
- reference count.
- */
- SkColorTable* getColorTable() const { return fColorTable; }
-
- /** Returns a non-zero, unique value corresponding to the pixels in our
- pixelref, or 0 if we do not have a pixelref. Each time the pixels are
- changed (and notifyPixelsChanged is called), a different generation ID
- will be returned.
- */
- uint32_t getGenerationID() const;
-
- /** Call this if you have changed the contents of the pixels. This will in-
- turn cause a different generation ID value to be returned from
- getGenerationID().
- */
- void notifyPixelsChanged() const;
-
- /** Initialize the bitmap's pixels with the specified color+alpha, automatically converting into the correct format
- for the bitmap's config. If the config is kRGB_565_Config, then the alpha value is ignored.
- If the config is kA8_Config, then the r,g,b parameters are ignored.
- */
- void eraseARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b) const;
- /** Initialize the bitmap's pixels with the specified color+alpha, automatically converting into the correct format
- for the bitmap's config. If the config is kRGB_565_Config, then the alpha value is presumed
- to be 0xFF. If the config is kA8_Config, then the r,g,b parameters are ignored and the
- pixels are all set to 0xFF.
- */
- void eraseRGB(U8CPU r, U8CPU g, U8CPU b) const {
- this->eraseARGB(0xFF, r, g, b);
- }
- /** Initialize the bitmap's pixels with the specified color, automatically converting into the correct format
- for the bitmap's config. If the config is kRGB_565_Config, then the color's alpha value is presumed
- to be 0xFF. If the config is kA8_Config, then only the color's alpha value is used.
- */
- void eraseColor(SkColor c) const {
- this->eraseARGB(SkColorGetA(c), SkColorGetR(c), SkColorGetG(c),
- SkColorGetB(c));
- }
-
- /** Scroll (a subset of) the contents of this bitmap by dx/dy. If there are
- no pixels allocated (i.e. getPixels() returns null) the method will
- still update the inval region (if present).
-
- @param subset The subset of the bitmap to scroll/move. To scroll the
- entire contents, specify [0, 0, width, height] or just
- pass null.
- @param dx The amount to scroll in X
- @param dy The amount to scroll in Y
- @param inval Optional (may be null). Returns the area of the bitmap that
- was scrolled away. E.g. if dx = dy = 0, then inval would
- be set to empty. If dx >= width or dy >= height, then
- inval would be set to the entire bounds of the bitmap.
- @return true if the scroll was doable. Will return false if the bitmap
- uses an unsupported config for scrolling (only kA8,
- kIndex8, kRGB_565, kARGB_4444, kARGB_8888 are supported).
- If no pixels are present (i.e. getPixels() returns false)
- inval will still be updated, and true will be returned.
- */
- bool scrollRect(const SkIRect* subset, int dx, int dy,
- SkRegion* inval = NULL) const;
-
- /** Returns the address of the specified pixel. This performs a runtime
- check to know the size of the pixels, and will return the same answer
- as the corresponding size-specific method (e.g. getAddr16). Since the
- check happens at runtime, it is much slower than using a size-specific
- version. Unlike the size-specific methods, this routine also checks if
- getPixels() returns null, and returns that. The size-specific routines
- perform a debugging assert that getPixels() is not null, but they do
- not do any runtime checks.
- */
- void* getAddr(int x, int y) const;
-
- /** Returns the address of the pixel specified by x,y for 32bit pixels.
- */
- inline uint32_t* getAddr32(int x, int y) const;
- /** Returns the address of the pixel specified by x,y for 16bit pixels.
- */
- inline uint16_t* getAddr16(int x, int y) const;
- /** Returns the address of the pixel specified by x,y for 8bit pixels.
- */
- inline uint8_t* getAddr8(int x, int y) const;
- /** Returns the address of the byte containing the pixel specified by x,y
- for 1bit pixels.
- */
- inline uint8_t* getAddr1(int x, int y) const;
-
- /** Returns the color corresponding to the pixel specified by x,y for
- colortable based bitmaps.
- */
- inline SkPMColor getIndex8Color(int x, int y) const;
-
- /** Set dst to be a setset of this bitmap. If possible, it will share the
- pixel memory, and just point into a subset of it. However, if the config
- does not support this, a local copy will be made and associated with
- the dst bitmap. If the subset rectangle, intersected with the bitmap's
- dimensions is empty, or if there is an unsupported config, false will be
- returned and dst will be untouched.
- @param dst The bitmap that will be set to a subset of this bitmap
- @param subset The rectangle of pixels in this bitmap that dst will
- reference.
- @return true if the subset copy was successfully made.
- */
- bool extractSubset(SkBitmap* dst, const SkIRect& subset) const;
-
- /** Tries to make a new bitmap based on the dimensions of this bitmap,
- setting the new bitmap's config to the one specified, and then copying
- this bitmap's pixels into the new bitmap. If the conversion is not
- supported, or the allocator fails, then this method returns false and
- dst is left unchanged.
- @param dst The bitmap to be sized and allocated
- @param c The desired config for dst
- @param allocator Allocator used to allocate the pixelref for the dst
- bitmap. If this is null, the standard HeapAllocator
- will be used.
- @return true if the copy could be made.
- */
- bool copyTo(SkBitmap* dst, Config c, Allocator* allocator = NULL) const;
-
- bool hasMipMap() const;
- void buildMipMap(bool forceRebuild = false);
- void freeMipMap();
-
- /** Given scale factors sx, sy, determine the miplevel available in the
- bitmap, and return it (this is the amount to shift matrix iterators
- by). If dst is not null, it is set to the correct level.
- */
- int extractMipLevel(SkBitmap* dst, SkFixed sx, SkFixed sy);
-
- void extractAlpha(SkBitmap* dst) const {
- this->extractAlpha(dst, NULL, NULL);
- }
-
- void extractAlpha(SkBitmap* dst, const SkPaint* paint,
- SkIPoint* offset) const;
-
- void flatten(SkFlattenableWriteBuffer&) const;
- void unflatten(SkFlattenableReadBuffer&);
-
- SkDEBUGCODE(void validate() const;)
-
- class Allocator : public SkRefCnt {
- public:
- /** Allocate the pixel memory for the bitmap, given its dimensions and
- config. Return true on success, where success means either setPixels
- or setPixelRef was called. The pixels need not be locked when this
- returns. If the config requires a colortable, it also must be
- installed via setColorTable. If false is returned, the bitmap and
- colortable should be left unchanged.
- */
- virtual bool allocPixelRef(SkBitmap*, SkColorTable*) = 0;
- };
-
- /** Subclass of Allocator that returns a pixelref that allocates its pixel
- memory from the heap. This is the default Allocator invoked by
- allocPixels().
- */
- class HeapAllocator : public Allocator {
- public:
- virtual bool allocPixelRef(SkBitmap*, SkColorTable*);
- };
-
- class RLEPixels {
- public:
- RLEPixels(int width, int height);
- virtual ~RLEPixels();
-
- uint8_t* packedAtY(int y) const {
- SkASSERT((unsigned)y < (unsigned)fHeight);
- return fYPtrs[y];
- }
-
- // called by subclasses during creation
- void setPackedAtY(int y, uint8_t* addr) {
- SkASSERT((unsigned)y < (unsigned)fHeight);
- fYPtrs[y] = addr;
- }
-
- private:
- uint8_t** fYPtrs;
- int fHeight;
- };
-
-private:
-#ifdef SK_SUPPORT_MIPMAP
- struct MipMap;
- mutable MipMap* fMipMap;
-#endif
-
- mutable SkPixelRef* fPixelRef;
- mutable size_t fPixelRefOffset;
- mutable int fPixelLockCount;
- // either user-specified (in which case it is not treated as mutable)
- // or a cache of the returned value from fPixelRef->lockPixels()
- mutable void* fPixels;
- mutable SkColorTable* fColorTable; // only meaningful for kIndex8
-
- enum Flags {
- kImageIsOpaque_Flag = 0x01
- };
-
- uint32_t fRowBytes;
- uint16_t fWidth, fHeight;
- uint8_t fConfig;
- uint8_t fFlags;
- uint8_t fBytesPerPixel; // based on config
-
- /* Unreference any pixelrefs or colortables
- */
- void freePixels();
- void updatePixelsFromRef() const;
-
- static SkFixed ComputeMipLevel(SkFixed sx, SkFixed dy);
-};
-
-/** \class SkColorTable
-
- SkColorTable holds an array SkPMColors (premultiplied 32-bit colors) used by
- 8-bit bitmaps, where the bitmap bytes are interpreted as indices into the colortable.
-*/
-class SkColorTable : public SkRefCnt {
-public:
- /** Constructs an empty color table (zero colors).
- */
- explicit SkColorTable(int count);
- explicit SkColorTable(SkFlattenableReadBuffer&);
- SkColorTable(const SkPMColor colors[], int count);
- virtual ~SkColorTable();
-
- enum Flags {
- kColorsAreOpaque_Flag = 0x01 //!< if set, all of the colors in the table are opaque (alpha==0xFF)
- };
- /** Returns the flag bits for the color table. These can be changed with setFlags().
- */
- unsigned getFlags() const { return fFlags; }
- /** Set the flags for the color table. See the Flags enum for possible values.
- */
- void setFlags(unsigned flags);
-
- /** Returns the number of colors in the table.
- */
- int count() const { return fCount; }
-
- /** Returns the specified color from the table. In the debug build, this asserts that
- the index is in range (0 <= index < count).
- */
- SkPMColor operator[](int index) const {
- SkASSERT(fColors != NULL && (unsigned)index < fCount);
- return fColors[index];
- }
-
- /** Specify the number of colors in the color table. This does not initialize the colors
- to any value, just allocates memory for them. To initialize the values, either call
- setColors(array, count), or follow setCount(count) with a call to
- lockColors()/{set the values}/unlockColors(true).
- */
-// void setColors(int count) { this->setColors(NULL, count); }
-// void setColors(const SkPMColor[], int count);
-
- /** Return the array of colors for reading and/or writing. This must be
- balanced by a call to unlockColors(changed?), telling the colortable if
- the colors were changed during the lock.
- */
- SkPMColor* lockColors() {
- SkDEBUGCODE(fColorLockCount += 1;)
- return fColors;
- }
- /** Balancing call to lockColors(). If the colors have been changed, pass true.
- */
- void unlockColors(bool changed);
-
- /** Similar to lockColors(), lock16BitCache() returns the array of
- RGB16 colors that mirror the 32bit colors. However, this function
- will return null if kColorsAreOpaque_Flag is not set.
- Also, unlike lockColors(), the returned array here cannot be modified.
- */
- const uint16_t* lock16BitCache();
- /** Balancing call to lock16BitCache().
- */
- void unlock16BitCache() {
- SkASSERT(f16BitCacheLockCount > 0);
- SkDEBUGCODE(f16BitCacheLockCount -= 1);
- }
-
- void flatten(SkFlattenableWriteBuffer&) const;
-
-private:
- SkPMColor* fColors;
- uint16_t* f16BitCache;
- uint16_t fCount;
- uint8_t fFlags;
- SkDEBUGCODE(int fColorLockCount;)
- SkDEBUGCODE(int f16BitCacheLockCount;)
-
- void inval16BitCache();
-};
-
-class SkAutoLockPixels {
-public:
- SkAutoLockPixels(const SkBitmap& bitmap) : fBitmap(bitmap) {
- bitmap.lockPixels();
- }
- ~SkAutoLockPixels() {
- fBitmap.unlockPixels();
- }
-
-private:
- const SkBitmap& fBitmap;
-};
-
-/** Helper class that performs the lock/unlockColors calls on a colortable.
- The destructor will call unlockColors(false) if it has a bitmap's colortable
-*/
-class SkAutoLockColors : public SkNoncopyable {
-public:
- /** Initialize with no bitmap. Call lockColors(bitmap) to lock bitmap's
- colortable
- */
- SkAutoLockColors() : fCTable(NULL), fColors(NULL) {}
- /** Initialize with bitmap, locking its colortable if present
- */
- explicit SkAutoLockColors(const SkBitmap& bm) {
- fCTable = bm.getColorTable();
- fColors = fCTable ? fCTable->lockColors() : NULL;
- }
- /** Initialize with a colortable (may be null)
- */
- explicit SkAutoLockColors(SkColorTable* ctable) {
- fCTable = ctable;
- fColors = ctable ? ctable->lockColors() : NULL;
- }
- ~SkAutoLockColors() {
- if (fCTable) {
- fCTable->unlockColors(false);
- }
- }
-
- /** Return the currently locked colors, or NULL if no bitmap's colortable
- is currently locked.
- */
- const SkPMColor* colors() const { return fColors; }
-
- /** If a previous bitmap has been locked by this object, unlock its colors
- first. If the specified bitmap has a colortable, lock its colors and
- return them.
- */
- const SkPMColor* lockColors(const SkBitmap& bm) {
- if (fCTable) {
- fCTable->unlockColors(false);
- }
- fCTable = bm.getColorTable();
- fColors = fCTable ? fCTable->lockColors() : NULL;
- return fColors;
- }
-
-private:
- SkColorTable* fCTable;
- const SkPMColor* fColors;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-inline uint32_t* SkBitmap::getAddr32(int x, int y) const {
- SkASSERT(fPixels);
- SkASSERT(fConfig == kARGB_8888_Config);
- SkASSERT((unsigned)x < fWidth && (unsigned)y < fHeight);
- return (uint32_t*)((char*)fPixels + y * fRowBytes + (x << 2));
-}
-
-inline uint16_t* SkBitmap::getAddr16(int x, int y) const {
- SkASSERT(fPixels);
- SkASSERT(fConfig == kRGB_565_Config || fConfig == kARGB_4444_Config);
- SkASSERT((unsigned)x < fWidth && (unsigned)y < fHeight);
- return (uint16_t*)((char*)fPixels + y * fRowBytes + (x << 1));
-}
-
-inline uint8_t* SkBitmap::getAddr8(int x, int y) const {
- SkASSERT(fPixels);
- SkASSERT(fConfig == kA8_Config || fConfig == kIndex8_Config);
- SkASSERT((unsigned)x < fWidth && (unsigned)y < fHeight);
- return (uint8_t*)fPixels + y * fRowBytes + x;
-}
-
-inline SkPMColor SkBitmap::getIndex8Color(int x, int y) const {
- SkASSERT(fPixels);
- SkASSERT(fConfig == kIndex8_Config);
- SkASSERT((unsigned)x < fWidth && (unsigned)y < fHeight);
- SkASSERT(fColorTable);
- return (*fColorTable)[*((const uint8_t*)fPixels + y * fRowBytes + x)];
-}
-
-// returns the address of the byte that contains the x coordinate
-inline uint8_t* SkBitmap::getAddr1(int x, int y) const {
- SkASSERT(fPixels);
- SkASSERT(fConfig == kA1_Config);
- SkASSERT((unsigned)x < fWidth && (unsigned)y < fHeight);
- return (uint8_t*)fPixels + y * fRowBytes + (x >> 3);
-}
-
-#endif
-
diff --git a/include/core/SkBlitter.h b/include/core/SkBlitter.h
deleted file mode 100644
index 11b84fd..0000000
--- a/include/core/SkBlitter.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/* libs/graphics/sgl/SkBlitter.h
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#ifndef SkBlitter_DEFINED
-#define SkBlitter_DEFINED
-
-#include "SkBitmap.h"
-#include "SkMatrix.h"
-#include "SkPaint.h"
-#include "SkRefCnt.h"
-#include "SkRegion.h"
-#include "SkMask.h"
-
-class SkBlitter {
-public:
- virtual ~SkBlitter();
-
- virtual void blitH(int x, int y, int width);
- virtual void blitAntiH(int x, int y, const SkAlpha[], const int16_t runs[]);
- virtual void blitV(int x, int y, int height, SkAlpha alpha);
- virtual void blitRect(int x, int y, int width, int height);
- virtual void blitMask(const SkMask&, const SkIRect& clip);
-
- /* If the blitter just sets a single value for each pixel, return the
- bitmap it draws into, and assign value. If not, return NULL and ignore
- the value parameter.
- */
- virtual const SkBitmap* justAnOpaqueColor(uint32_t* value);
-
- // not virtual, just helpers
- void blitMaskRegion(const SkMask& mask, const SkRegion& clip);
- void blitRectRegion(const SkIRect& rect, const SkRegion& clip);
- void blitRegion(const SkRegion& clip);
-
- // factories
- static SkBlitter* Choose(const SkBitmap& device,
- const SkMatrix& matrix,
- const SkPaint& paint) {
- return Choose(device, matrix, paint, NULL, 0);
- }
-
- static SkBlitter* Choose(const SkBitmap& device,
- const SkMatrix& matrix,
- const SkPaint& paint,
- void* storage, size_t storageSize);
-
- static SkBlitter* ChooseSprite(const SkBitmap& device,
- const SkPaint&,
- const SkBitmap& src,
- int left, int top,
- void* storage, size_t storageSize);
-
-private:
-};
-
-/** This blitter silently never draws anything.
-*/
-class SkNullBlitter : public SkBlitter {
-public:
- virtual void blitH(int x, int y, int width);
- virtual void blitAntiH(int x, int y, const SkAlpha[], const int16_t runs[]);
- virtual void blitV(int x, int y, int height, SkAlpha alpha);
- virtual void blitRect(int x, int y, int width, int height);
- virtual void blitMask(const SkMask&, const SkIRect& clip);
- virtual const SkBitmap* justAnOpaqueColor(uint32_t* value);
-};
-
-/** Wraps another (real) blitter, and ensures that the real blitter is only
- called with coordinates that have been clipped by the specified clipRect.
- This means the caller need not perform the clipping ahead of time.
-*/
-class SkRectClipBlitter : public SkBlitter {
-public:
- void init(SkBlitter* blitter, const SkIRect& clipRect) {
- SkASSERT(!clipRect.isEmpty());
- fBlitter = blitter;
- fClipRect = clipRect;
- }
-
- // overrides
- virtual void blitH(int x, int y, int width);
- virtual void blitAntiH(int x, int y, const SkAlpha[], const int16_t runs[]);
- virtual void blitV(int x, int y, int height, SkAlpha alpha);
- virtual void blitRect(int x, int y, int width, int height);
- virtual void blitMask(const SkMask&, const SkIRect& clip);
- virtual const SkBitmap* justAnOpaqueColor(uint32_t* value);
-
-private:
- SkBlitter* fBlitter;
- SkIRect fClipRect;
-};
-
-/** Wraps another (real) blitter, and ensures that the real blitter is only
-called with coordinates that have been clipped by the specified clipRgn.
-This means the caller need not perform the clipping ahead of time.
-*/
-class SkRgnClipBlitter : public SkBlitter {
-public:
- void init(SkBlitter* blitter, const SkRegion* clipRgn) {
- SkASSERT(clipRgn && !clipRgn->isEmpty());
- fBlitter = blitter;
- fRgn = clipRgn;
- }
-
- // overrides
- virtual void blitH(int x, int y, int width);
- virtual void blitAntiH(int x, int y, const SkAlpha[], const int16_t runs[]);
- virtual void blitV(int x, int y, int height, SkAlpha alpha);
- virtual void blitRect(int x, int y, int width, int height);
- virtual void blitMask(const SkMask&, const SkIRect& clip);
- virtual const SkBitmap* justAnOpaqueColor(uint32_t* value);
-
-private:
- SkBlitter* fBlitter;
- const SkRegion* fRgn;
-};
-
-class SkBlitterClipper {
-public:
- SkBlitter* apply(SkBlitter* blitter, const SkRegion* clip,
- const SkIRect* bounds = NULL);
-
-private:
- SkNullBlitter fNullBlitter;
- SkRectClipBlitter fRectBlitter;
- SkRgnClipBlitter fRgnBlitter;
-};
-
-#endif
diff --git a/include/core/SkBounder.h b/include/core/SkBounder.h
deleted file mode 100644
index f20961d..0000000
--- a/include/core/SkBounder.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkBounder_DEFINED
-#define SkBounder_DEFINED
-
-#include "SkTypes.h"
-#include "SkRefCnt.h"
-
-struct SkIRect;
-struct SkPoint;
-struct SkRect;
-class SkPaint;
-class SkPath;
-class SkRegion;
-
-/** \class SkBounder
-
- Base class for intercepting the device bounds of shapes before they are drawn.
- Install a subclass of this in your canvas.
-*/
-class SkBounder : public SkRefCnt {
-public:
- /* Call to perform a clip test before calling onIRect.
- Returns the result from onIRect.
- */
- bool doIRect(const SkIRect&);
-
-protected:
- /** Override in your subclass. This is called with the device bounds of an
- object (text, geometry, image) just before it is drawn. If your method
- returns false, the drawing for that shape is aborted. If your method
- returns true, drawing continues. The bounds your method receives have already
- been transformed in to device coordinates, and clipped to the current clip.
- */
- virtual bool onIRect(const SkIRect&) = 0;
-
- /** Called after each shape has been drawn. The default implementation does
- nothing, but your override could use this notification to signal itself
- that the offscreen being rendered into needs to be updated to the screen.
- */
- virtual void commit();
-
-private:
- bool doHairline(const SkPoint&, const SkPoint&, const SkPaint&);
- bool doRect(const SkRect&, const SkPaint&);
- bool doPath(const SkPath&, const SkPaint&, bool doFill);
- void setClip(const SkRegion* clip) { fClip = clip; }
-
- const SkRegion* fClip;
- friend class SkAutoBounderCommit;
- friend class SkDraw;
- friend class SkDrawIter;
- friend struct Draw1Glyph;
- friend class SkMaskFilter;
-};
-
-#endif
-
diff --git a/include/core/SkBuffer.h b/include/core/SkBuffer.h
deleted file mode 100644
index bc11a1e..0000000
--- a/include/core/SkBuffer.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkBuffer_DEFINED
-#define SkBuffer_DEFINED
-
-#include "SkScalar.h"
-
-/** \class SkRBuffer
-
- Light weight class for reading data from a memory block.
- The RBuffer is given the buffer to read from, with either a specified size
- or no size (in which case no range checking is performed). It is iillegal
- to attempt to read a value from an empty RBuffer (data == null).
-*/
-class SkRBuffer : SkNoncopyable {
-public:
- SkRBuffer() : fData(0), fPos(0), fStop(0) {}
- /** Initialize RBuffer with a data pointer, but no specified length.
- This signals the RBuffer to not perform range checks during reading.
- */
- SkRBuffer(const void* data)
- {
- fData = (const char*)data;
- fPos = (const char*)data;
- fStop = 0; // no bounds checking
- }
- /** Initialize RBuffer with a data point and length.
- */
- SkRBuffer(const void* data, size_t size)
- {
- SkASSERT(data != 0 || size == 0);
- fData = (const char*)data;
- fPos = (const char*)data;
- fStop = (const char*)data + size;
- }
-
- /** Return the number of bytes that have been read from the beginning
- of the data pointer.
- */
- size_t pos() const { return fPos - fData; }
- /** Return the total size of the data pointer. Only defined if the length was
- specified in the constructor or in a call to reset().
- */
- size_t size() const { return fStop - fData; }
- /** Return true if the buffer has read to the end of the data pointer.
- Only defined if the length was specified in the constructor or in a call
- to reset(). Always returns true if the length was not specified.
- */
- bool eof() const { return fPos >= fStop; }
-
- /** Read the specified number of bytes from the data pointer. If buffer is not
- null, copy those bytes into buffer.
- */
- void read(void* buffer, size_t size) { if (size) this->readNoSizeCheck(buffer, size); }
- const void* skip(size_t size); // return start of skipped data
- size_t skipToAlign4();
-
- void* readPtr() { void* ptr; read(&ptr, sizeof(ptr)); return ptr; }
- SkScalar readScalar() { SkScalar x; read(&x, 4); return x; }
- uint32_t readU32() { uint32_t x; read(&x, 4); return x; }
- int32_t readS32() { int32_t x; read(&x, 4); return x; }
- uint16_t readU16() { uint16_t x; read(&x, 2); return x; }
- int16_t readS16() { int16_t x; read(&x, 2); return x; }
- uint8_t readU8() { uint8_t x; read(&x, 1); return x; }
- bool readBool() { return this->readU8() != 0; }
-
-protected:
- void readNoSizeCheck(void* buffer, size_t size);
-
- const char* fData;
- const char* fPos;
- const char* fStop;
-};
-
-/** \class SkWBuffer
-
- Light weight class for writing data to a memory block.
- The WBuffer is given the buffer to write into, with either a specified size
- or no size, in which case no range checking is performed. An empty WBuffer
- is legal, in which case no data is ever written, but the relative pos()
- is updated.
-*/
-class SkWBuffer : SkNoncopyable {
-public:
- SkWBuffer() : fData(0), fPos(0), fStop(0) {}
- SkWBuffer(void* data) { reset(data); }
- SkWBuffer(void* data, size_t size) { reset(data, size); }
-
- void reset(void* data)
- {
- fData = (char*)data;
- fPos = (char*)data;
- fStop = 0; // no bounds checking
- }
- void reset(void* data, size_t size)
- {
- SkASSERT(data != 0 || size == 0);
- fData = (char*)data;
- fPos = (char*)data;
- fStop = (char*)data + size;
- }
-
- void* data() const { return fData; }
- size_t pos() const { return fPos - fData; }
- size_t size() const { return fStop - fData; }
- bool eof() const { return fPos >= fStop; }
- void* skip(size_t size); // return start of skipped data
- void write(const void* buffer, size_t size) { if (size) this->writeNoSizeCheck(buffer, size); }
- size_t padToAlign4();
-
- void writePtr(const void* x) { this->writeNoSizeCheck(&x, sizeof(x)); }
- void writeScalar(SkScalar x) { this->writeNoSizeCheck(&x, 4); }
- void write32(int32_t x) { this->writeNoSizeCheck(&x, 4); }
- void write16(int16_t x) { this->writeNoSizeCheck(&x, 2); }
- void write8(int8_t x) { this->writeNoSizeCheck(&x, 1); }
- void writeBool(bool x) { this->write8(x); }
-
-protected:
- void writeNoSizeCheck(const void* buffer, size_t size);
-
- char* fData;
- char* fPos;
- char* fStop;
-};
-
-#endif
-
diff --git a/include/core/SkCanvas.h b/include/core/SkCanvas.h
deleted file mode 100644
index a19a5ae..0000000
--- a/include/core/SkCanvas.h
+++ /dev/null
@@ -1,794 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkCanvas_DEFINED
-#define SkCanvas_DEFINED
-
-#include "SkTypes.h"
-#include "SkBitmap.h"
-#include "SkDeque.h"
-#include "SkPaint.h"
-#include "SkRefCnt.h"
-#include "SkPorterDuff.h"
-#include "SkPath.h"
-#include "SkRegion.h"
-#include "SkScalarCompare.h"
-
-class SkBounder;
-class SkDevice;
-class SkDraw;
-class SkDrawFilter;
-class SkPicture;
-
-/** \class SkCanvas
-
- A Canvas encapsulates all of the state about drawing into a device (bitmap).
- This includes a reference to the device itself, and a stack of matrix/clip
- values. For any given draw call (e.g. drawRect), the geometry of the object
- being drawn is transformed by the concatenation of all the matrices in the
- stack. The transformed geometry is clipped by the intersection of all of
- the clips in the stack.
-
- While the Canvas holds the state of the drawing device, the state (style)
- of the object being drawn is held by the Paint, which is provided as a
- parameter to each of the draw() methods. The Paint holds attributes such as
- color, typeface, textSize, strokeWidth, shader (e.g. gradients, patterns),
- etc.
-*/
-class SkCanvas : public SkRefCnt {
-public:
- /** Construct a canvas with the specified bitmap to draw into.
- @param bitmap Specifies a bitmap for the canvas to draw into. Its
- structure are copied to the canvas.
- */
- explicit SkCanvas(const SkBitmap& bitmap);
- /** Construct a canvas with the specified device to draw into.
- @param device Specifies a device for the canvas to draw into. The
- device may be null.
- */
- explicit SkCanvas(SkDevice* device = NULL);
- virtual ~SkCanvas();
-
- ///////////////////////////////////////////////////////////////////////////
-
- /** If this subclass of SkCanvas supports GL viewports, return true and set
- size (if not null) to the size of the viewport. If it is not supported,
- ignore vp and return false.
- */
- virtual bool getViewport(SkIPoint* size) const;
-
- /** If this subclass of SkCanvas supports GL viewports, return true and set
- the viewport to the specified x and y dimensions. If it is not
- supported, ignore x and y and return false.
- */
- virtual bool setViewport(int x, int y);
-
- /** Return the canvas' device object, which may be null. The device holds
- the bitmap of the pixels that the canvas draws into. The reference count
- of the returned device is not changed by this call.
- */
- SkDevice* getDevice() const;
-
- /** Specify a device for this canvas to draw into. If it is not null, its
- reference count is incremented. If the canvas was already holding a
- device, its reference count is decremented. The new device is returned.
- */
- SkDevice* setDevice(SkDevice* device);
-
- /** Specify a bitmap for the canvas to draw into. This is a help method for
- setDevice(), and it creates a device for the bitmap by calling
- createDevice(). The structure of the bitmap is copied into the device.
- */
- virtual SkDevice* setBitmapDevice(const SkBitmap& bitmap);
-
- ///////////////////////////////////////////////////////////////////////////
-
- enum SaveFlags {
- /** save the matrix state, restoring it on restore() */
- kMatrix_SaveFlag = 0x01,
- /** save the clip state, restoring it on restore() */
- kClip_SaveFlag = 0x02,
- /** the layer needs to support per-pixel alpha */
- kHasAlphaLayer_SaveFlag = 0x04,
- /** the layer needs to support 8-bits per color component */
- kFullColorLayer_SaveFlag = 0x08,
- /** the layer should clip against the bounds argument */
- kClipToLayer_SaveFlag = 0x10,
-
- // helper masks for common choices
- kMatrixClip_SaveFlag = 0x03,
- kARGB_NoClipLayer_SaveFlag = 0x0F,
- kARGB_ClipLayer_SaveFlag = 0x1F
- };
-
- /** This call saves the current matrix and clip information, and pushes a
- copy onto a private stack. Subsequent calls to translate, scale,
- rotate, skew, concat or clipRect, clipPath all operate on this copy.
- When the balancing call to restore() is made, this copy is deleted and
- the previous matrix/clip state is restored.
- @return The value to pass to restoreToCount() to balance this save()
- */
- virtual int save(SaveFlags flags = kMatrixClip_SaveFlag);
-
- /** This behaves the same as save(), but in addition it allocates an
- offscreen bitmap. All drawing calls are directed there, and only when
- the balancing call to restore() is made is that offscreen transfered to
- the canvas (or the previous layer). Subsequent calls to translate,
- scale, rotate, skew, concat or clipRect, clipPath all operate on this
- copy. When the balancing call to restore() is made, this copy is deleted
- and the previous matrix/clip state is restored.
- @param bounds (may be null) the maximum size the offscreen bitmap needs
- to be (in local coordinates)
- @param paint (may be null) This is copied, and is applied to the
- offscreen when restore() is called
- @param flags LayerFlags
- @return The value to pass to restoreToCount() to balance this save()
- */
- virtual int saveLayer(const SkRect* bounds, const SkPaint* paint,
- SaveFlags flags = kARGB_ClipLayer_SaveFlag);
-
- /** This behaves the same as save(), but in addition it allocates an
- offscreen bitmap. All drawing calls are directed there, and only when
- the balancing call to restore() is made is that offscreen transfered to
- the canvas (or the previous layer). Subsequent calls to translate,
- scale, rotate, skew, concat or clipRect, clipPath all operate on this
- copy. When the balancing call to restore() is made, this copy is deleted
- and the previous matrix/clip state is restored.
- @param bounds (may be null) the maximum size the offscreen bitmap needs
- to be (in local coordinates)
- @param alpha This is applied to the offscreen when restore() is called.
- @param flags LayerFlags
- @return The value to pass to restoreToCount() to balance this save()
- */
- int saveLayerAlpha(const SkRect* bounds, U8CPU alpha,
- SaveFlags flags = kARGB_ClipLayer_SaveFlag);
-
- /** This call balances a previous call to save(), and is used to remove all
- modifications to the matrix/clip state since the last save call. It is
- an error to call restore() more times than save() was called.
- */
- virtual void restore();
-
- /** Returns the number of matrix/clip states on the SkCanvas' private stack.
- This will equal # save() calls - # restore() calls.
- */
- int getSaveCount() const;
-
- /** Efficient way to pop any calls to save() that happened after the save
- count reached saveCount. It is an error for saveCount to be less than
- getSaveCount()
- @param saveCount The number of save() levels to restore from
- */
- void restoreToCount(int saveCount);
-
- /** Preconcat the current matrix with the specified translation
- @param dx The distance to translate in X
- @param dy The distance to translate in Y
- returns true if the operation succeeded (e.g. did not overflow)
- */
- virtual bool translate(SkScalar dx, SkScalar dy);
-
- /** Preconcat the current matrix with the specified scale.
- @param sx The amount to scale in X
- @param sy The amount to scale in Y
- returns true if the operation succeeded (e.g. did not overflow)
- */
- virtual bool scale(SkScalar sx, SkScalar sy);
-
- /** Preconcat the current matrix with the specified rotation.
- @param degrees The amount to rotate, in degrees
- returns true if the operation succeeded (e.g. did not overflow)
- */
- virtual bool rotate(SkScalar degrees);
-
- /** Preconcat the current matrix with the specified skew.
- @param sx The amount to skew in X
- @param sy The amount to skew in Y
- returns true if the operation succeeded (e.g. did not overflow)
- */
- virtual bool skew(SkScalar sx, SkScalar sy);
-
- /** Preconcat the current matrix with the specified matrix.
- @param matrix The matrix to preconcatenate with the current matrix
- @return true if the operation succeeded (e.g. did not overflow)
- */
- virtual bool concat(const SkMatrix& matrix);
-
- /** Replace the current matrix with a copy of the specified matrix.
- @param matrix The matrix that will be copied into the current matrix.
- */
- virtual void setMatrix(const SkMatrix& matrix);
-
- /** Helper for setMatrix(identity). Sets the current matrix to identity.
- */
- void resetMatrix();
-
- /** Modify the current clip with the specified rectangle.
- @param rect The rect to intersect with the current clip
- @param op The region op to apply to the current clip
- @return true if the canvas' clip is non-empty
- */
- virtual bool clipRect(const SkRect& rect,
- SkRegion::Op op = SkRegion::kIntersect_Op);
-
- /** Modify the current clip with the specified path.
- @param path The path to apply to the current clip
- @param op The region op to apply to the current clip
- @return true if the canvas' new clip is non-empty
- */
- virtual bool clipPath(const SkPath& path,
- SkRegion::Op op = SkRegion::kIntersect_Op);
-
- /** Modify the current clip with the specified region. Note that unlike
- clipRect() and clipPath() which transform their arguments by the current
- matrix, clipRegion() assumes its argument is already in device
- coordinates, and so no transformation is performed.
- @param deviceRgn The region to apply to the current clip
- @param op The region op to apply to the current clip
- @return true if the canvas' new clip is non-empty
- */
- virtual bool clipRegion(const SkRegion& deviceRgn,
- SkRegion::Op op = SkRegion::kIntersect_Op);
-
- /** Helper for clipRegion(rgn, kReplace_Op). Sets the current clip to the
- specified region. This does not intersect or in any other way account
- for the existing clip region.
- @param deviceRgn The region to copy into the current clip.
- @return true if the new clip region is non-empty
- */
- bool setClipRegion(const SkRegion& deviceRgn) {
- return this->clipRegion(deviceRgn, SkRegion::kReplace_Op);
- }
-
- /** Enum describing how to treat edges when performing quick-reject tests
- of a geometry against the current clip. Treating them as antialiased
- (kAA_EdgeType) will take into account the extra pixels that may be drawn
- if the edge does not lie exactly on a device pixel boundary (after being
- transformed by the current matrix).
- */
- enum EdgeType {
- /** Treat the edges as B&W (not antialiased) for the purposes of testing
- against the current clip
- */
- kBW_EdgeType,
- /** Treat the edges as antialiased for the purposes of testing
- against the current clip
- */
- kAA_EdgeType
- };
-
- /** Return true if the specified rectangle, after being transformed by the
- current matrix, would lie completely outside of the current clip. Call
- this to check if an area you intend to draw into is clipped out (and
- therefore you can skip making the draw calls).
- @param rect the rect to compare with the current clip
- @param et specifies how to treat the edges (see EdgeType)
- @return true if the rect (transformed by the canvas' matrix) does not
- intersect with the canvas' clip
- */
- bool quickReject(const SkRect& rect, EdgeType et) const;
-
- /** Return true if the specified path, after being transformed by the
- current matrix, would lie completely outside of the current clip. Call
- this to check if an area you intend to draw into is clipped out (and
- therefore you can skip making the draw calls). Note, for speed it may
- return false even if the path itself might not intersect the clip
- (i.e. the bounds of the path intersects, but the path does not).
- @param path The path to compare with the current clip
- @param et specifies how to treat the edges (see EdgeType)
- @return true if the path (transformed by the canvas' matrix) does not
- intersect with the canvas' clip
- */
- bool quickReject(const SkPath& path, EdgeType et) const;
-
- /** Return true if the horizontal band specified by top and bottom is
- completely clipped out. This is a conservative calculation, meaning
- that it is possible that if the method returns false, the band may still
- in fact be clipped out, but the converse is not true. If this method
- returns true, then the band is guaranteed to be clipped out.
- @param top The top of the horizontal band to compare with the clip
- @param bottom The bottom of the horizontal and to compare with the clip
- @return true if the horizontal band is completely clipped out (i.e. does
- not intersect the current clip)
- */
- bool quickRejectY(SkScalar top, SkScalar bottom, EdgeType et) const;
-
- /** Return the bounds of the current clip (in local coordinates) in the
- bounds parameter, and return true if it is non-empty. This can be useful
- in a way similar to quickReject, in that it tells you that drawing
- outside of these bounds will be clipped out.
- */
- bool getClipBounds(SkRect* bounds, EdgeType et = kAA_EdgeType) const;
-
- /** Fill the entire canvas' bitmap (restricted to the current clip) with the
- specified ARGB color, using the specified PorterDuff mode.
- @param a the alpha component (0..255) of the color to fill the canvas
- @param r the red component (0..255) of the color to fill the canvas
- @param g the green component (0..255) of the color to fill the canvas
- @param b the blue component (0..255) of the color to fill the canvas
- @param mode the mode to apply the color in (defaults to SrcOver)
- */
- void drawARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b,
- SkPorterDuff::Mode mode = SkPorterDuff::kSrcOver_Mode);
-
- /** Fill the entire canvas' bitmap (restricted to the current clip) with the
- specified color and porter-duff xfermode.
- @param color the color to draw with
- @param mode the mode to apply the color in (defaults to SrcOver)
- */
- void drawColor(SkColor color,
- SkPorterDuff::Mode mode = SkPorterDuff::kSrcOver_Mode);
-
- /** Fill the entire canvas' bitmap (restricted to the current clip) with the
- specified paint.
- @param paint The paint used to fill the canvas
- */
- virtual void drawPaint(const SkPaint& paint);
-
- enum PointMode {
- /** drawPoints draws each point separately */
- kPoints_PointMode,
- /** drawPoints draws each pair of points as a line segment */
- kLines_PointMode,
- /** drawPoints draws the array of points as a polygon */
- kPolygon_PointMode
- };
-
- /** Draw a series of points, interpreted based on the PointMode mode. For
- all modes, the count parameter is interpreted as the total number of
- points. For kLine mode, count/2 line segments are drawn.
- For kPoint mode, each point is drawn centered at its coordinate, and its
- size is specified by the paint's stroke-width. It draws as a square,
- unless the paint's cap-type is round, in which the points are drawn as
- circles.
- For kLine mode, each pair of points is drawn as a line segment,
- respecting the paint's settings for cap/join/width.
- For kPolygon mode, the entire array is drawn as a series of connected
- line segments.
- Note that, while similar, kLine and kPolygon modes draw slightly
- differently than the equivalent path built with a series of moveto,
- lineto calls, in that the path will draw all of its contours at once,
- with no interactions if contours intersect each other (think XOR
- xfermode). drawPoints always draws each element one at a time.
- @param mode PointMode specifying how to draw the array of points.
- @param count The number of points in the array
- @param pts Array of points to draw
- @param paint The paint used to draw the points
- */
- virtual void drawPoints(PointMode mode, size_t count, const SkPoint pts[],
- const SkPaint& paint);
-
- /** Helper method for drawing a single point. See drawPoints() for a more
- details.
- */
- void drawPoint(SkScalar x, SkScalar y, const SkPaint& paint);
-
- /** Draws a single pixel in the specified color.
- @param x The X coordinate of which pixel to draw
- @param y The Y coordiante of which pixel to draw
- @param color The color to draw
- */
- void drawPoint(SkScalar x, SkScalar y, SkColor color);
-
- /** Draw a line segment with the specified start and stop x,y coordinates,
- using the specified paint. NOTE: since a line is always "framed", the
- paint's Style is ignored.
- @param x0 The x-coordinate of the start point of the line
- @param y0 The y-coordinate of the start point of the line
- @param x1 The x-coordinate of the end point of the line
- @param y1 The y-coordinate of the end point of the line
- @param paint The paint used to draw the line
- */
- void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1,
- const SkPaint& paint);
-
- /** Draw the specified rectangle using the specified paint. The rectangle
- will be filled or stroked based on the Style in the paint.
- @param rect The rect to be drawn
- @param paint The paint used to draw the rect
- */
- virtual void drawRect(const SkRect& rect, const SkPaint& paint);
-
- /** Draw the specified rectangle using the specified paint. The rectangle
- will be filled or framed based on the Style in the paint.
- @param rect The rect to be drawn
- @param paint The paint used to draw the rect
- */
- void drawIRect(const SkIRect& rect, const SkPaint& paint)
- {
- SkRect r;
- r.set(rect); // promotes the ints to scalars
- this->drawRect(r, paint);
- }
-
- /** Draw the specified rectangle using the specified paint. The rectangle
- will be filled or framed based on the Style in the paint.
- @param left The left side of the rectangle to be drawn
- @param top The top side of the rectangle to be drawn
- @param right The right side of the rectangle to be drawn
- @param bottom The bottom side of the rectangle to be drawn
- @param paint The paint used to draw the rect
- */
- void drawRectCoords(SkScalar left, SkScalar top, SkScalar right,
- SkScalar bottom, const SkPaint& paint);
-
- /** Draw the specified oval using the specified paint. The oval will be
- filled or framed based on the Style in the paint.
- @param oval The rectangle bounds of the oval to be drawn
- @param paint The paint used to draw the oval
- */
- void drawOval(const SkRect& oval, const SkPaint&);
-
- /** Draw the specified circle using the specified paint. If radius is <= 0,
- then nothing will be drawn. The circle will be filled
- or framed based on the Style in the paint.
- @param cx The x-coordinate of the center of the cirle to be drawn
- @param cy The y-coordinate of the center of the cirle to be drawn
- @param radius The radius of the cirle to be drawn
- @param paint The paint used to draw the circle
- */
- void drawCircle(SkScalar cx, SkScalar cy, SkScalar radius,
- const SkPaint& paint);
-
- /** Draw the specified arc, which will be scaled to fit inside the
- specified oval. If the sweep angle is >= 360, then the oval is drawn
- completely. Note that this differs slightly from SkPath::arcTo, which
- treats the sweep angle mod 360.
- @param oval The bounds of oval used to define the shape of the arc
- @param startAngle Starting angle (in degrees) where the arc begins
- @param sweepAngle Sweep angle (in degrees) measured clockwise
- @param useCenter true means include the center of the oval. For filling
- this will draw a wedge. False means just use the arc.
- @param paint The paint used to draw the arc
- */
- void drawArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle,
- bool useCenter, const SkPaint& paint);
-
- /** Draw the specified round-rect using the specified paint. The round-rect
- will be filled or framed based on the Style in the paint.
- @param rect The rectangular bounds of the roundRect to be drawn
- @param rx The x-radius of the oval used to round the corners
- @param ry The y-radius of the oval used to round the corners
- @param paint The paint used to draw the roundRect
- */
- void drawRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry,
- const SkPaint& paint);
-
- /** Draw the specified path using the specified paint. The path will be
- filled or framed based on the Style in the paint.
- @param path The path to be drawn
- @param paint The paint used to draw the path
- */
- virtual void drawPath(const SkPath& path, const SkPaint& paint);
-
- /** Draw the specified bitmap, with its top/left corner at (x,y), using the
- specified paint, transformed by the current matrix. Note: if the paint
- contains a maskfilter that generates a mask which extends beyond the
- bitmap's original width/height, then the bitmap will be drawn as if it
- were in a Shader with CLAMP mode. Thus the color outside of the original
- width/height will be the edge color replicated.
- @param bitmap The bitmap to be drawn
- @param left The position of the left side of the bitmap being drawn
- @param top The position of the top side of the bitmap being drawn
- @param paint The paint used to draw the bitmap, or NULL
- */
- virtual void drawBitmap(const SkBitmap& bitmap, SkScalar left, SkScalar top,
- const SkPaint* paint = NULL);
-
- /** Draw the specified bitmap, with the specified matrix applied (before the
- canvas' matrix is applied).
- @param bitmap The bitmap to be drawn
- @param src Optional: specify the subset of the bitmap to be drawn
- @param dst The destination rectangle where the scaled/translated
- image will be drawn
- @param paint The paint used to draw the bitmap, or NULL
- */
- virtual void drawBitmapRect(const SkBitmap& bitmap, const SkIRect* src,
- const SkRect& dst, const SkPaint* paint = NULL);
-
- virtual void drawBitmapMatrix(const SkBitmap& bitmap, const SkMatrix& m,
- const SkPaint* paint = NULL);
-
- /** Draw the specified bitmap, with its top/left corner at (x,y),
- NOT transformed by the current matrix. Note: if the paint
- contains a maskfilter that generates a mask which extends beyond the
- bitmap's original width/height, then the bitmap will be drawn as if it
- were in a Shader with CLAMP mode. Thus the color outside of the original
- width/height will be the edge color replicated.
- @param bitmap The bitmap to be drawn
- @param left The position of the left side of the bitmap being drawn
- @param top The position of the top side of the bitmap being drawn
- @param paint The paint used to draw the bitmap, or NULL
- */
- virtual void drawSprite(const SkBitmap& bitmap, int left, int top,
- const SkPaint* paint = NULL);
-
- /** Draw the text, with origin at (x,y), using the specified paint.
- The origin is interpreted based on the Align setting in the paint.
- @param text The text to be drawn
- @param byteLength The number of bytes to read from the text parameter
- @param x The x-coordinate of the origin of the text being drawn
- @param y The y-coordinate of the origin of the text being drawn
- @param paint The paint used for the text (e.g. color, size, style)
- */
- virtual void drawText(const void* text, size_t byteLength, SkScalar x,
- SkScalar y, const SkPaint& paint);
-
- /** Draw the text, with each character/glyph origin specified by the pos[]
- array. The origin is interpreted by the Align setting in the paint.
- @param text The text to be drawn
- @param byteLength The number of bytes to read from the text parameter
- @param pos Array of positions, used to position each character
- @param paint The paint used for the text (e.g. color, size, style)
- */
- virtual void drawPosText(const void* text, size_t byteLength,
- const SkPoint pos[], const SkPaint& paint);
-
- /** Draw the text, with each character/glyph origin specified by the x
- coordinate taken from the xpos[] array, and the y from the constY param.
- The origin is interpreted by the Align setting in the paint.
- @param text The text to be drawn
- @param byteLength The number of bytes to read from the text parameter
- @param xpos Array of x-positions, used to position each character
- @param constY The shared Y coordinate for all of the positions
- @param paint The paint used for the text (e.g. color, size, style)
- */
- virtual void drawPosTextH(const void* text, size_t byteLength,
- const SkScalar xpos[], SkScalar constY,
- const SkPaint& paint);
-
- /** Draw the text, with origin at (x,y), using the specified paint, along
- the specified path. The paint's Align setting determins where along the
- path to start the text.
- @param text The text to be drawn
- @param byteLength The number of bytes to read from the text parameter
- @param path The path the text should follow for its baseline
- @param hOffset The distance along the path to add to the text's
- starting position
- @param vOffset The distance above(-) or below(+) the path to
- position the text
- @param paint The paint used for the text
- */
- void drawTextOnPathHV(const void* text, size_t byteLength,
- const SkPath& path, SkScalar hOffset,
- SkScalar vOffset, const SkPaint& paint);
-
- /** Draw the text, with origin at (x,y), using the specified paint, along
- the specified path. The paint's Align setting determins where along the
- path to start the text.
- @param text The text to be drawn
- @param byteLength The number of bytes to read from the text parameter
- @param path The path the text should follow for its baseline
- @param matrix (may be null) Applied to the text before it is
- mapped onto the path
- @param paint The paint used for the text
- */
- virtual void drawTextOnPath(const void* text, size_t byteLength,
- const SkPath& path, const SkMatrix* matrix,
- const SkPaint& paint);
-
- /** Draw the picture into this canvas. This method effective brackets the
- playback of the picture's draw calls with save/restore, so the state
- of this canvas will be unchanged after this call. This contrasts with
- the more immediate method SkPicture::draw(), which does not bracket
- the canvas with save/restore, thus the canvas may be left in a changed
- state after the call.
- @param picture The recorded drawing commands to playback into this
- canvas.
- */
- virtual void drawPicture(SkPicture& picture);
-
- enum VertexMode {
- kTriangles_VertexMode,
- kTriangleStrip_VertexMode,
- kTriangleFan_VertexMode
- };
-
- /** Draw the array of vertices, interpreted as triangles (based on mode).
- @param vmode How to interpret the array of vertices
- @param vertexCount The number of points in the vertices array (and
- corresponding texs and colors arrays if non-null)
- @param vertices Array of vertices for the mesh
- @param texs May be null. If not null, specifies the coordinate
- in texture space for each vertex.
- @param colors May be null. If not null, specifies a color for each
- vertex, to be interpolated across the triangle.
- @param xmode Used if both texs and colors are present. In this
- case the colors are combined with the texture using mode,
- before being drawn using the paint. If mode is null, then
- the porter-duff MULTIPLY mode is used.
- @param indices If not null, array of indices to reference into the
- vertex (texs, colors) array.
- @param indexCount number of entries in the indices array (if not null)
- @param paint Specifies the shader/texture if present.
- */
- virtual void drawVertices(VertexMode vmode, int vertexCount,
- const SkPoint vertices[], const SkPoint texs[],
- const SkColor colors[], SkXfermode* xmode,
- const uint16_t indices[], int indexCount,
- const SkPaint& paint);
-
- //////////////////////////////////////////////////////////////////////////
-
- /** Get the current bounder object.
- The bounder's reference count is unchaged.
- @return the canva's bounder (or NULL).
- */
- SkBounder* getBounder() const { return fBounder; }
-
- /** Set a new bounder (or NULL).
- Pass NULL to clear any previous bounder.
- As a convenience, the parameter passed is also returned.
- If a previous bounder exists, its reference count is decremented.
- If bounder is not NULL, its reference count is incremented.
- @param bounder the new bounder (or NULL) to be installed in the canvas
- @return the set bounder object
- */
- virtual SkBounder* setBounder(SkBounder* bounder);
-
- /** Get the current filter object. The filter's reference count is not
- affected. The filter is part of the state this is affected by
- save/restore.
- @return the canvas' filter (or NULL).
- */
- SkDrawFilter* getDrawFilter() const;
-
- /** Set the new filter (or NULL). Pass NULL to clear any existing filter.
- As a convenience, the parameter is returned. If an existing filter
- exists, its refcnt is decrement. If the new filter is not null, its
- refcnt is incremented. The filter is part of the state this is affected
- by save/restore.
- @param filter the new filter (or NULL)
- @return the new filter
- */
- virtual SkDrawFilter* setDrawFilter(SkDrawFilter* filter);
-
- //////////////////////////////////////////////////////////////////////////
-
- /** Return the current matrix on the canvas.
- This does not account for the translate in any of the devices.
- @return The current matrix on the canvas.
- */
- const SkMatrix& getTotalMatrix() const;
-
- /** Return the current device clip (concatenation of all clip calls).
- This does not account for the translate in any of the devices.
- @return the current device clip (concatenation of all clip calls).
- */
- const SkRegion& getTotalClip() const;
-
- /** May be overridden by subclasses. This returns a compatible device
- for this canvas, with the specified config/width/height. If isOpaque
- is true, then the underlying bitmap is optimized to assume that every
- pixel will be drawn to, and thus it does not need to clear the alpha
- channel ahead of time (assuming the specified config supports per-pixel
- alpha.) If isOpaque is false, then the bitmap should clear its alpha
- channel.
- */
- virtual SkDevice* createDevice(SkBitmap::Config, int width, int height,
- bool isOpaque, bool isForLayer);
-
- ///////////////////////////////////////////////////////////////////////////
-
- /** After calling saveLayer(), there can be any number of devices that make
- up the top-most drawing area. LayerIter can be used to iterate through
- those devices. Note that the iterator is only valid until the next API
- call made on the canvas. Ownership of all pointers in the iterator stays
- with the canvas, so none of them should be modified or deleted.
- */
- class LayerIter /*: SkNoncopyable*/ {
- public:
- /** Initialize iterator with canvas, and set values for 1st device */
- LayerIter(SkCanvas*, bool skipEmptyClips);
- ~LayerIter();
-
- /** Return true if the iterator is done */
- bool done() const { return fDone; }
- /** Cycle to the next device */
- void next();
-
- // These reflect the current device in the iterator
-
- SkDevice* device() const;
- const SkMatrix& matrix() const;
- const SkRegion& clip() const;
- const SkPaint& paint() const;
- int x() const;
- int y() const;
-
- private:
- // used to embed the SkDrawIter object directly in our instance, w/o
- // having to expose that class def to the public. There is an assert
- // in our constructor to ensure that fStorage is large enough
- // (though needs to be a compile-time-assert!). We use intptr_t to work
- // safely with 32 and 64 bit machines (to ensure the storage is enough)
- intptr_t fStorage[12];
- class SkDrawIter* fImpl; // this points at fStorage
- SkPaint fDefaultPaint;
- bool fDone;
- };
-
-protected:
- // all of the drawBitmap variants call this guy
- virtual void commonDrawBitmap(const SkBitmap&, const SkMatrix& m,
- const SkPaint& paint);
-
-private:
- class MCRec;
-
- SkDeque fMCStack;
- // points to top of stack
- MCRec* fMCRec;
- // the first N recs that can fit here mean we won't call malloc
- uint32_t fMCRecStorage[32];
-
- SkBounder* fBounder;
-
- void prepareForDeviceDraw(SkDevice*);
-
- bool fDeviceCMDirty; // cleared by updateDeviceCMCache()
- void updateDeviceCMCache();
-
- friend class SkDrawIter; // needs setupDrawForLayerDevice()
-
- SkDevice* init(SkDevice*);
- void internalDrawBitmap(const SkBitmap&, const SkMatrix& m,
- const SkPaint* paint);
- void drawDevice(SkDevice*, int x, int y, const SkPaint*);
- // shared by save() and saveLayer()
- int internalSave(SaveFlags flags);
- void internalRestore();
-
- /* These maintain a cache of the clip bounds in local coordinates,
- (converted to 2s-compliment if floats are slow).
- */
- mutable SkRectCompareType fLocalBoundsCompareType;
- mutable bool fLocalBoundsCompareTypeDirty;
-
- const SkRectCompareType& getLocalClipBoundsCompareType() const {
- if (fLocalBoundsCompareTypeDirty) {
- this->computeLocalClipBoundsCompareType();
- fLocalBoundsCompareTypeDirty = false;
- }
- return fLocalBoundsCompareType;
- }
- void computeLocalClipBoundsCompareType() const;
-};
-
-/** Stack helper class to automatically call restoreToCount() on the canvas
- when this object goes out of scope. Use this to guarantee that the canvas
- is restored to a known state.
-*/
-class SkAutoCanvasRestore : SkNoncopyable {
-public:
- SkAutoCanvasRestore(SkCanvas* canvas, bool doSave) : fCanvas(canvas) {
- SkASSERT(canvas);
- fSaveCount = canvas->getSaveCount();
- if (doSave) {
- canvas->save();
- }
- }
- ~SkAutoCanvasRestore() {
- fCanvas->restoreToCount(fSaveCount);
- }
-
-private:
- SkCanvas* fCanvas;
- int fSaveCount;
-};
-
-#endif
-
diff --git a/include/core/SkChunkAlloc.h b/include/core/SkChunkAlloc.h
deleted file mode 100644
index 0e9ad18..0000000
--- a/include/core/SkChunkAlloc.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkChunkAlloc_DEFINED
-#define SkChunkAlloc_DEFINED
-
-#include "SkTypes.h"
-
-class SkChunkAlloc : SkNoncopyable {
-public:
- SkChunkAlloc(size_t minSize);
- ~SkChunkAlloc();
-
- /** Free up all allocated blocks. This invalidates all returned
- pointers.
- */
- void reset();
-
- /** Reuse all allocated blocks. This invalidates all returned
- pointers (like reset) but doesn't necessarily free up all
- of the privately allocated blocks. This is more efficient
- if you plan to reuse the allocator multiple times.
- */
- void reuse();
-
- enum AllocFailType {
- kReturnNil_AllocFailType,
- kThrow_AllocFailType
- };
-
- void* alloc(size_t bytes, AllocFailType);
- void* allocThrow(size_t bytes) {
- return this->alloc(bytes, kThrow_AllocFailType);
- }
-
- size_t totalCapacity() const { return fTotalCapacity; }
-
-private:
- struct Block;
- Block* fBlock;
- size_t fMinSize;
- Block* fPool;
- size_t fTotalCapacity;
-
- Block* newBlock(size_t bytes, AllocFailType ftype);
-};
-
-#endif
diff --git a/include/core/SkColor.h b/include/core/SkColor.h
deleted file mode 100644
index c97a8ec..0000000
--- a/include/core/SkColor.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkColor_DEFINED
-#define SkColor_DEFINED
-
-#include "SkScalar.h"
-
-/** \file SkColor.h
-
- Types and macros for colors
-*/
-
-/** 8-bit type for an alpha value. 0xFF is 100% opaque, 0x00 is 100% transparent.
-*/
-typedef uint8_t SkAlpha;
-/** 32 bit ARGB color value, not premultiplied. The color components are always in
- a known order. This is different from SkPMColor, which has its bytes in a configuration
- dependent order, to match the format of kARGB32 bitmaps. SkColor is the type used to
- specify colors in SkPaint and in gradients.
-*/
-typedef uint32_t SkColor;
-
-/** Return a SkColor value from 8 bit component values
-*/
-static inline SkColor SkColorSetARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b)
-{
- SkASSERT(a <= 255 && r <= 255 && g <= 255 && b <= 255);
-
- return (a << 24) | (r << 16) | (g << 8) | (b << 0);
-}
-
-/** Return a SkColor value from 8 bit component values, with an implied value
- of 0xFF for alpha (fully opaque)
-*/
-#define SkColorSetRGB(r, g, b) SkColorSetARGB(0xFF, r, g, b)
-
-/** return the alpha byte from a SkColor value */
-#define SkColorGetA(color) (((color) >> 24) & 0xFF)
-/** return the red byte from a SkColor value */
-#define SkColorGetR(color) (((color) >> 16) & 0xFF)
-/** return the green byte from a SkColor value */
-#define SkColorGetG(color) (((color) >> 8) & 0xFF)
-/** return the blue byte from a SkColor value */
-#define SkColorGetB(color) (((color) >> 0) & 0xFF)
-
-static inline SkColor SkColorSetA(SkColor c, U8CPU a) {
- return (c & 0x00FFFFFF) | (a << 24);
-}
-
-// common colors
-
-#define SK_ColorBLACK 0xFF000000 //!< black SkColor value
-#define SK_ColorDKGRAY 0xFF444444 //!< dark gray SkColor value
-#define SK_ColorGRAY 0xFF888888 //!< gray SkColor value
-#define SK_ColorLTGRAY 0xFFCCCCCC //!< light gray SkColor value
-#define SK_ColorWHITE 0xFFFFFFFF //!< white SkColor value
-
-#define SK_ColorRED 0xFFFF0000 //!< red SkColor value
-#define SK_ColorGREEN 0xFF00FF00 //!< green SkColor value
-#define SK_ColorBLUE 0xFF0000FF //!< blue SkColor value
-#define SK_ColorYELLOW 0xFFFFFF00 //!< yellow SkColor value
-#define SK_ColorCYAN 0xFF00FFFF //!< cyan SkColor value
-#define SK_ColorMAGENTA 0xFFFF00FF //!< magenta SkColor value
-
-////////////////////////////////////////////////////////////////////////
-
-/** Convert RGB components to HSV.
- hsv[0] is Hue [0 .. 360)
- hsv[1] is Saturation [0...1]
- hsv[2] is Value [0...1]
- @param red red component value [0..255]
- @param green green component value [0..255]
- @param blue blue component value [0..255]
- @param hsv 3 element array which holds the resulting HSV components.
-*/
-void SkRGBToHSV(U8CPU red, U8CPU green, U8CPU blue, SkScalar hsv[3]);
-
-/** Convert the argb color to its HSV components.
- hsv[0] is Hue [0 .. 360)
- hsv[1] is Saturation [0...1]
- hsv[2] is Value [0...1]
- @param color the argb color to convert. Note: the alpha component is ignored.
- @param hsv 3 element array which holds the resulting HSV components.
-*/
-static inline void SkColorToHSV(SkColor color, SkScalar hsv[3])
-{
- SkRGBToHSV(SkColorGetR(color), SkColorGetG(color), SkColorGetB(color), hsv);
-}
-
-/** Convert HSV components to an ARGB color. The alpha component is passed through unchanged.
- hsv[0] is Hue [0 .. 360)
- hsv[1] is Saturation [0...1]
- hsv[2] is Value [0...1]
- If hsv values are out of range, they are pinned.
- @param alpha the alpha component of the returned argb color.
- @param hsv 3 element array which holds the input HSV components.
- @return the resulting argb color
-*/
-SkColor SkHSVToColor(U8CPU alpha, const SkScalar hsv[3]);
-
-/** Convert HSV components to an ARGB color. The alpha component set to 0xFF.
- hsv[0] is Hue [0 .. 360)
- hsv[1] is Saturation [0...1]
- hsv[2] is Value [0...1]
- If hsv values are out of range, they are pinned.
- @param hsv 3 element array which holds the input HSV components.
- @return the resulting argb color
-*/
-static inline SkColor SkHSVToColor(const SkScalar hsv[3])
-{
- return SkHSVToColor(0xFF, hsv);
-}
-
-////////////////////////////////////////////////////////////////////////
-
-/** 32 bit ARGB color value, premultiplied. The byte order for this value is
- configuration dependent, matching the format of kARGB32 bitmaps. This is different
- from SkColor, which is nonpremultiplied, and is always in the same byte order.
-*/
-typedef uint32_t SkPMColor;
-
-/** Return a SkPMColor value from unpremultiplied 8 bit component values
-*/
-SkPMColor SkPreMultiplyARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
-/** Return a SkPMColor value from a SkColor value. This is done by multiplying the color
- components by the color's alpha, and by arranging the bytes in a configuration
- dependent order, to match the format of kARGB32 bitmaps.
-*/
-SkPMColor SkPreMultiplyColor(SkColor c);
-
-/** Define a function pointer type for combining two premultiplied colors
-*/
-typedef SkPMColor (*SkXfermodeProc)(SkPMColor src, SkPMColor dst);
-
-/** Define a function pointer type for combining a premultiplied src color
- and a 16bit device color.
-*/
-typedef uint16_t (*SkXfermodeProc16)(SkPMColor src, uint16_t dst);
-
-#endif
-
diff --git a/include/core/SkColorFilter.h b/include/core/SkColorFilter.h
deleted file mode 100644
index a1b3171..0000000
--- a/include/core/SkColorFilter.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkColorFilter_DEFINED
-#define SkColorFilter_DEFINED
-
-#include "SkColor.h"
-#include "SkFlattenable.h"
-#include "SkPorterDuff.h"
-
-class SkColorFilter : public SkFlattenable {
-public:
- /** Called with a scanline of colors, as if there was a shader installed.
- The implementation writes out its filtered version into result[].
- Note: shader and result may be the same buffer.
- @param src array of colors, possibly generated by a shader
- @param count the number of entries in the src[] and result[] arrays
- @param result written by the filter
- */
- virtual void filterSpan(const SkPMColor src[], int count,
- SkPMColor result[]) = 0;
- /** Called with a scanline of colors, as if there was a shader installed.
- The implementation writes out its filtered version into result[].
- Note: shader and result may be the same buffer.
- @param src array of colors, possibly generated by a shader
- @param count the number of entries in the src[] and result[] arrays
- @param result written by the filter
- */
- virtual void filterSpan16(const uint16_t shader[], int count,
- uint16_t result[]);
-
- enum Flags {
- /** If set the filter methods will not change the alpha channel of the
- colors.
- */
- kAlphaUnchanged_Flag = 0x01,
- /** If set, this subclass implements filterSpan16(). If this flag is
- set, then kAlphaUnchanged_Flag must also be set.
- */
- kHasFilter16_Flag = 0x02
- };
-
- /** Returns the flags for this filter. Override in subclasses to return
- custom flags.
- */
- virtual uint32_t getFlags() { return 0; }
-
- /** Create a colorfilter that uses the specified color and porter-duff mode.
- If porterDuffMode is DST, this function will return NULL (since that
- mode will have no effect on the result).
- @param srcColor The source color used with the specified mode
- @param mode The porter-duff mode that is applied to each color in
- the colorfilter's filterSpan[16,32] methods
- @return colorfilter object that applies the src color and porter-duff
- mode, or NULL if the mode will have no effect.
- */
- static SkColorFilter* CreatePorterDuffFilter(SkColor srcColor,
- SkPorterDuff::Mode mode);
-
- /** Create a colorfilter that calls through to the specified procs to
- filter the colors. The SkXfermodeProc parameter must be non-null, but
- the SkXfermodeProc16 is optional, and may be null.
- */
- static SkColorFilter* CreatXfermodeProcFilter(SkColor srcColor,
- SkXfermodeProc proc,
- SkXfermodeProc16 proc16 = NULL);
-
- /** Create a colorfilter that multiplies the RGB channels by one color, and
- then adds a second color, pinning the result for each component to
- [0..255]. The alpha components of the mul and add arguments
- are ignored.
- */
- static SkColorFilter* CreateLightingFilter(SkColor mul, SkColor add);
-
-protected:
- SkColorFilter() {}
- SkColorFilter(SkFlattenableReadBuffer& rb) : INHERITED(rb) {}
-
-private:
- typedef SkFlattenable INHERITED;
-};
-
-#include "SkShader.h"
-
-class SkFilterShader : public SkShader {
-public:
- SkFilterShader(SkShader* shader, SkColorFilter* filter);
- virtual ~SkFilterShader();
-
- // override
- virtual uint32_t getFlags();
- virtual bool setContext(const SkBitmap& device, const SkPaint& paint,
- const SkMatrix& matrix);
- virtual void shadeSpan(int x, int y, SkPMColor result[], int count);
- virtual void shadeSpan16(int x, int y, uint16_t result[], int count);
- virtual void beginSession();
- virtual void endSession();
-
-protected:
- SkFilterShader(SkFlattenableReadBuffer& );
- virtual void flatten(SkFlattenableWriteBuffer& );
- virtual Factory getFactory() { return CreateProc; }
-private:
- static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
- return SkNEW_ARGS(SkFilterShader, (buffer)); }
- SkShader* fShader;
- SkColorFilter* fFilter;
-
- typedef SkShader INHERITED;
-};
-
-#endif
diff --git a/include/core/SkColorPriv.h b/include/core/SkColorPriv.h
deleted file mode 100644
index 88028cb..0000000
--- a/include/core/SkColorPriv.h
+++ /dev/null
@@ -1,657 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkColorPriv_DEFINED
-#define SkColorPriv_DEFINED
-
-// turn this own for extra debug checking when blending onto 565
-#ifdef SK_DEBUG
- #define CHECK_FOR_565_OVERFLOW
-#endif
-
-#include "SkColor.h"
-#include "SkMath.h"
-
-/** Turn 0..255 into 0..256 by adding 1 at the half-way point. Used to turn a
- byte into a scale value, so that we can say scale * value >> 8 instead of
- alpha * value / 255.
-
- In debugging, asserts that alpha is 0..255
-*/
-static inline unsigned SkAlpha255To256(U8CPU alpha) {
- SkASSERT(SkToU8(alpha) == alpha);
- return alpha + (alpha >> 7);
-}
-
-/** Multiplify value by 0..256, and shift the result down 8
- (i.e. return (value * alpha256) >> 8)
- */
-#define SkAlphaMul(value, alpha256) (SkMulS16(value, alpha256) >> 8)
-
-// The caller may want negative values, so keep all params signed (int)
-// so we don't accidentally slip into unsigned math and lose the sign
-// extension when we shift (in SkAlphaMul)
-inline int SkAlphaBlend(int src, int dst, int scale256) {
- SkASSERT((unsigned)scale256 <= 256);
- return dst + SkAlphaMul(src - dst, scale256);
-}
-
-#define SK_R16_BITS 5
-#define SK_G16_BITS 6
-#define SK_B16_BITS 5
-
-#define SK_R16_SHIFT (SK_B16_BITS + SK_G16_BITS)
-#define SK_G16_SHIFT (SK_B16_BITS)
-#define SK_B16_SHIFT 0
-
-#define SK_R16_MASK ((1 << SK_R16_BITS) - 1)
-#define SK_G16_MASK ((1 << SK_G16_BITS) - 1)
-#define SK_B16_MASK ((1 << SK_B16_BITS) - 1)
-
-#define SkGetPackedR16(color) (((unsigned)(color) >> SK_R16_SHIFT) & SK_R16_MASK)
-#define SkGetPackedG16(color) (((unsigned)(color) >> SK_G16_SHIFT) & SK_G16_MASK)
-#define SkGetPackedB16(color) (((unsigned)(color) >> SK_B16_SHIFT) & SK_B16_MASK)
-
-#define SkR16Assert(r) SkASSERT((unsigned)(r) <= SK_R16_MASK)
-#define SkG16Assert(g) SkASSERT((unsigned)(g) <= SK_G16_MASK)
-#define SkB16Assert(b) SkASSERT((unsigned)(b) <= SK_B16_MASK)
-
-static inline uint16_t SkPackRGB16(unsigned r, unsigned g, unsigned b) {
- SkASSERT(r <= SK_R16_MASK);
- SkASSERT(g <= SK_G16_MASK);
- SkASSERT(b <= SK_B16_MASK);
-
- return SkToU16((r << SK_R16_SHIFT) | (g << SK_G16_SHIFT) | (b << SK_B16_SHIFT));
-}
-
-#define SK_R16_MASK_IN_PLACE (SK_R16_MASK << SK_R16_SHIFT)
-#define SK_G16_MASK_IN_PLACE (SK_G16_MASK << SK_G16_SHIFT)
-#define SK_B16_MASK_IN_PLACE (SK_B16_MASK << SK_B16_SHIFT)
-
-/** Expand the 16bit color into a 32bit value that can be scaled all at once
- by a value up to 32. Used in conjunction with SkCompact_rgb_16.
-*/
-static inline uint32_t SkExpand_rgb_16(U16CPU c) {
- SkASSERT(c == (uint16_t)c);
-
- return ((c & SK_G16_MASK_IN_PLACE) << 16) | (c & ~SK_G16_MASK_IN_PLACE);
-}
-
-/** Compress an expanded value (from SkExpand_rgb_16) back down to a 16bit
- color value. The computation yields only 16bits of valid data, but we claim
- to return 32bits, so that the compiler won't generate extra instructions to
- "clean" the top 16bits. However, the top 16 can contain garbage, so it is
- up to the caller to safely ignore them.
-*/
-static inline U16CPU SkCompact_rgb_16(uint32_t c) {
- return ((c >> 16) & SK_G16_MASK_IN_PLACE) | (c & ~SK_G16_MASK_IN_PLACE);
-}
-
-/** Scale the 16bit color value by the 0..256 scale parameter.
- The computation yields only 16bits of valid data, but we claim
- to return 32bits, so that the compiler won't generate extra instructions to
- "clean" the top 16bits.
-*/
-static inline U16CPU SkAlphaMulRGB16(U16CPU c, unsigned scale) {
- return SkCompact_rgb_16(SkExpand_rgb_16(c) * (scale >> 3) >> 5);
-}
-
-// this helper explicitly returns a clean 16bit value (but slower)
-#define SkAlphaMulRGB16_ToU16(c, s) (uint16_t)SkAlphaMulRGB16(c, s)
-
-/** Blend src and dst 16bit colors by the 0..256 scale parameter.
- The computation yields only 16bits of valid data, but we claim
- to return 32bits, so that the compiler won't generate extra instructions to
- "clean" the top 16bits.
-*/
-static inline U16CPU SkBlendRGB16(U16CPU src, U16CPU dst, int srcScale) {
- SkASSERT((unsigned)srcScale <= 256);
-
- srcScale >>= 3;
-
- uint32_t src32 = SkExpand_rgb_16(src);
- uint32_t dst32 = SkExpand_rgb_16(dst);
- return SkCompact_rgb_16(dst32 + ((src32 - dst32) * srcScale >> 5));
-}
-
-static inline void SkBlendRGB16(const uint16_t src[], uint16_t dst[],
- int srcScale, int count) {
- SkASSERT(count > 0);
- SkASSERT((unsigned)srcScale <= 256);
-
- srcScale >>= 3;
-
- do {
- uint32_t src32 = SkExpand_rgb_16(*src++);
- uint32_t dst32 = SkExpand_rgb_16(*dst);
- *dst++ = SkCompact_rgb_16(dst32 + ((src32 - dst32) * srcScale >> 5));
- } while (--count > 0);
-}
-
-#ifdef SK_DEBUG
- static inline U16CPU SkRGB16Add(U16CPU a, U16CPU b) {
- SkASSERT(SkGetPackedR16(a) + SkGetPackedR16(b) <= SK_R16_MASK);
- SkASSERT(SkGetPackedG16(a) + SkGetPackedG16(b) <= SK_G16_MASK);
- SkASSERT(SkGetPackedB16(a) + SkGetPackedB16(b) <= SK_B16_MASK);
-
- return a + b;
- }
-#else
- #define SkRGB16Add(a, b) ((a) + (b))
-#endif
-
-/////////////////////////////////////////////////////////////////////////////////////////////
-
-#define SK_A32_BITS 8
-#define SK_R32_BITS 8
-#define SK_G32_BITS 8
-#define SK_B32_BITS 8
-
-/* we check to see if the SHIFT value has already been defined (SkUserConfig.h)
- if not, we define it ourself to some default values. We default to OpenGL
- order (in memory: r,g,b,a)
-*/
-#ifndef SK_A32_SHIFT
- #ifdef SK_CPU_BENDIAN
- #define SK_R32_SHIFT 24
- #define SK_G32_SHIFT 16
- #define SK_B32_SHIFT 8
- #define SK_A32_SHIFT 0
- #else
- #define SK_R32_SHIFT 0
- #define SK_G32_SHIFT 8
- #define SK_B32_SHIFT 16
- #define SK_A32_SHIFT 24
- #endif
-#endif
-
-#define SK_A32_MASK ((1 << SK_A32_BITS) - 1)
-#define SK_R32_MASK ((1 << SK_R32_BITS) - 1)
-#define SK_G32_MASK ((1 << SK_G32_BITS) - 1)
-#define SK_B32_MASK ((1 << SK_B32_BITS) - 1)
-
-#define SkGetPackedA32(packed) ((uint32_t)((packed) << (24 - SK_A32_SHIFT)) >> 24)
-#define SkGetPackedR32(packed) ((uint32_t)((packed) << (24 - SK_R32_SHIFT)) >> 24)
-#define SkGetPackedG32(packed) ((uint32_t)((packed) << (24 - SK_G32_SHIFT)) >> 24)
-#define SkGetPackedB32(packed) ((uint32_t)((packed) << (24 - SK_B32_SHIFT)) >> 24)
-
-#define SkA32Assert(a) SkASSERT((unsigned)(a) <= SK_A32_MASK)
-#define SkR32Assert(r) SkASSERT((unsigned)(r) <= SK_R32_MASK)
-#define SkG32Assert(g) SkASSERT((unsigned)(g) <= SK_G32_MASK)
-#define SkB32Assert(b) SkASSERT((unsigned)(b) <= SK_B32_MASK)
-
-#ifdef SK_DEBUG
- inline void SkPMColorAssert(SkPMColor c) {
- unsigned a = SkGetPackedA32(c);
- unsigned r = SkGetPackedR32(c);
- unsigned g = SkGetPackedG32(c);
- unsigned b = SkGetPackedB32(c);
-
- SkA32Assert(a);
- SkASSERT(r <= a);
- SkASSERT(g <= a);
- SkASSERT(b <= a);
- }
-#else
- #define SkPMColorAssert(c)
-#endif
-
-inline SkPMColor SkPackARGB32(U8CPU a, U8CPU r, U8CPU g, U8CPU b) {
- SkA32Assert(a);
- SkASSERT(r <= a);
- SkASSERT(g <= a);
- SkASSERT(b <= a);
-
- return (a << SK_A32_SHIFT) | (r << SK_R32_SHIFT) |
- (g << SK_G32_SHIFT) | (b << SK_B32_SHIFT);
-}
-
-extern const uint32_t gMask_00FF00FF;
-
-inline uint32_t SkAlphaMulQ(uint32_t c, unsigned scale) {
- uint32_t mask = gMask_00FF00FF;
-// uint32_t mask = 0xFF00FF;
-
- uint32_t rb = ((c & mask) * scale) >> 8;
- uint32_t ag = ((c >> 8) & mask) * scale;
- return (rb & mask) | (ag & ~mask);
-}
-
-inline SkPMColor SkPMSrcOver(SkPMColor src, SkPMColor dst) {
- return src + SkAlphaMulQ(dst, SkAlpha255To256(255 - SkGetPackedA32(src)));
-}
-
-inline SkPMColor SkBlendARGB32(SkPMColor src, SkPMColor dst, U8CPU aa) {
- SkASSERT((unsigned)aa <= 255);
-
- unsigned src_scale = SkAlpha255To256(aa);
- unsigned dst_scale = SkAlpha255To256(255 - SkAlphaMul(SkGetPackedA32(src), src_scale));
-
- return SkAlphaMulQ(src, src_scale) + SkAlphaMulQ(dst, dst_scale);
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////
-// Convert a 32bit pixel to a 16bit pixel (no dither)
-
-#define SkR32ToR16_MACRO(r) ((unsigned)(r) >> (SK_R32_BITS - SK_R16_BITS))
-#define SkG32ToG16_MACRO(g) ((unsigned)(g) >> (SK_G32_BITS - SK_G16_BITS))
-#define SkB32ToB16_MACRO(b) ((unsigned)(b) >> (SK_B32_BITS - SK_B16_BITS))
-
-#ifdef SK_DEBUG
- inline unsigned SkR32ToR16(unsigned r)
- {
- SkR32Assert(r);
- return SkR32ToR16_MACRO(r);
- }
- inline unsigned SkG32ToG16(unsigned g)
- {
- SkG32Assert(g);
- return SkG32ToG16_MACRO(g);
- }
- inline unsigned SkB32ToB16(unsigned b)
- {
- SkB32Assert(b);
- return SkB32ToB16_MACRO(b);
- }
-#else
- #define SkR32ToR16(r) SkR32ToR16_MACRO(r)
- #define SkG32ToG16(g) SkG32ToG16_MACRO(g)
- #define SkB32ToB16(b) SkB32ToB16_MACRO(b)
-#endif
-
-#define SkPacked32ToR16(c) (((unsigned)(c) >> (SK_R32_SHIFT + SK_R32_BITS - SK_R16_BITS)) & SK_R16_MASK)
-#define SkPacked32ToG16(c) (((unsigned)(c) >> (SK_G32_SHIFT + SK_G32_BITS - SK_G16_BITS)) & SK_G16_MASK)
-#define SkPacked32ToB16(c) (((unsigned)(c) >> (SK_B32_SHIFT + SK_B32_BITS - SK_B16_BITS)) & SK_B16_MASK)
-
-inline U16CPU SkPixel32ToPixel16(SkPMColor c)
-{
- unsigned r = ((c >> (SK_R32_SHIFT + (8 - SK_R16_BITS))) & SK_R16_MASK) << SK_R16_SHIFT;
- unsigned g = ((c >> (SK_G32_SHIFT + (8 - SK_G16_BITS))) & SK_G16_MASK) << SK_G16_SHIFT;
- unsigned b = ((c >> (SK_B32_SHIFT + (8 - SK_B16_BITS))) & SK_B16_MASK) << SK_B16_SHIFT;
- return r | g | b;
-}
-
-inline U16CPU SkPack888ToRGB16(U8CPU r, U8CPU g, U8CPU b)
-{
- return (SkR32ToR16(r) << SK_R16_SHIFT) |
- (SkG32ToG16(g) << SK_G16_SHIFT) |
- (SkB32ToB16(b) << SK_B16_SHIFT);
-}
-
-#define SkPixel32ToPixel16_ToU16(src) SkToU16(SkPixel32ToPixel16(src))
-
-/////////////////////////////////////////////////////////////////////////////////////////
-// Fast dither from 32->16
-
-#define SkShouldDitherXY(x, y) (((x) ^ (y)) & 1)
-
-inline uint16_t SkDitherPack888ToRGB16(U8CPU r, U8CPU g, U8CPU b)
-{
- r = ((r << 1) - ((r >> (8 - SK_R16_BITS) << (8 - SK_R16_BITS)) | (r >> SK_R16_BITS))) >> (8 - SK_R16_BITS);
- g = ((g << 1) - ((g >> (8 - SK_G16_BITS) << (8 - SK_G16_BITS)) | (g >> SK_G16_BITS))) >> (8 - SK_G16_BITS);
- b = ((b << 1) - ((b >> (8 - SK_B16_BITS) << (8 - SK_B16_BITS)) | (b >> SK_B16_BITS))) >> (8 - SK_B16_BITS);
-
- return SkPackRGB16(r, g, b);
-}
-
-inline uint16_t SkDitherPixel32ToPixel16(SkPMColor c)
-{
- return SkDitherPack888ToRGB16(SkGetPackedR32(c), SkGetPackedG32(c), SkGetPackedB32(c));
-}
-
-/* Return c in expanded_rgb_16 format, but also scaled up by 32 (5 bits)
- It is now suitable for combining with a scaled expanded_rgb_16 color
- as in SkSrcOver32To16().
- We must do this 565 high-bit replication, in order for the subsequent add
- to saturate properly (and not overflow). If we take the 8 bits as is, it is
- possible to overflow.
-*/
-static inline uint32_t SkPMColorToExpanded16x5(SkPMColor c)
-{
- unsigned sr = SkPacked32ToR16(c);
- unsigned sg = SkPacked32ToG16(c);
- unsigned sb = SkPacked32ToB16(c);
-
- sr = (sr << 5) | sr;
- sg = (sg << 5) | (sg >> 1);
- sb = (sb << 5) | sb;
- return (sr << 11) | (sg << 21) | (sb << 0);
-}
-
-/* SrcOver the 32bit src color with the 16bit dst, returning a 16bit value
- (with dirt in the high 16bits, so caller beware).
-*/
-static inline U16CPU SkSrcOver32To16(SkPMColor src, uint16_t dst) {
- unsigned sr = SkGetPackedR32(src);
- unsigned sg = SkGetPackedG32(src);
- unsigned sb = SkGetPackedB32(src);
-
- unsigned dr = SkGetPackedR16(dst);
- unsigned dg = SkGetPackedG16(dst);
- unsigned db = SkGetPackedB16(dst);
-
- unsigned isa = 255 - SkGetPackedA32(src);
-
- dr = (sr + SkMul16ShiftRound(dr, isa, SK_R16_BITS)) >> (8 - SK_R16_BITS);
- dg = (sg + SkMul16ShiftRound(dg, isa, SK_G16_BITS)) >> (8 - SK_G16_BITS);
- db = (sb + SkMul16ShiftRound(db, isa, SK_B16_BITS)) >> (8 - SK_B16_BITS);
-
- return SkPackRGB16(dr, dg, db);
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////
-// Convert a 16bit pixel to a 32bit pixel
-
-inline unsigned SkR16ToR32(unsigned r)
-{
- return (r << (8 - SK_R16_BITS)) | (r >> (2 * SK_R16_BITS - 8));
-}
-inline unsigned SkG16ToG32(unsigned g)
-{
- return (g << (8 - SK_G16_BITS)) | (g >> (2 * SK_G16_BITS - 8));
-}
-inline unsigned SkB16ToB32(unsigned b)
-{
- return (b << (8 - SK_B16_BITS)) | (b >> (2 * SK_B16_BITS - 8));
-}
-
-#define SkPacked16ToR32(c) SkR16ToR32(SkGetPackedR16(c))
-#define SkPacked16ToG32(c) SkG16ToG32(SkGetPackedG16(c))
-#define SkPacked16ToB32(c) SkB16ToB32(SkGetPackedB16(c))
-
-inline SkPMColor SkPixel16ToPixel32(U16CPU src)
-{
- SkASSERT(src == SkToU16(src));
-
- unsigned r = SkPacked16ToR32(src);
- unsigned g = SkPacked16ToG32(src);
- unsigned b = SkPacked16ToB32(src);
-
- SkASSERT((r >> (8 - SK_R16_BITS)) == SkGetPackedR16(src));
- SkASSERT((g >> (8 - SK_G16_BITS)) == SkGetPackedG16(src));
- SkASSERT((b >> (8 - SK_B16_BITS)) == SkGetPackedB16(src));
-
- return SkPackARGB32(0xFF, r, g, b);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-typedef uint16_t SkPMColor16;
-
-// Put in OpenGL order (r g b a)
-#define SK_A4444_SHIFT 0
-#define SK_R4444_SHIFT 12
-#define SK_G4444_SHIFT 8
-#define SK_B4444_SHIFT 4
-
-#define SkA32To4444(a) ((unsigned)(a) >> 4)
-#define SkR32To4444(r) ((unsigned)(r) >> 4)
-#define SkG32To4444(g) ((unsigned)(g) >> 4)
-#define SkB32To4444(b) ((unsigned)(b) >> 4)
-
-static inline U8CPU SkReplicateNibble(unsigned nib)
-{
- SkASSERT(nib <= 0xF);
- return (nib << 4) | nib;
-}
-
-#define SkA4444ToA32(a) SkReplicateNibble(a)
-#define SkR4444ToR32(r) SkReplicateNibble(r)
-#define SkG4444ToG32(g) SkReplicateNibble(g)
-#define SkB4444ToB32(b) SkReplicateNibble(b)
-
-#define SkGetPackedA4444(c) (((unsigned)(c) >> SK_A4444_SHIFT) & 0xF)
-#define SkGetPackedR4444(c) (((unsigned)(c) >> SK_R4444_SHIFT) & 0xF)
-#define SkGetPackedG4444(c) (((unsigned)(c) >> SK_G4444_SHIFT) & 0xF)
-#define SkGetPackedB4444(c) (((unsigned)(c) >> SK_B4444_SHIFT) & 0xF)
-
-#define SkPacked4444ToA32(c) SkReplicateNibble(SkGetPackedA4444(c))
-#define SkPacked4444ToR32(c) SkReplicateNibble(SkGetPackedR4444(c))
-#define SkPacked4444ToG32(c) SkReplicateNibble(SkGetPackedG4444(c))
-#define SkPacked4444ToB32(c) SkReplicateNibble(SkGetPackedB4444(c))
-
-#ifdef SK_DEBUG
-static inline void SkPMColor16Assert(U16CPU c)
-{
- unsigned a = SkGetPackedA4444(c);
- unsigned r = SkGetPackedR4444(c);
- unsigned g = SkGetPackedG4444(c);
- unsigned b = SkGetPackedB4444(c);
-
- SkASSERT(a <= 0xF);
- SkASSERT(r <= a);
- SkASSERT(g <= a);
- SkASSERT(b <= a);
-}
-#else
-#define SkPMColor16Assert(c)
-#endif
-
-static inline unsigned SkAlpha15To16(unsigned a)
-{
- SkASSERT(a <= 0xF);
- return a + (a >> 3);
-}
-
-#ifdef SK_DEBUG
- static inline int SkAlphaMul4(int value, int scale)
- {
- SkASSERT((unsigned)scale <= 0x10);
- return value * scale >> 4;
- }
-#else
- #define SkAlphaMul4(value, scale) ((value) * (scale) >> 4)
-#endif
-
-static inline unsigned SkR4444ToR565(unsigned r)
-{
- SkASSERT(r <= 0xF);
- return (r << (SK_R16_BITS - 4)) | (r >> (8 - SK_R16_BITS));
-}
-
-static inline unsigned SkG4444ToG565(unsigned g)
-{
- SkASSERT(g <= 0xF);
- return (g << (SK_G16_BITS - 4)) | (g >> (8 - SK_G16_BITS));
-}
-
-static inline unsigned SkB4444ToB565(unsigned b)
-{
- SkASSERT(b <= 0xF);
- return (b << (SK_B16_BITS - 4)) | (b >> (8 - SK_B16_BITS));
-}
-
-static inline SkPMColor16 SkPackARGB4444(unsigned a, unsigned r,
- unsigned g, unsigned b)
-{
- SkASSERT(a <= 0xF);
- SkASSERT(r <= a);
- SkASSERT(g <= a);
- SkASSERT(b <= a);
-
- return (SkPMColor16)((a << SK_A4444_SHIFT) | (r << SK_R4444_SHIFT) |
- (g << SK_G4444_SHIFT) | (b << SK_B4444_SHIFT));
-}
-
-extern const uint16_t gMask_0F0F;
-
-inline U16CPU SkAlphaMulQ4(U16CPU c, unsigned scale)
-{
- SkASSERT(scale <= 16);
-
- const unsigned mask = 0xF0F; //gMask_0F0F;
-
-#if 0
- unsigned rb = ((c & mask) * scale) >> 4;
- unsigned ag = ((c >> 4) & mask) * scale;
- return (rb & mask) | (ag & ~mask);
-#else
- c = (c & mask) | ((c & (mask << 4)) << 12);
- c = c * scale >> 4;
- return (c & mask) | ((c >> 12) & (mask << 4));
-#endif
-}
-
-/** Expand the SkPMColor16 color into a 32bit value that can be scaled all at
- once by a value up to 16. Used in conjunction with SkCompact_4444.
-*/
-inline uint32_t SkExpand_4444(U16CPU c)
-{
- SkASSERT(c == (uint16_t)c);
-
- const unsigned mask = 0xF0F; //gMask_0F0F;
- return (c & mask) | ((c & ~mask) << 12);
-}
-
-/** Compress an expanded value (from SkExpand_4444) back down to a SkPMColor16.
- NOTE: this explicitly does not clean the top 16 bits (which may be garbage).
- It does this for speed, since if it is being written directly to 16bits of
- memory, the top 16bits will be ignored. Casting the result to uint16_t here
- would add 2 more instructions, slow us down. It is up to the caller to
- perform the cast if needed.
-*/
-static inline U16CPU SkCompact_4444(uint32_t c)
-{
- const unsigned mask = 0xF0F; //gMask_0F0F;
- return (c & mask) | ((c >> 12) & ~mask);
-}
-
-static inline uint16_t SkSrcOver4444To16(SkPMColor16 s, uint16_t d)
-{
- unsigned sa = SkGetPackedA4444(s);
- unsigned sr = SkR4444ToR565(SkGetPackedR4444(s));
- unsigned sg = SkG4444ToG565(SkGetPackedG4444(s));
- unsigned sb = SkB4444ToB565(SkGetPackedB4444(s));
-
- // To avoid overflow, we have to clear the low bit of the synthetic sg
- // if the src alpha is <= 7.
- // to see why, try blending 0x4444 on top of 565-white and watch green
- // overflow (sum == 64)
- sg &= ~(~(sa >> 3) & 1);
-
- unsigned scale = SkAlpha15To16(15 - sa);
- unsigned dr = SkAlphaMul4(SkGetPackedR16(d), scale);
- unsigned dg = SkAlphaMul4(SkGetPackedG16(d), scale);
- unsigned db = SkAlphaMul4(SkGetPackedB16(d), scale);
-
-#if 0
- if (sg + dg > 63) {
- SkDebugf("---- SkSrcOver4444To16 src=%x dst=%x scale=%d, sg=%d dg=%d\n", s, d, scale, sg, dg);
- }
-#endif
- return SkPackRGB16(sr + dr, sg + dg, sb + db);
-}
-
-static inline uint16_t SkBlend4444To16(SkPMColor16 src, uint16_t dst, int scale16)
-{
- SkASSERT((unsigned)scale16 <= 16);
-
- return SkSrcOver4444To16(SkAlphaMulQ4(src, scale16), dst);
-}
-
-static inline uint16_t SkBlend4444(SkPMColor16 src, SkPMColor16 dst, int scale16)
-{
- SkASSERT((unsigned)scale16 <= 16);
-
- uint32_t src32 = SkExpand_4444(src) * scale16;
- // the scaled srcAlpha is the bottom byte
-#ifdef SK_DEBUG
- {
- unsigned srcA = SkGetPackedA4444(src) * scale16;
- SkASSERT(srcA == (src32 & 0xFF));
- }
-#endif
- unsigned dstScale = SkAlpha255To256(255 - (src32 & 0xFF)) >> 4;
- uint32_t dst32 = SkExpand_4444(dst) * dstScale;
- return SkCompact_4444((src32 + dst32) >> 4);
-}
-
-static inline SkPMColor SkPixel4444ToPixel32(U16CPU c)
-{
- uint32_t d = (SkGetPackedA4444(c) << SK_A32_SHIFT) |
- (SkGetPackedR4444(c) << SK_R32_SHIFT) |
- (SkGetPackedG4444(c) << SK_G32_SHIFT) |
- (SkGetPackedB4444(c) << SK_B32_SHIFT);
- return d | (d << 4);
-}
-
-static inline SkPMColor16 SkPixel32ToPixel4444(SkPMColor c)
-{
- return (((c >> (SK_A32_SHIFT + 4)) & 0xF) << SK_A4444_SHIFT) |
- (((c >> (SK_R32_SHIFT + 4)) & 0xF) << SK_R4444_SHIFT) |
- (((c >> (SK_G32_SHIFT + 4)) & 0xF) << SK_G4444_SHIFT) |
- (((c >> (SK_B32_SHIFT + 4)) & 0xF) << SK_B4444_SHIFT);
-}
-
-// cheap 2x2 dither
-static inline SkPMColor16 SkDitherARGB32To4444(U8CPU a, U8CPU r,
- U8CPU g, U8CPU b)
-{
- a = ((a << 1) - ((a >> 4 << 4) | (a >> 4))) >> 4;
- r = ((r << 1) - ((r >> 4 << 4) | (r >> 4))) >> 4;
- g = ((g << 1) - ((g >> 4 << 4) | (g >> 4))) >> 4;
- b = ((b << 1) - ((b >> 4 << 4) | (b >> 4))) >> 4;
-
- return SkPackARGB4444(a, r, g, b);
-}
-
-static inline SkPMColor16 SkDitherPixel32To4444(SkPMColor c)
-{
- return SkDitherARGB32To4444(SkGetPackedA32(c), SkGetPackedR32(c),
- SkGetPackedG32(c), SkGetPackedB32(c));
-}
-
-/* Assumes 16bit is in standard RGBA order.
- Transforms a normal ARGB_8888 into the same byte order as
- expanded ARGB_4444, but keeps each component 8bits
-*/
-static inline uint32_t SkExpand_8888(SkPMColor c)
-{
- return (((c >> SK_R32_SHIFT) & 0xFF) << 24) |
- (((c >> SK_G32_SHIFT) & 0xFF) << 8) |
- (((c >> SK_B32_SHIFT) & 0xFF) << 16) |
- (((c >> SK_A32_SHIFT) & 0xFF) << 0);
-}
-
-/* Undo the operation of SkExpand_8888, turning the argument back into
- a SkPMColor.
-*/
-static inline SkPMColor SkCompact_8888(uint32_t c)
-{
- return (((c >> 24) & 0xFF) << SK_R32_SHIFT) |
- (((c >> 8) & 0xFF) << SK_G32_SHIFT) |
- (((c >> 16) & 0xFF) << SK_B32_SHIFT) |
- (((c >> 0) & 0xFF) << SK_A32_SHIFT);
-}
-
-/* Like SkExpand_8888, this transforms a pmcolor into the expanded 4444 format,
- but this routine just keeps the high 4bits of each component in the low
- 4bits of the result (just like a newly expanded PMColor16).
-*/
-static inline uint32_t SkExpand32_4444(SkPMColor c)
-{
- return (((c >> (SK_R32_SHIFT + 4)) & 0xF) << 24) |
- (((c >> (SK_G32_SHIFT + 4)) & 0xF) << 8) |
- (((c >> (SK_B32_SHIFT + 4)) & 0xF) << 16) |
- (((c >> (SK_A32_SHIFT + 4)) & 0xF) << 0);
-}
-
-// takes two values and alternamtes them as part of a memset16
-// used for cheap 2x2 dithering when the colors are opaque
-void sk_dither_memset16(uint16_t dst[], uint16_t value, uint16_t other, int n);
-
-#endif
-
diff --git a/include/core/SkColorShader.h b/include/core/SkColorShader.h
deleted file mode 100644
index f9c3dc3..0000000
--- a/include/core/SkColorShader.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkColorShader_DEFINED
-#define SkColorShader_DEFINED
-
-#include "SkShader.h"
-
-/** \class SkColorShader
- A Shader that represents a single color. In general, this effect can be
- accomplished by just using the color field on the paint, but if an
- actual shader object is needed, this provides that feature.
-*/
-class SkColorShader : public SkShader {
-public:
- /** Create a ColorShader that will inherit its color from the Paint
- at draw time.
- */
- SkColorShader() : fInheritColor(true) {}
- /** Create a ColorShader that ignores the color in the paint, and uses the
- specified color. Note: like all shaders, at draw time the paint's alpha
- will be respected, and is applied to the specified color.
- */
- SkColorShader(SkColor c) : fColor(c), fInheritColor(false) {}
-
- virtual uint32_t getFlags();
- virtual uint8_t getSpan16Alpha() const;
- virtual bool setContext(const SkBitmap& device, const SkPaint& paint,
- const SkMatrix& matrix);
- virtual void shadeSpan(int x, int y, SkPMColor span[], int count);
- virtual void shadeSpan16(int x, int y, uint16_t span[], int count);
- virtual void shadeSpanAlpha(int x, int y, uint8_t alpha[], int count);
-
-protected:
- SkColorShader(SkFlattenableReadBuffer& );
- virtual void flatten(SkFlattenableWriteBuffer& );
- virtual Factory getFactory() { return CreateProc; }
-private:
- static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
- return SkNEW_ARGS(SkColorShader, (buffer));
- }
- SkColor fColor; // ignored if fInheritColor is true
- SkPMColor fPMColor; // cached after setContext()
- uint16_t fColor16; // cached after setContext()
- SkBool8 fInheritColor;
-
- typedef SkShader INHERITED;
-};
-
-#endif
diff --git a/include/core/SkComposeShader.h b/include/core/SkComposeShader.h
deleted file mode 100644
index 0b198f6..0000000
--- a/include/core/SkComposeShader.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkComposeShader_DEFINED
-#define SkComposeShader_DEFINED
-
-#include "SkShader.h"
-
-class SkXfermode;
-
-///////////////////////////////////////////////////////////////////////////////////////////
-
-/** \class SkComposeShader
- This subclass of shader returns the coposition of two other shaders, combined by
- a xfermode.
-*/
-class SkComposeShader : public SkShader {
-public:
- /** Create a new compose shader, given shaders A, B, and a combining xfermode mode.
- When the xfermode is called, it will be given the result from shader A as its
- "dst", and the result of from shader B as its "src".
- mode->xfer32(sA_result, sB_result, ...)
- @param shaderA The colors from this shader are seen as the "dst" by the xfermode
- @param shaderB The colors from this shader are seen as the "src" by the xfermode
- @param mode The xfermode that combines the colors from the two shaders. If mode
- is null, then SRC_OVER is assumed.
- */
- SkComposeShader(SkShader* sA, SkShader* sB, SkXfermode* mode = NULL);
- virtual ~SkComposeShader();
-
- // override
- virtual bool setContext(const SkBitmap& device, const SkPaint& paint, const SkMatrix& matrix);
- virtual void shadeSpan(int x, int y, SkPMColor result[], int count);
- virtual void beginSession();
- virtual void endSession();
-
-protected:
- SkComposeShader(SkFlattenableReadBuffer& );
- virtual void flatten(SkFlattenableWriteBuffer& );
- virtual Factory getFactory() { return CreateProc; }
-
-private:
- static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
- return SkNEW_ARGS(SkComposeShader, (buffer)); }
-
- SkShader* fShaderA;
- SkShader* fShaderB;
- SkXfermode* fMode;
-
- typedef SkShader INHERITED;
-};
-
-#endif
diff --git a/include/core/SkDeque.h b/include/core/SkDeque.h
deleted file mode 100644
index cbed930..0000000
--- a/include/core/SkDeque.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkDeque_DEFINED
-#define SkDeque_DEFINED
-
-#include "SkTypes.h"
-
-class SkDeque : SkNoncopyable {
-public:
- explicit SkDeque(size_t elemSize);
- SkDeque(size_t elemSize, void* storage, size_t storageSize);
- ~SkDeque();
-
- bool empty() const { return 0 == fCount; }
- int count() const { return fCount; }
- size_t elemSize() const { return fElemSize; }
-
- const void* front() const;
- const void* back() const;
-
- void* front() {
- return (void*)((const SkDeque*)this)->front();
- }
-
- void* back() {
- return (void*)((const SkDeque*)this)->back();
- }
-
- void* push_front();
- void* push_back();
-
- void pop_front();
- void pop_back();
-
-private:
- struct Head;
-
-public:
- class Iter {
- public:
- Iter(const SkDeque& d);
- void* next();
-
- private:
- SkDeque::Head* fHead;
- char* fPos;
- size_t fElemSize;
- };
-
-private:
- Head* fFront;
- Head* fBack;
- size_t fElemSize;
- void* fInitialStorage;
- int fCount;
-
- friend class Iter;
-};
-
-#endif
diff --git a/include/core/SkDescriptor.h b/include/core/SkDescriptor.h
deleted file mode 100644
index 8074cff..0000000
--- a/include/core/SkDescriptor.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkDescriptor_DEFINED
-#define SkDescriptor_DEFINED
-
-#include "SkTypes.h"
-
-class SkDescriptor : SkNoncopyable {
-public:
- static size_t ComputeOverhead(int entryCount)
- {
- SkASSERT(entryCount >= 0);
- return sizeof(SkDescriptor) + entryCount * sizeof(Entry);
- }
-
- static SkDescriptor* Alloc(size_t length)
- {
- SkASSERT(SkAlign4(length) == length);
- SkDescriptor* desc = (SkDescriptor*)sk_malloc_throw(length);
- return desc;
- }
-
- static void Free(SkDescriptor* desc)
- {
- sk_free(desc);
- }
-
- void init()
- {
- fLength = sizeof(SkDescriptor);
- fCount = 0;
- }
-
- uint32_t getLength() const { return fLength; }
-
- void* addEntry(uint32_t tag, uint32_t length, const void* data = NULL)
- {
- SkASSERT(tag);
- SkASSERT(SkAlign4(length) == length);
- SkASSERT(this->findEntry(tag, NULL) == NULL);
-
- Entry* entry = (Entry*)((char*)this + fLength);
- entry->fTag = tag;
- entry->fLen = length;
- if (data)
- memcpy(entry + 1, data, length);
-
- fCount += 1;
- fLength += sizeof(Entry) + length;
- return (entry + 1); // return its data
- }
-
- void computeChecksum()
- {
- fChecksum = SkDescriptor::ComputeChecksum(this);
- }
-
-#ifdef SK_DEBUG
- void assertChecksum() const
- {
- SkASSERT(fChecksum == SkDescriptor::ComputeChecksum(this));
- }
-#endif
-
- const void* findEntry(uint32_t tag, uint32_t* length) const
- {
- const Entry* entry = (const Entry*)(this + 1);
- int count = fCount;
-
- while (--count >= 0)
- {
- if (entry->fTag == tag)
- {
- if (length)
- *length = entry->fLen;
- return entry + 1;
- }
- entry = (const Entry*)((const char*)(entry + 1) + entry->fLen);
- }
- return NULL;
- }
-
- SkDescriptor* copy() const
- {
- SkDescriptor* desc = SkDescriptor::Alloc(fLength);
- memcpy(desc, this, fLength);
- return desc;
- }
-
- bool equals(const SkDescriptor& other) const
- {
- // probe to see if we have a good checksum algo
-// SkASSERT(a.fChecksum != b.fChecksum || memcmp(&a, &b, a.fLength) == 0);
-
- // the first value we should look at is the checksum, so this loop
- // should terminate early if they descriptors are different.
- // NOTE: if we wrote a sentinel value at the end of each, we chould
- // remove the aa < stop test in the loop...
- const uint32_t* aa = (const uint32_t*)this;
- const uint32_t* bb = (const uint32_t*)&other;
- const uint32_t* stop = (const uint32_t*)((const char*)aa + fLength);
- do {
- if (*aa++ != *bb++)
- return false;
- } while (aa < stop);
- return true;
- }
-
- struct Entry {
- uint32_t fTag;
- uint32_t fLen;
- };
-
-#ifdef SK_DEBUG
- uint32_t getChecksum() const { return fChecksum; }
- uint32_t getCount() const { return fCount; }
-#endif
-
-private:
- uint32_t fChecksum; // must be first
- uint32_t fLength; // must be second
- uint32_t fCount;
-
- static uint32_t ComputeChecksum(const SkDescriptor* desc)
- {
- const uint32_t* ptr = (const uint32_t*)desc + 1; // skip the checksum field
- const uint32_t* stop = (const uint32_t*)((const char*)desc + desc->fLength);
- uint32_t sum = 0;
-
- SkASSERT(ptr < stop);
- do {
- sum = (sum << 1) | (sum >> 31);
- sum ^= *ptr++;
- } while (ptr < stop);
-
- return sum;
- }
-
- // private so no one can create one except our factories
- SkDescriptor() {}
-};
-
-#include "SkScalerContext.h"
-
-class SkAutoDescriptor : SkNoncopyable {
-public:
- SkAutoDescriptor(size_t size)
- {
- if (size <= sizeof(fStorage))
- fDesc = (SkDescriptor*)(void*)fStorage;
- else
- fDesc = SkDescriptor::Alloc(size);
- }
- ~SkAutoDescriptor()
- {
- if (fDesc != (SkDescriptor*)(void*)fStorage)
- SkDescriptor::Free(fDesc);
- }
- SkDescriptor* getDesc() const { return fDesc; }
-private:
- enum {
- kStorageSize = sizeof(SkDescriptor)
- + sizeof(SkDescriptor::Entry) + sizeof(SkScalerContext::Rec) // for rec
- + sizeof(SkDescriptor::Entry) + sizeof(void*) // for typeface
- + 32 // slop for occational small extras
- };
- SkDescriptor* fDesc;
- uint32_t fStorage[(kStorageSize + 3) >> 2];
-};
-
-
-#endif
-
diff --git a/include/core/SkDevice.h b/include/core/SkDevice.h
deleted file mode 100644
index 4d678c6..0000000
--- a/include/core/SkDevice.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkDevice_DEFINED
-#define SkDevice_DEFINED
-
-#include "SkRefCnt.h"
-#include "SkBitmap.h"
-#include "SkCanvas.h"
-#include "SkColor.h"
-
-class SkDraw;
-struct SkIRect;
-class SkMatrix;
-class SkRegion;
-
-class SkDevice : public SkRefCnt {
-public:
- SkDevice();
- /** Construct a new device, extracting the width/height/config/isOpaque values from
- the bitmap. If transferPixelOwnership is true, and the bitmap claims to own its
- own pixels (getOwnsPixels() == true), then transfer this responsibility to the
- device, and call setOwnsPixels(false) on the bitmap.
-
- Subclasses may override the destructor, which is virtual, even though this class
- doesn't have one. SkRefCnt does.
-
- @param bitmap A copy of this bitmap is made and stored in the device
- */
- SkDevice(const SkBitmap& bitmap);
-
- /** Return the width of the device (in pixels).
- */
- int width() const { return fBitmap.width(); }
- /** Return the height of the device (in pixels).
- */
- int height() const { return fBitmap.height(); }
- /** Return the bitmap config of the device's pixels
- */
- SkBitmap::Config config() const { return fBitmap.getConfig(); }
- /** Returns true if the device's bitmap's config treats every pixels as
- implicitly opaque.
- */
- bool isOpaque() const { return fBitmap.isOpaque(); }
-
- /** Return the bounds of the device
- */
- void getBounds(SkIRect* bounds) const;
-
- /** Return true if the specified rectangle intersects the bounds of the
- device. If sect is not NULL and there is an intersection, sect returns
- the intersection.
- */
- bool intersects(const SkIRect& r, SkIRect* sect = NULL) const;
-
- /** Return the bitmap associated with this device. Call this each time you need
- to access the bitmap, as it notifies the subclass to perform any flushing
- etc. before you examine the pixels.
- @param changePixels set to true if the caller plans to change the pixels
- @return the device's bitmap
- */
- const SkBitmap& accessBitmap(bool changePixels);
-
- /** Helper to erase the entire device to the specified color (including
- alpha).
- */
- void eraseColor(SkColor eraseColor);
-
- /** Called when this device is installed into a Canvas. Balanaced by a call
- to unlockPixels() when the device is removed from a Canvas.
- */
- virtual void lockPixels();
- virtual void unlockPixels();
-
- /** Called with the correct matrix and clip before this device is drawn
- to using those settings. If your subclass overrides this, be sure to
- call through to the base class as well.
- */
- virtual void setMatrixClip(const SkMatrix&, const SkRegion&);
-
- /** Called when this device gains focus (i.e becomes the current device
- for drawing).
- */
- virtual void gainFocus(SkCanvas*) {}
-
- /** These are called inside the per-device-layer loop for each draw call.
- When these are called, we have already applied any saveLayer operations,
- and are handling any looping from the paint, and any effects from the
- DrawFilter.
- */
- virtual void drawPaint(const SkDraw&, const SkPaint& paint);
- virtual void drawPoints(const SkDraw&, SkCanvas::PointMode mode, size_t count,
- const SkPoint[], const SkPaint& paint);
- virtual void drawRect(const SkDraw&, const SkRect& r,
- const SkPaint& paint);
- virtual void drawPath(const SkDraw&, const SkPath& path,
- const SkPaint& paint);
- virtual void drawBitmap(const SkDraw&, const SkBitmap& bitmap,
- const SkMatrix& matrix, const SkPaint& paint);
- virtual void drawSprite(const SkDraw&, const SkBitmap& bitmap,
- int x, int y, const SkPaint& paint);
- virtual void drawText(const SkDraw&, const void* text, size_t len,
- SkScalar x, SkScalar y, const SkPaint& paint);
- virtual void drawPosText(const SkDraw&, const void* text, size_t len,
- const SkScalar pos[], SkScalar constY,
- int scalarsPerPos, const SkPaint& paint);
- virtual void drawTextOnPath(const SkDraw&, const void* text, size_t len,
- const SkPath& path, const SkMatrix* matrix,
- const SkPaint& paint);
- virtual void drawVertices(const SkDraw&, SkCanvas::VertexMode, int vertexCount,
- const SkPoint verts[], const SkPoint texs[],
- const SkColor colors[], SkXfermode* xmode,
- const uint16_t indices[], int indexCount,
- const SkPaint& paint);
- virtual void drawDevice(const SkDraw&, SkDevice*, int x, int y,
- const SkPaint&);
-
-protected:
- /** Update as needed the pixel value in the bitmap, so that the caller can access
- the pixels directly. Note: only the pixels field should be altered. The config/width/height/rowbytes
- must remain unchanged.
- */
- virtual void onAccessBitmap(SkBitmap*);
-
-private:
- SkBitmap fBitmap;
-};
-
-#endif
diff --git a/include/core/SkDither.h b/include/core/SkDither.h
deleted file mode 100644
index 5b2552d..0000000
--- a/include/core/SkDither.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkDither_DEFINED
-#define SkDither_DEFINED
-
-#include "SkColorPriv.h"
-
-#define SK_DitherValueMax4444 15
-#define SK_DitherValueMax565 7
-
-/* need to use macros for bit-counts for each component, and then
- move these into SkColorPriv.h
-*/
-
-#define SkDITHER_R32_FOR_565_MACRO(r, d) (r + d - (r >> 5))
-#define SkDITHER_G32_FOR_565_MACRO(g, d) (g + (d >> 1) - (g >> 6))
-#define SkDITHER_B32_FOR_565_MACRO(b, d) (b + d - (b >> 5))
-
-#define SkDITHER_A32_FOR_4444_MACRO(a, d) (a + 15 - (a >> 4))
-#define SkDITHER_R32_FOR_4444_MACRO(r, d) (r + d - (r >> 4))
-#define SkDITHER_G32_FOR_4444_MACRO(g, d) (g + d - (g >> 4))
-#define SkDITHER_B32_FOR_4444_MACRO(b, d) (b + d - (b >> 4))
-
-#ifdef SK_DEBUG
- inline unsigned SkDITHER_R32_FOR_565(unsigned r, unsigned d)
- {
- SkASSERT(d <= SK_DitherValueMax565);
- SkA32Assert(r);
- r = SkDITHER_R32_FOR_565_MACRO(r, d);
- SkA32Assert(r);
- return r;
- }
- inline unsigned SkDITHER_G32_FOR_565(unsigned g, unsigned d)
- {
- SkASSERT(d <= SK_DitherValueMax565);
- SkG32Assert(g);
- g = SkDITHER_G32_FOR_565_MACRO(g, d);
- SkG32Assert(g);
- return g;
- }
- inline unsigned SkDITHER_B32_FOR_565(unsigned b, unsigned d)
- {
- SkASSERT(d <= SK_DitherValueMax565);
- SkB32Assert(b);
- b = SkDITHER_B32_FOR_565_MACRO(b, d);
- SkB32Assert(b);
- return b;
- }
-#else
- #define SkDITHER_R32_FOR_565(r, d) SkDITHER_R32_FOR_565_MACRO(r, d)
- #define SkDITHER_G32_FOR_565(g, d) SkDITHER_G32_FOR_565_MACRO(g, d)
- #define SkDITHER_B32_FOR_565(b, d) SkDITHER_B32_FOR_565_MACRO(b, d)
-#endif
-
-#define SkDITHER_R32To565(r, d) SkR32ToR16(SkDITHER_R32_FOR_565(r, d))
-#define SkDITHER_G32To565(g, d) SkG32ToG16(SkDITHER_G32_FOR_565(g, d))
-#define SkDITHER_B32To565(b, d) SkB32ToB16(SkDITHER_B32_FOR_565(b, d))
-
-#define SkDITHER_A32To4444(a, d) SkA32To4444(SkDITHER_A32_FOR_4444_MACRO(a, d))
-#define SkDITHER_R32To4444(r, d) SkR32To4444(SkDITHER_R32_FOR_4444_MACRO(r, d))
-#define SkDITHER_G32To4444(g, d) SkG32To4444(SkDITHER_G32_FOR_4444_MACRO(g, d))
-#define SkDITHER_B32To4444(b, d) SkB32To4444(SkDITHER_B32_FOR_4444_MACRO(b, d))
-
-static inline SkPMColor SkDitherARGB32For565(SkPMColor c, unsigned dither)
-{
- SkASSERT(dither <= SK_DitherValueMax565);
-
- unsigned sa = SkGetPackedA32(c);
- dither = SkAlphaMul(dither, SkAlpha255To256(sa));
-
- unsigned sr = SkGetPackedR32(c);
- unsigned sg = SkGetPackedG32(c);
- unsigned sb = SkGetPackedB32(c);
- sr = SkDITHER_R32_FOR_565(sr, dither);
- sg = SkDITHER_G32_FOR_565(sg, dither);
- sb = SkDITHER_B32_FOR_565(sb, dither);
-
- return SkPackARGB32(sa, sr, sg, sb);
-}
-
-static inline SkPMColor SkDitherRGB32For565(SkPMColor c, unsigned dither)
-{
- SkASSERT(dither <= SK_DitherValueMax565);
-
- unsigned sr = SkGetPackedR32(c);
- unsigned sg = SkGetPackedG32(c);
- unsigned sb = SkGetPackedB32(c);
- sr = SkDITHER_R32_FOR_565(sr, dither);
- sg = SkDITHER_G32_FOR_565(sg, dither);
- sb = SkDITHER_B32_FOR_565(sb, dither);
-
- return SkPackARGB32(0xFF, sr, sg, sb);
-}
-
-static inline uint16_t SkDitherRGBTo565(U8CPU r, U8CPU g, U8CPU b,
- unsigned dither)
-{
- SkASSERT(dither <= SK_DitherValueMax565);
- r = SkDITHER_R32To565(r, dither);
- g = SkDITHER_G32To565(g, dither);
- b = SkDITHER_B32To565(b, dither);
- return SkPackRGB16(r, g, b);
-}
-
-static inline uint16_t SkDitherRGB32To565(SkPMColor c, unsigned dither)
-{
- SkASSERT(dither <= SK_DitherValueMax565);
-
- unsigned sr = SkGetPackedR32(c);
- unsigned sg = SkGetPackedG32(c);
- unsigned sb = SkGetPackedB32(c);
- sr = SkDITHER_R32To565(sr, dither);
- sg = SkDITHER_G32To565(sg, dither);
- sb = SkDITHER_B32To565(sb, dither);
-
- return SkPackRGB16(sr, sg, sb);
-}
-
-static inline uint16_t SkDitherARGB32To565(U8CPU sa, SkPMColor c, unsigned dither)
-{
- SkASSERT(dither <= SK_DitherValueMax565);
- dither = SkAlphaMul(dither, SkAlpha255To256(sa));
-
- unsigned sr = SkGetPackedR32(c);
- unsigned sg = SkGetPackedG32(c);
- unsigned sb = SkGetPackedB32(c);
- sr = SkDITHER_R32To565(sr, dither);
- sg = SkDITHER_G32To565(sg, dither);
- sb = SkDITHER_B32To565(sb, dither);
-
- return SkPackRGB16(sr, sg, sb);
-}
-
-///////////////////////// 4444
-
-static inline SkPMColor16 SkDitherARGB32To4444(U8CPU a, U8CPU r, U8CPU g,
- U8CPU b, unsigned dither)
-{
- dither = SkAlphaMul(dither, SkAlpha255To256(a));
-
- a = SkDITHER_A32To4444(a, dither);
- r = SkDITHER_R32To4444(r, dither);
- g = SkDITHER_G32To4444(g, dither);
- b = SkDITHER_B32To4444(b, dither);
-
- return SkPackARGB4444(a, r, g, b);
-}
-
-static inline SkPMColor16 SkDitherARGB32To4444(SkPMColor c, unsigned dither)
-{
- unsigned a = SkGetPackedA32(c);
- unsigned r = SkGetPackedR32(c);
- unsigned g = SkGetPackedG32(c);
- unsigned b = SkGetPackedB32(c);
-
- dither = SkAlphaMul(dither, SkAlpha255To256(a));
-
- a = SkDITHER_A32To4444(a, dither);
- r = SkDITHER_R32To4444(r, dither);
- g = SkDITHER_G32To4444(g, dither);
- b = SkDITHER_B32To4444(b, dither);
-
- return SkPackARGB4444(a, r, g, b);
-}
-
-// TODO: need dither routines for 565 -> 4444
-
-// this toggles between a 4x4 and a 1x4 array
-//#define ENABLE_DITHER_MATRIX_4X4
-
-#ifdef ENABLE_DITHER_MATRIX_4X4
- extern const uint8_t gDitherMatrix_4Bit_4X4[4][4];
- extern const uint8_t gDitherMatrix_3Bit_4X4[4][4];
-
- #define DITHER_4444_SCAN(y) const uint8_t* dither_scan = gDitherMatrix_4Bit_4X4[(y) & 3]
- #define DITHER_565_SCAN(y) const uint8_t* dither_scan = gDitherMatrix_3Bit_4X4[(y) & 3]
-
- #define DITHER_VALUE(x) dither_scan[(x) & 3]
-#else
- extern const uint16_t gDitherMatrix_4Bit_16[4];
- extern const uint16_t gDitherMatrix_3Bit_16[4];
-
- #define DITHER_4444_SCAN(y) const uint16_t dither_scan = gDitherMatrix_4Bit_16[(y) & 3]
- #define DITHER_565_SCAN(y) const uint16_t dither_scan = gDitherMatrix_3Bit_16[(y) & 3]
-
- #define DITHER_VALUE(x) ((dither_scan >> (((x) & 3) << 2)) & 0xF)
-#endif
-
-#define DITHER_INC_X(x) ++(x)
-
-#endif
diff --git a/include/core/SkDraw.h b/include/core/SkDraw.h
deleted file mode 100644
index 8214859..0000000
--- a/include/core/SkDraw.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkDraw_DEFINED
-#define SkDraw_DEFINED
-
-#include "SkBitmap.h"
-#include "SkCanvas.h"
-#include "SkMask.h"
-#include "SkMatrix.h"
-#include "SkPaint.h"
-#include "SkRect.h"
-#include "SkAutoKern.h"
-
-class SkBounder;
-class SkDevice;
-class SkPath;
-class SkRegion;
-struct SkDrawProcs;
-
-class SkDraw {
-public:
- SkDraw() : fDevice(NULL), fBounder(NULL), fProcs(NULL) {}
- SkDraw(const SkDraw& src);
-
- void drawPaint(const SkPaint&) const;
- void drawPoints(SkCanvas::PointMode, size_t count, const SkPoint[],
- const SkPaint&) const;
- void drawRect(const SkRect&, const SkPaint&) const;
- /* To save on mallocs, we allow a flag that tells us that srcPath is
- mutable, so that we don't have to make copies of it as we transform it.
- */
- void drawPath(const SkPath& srcPath, const SkPaint&,
- const SkMatrix* prePathMatrix, bool pathIsMutable) const;
- void drawBitmap(const SkBitmap&, const SkMatrix&, const SkPaint&) const;
- void drawSprite(const SkBitmap&, int x, int y, const SkPaint&) const;
- void drawText(const char text[], size_t byteLength, SkScalar x,
- SkScalar y, const SkPaint& paint) const;
- void drawPosText(const char text[], size_t byteLength,
- const SkScalar pos[], SkScalar constY,
- int scalarsPerPosition, const SkPaint& paint) const;
- void drawTextOnPath(const char text[], size_t byteLength,
- const SkPath&, const SkMatrix*, const SkPaint&) const;
- void drawVertices(SkCanvas::VertexMode mode, int count,
- const SkPoint vertices[], const SkPoint textures[],
- const SkColor colors[], SkXfermode* xmode,
- const uint16_t indices[], int ptCount,
- const SkPaint& paint) const;
-
- void drawPath(const SkPath& src, const SkPaint& paint) const {
- this->drawPath(src, paint, NULL, false);
- }
-
- /** Helper function that creates a mask from a path and an optional maskfilter.
- Note however, that the resulting mask will not have been actually filtered,
- that must be done afterwards (by calling filterMask). The maskfilter is provided
- solely to assist in computing the mask's bounds (if the mode requests that).
- */
- static bool DrawToMask(const SkPath& devPath, const SkIRect* clipBounds,
- SkMaskFilter* filter, const SkMatrix* filterMatrix,
- SkMask* mask, SkMask::CreateMode mode);
-
-private:
- void drawText_asPaths(const char text[], size_t byteLength,
- SkScalar x, SkScalar y, const SkPaint&) const;
- void drawDevMask(const SkMask& mask, const SkPaint&) const;
- void drawBitmapAsMask(const SkBitmap&, const SkPaint&) const;
-
-public:
- const SkBitmap* fBitmap; // required
- const SkMatrix* fMatrix; // required
- const SkRegion* fClip; // required
- SkDevice* fDevice; // optional
- SkBounder* fBounder; // optional
- SkDrawProcs* fProcs; // optional
-
-#ifdef SK_DEBUG
- void validate() const;
-#endif
-};
-
-class SkGlyphCache;
-
-class SkTextToPathIter {
-public:
- SkTextToPathIter(const char text[], size_t length, const SkPaint&,
- bool applyStrokeAndPathEffects, bool forceLinearTextOn);
- ~SkTextToPathIter();
-
- const SkPaint& getPaint() const { return fPaint; }
- SkScalar getPathScale() const { return fScale; }
-
- const SkPath* next(SkScalar* xpos); //!< returns nil when there are no more paths
-
-private:
- SkGlyphCache* fCache;
- SkPaint fPaint;
- SkScalar fScale;
- SkFixed fPrevAdvance;
- const char* fText;
- const char* fStop;
- SkMeasureCacheProc fGlyphCacheProc;
-
- const SkPath* fPath; // returned in next
- SkScalar fXPos; // accumulated xpos, returned in next
- SkAutoKern fAutoKern;
-};
-
-#endif
-
-
diff --git a/include/core/SkDrawFilter.h b/include/core/SkDrawFilter.h
deleted file mode 100644
index db5a685..0000000
--- a/include/core/SkDrawFilter.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkDrawFilter_DEFINED
-#define SkDrawFilter_DEFINED
-
-#include "SkRefCnt.h"
-
-////////////////// EXPERIMENTAL //////////////////////////
-
-class SkCanvas;
-class SkPaint;
-
-/** Right before something is being draw, filter() is called with the
- current canvas and paint. If it returns true, then drawing proceeds
- with the (possibly modified) canvas/paint, and then restore() is called
- to restore the canvas/paint to their state before filter() was called.
- If filter returns false, canvas/paint should not have been changed, and
- restore() will not be called.
-*/
-class SkDrawFilter : public SkRefCnt {
-public:
- enum Type {
- kPaint_Type,
- kPoint_Type,
- kLine_Type,
- kBitmap_Type,
- kRect_Type,
- kPath_Type,
- kText_Type
- };
-
- /** Return true to allow the draw to continue (with possibly modified
- canvas/paint). If true is returned, then restore() will be called.
- */
- virtual bool filter(SkCanvas*, SkPaint*, Type) = 0;
- /** If filter() returned true, then restore() will be called to restore the
- canvas/paint to their previous states
- */
- virtual void restore(SkCanvas*, SkPaint*, Type) = 0;
-};
-
-#endif
diff --git a/include/core/SkDrawLooper.h b/include/core/SkDrawLooper.h
deleted file mode 100644
index 333fb41..0000000
--- a/include/core/SkDrawLooper.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkDrawLooper_DEFINED
-#define SkDrawLooper_DEFINED
-
-#include "SkFlattenable.h"
-
-////////////////// EXPERIMENTAL //////////////////////////
-
-class SkCanvas;
-class SkPaint;
-
-/** \class SkDrawLooper
- Subclasses of SkDrawLooper can be attached to a SkPaint. Where they are,
- and something is drawn to a canvas with that paint, the looper subclass will
- be called, allowing it to modify the canvas and/or paint for that draw call.
- More than that, via the next() method, the looper can modify the draw to be
- invoked multiple times (hence the name loop-er), allow it to perform effects
- like shadows or frame/fills, that require more than one pass.
-*/
-class SkDrawLooper : public SkFlattenable {
-public:
- /** Called right before something is being drawn to the specified canvas
- with the specified paint. Subclass that want to modify either parameter
- can do so now.
- */
- virtual void init(SkCanvas*, SkPaint*) {}
- /** Called in a loop (after init()). Each time true is returned, the object
- is drawn (possibly with a modified canvas and/or paint). When false is
- finally returned, drawing for the object stops.
- */
- virtual bool next() { return false; }
- /** Called after the looper has finally returned false from next(), allowing
- the looper to restore the canvas/paint to their original states.
- is this required, since the subclass knows when it is done???
- should we pass the canvas/paint here, and/or to the next call
- so that subclasses don't need to retain pointers to them during the
- loop?
- */
- virtual void restore() {}
-
-protected:
- SkDrawLooper() {}
- SkDrawLooper(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
-
-private:
- typedef SkFlattenable INHERITED;
-};
-
-#endif
diff --git a/include/core/SkEndian.h b/include/core/SkEndian.h
deleted file mode 100644
index f08a9a9..0000000
--- a/include/core/SkEndian.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkEndian_DEFINED
-#define SkEndian_DEFINED
-
-#include "SkTypes.h"
-
-/** \file SkEndian.h
-
- Macros and helper functions for handling 16 and 32 bit values in
- big and little endian formats.
-*/
-
-#if defined(SK_CPU_LENDIAN) && defined(SK_CPU_BENDIAN)
- #error "can't have both LENDIAN and BENDIAN defined"
-#endif
-
-#if !defined(SK_CPU_LENDIAN) && !defined(SK_CPU_BENDIAN)
- #error "need either LENDIAN or BENDIAN defined"
-#endif
-
-/** Swap the two bytes in the low 16bits of the parameters.
- e.g. 0x1234 -> 0x3412
-*/
-inline uint16_t SkEndianSwap16(U16CPU value)
-{
- SkASSERT(value == (uint16_t)value);
- return (uint16_t)((value >> 8) | (value << 8));
-}
-
-/** Vector version of SkEndianSwap16(), which swaps the
- low two bytes of each value in the array.
-*/
-inline void SkEndianSwap16s(uint16_t array[], int count)
-{
- SkASSERT(count == 0 || array != NULL);
-
- while (--count >= 0)
- {
- *array = SkEndianSwap16(*array);
- array += 1;
- }
-}
-
-/** Reverse all 4 bytes in a 32bit value.
- e.g. 0x12345678 -> 0x78563412
-*/
-inline uint32_t SkEndianSwap32(uint32_t value)
-{
- return ((value & 0xFF) << 24) |
- ((value & 0xFF00) << 8) |
- ((value & 0xFF0000) >> 8) |
- (value >> 24);
-}
-
-/** Vector version of SkEndianSwap16(), which swaps the
- bytes of each value in the array.
-*/
-inline void SkEndianSwap32s(uint32_t array[], int count)
-{
- SkASSERT(count == 0 || array != NULL);
-
- while (--count >= 0)
- {
- *array = SkEndianSwap32(*array);
- array += 1;
- }
-}
-
-#ifdef SK_CPU_LENDIAN
- #define SkEndian_SwapBE16(n) SkEndianSwap16(n)
- #define SkEndian_SwapBE32(n) SkEndianSwap32(n)
- #define SkEndian_SwapLE16(n) (n)
- #define SkEndian_SwapLE32(n) (n)
-#else // SK_CPU_BENDIAN
- #define SkEndian_SwapBE16(n) (n)
- #define SkEndian_SwapBE32(n) (n)
- #define SkEndian_SwapLE16(n) SkEndianSwap16(n)
- #define SkEndian_SwapLE32(n) SkEndianSwap32(n)
-#endif
-
-
-#endif
-
diff --git a/include/core/SkFDot6.h b/include/core/SkFDot6.h
deleted file mode 100644
index a4b9cf7..0000000
--- a/include/core/SkFDot6.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkFDot6_DEFINED
-#define SkFDot6_DEFINED
-
-#include "SkMath.h"
-
-typedef int32_t SkFDot6;
-
-#define SK_FDot61 (64)
-#define SK_FDot6Half (32)
-
-#ifdef SK_DEBUG
- inline SkFDot6 SkIntToFDot6(S16CPU x)
- {
- SkASSERT(SkToS16(x) == x);
- return x << 6;
- }
-#else
- #define SkIntToFDot6(x) ((x) << 6)
-#endif
-
-#define SkFDot6Floor(x) ((x) >> 6)
-#define SkFDot6Ceil(x) (((x) + 63) >> 6)
-#define SkFDot6Round(x) (((x) + 32) >> 6)
-
-#define SkFixedToFDot6(x) ((x) >> 10)
-
-inline SkFixed SkFDot6ToFixed(SkFDot6 x)
-{
- SkASSERT((x << 10 >> 10) == x);
-
- return x << 10;
-}
-
-#ifdef SK_SCALAR_IS_FLOAT
- #define SkScalarToFDot6(x) (SkFDot6)((x) * 64)
-#else
- #define SkScalarToFDot6(x) ((x) >> 10)
-#endif
-
-inline SkFixed SkFDot6Div(SkFDot6 a, SkFDot6 b)
-{
- SkASSERT(b != 0);
-
- if (a == (int16_t)a)
- return (a << 16) / b;
- else
- return SkFixedDiv(a, b);
-}
-
-#endif
-
diff --git a/include/core/SkFixed.h b/include/core/SkFixed.h
deleted file mode 100644
index be4bf99..0000000
--- a/include/core/SkFixed.h
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkFixed_DEFINED
-#define SkFixed_DEFINED
-
-#include "SkTypes.h"
-
-/** \file SkFixed.h
-
- Types and macros for 16.16 fixed point
-*/
-
-/** 32 bit signed integer used to represent fractions values with 16 bits to the right of the decimal point
-*/
-typedef int32_t SkFixed;
-#define SK_Fixed1 (1 << 16)
-#define SK_FixedHalf (1 << 15)
-#define SK_FixedMax (0x7FFFFFFF)
-#define SK_FixedMin (0x1)
-#define SK_FixedNaN ((int) 0x80000000)
-#define SK_FixedPI (0x3243F)
-#define SK_FixedSqrt2 (92682)
-#define SK_FixedTanPIOver8 (0x6A0A)
-#define SK_FixedRoot2Over2 (0xB505)
-
-#ifdef SK_CAN_USE_FLOAT
- #define SkFixedToFloat(x) ((x) * 1.5258789e-5f)
- #define SkFloatToFixed(x) ((SkFixed)((x) * SK_Fixed1))
-
- #define SkFixedToDouble(x) ((x) * 1.5258789e-5)
- #define SkDoubleToFixed(x) ((SkFixed)((x) * SK_Fixed1))
-#endif
-
-/** 32 bit signed integer used to represent fractions values with 30 bits to the right of the decimal point
-*/
-typedef int32_t SkFract;
-#define SK_Fract1 (1 << 30)
-#define Sk_FracHalf (1 << 29)
-#define SK_FractPIOver180 (0x11DF46A)
-
-#ifdef SK_CAN_USE_FLOAT
- #define SkFractToFloat(x) ((float)(x) * 0.00000000093132257f)
- #define SkFloatToFract(x) ((SkFract)((x) * SK_Fract1))
-#endif
-
-/** Converts an integer to a SkFixed, asserting that the result does not overflow
- a 32 bit signed integer
-*/
-#ifdef SK_DEBUG
- inline SkFixed SkIntToFixed(int n)
- {
- SkASSERT(n >= -32768 && n <= 32767);
- return n << 16;
- }
-#else
- // force the cast to SkFixed to ensure that the answer is signed (like the debug version)
- #define SkIntToFixed(n) (SkFixed)((n) << 16)
-#endif
-
-/** Converts a SkFixed to a SkFract, asserting that the result does not overflow
- a 32 bit signed integer
-*/
-#ifdef SK_DEBUG
- inline SkFract SkFixedToFract(SkFixed x)
- {
- SkASSERT(x >= (-2 << 16) && x <= (2 << 16) - 1);
- return x << 14;
- }
-#else
- #define SkFixedToFract(x) ((x) << 14)
-#endif
-
-/** Returns the signed fraction of a SkFixed
-*/
-inline SkFixed SkFixedFraction(SkFixed x)
-{
- SkFixed mask = x >> 31 << 16;
- return (x & 0xFFFF) | mask;
-}
-
-/** Converts a SkFract to a SkFixed
-*/
-#define SkFractToFixed(x) ((x) >> 14)
-/** Round a SkFixed to an integer
-*/
-#define SkFixedRound(x) (((x) + SK_FixedHalf) >> 16)
-#define SkFixedCeil(x) (((x) + SK_Fixed1 - 1) >> 16)
-#define SkFixedFloor(x) ((x) >> 16)
-#define SkFixedAbs(x) SkAbs32(x)
-#define SkFixedAve(a, b) (((a) + (b)) >> 1)
-
-SkFixed SkFixedMul_portable(SkFixed, SkFixed);
-SkFract SkFractMul_portable(SkFract, SkFract);
-inline SkFixed SkFixedSquare_portable(SkFixed value)
-{
- uint32_t a = SkAbs32(value);
- uint32_t ah = a >> 16;
- uint32_t al = a & 0xFFFF;
- return ah * a + al * ah + (al * al >> 16);
-}
-
-#define SkFixedDiv(numer, denom) SkDivBits(numer, denom, 16)
-SkFixed SkFixedDivInt(int32_t numer, int32_t denom);
-SkFixed SkFixedMod(SkFixed numer, SkFixed denom);
-#define SkFixedInvert(n) SkDivBits(SK_Fixed1, n, 16)
-SkFixed SkFixedFastInvert(SkFixed n);
-#define SkFixedSqrt(n) SkSqrtBits(n, 23)
-SkFixed SkFixedMean(SkFixed a, SkFixed b); //*< returns sqrt(x*y)
-int SkFixedMulCommon(SkFixed, int , int bias); // internal used by SkFixedMulFloor, SkFixedMulCeil, SkFixedMulRound
-
-#define SkFractDiv(numer, denom) SkDivBits(numer, denom, 30)
-#define SkFractSqrt(n) SkSqrtBits(n, 30)
-
-SkFixed SkFixedSinCos(SkFixed radians, SkFixed* cosValueOrNull);
-#define SkFixedSin(radians) SkFixedSinCos(radians, NULL)
-inline SkFixed SkFixedCos(SkFixed radians)
-{
- SkFixed cosValue;
- (void)SkFixedSinCos(radians, &cosValue);
- return cosValue;
-}
-SkFixed SkFixedTan(SkFixed radians);
-SkFixed SkFixedASin(SkFixed);
-SkFixed SkFixedACos(SkFixed);
-SkFixed SkFixedATan2(SkFixed y, SkFixed x);
-SkFixed SkFixedExp(SkFixed);
-SkFixed SkFixedLog(SkFixed);
-
-#define SK_FixedNearlyZero (SK_Fixed1 >> 12)
-
-inline bool SkFixedNearlyZero(SkFixed x, SkFixed tolerance = SK_FixedNearlyZero)
-{
- SkASSERT(tolerance > 0);
- return SkAbs32(x) < tolerance;
-}
-
-//////////////////////////////////////////////////////////////////////////////////////////////////////
-// Now look for ASM overrides for our portable versions (should consider putting this in its own file)
-
-#ifdef SkLONGLONG
- inline SkFixed SkFixedMul_longlong(SkFixed a, SkFixed b)
- {
- return (SkFixed)((SkLONGLONG)a * b >> 16);
- }
- inline SkFract SkFractMul_longlong(SkFract a, SkFract b)
- {
- return (SkFixed)((SkLONGLONG)a * b >> 30);
- }
- inline SkFixed SkFixedSquare_longlong(SkFixed value)
- {
- return (SkFixed)((SkLONGLONG)value * value >> 16);
- }
- #define SkFixedMul(a,b) SkFixedMul_longlong(a,b)
- #define SkFractMul(a,b) SkFractMul_longlong(a,b)
- #define SkFixedSquare(a) SkFixedSquare_longlong(a)
-#endif
-
-#if defined(__arm__) && !defined(__thumb__)
- /* This guy does not handle NaN or other obscurities, but is faster than
- than (int)(x*65536) when we only have software floats
- */
- inline SkFixed SkFloatToFixed_arm(float x)
- {
- register int32_t y, z;
- asm("movs %1, %3, lsl #1 \n"
- "mov %2, #0x8E \n"
- "sub %1, %2, %1, lsr #24 \n"
- "mov %2, %3, lsl #8 \n"
- "orr %2, %2, #0x80000000 \n"
- "mov %1, %2, lsr %1 \n"
- "rsbcs %1, %1, #0 \n"
- : "=r"(x), "=&r"(y), "=&r"(z)
- : "r"(x)
- : "cc"
- );
- return y;
- }
- inline SkFixed SkFixedMul_arm(SkFixed x, SkFixed y)
- {
- register int32_t t;
- asm("smull %0, %2, %1, %3 \n"
- "mov %0, %0, lsr #16 \n"
- "orr %0, %0, %2, lsl #16 \n"
- : "=r"(x), "=&r"(y), "=r"(t)
- : "r"(x), "1"(y)
- :
- );
- return x;
- }
- inline SkFixed SkFixedMulAdd_arm(SkFixed x, SkFixed y, SkFixed a)
- {
- register int32_t t;
- asm("smull %0, %3, %1, %4 \n"
- "add %0, %2, %0, lsr #16 \n"
- "add %0, %0, %3, lsl #16 \n"
- : "=r"(x), "=&r"(y), "=&r"(a), "=r"(t)
- : "%r"(x), "1"(y), "2"(a)
- :
- );
- return x;
- }
- inline SkFixed SkFractMul_arm(SkFixed x, SkFixed y)
- {
- register int32_t t;
- asm("smull %0, %2, %1, %3 \n"
- "mov %0, %0, lsr #30 \n"
- "orr %0, %0, %2, lsl #2 \n"
- : "=r"(x), "=&r"(y), "=r"(t)
- : "r"(x), "1"(y)
- :
- );
- return x;
- }
- #undef SkFixedMul
- #undef SkFractMul
- #define SkFixedMul(x, y) SkFixedMul_arm(x, y)
- #define SkFractMul(x, y) SkFractMul_arm(x, y)
- #define SkFixedMulAdd(x, y, a) SkFixedMulAdd_arm(x, y, a)
-
- #undef SkFloatToFixed
- #define SkFloatToFixed(x) SkFloatToFixed_arm(x)
-#endif
-
-/////////////////////// Now define our macros to the portable versions if they weren't overridden
-
-#ifndef SkFixedSquare
- #define SkFixedSquare(x) SkFixedSquare_portable(x)
-#endif
-#ifndef SkFixedMul
- #define SkFixedMul(x, y) SkFixedMul_portable(x, y)
-#endif
-#ifndef SkFractMul
- #define SkFractMul(x, y) SkFractMul_portable(x, y)
-#endif
-#ifndef SkFixedMulAdd
- #define SkFixedMulAdd(x, y, a) (SkFixedMul(x, y) + (a))
-#endif
-
-#endif
diff --git a/include/core/SkFlattenable.h b/include/core/SkFlattenable.h
deleted file mode 100644
index 6958462..0000000
--- a/include/core/SkFlattenable.h
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkFlattenable_DEFINED
-#define SkFlattenable_DEFINED
-
-#include "SkRefCnt.h"
-#include "SkBitmap.h"
-#include "SkReader32.h"
-#include "SkTDArray.h"
-#include "SkWriter32.h"
-
-class SkFlattenableReadBuffer;
-class SkFlattenableWriteBuffer;
-class SkString;
-
-/** \class SkFlattenable
-
- SkFlattenable is the base class for objects that need to be flattened
- into a data stream for either transport or as part of the key to the
- font cache.
- */
-class SkFlattenable : public SkRefCnt {
-public:
- typedef SkFlattenable* (*Factory)(SkFlattenableReadBuffer&);
-
- SkFlattenable() {}
-
- /** Implement this to return a factory function pointer that can be called
- to recreate your class given a buffer (previously written to by your
- override of flatten().
- */
- virtual Factory getFactory() = 0;
- /** Override this to write data specific to your subclass into the buffer,
- being sure to call your super-class' version first. This data will later
- be passed to your Factory function, returned by getFactory().
- */
- virtual void flatten(SkFlattenableWriteBuffer&);
-
- /** Set the string to describe the sublass and return true. If this is not
- overridden, ignore the string param and return false.
- */
- virtual bool toDumpString(SkString*) const;
-
- static Factory NameToFactory(const char name[]);
- static const char* FactoryToName(Factory);
- static void Register(const char name[], Factory);
-
- class Registrar {
- public:
- Registrar(const char name[], Factory factory) {
- SkFlattenable::Register(name, factory);
- }
- };
-
-protected:
- SkFlattenable(SkFlattenableReadBuffer&) {}
-};
-
-///////////////////////////////////////////////////////////////////////////////
-///////////////////////////////////////////////////////////////////////////////
-
-class SkTypeface;
-
-class SkFlattenableReadBuffer : public SkReader32 {
-public:
- SkFlattenableReadBuffer();
- explicit SkFlattenableReadBuffer(const void* data);
- SkFlattenableReadBuffer(const void* data, size_t size);
-
- void setRefCntArray(SkRefCnt* array[], int count) {
- fRCArray = array;
- fRCCount = count;
- }
-
- void setTypefaceArray(SkTypeface* array[], int count) {
- fTFArray = array;
- fTFCount = count;
- }
-
- void setFactoryPlayback(SkFlattenable::Factory array[], int count) {
- fFactoryArray = array;
- fFactoryCount = count;
- }
-
- SkTypeface* readTypeface();
- SkRefCnt* readRefCnt();
- void* readFunctionPtr();
- SkFlattenable* readFlattenable();
-
-private:
- SkRefCnt** fRCArray;
- int fRCCount;
-
- SkTypeface** fTFArray;
- int fTFCount;
-
- SkFlattenable::Factory* fFactoryArray;
- int fFactoryCount;
-
- typedef SkReader32 INHERITED;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-#include "SkPtrRecorder.h"
-
-class SkRefCntRecorder : public SkPtrRecorder {
-public:
- virtual ~SkRefCntRecorder();
-
- /** Add a refcnt object to the set and ref it if not already present,
- or if it is already present, do nothing. Either way, returns 0 if obj
- is null, or a base-1 index if obj is not null.
- */
- uint32_t record(SkRefCnt* ref) {
- return this->recordPtr(ref);
- }
-
- // This does not change the owner counts on the objects
- void get(SkRefCnt* array[]) const {
- this->getPtrs((void**)array);
- }
-
-protected:
- // overrides
- virtual void incPtr(void*);
- virtual void decPtr(void*);
-
-private:
- typedef SkPtrRecorder INHERITED;
-};
-
-class SkFactoryRecorder : public SkPtrRecorder {
-public:
- /** Add a factory to the set. If it is null return 0, otherwise return a
- base-1 index for the factory.
- */
- uint32_t record(SkFlattenable::Factory fact) {
- return this->recordPtr((void*)fact);
- }
-
- void get(SkFlattenable::Factory array[]) const {
- this->getPtrs((void**)array);
- }
-
-private:
- typedef SkPtrRecorder INHERITED;
-};
-
-class SkFlattenableWriteBuffer : public SkWriter32 {
-public:
- SkFlattenableWriteBuffer(size_t minSize);
- virtual ~SkFlattenableWriteBuffer();
-
- void writeTypeface(SkTypeface*);
- void writeRefCnt(SkRefCnt*);
- void writeFunctionPtr(void*);
- void writeFlattenable(SkFlattenable* flattenable);
-
- SkRefCntRecorder* getTypefaceRecorder() const { return fTFRecorder; }
- SkRefCntRecorder* setTypefaceRecorder(SkRefCntRecorder*);
-
- SkRefCntRecorder* getRefCntRecorder() const { return fRCRecorder; }
- SkRefCntRecorder* setRefCntRecorder(SkRefCntRecorder*);
-
- SkFactoryRecorder* getFactoryRecorder() const { return fFactoryRecorder; }
- SkFactoryRecorder* setFactoryRecorder(SkFactoryRecorder*);
-
- enum Flags {
- kCrossProcess_Flag = 0x01
- };
- Flags getFlags() const { return fFlags; }
- void setFlags(Flags flags) { fFlags = flags; }
-
- bool isCrossProcess() const { return (fFlags & kCrossProcess_Flag) != 0; }
-
- bool persistBitmapPixels() const {
- return (fFlags & kCrossProcess_Flag) != 0;
- }
-
- bool persistTypeface() const { return (fFlags & kCrossProcess_Flag) != 0; }
-
-private:
- Flags fFlags;
- SkRefCntRecorder* fTFRecorder;
- SkRefCntRecorder* fRCRecorder;
- SkFactoryRecorder* fFactoryRecorder;
-
- typedef SkWriter32 INHERITED;
-};
-
-#endif
-
diff --git a/include/core/SkFloatBits.h b/include/core/SkFloatBits.h
deleted file mode 100644
index 1628f6e..0000000
--- a/include/core/SkFloatBits.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkFloatBits_DEFINED
-#define SkFloatBits_DEFINED
-
-#include "SkTypes.h"
-
-/** Convert a sign-bit int (i.e. float interpreted as int) into a 2s compliement
- int. This also converts -0 (0x80000000) to 0. Doing this to a float allows
- it to be compared using normal C operators (<, <=, etc.)
-*/
-static inline int32_t SkSignBitTo2sCompliment(int32_t x) {
- if (x < 0) {
- x &= 0x7FFFFFFF;
- x = -x;
- }
- return x;
-}
-
-/** Convert a 2s compliment int to a sign-bit (i.e. int interpreted as float).
- This undoes the result of SkSignBitTo2sCompliment().
- */
-static inline int32_t Sk2sComplimentToSignBit(int32_t x) {
- int sign = x >> 31;
- // make x positive
- x = (x ^ sign) - sign;
- // set the sign bit as needed
- x |= sign << 31;
- return x;
-}
-
-/** Given the bit representation of a float, return its value cast to an int.
- If the value is out of range, or NaN, return return +/- SK_MaxS32
-*/
-int32_t SkFloatBits_toIntCast(int32_t floatBits);
-
-/** Given the bit representation of a float, return its floor as an int.
- If the value is out of range, or NaN, return return +/- SK_MaxS32
- */
-int32_t SkFloatBits_toIntFloor(int32_t floatBits);
-
-/** Given the bit representation of a float, return it rounded to an int.
- If the value is out of range, or NaN, return return +/- SK_MaxS32
- */
-int32_t SkFloatBits_toIntRound(int32_t floatBits);
-
-/** Given the bit representation of a float, return its ceiling as an int.
- If the value is out of range, or NaN, return return +/- SK_MaxS32
- */
-int32_t SkFloatBits_toIntCeil(int32_t floatBits);
-
-
-#ifdef SK_CAN_USE_FLOAT
-
-union SkFloatIntUnion {
- float fFloat;
- int32_t fSignBitInt;
-};
-
-// Helper to see a float as its bit pattern (w/o aliasing warnings)
-static inline int32_t SkFloat2Bits(float x) {
- SkFloatIntUnion data;
- data.fFloat = x;
- return data.fSignBitInt;
-}
-
-// Helper to see a bit pattern as a float (w/o aliasing warnings)
-static inline float SkBits2Float(int32_t floatAsBits) {
- SkFloatIntUnion data;
- data.fSignBitInt = floatAsBits;
- return data.fFloat;
-}
-
-/** Return the float as a 2s compliment int. Just to be used to compare floats
- to each other or against positive float-bit-constants (like 0). This does
- not return the int equivalent of the float, just something cheaper for
- compares-only.
- */
-static inline int32_t SkFloatAs2sCompliment(float x) {
- return SkSignBitTo2sCompliment(SkFloat2Bits(x));
-}
-
-/** Return the 2s compliment int as a float. This undos the result of
- SkFloatAs2sCompliment
- */
-static inline float Sk2sComplimentAsFloat(int32_t x) {
- return SkBits2Float(Sk2sComplimentToSignBit(x));
-}
-
-/** Return x cast to a float (i.e. (float)x)
-*/
-float SkIntToFloatCast(int x);
-float SkIntToFloatCast_NoOverflowCheck(int x);
-
-/** Return the float cast to an int.
- If the value is out of range, or NaN, return +/- SK_MaxS32
-*/
-static inline int32_t SkFloatToIntCast(float x) {
- return SkFloatBits_toIntCast(SkFloat2Bits(x));
-}
-
-/** Return the floor of the float as an int.
- If the value is out of range, or NaN, return +/- SK_MaxS32
-*/
-static inline int32_t SkFloatToIntFloor(float x) {
- return SkFloatBits_toIntFloor(SkFloat2Bits(x));
-}
-
-/** Return the float rounded to an int.
- If the value is out of range, or NaN, return +/- SK_MaxS32
-*/
-static inline int32_t SkFloatToIntRound(float x) {
- return SkFloatBits_toIntRound(SkFloat2Bits(x));
-}
-
-/** Return the ceiling of the float as an int.
- If the value is out of range, or NaN, return +/- SK_MaxS32
-*/
-static inline int32_t SkFloatToIntCeil(float x) {
- return SkFloatBits_toIntCeil(SkFloat2Bits(x));
-}
-
-#endif
-
-// Scalar wrappers for float-bit routines
-
-#ifdef SK_SCALAR_IS_FLOAT
- #define SkScalarAs2sCompliment(x) SkFloatAs2sCompliment(x)
- #define Sk2sComplimentAsScalar(x) Sk2sComplimentAsFloat(x)
-#else
- #define SkScalarAs2sCompliment(x) (x)
- #define Sk2sComplimentAsScalar(x) (x)
-#endif
-
-#endif
-
diff --git a/include/core/SkFloatingPoint.h b/include/core/SkFloatingPoint.h
deleted file mode 100644
index 68bf6ef..0000000
--- a/include/core/SkFloatingPoint.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkFloatingPoint_DEFINED
-#define SkFloatingPoint_DEFINED
-
-#include "SkTypes.h"
-
-#ifdef SK_CAN_USE_FLOAT
-
-#include <math.h>
-#include <float.h>
-#include "SkFloatBits.h"
-
-#ifdef SK_BUILD_FOR_WINCE
- #define sk_float_sqrt(x) (float)::sqrt(x)
- #define sk_float_sin(x) (float)::sin(x)
- #define sk_float_cos(x) (float)::cos(x)
- #define sk_float_tan(x) (float)::tan(x)
- #define sk_float_acos(x) (float)::acos(x)
- #define sk_float_asin(x) (float)::asin(x)
- #define sk_float_atan2(y,x) (float)::atan2(y,x)
- #define sk_float_abs(x) (float)::fabs(x)
- #define sk_float_mod(x,y) (float)::fmod(x,y)
- #define sk_float_exp(x) (float)::exp(x)
- #define sk_float_log(x) (float)::log(x)
- #define sk_float_floor(x) (float)::floor(x)
- #define sk_float_ceil(x) (float)::ceil(x)
-#else
- #define sk_float_sqrt(x) sqrtf(x)
- #define sk_float_sin(x) sinf(x)
- #define sk_float_cos(x) cosf(x)
- #define sk_float_tan(x) tanf(x)
- #define sk_float_floor(x) floorf(x)
- #define sk_float_ceil(x) ceilf(x)
-#ifdef SK_BUILD_FOR_MAC
- #define sk_float_acos(x) static_cast<float>(acos(x))
- #define sk_float_asin(x) static_cast<float>(asin(x))
-#else
- #define sk_float_acos(x) acosf(x)
- #define sk_float_asin(x) asinf(x)
-#endif
- #define sk_float_atan2(y,x) atan2f(y,x)
- #define sk_float_abs(x) fabsf(x)
- #define sk_float_mod(x,y) fmodf(x,y)
- #define sk_float_exp(x) expf(x)
- #define sk_float_log(x) logf(x)
- #define sk_float_isNaN(x) _isnan(x)
-#endif
-
-#ifdef SK_USE_FLOATBITS
- #define sk_float_floor2int(x) SkFloatToIntFloor(x)
- #define sk_float_round2int(x) SkFloatToIntRound(x)
- #define sk_float_ceil2int(x) SkFloatToIntCeil(x)
-#else
- #define sk_float_floor2int(x) (int)sk_float_floor(x)
- #define sk_float_round2int(x) (int)sk_float_floor((x) + 0.5f)
- #define sk_float_ceil2int(x) (int)sk_float_ceil(x)
-#endif
-
-#endif
-#endif
diff --git a/include/core/SkFontHost.h b/include/core/SkFontHost.h
deleted file mode 100644
index 9700bf9..0000000
--- a/include/core/SkFontHost.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkFontHost_DEFINED
-#define SkFontHost_DEFINED
-
-#include "SkScalerContext.h"
-#include "SkTypeface.h"
-
-class SkDescriptor;
-class SkStream;
-class SkWStream;
-
-/** \class SkFontHost
-
- This class is ported to each environment. It is responsible for bridging the gap
- between SkTypeface and the resulting platform-specific instance of SkScalerContext.
-*/
-class SkFontHost {
-public:
- /** Return the closest matching typeface given either an existing family
- (specified by a typeface in that family) or by a familyName, and a
- requested style.
- 1) If familyFace is null, use famillyName.
- 2) If famillyName is null, use familyFace.
- 3) If both are null, return the default font that best matches style
-
- NOTE: this does not return a new typeface, nor does it affect the
- owner count of an existing one, so the caller is free to ignore the
- return result, or just compare it against null.
- */
- static SkTypeface* FindTypeface(const SkTypeface* familyFace,
- const char famillyName[],
- SkTypeface::Style style);
-
- /** Return the typeface associated with the uniqueID, or null if that ID
- does not match any faces.
-
- NOTE: this does not return a new typeface, nor does it affect the
- owner count of an existing one, so the caller is free to ignore the
- return result, or just compare it against null.
- */
- static SkTypeface* ResolveTypeface(uint32_t uniqueID);
-
- /** Return a new stream to read the font data, or null if the uniqueID does
- not match an existing typeface. The caller must call CloseStream() when
- it is finished reading the stream.
- */
- static SkStream* OpenStream(uint32_t uniqueID);
-
- /** Call this when finished reading from the stream returned by OpenStream.
- The caller should NOT try to delete the stream.
- */
- static void CloseStream(uint32_t uniqueID, SkStream*);
-
- /** Return a new typeface given the data buffer (owned by the caller).
- If the data does not represent a valid font, return null. The caller is
- responsible for unref-ing the returned typeface (if it is not null).
- */
- static SkTypeface* CreateTypeface(SkStream*);
-
- /** Return a new typeface from the specified file path. If the file does not
- represent a valid font, this returns null. If a typeface is returned,
- the caller is responsible for calling unref() when it is no longer used.
- */
- static SkTypeface* CreateTypefaceFromFile(const char path[]);
-
- ///////////////////////////////////////////////////////////////////////////
-
- /** Write a unique identifier to the stream, so that the same typeface can
- be retrieved with Deserialize().
- */
- static void Serialize(const SkTypeface*, SkWStream*);
-
- /** Given a stream created by Serialize(), return the corresponding typeface
- or null if no match is found.
-
- NOTE: this does not return a new typeface, nor does it affect the
- owner count of an existing one, so the caller is free to ignore the
- return result, or just compare it against null.
- */
- static SkTypeface* Deserialize(SkStream*);
-
- ///////////////////////////////////////////////////////////////////////////
-
- /** Return a subclass of SkScalarContext
- */
- static SkScalerContext* CreateScalerContext(const SkDescriptor* desc);
-
- /** Return a scalercontext using the "fallback" font. If there is no designated
- fallback, return null.
- */
- static SkScalerContext* CreateFallbackScalerContext(const SkScalerContext::Rec&);
-
- /** Return the number of bytes (approx) that should be purged from the font
- cache. The input parameter is the cache's estimate of how much as been
- allocated by the cache so far.
- To purge (basically) everything, return the input parameter.
- To purge nothing, return 0
- */
- static size_t ShouldPurgeFontCache(size_t sizeAllocatedSoFar);
-
- /** Return SkScalerContext gamma flag, or 0, based on the paint that will be
- used to draw something with antialiasing.
- */
- static int ComputeGammaFlag(const SkPaint& paint);
-
- /** Return NULL or a pointer to 256 bytes for the black (table[0]) and
- white (table[1]) gamma tables.
- */
- static void GetGammaTables(const uint8_t* tables[2]);
-};
-
-#endif
-
diff --git a/include/core/SkGeometry.h b/include/core/SkGeometry.h
deleted file mode 100644
index 571159f..0000000
--- a/include/core/SkGeometry.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/* libs/graphics/sgl/SkGeometry.h
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#ifndef SkGeometry_DEFINED
-#define SkGeometry_DEFINED
-
-#include "SkMatrix.h"
-
-/** Given a quadratic equation Ax^2 + Bx + C = 0, return 0, 1, 2 roots for the
- equation.
-*/
-int SkFindUnitQuadRoots(SkScalar A, SkScalar B, SkScalar C, SkScalar roots[2]);
-
-///////////////////////////////////////////////////////////////////////////////
-
-/** Set pt to the point on the src quadratic specified by t. t must be
- 0 <= t <= 1.0
-*/
-void SkEvalQuadAt(const SkPoint src[3], SkScalar t, SkPoint* pt, SkVector* tangent = NULL);
-void SkEvalQuadAtHalf(const SkPoint src[3], SkPoint* pt, SkVector* tangent = NULL);
-
-/** Given a src quadratic bezier, chop it at the specified t value,
- where 0 < t < 1, and return the two new quadratics in dst:
- dst[0..2] and dst[2..4]
-*/
-void SkChopQuadAt(const SkPoint src[3], SkPoint dst[5], SkScalar t);
-
-/** Given a src quadratic bezier, chop it at the specified t == 1/2,
- The new quads are returned in dst[0..2] and dst[2..4]
-*/
-void SkChopQuadAtHalf(const SkPoint src[3], SkPoint dst[5]);
-
-/** Given the 3 coefficients for a quadratic bezier (either X or Y values), look
- for extrema, and return the number of t-values that are found that represent
- these extrema. If the quadratic has no extrema betwee (0..1) exclusive, the
- function returns 0.
- Returned count tValues[]
- 0 ignored
- 1 0 < tValues[0] < 1
-*/
-int SkFindQuadExtrema(SkScalar a, SkScalar b, SkScalar c, SkScalar tValues[1]);
-
-/** Given 3 points on a quadratic bezier, chop it into 1, 2 beziers such that
- the resulting beziers are monotonic in Y. This is called by the scan converter.
- Depending on what is returned, dst[] is treated as follows
- 1 dst[0..2] is the original quad
- 2 dst[0..2] and dst[2..4] are the two new quads
- If dst == null, it is ignored and only the count is returned.
-*/
-int SkChopQuadAtYExtrema(const SkPoint src[3], SkPoint dst[5]);
-
-/** Given 3 points on a quadratic bezier, divide it into 2 quadratics
- if the point of maximum curvature exists on the quad segment.
- Depending on what is returned, dst[] is treated as follows
- 1 dst[0..2] is the original quad
- 2 dst[0..2] and dst[2..4] are the two new quads
- If dst == null, it is ignored and only the count is returned.
-*/
-int SkChopQuadAtMaxCurvature(const SkPoint src[3], SkPoint dst[5]);
-
-////////////////////////////////////////////////////////////////////////////////////////
-
-/** Convert from parametric from (pts) to polynomial coefficients
- coeff[0]*T^3 + coeff[1]*T^2 + coeff[2]*T + coeff[3]
-*/
-void SkGetCubicCoeff(const SkPoint pts[4], SkScalar cx[4], SkScalar cy[4]);
-
-/** Set pt to the point on the src cubic specified by t. t must be
- 0 <= t <= 1.0
-*/
-void SkEvalCubicAt(const SkPoint src[4], SkScalar t, SkPoint* locOrNull, SkVector* tangentOrNull, SkVector* curvatureOrNull);
-
-/** Given a src cubic bezier, chop it at the specified t value,
- where 0 < t < 1, and return the two new cubics in dst:
- dst[0..3] and dst[3..6]
-*/
-void SkChopCubicAt(const SkPoint src[4], SkPoint dst[7], SkScalar t);
-void SkChopCubicAt(const SkPoint src[4], SkPoint dst[7], const SkScalar t[], int t_count);
-
-/** Given a src cubic bezier, chop it at the specified t == 1/2,
- The new cubics are returned in dst[0..3] and dst[3..6]
-*/
-void SkChopCubicAtHalf(const SkPoint src[4], SkPoint dst[7]);
-
-/** Given the 4 coefficients for a cubic bezier (either X or Y values), look
- for extrema, and return the number of t-values that are found that represent
- these extrema. If the cubic has no extrema betwee (0..1) exclusive, the
- function returns 0.
- Returned count tValues[]
- 0 ignored
- 1 0 < tValues[0] < 1
- 2 0 < tValues[0] < tValues[1] < 1
-*/
-int SkFindCubicExtrema(SkScalar a, SkScalar b, SkScalar c, SkScalar d, SkScalar tValues[2]);
-
-/** Given 4 points on a cubic bezier, chop it into 1, 2, 3 beziers such that
- the resulting beziers are monotonic in Y. This is called by the scan converter.
- Depending on what is returned, dst[] is treated as follows
- 1 dst[0..3] is the original cubic
- 2 dst[0..3] and dst[3..6] are the two new cubics
- 3 dst[0..3], dst[3..6], dst[6..9] are the three new cubics
- If dst == null, it is ignored and only the count is returned.
-*/
-int SkChopCubicAtYExtrema(const SkPoint src[4], SkPoint dst[10]);
-
-/** Given a cubic bezier, return 0, 1, or 2 t-values that represent the
- inflection points.
-*/
-int SkFindCubicInflections(const SkPoint src[4], SkScalar tValues[2]);
-
-/** Return 1 for no chop, or 2 for having chopped the cubic at its
- inflection point.
-*/
-int SkChopCubicAtInflections(const SkPoint src[4], SkPoint dst[10]);
-
-int SkFindCubicMaxCurvature(const SkPoint src[4], SkScalar tValues[3]);
-int SkChopCubicAtMaxCurvature(const SkPoint src[4], SkPoint dst[13], SkScalar tValues[3] = NULL);
-
-///////////////////////////////////////////////////////////////////////////////////////////
-
-enum SkRotationDirection {
- kCW_SkRotationDirection,
- kCCW_SkRotationDirection
-};
-
-/** Maximum number of points needed in the quadPoints[] parameter for
- SkBuildQuadArc()
-*/
-#define kSkBuildQuadArcStorage 17
-
-/** Given 2 unit vectors and a rotation direction, fill out the specified
- array of points with quadratic segments. Return is the number of points
- written to, which will be { 0, 3, 5, 7, ... kSkBuildQuadArcStorage }
-
- matrix, if not null, is appled to the points before they are returned.
-*/
-int SkBuildQuadArc(const SkVector& unitStart, const SkVector& unitStop, SkRotationDirection,
- const SkMatrix* matrix, SkPoint quadPoints[]);
-
-//////////////////////////////////////////////////////////////////////////////
-
-#ifdef SK_DEBUG
- class SkGeometry {
- public:
- static void UnitTest();
- };
-#endif
-
-#endif
diff --git a/include/core/SkGlobals.h b/include/core/SkGlobals.h
deleted file mode 100644
index 8e28290..0000000
--- a/include/core/SkGlobals.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkGlobals_DEFINED
-#define SkGlobals_DEFINED
-
-#include "SkThread.h"
-
-class SkGlobals {
-public:
- class Rec {
- public:
- virtual ~Rec();
- private:
- Rec* fNext;
- uint32_t fTag;
-
- friend class SkGlobals;
- };
-
- /** Look for a matching Rec for the specified tag. If one is found, return it.
- If one is not found, if create_proc is null, return null, else
- call the proc, and if it returns a Rec, add it to the global list
- and return it.
-
- create_proc can NOT call back into SkGlobals::Find (it would deadlock)
- */
- static Rec* Find(uint32_t tag, Rec* (*create_proc)());
- /** Helper for Find, when you want to assert that the Rec is already in the list
- */
- static Rec* Get(uint32_t tag)
- {
- Rec* rec = SkGlobals::Find(tag, NULL);
- SkASSERT(rec);
- return rec;
- }
-
- // used by porting layer
- struct BootStrap {
- SkMutex fMutex;
- Rec* fHead;
- };
-
-private:
- static void Init();
- static void Term();
- friend class SkGraphics;
-
- // This last function is implemented in the porting layer
- static BootStrap& GetBootStrap();
-};
-
-#endif
-
diff --git a/include/core/SkGraphics.h b/include/core/SkGraphics.h
deleted file mode 100644
index cb06128..0000000
--- a/include/core/SkGraphics.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkGraphics_DEFINED
-#define SkGraphics_DEFINED
-
-#include "SkTypes.h"
-
-class SkGraphics {
-public:
- static void Init(bool runUnitTests);
- static void Term();
-
- /** Return the (approximate) number of bytes used by the font cache.
- */
- static size_t GetFontCacheUsed();
-
- /** Attempt to purge the font cache until <= the specified amount remains
- in the cache. Specifying 0 will attempt to purge the entire cache.
- Returns true if some amount was purged from the font cache.
- */
- static bool SetFontCacheUsed(size_t usageInBytes);
-
-private:
- /** This is automatically called by SkGraphics::Init(), and must be
- implemented by the host OS. This allows the host OS to register a callback
- with the C++ runtime to call SkGraphics::FreeCaches()
- */
- static void InstallNewHandler();
-};
-
-#endif
-
diff --git a/include/core/SkMMapStream.h b/include/core/SkMMapStream.h
deleted file mode 100644
index be063bd..0000000
--- a/include/core/SkMMapStream.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkMMapStream_DEFINED
-#define SkMMapStream_DEFINED
-
-#include "SkStream.h"
-
-class SkMMAPStream : public SkMemoryStream {
-public:
- SkMMAPStream(const char filename[]);
- virtual ~SkMMAPStream();
-
- virtual void setMemory(const void* data, size_t length, bool);
-private:
- int fFildes;
- void* fAddr;
- size_t fSize;
-
- void closeMMap();
-
- typedef SkMemoryStream INHERITED;
-};
-
-#endif
diff --git a/include/core/SkMallocPixelRef.h b/include/core/SkMallocPixelRef.h
deleted file mode 100644
index b6a013d..0000000
--- a/include/core/SkMallocPixelRef.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkMallocPixelRef_DEFINED
-#define SkMallocPixelRef_DEFINED
-
-#include "SkPixelRef.h"
-
-/** We explicitly use the same allocator for our pixels that SkMask does,
- so that we can freely assign memory allocated by one class to the other.
-*/
-class SkMallocPixelRef : public SkPixelRef {
-public:
- /** Allocate the specified buffer for pixels. The memory is freed when the
- last owner of this pixelref is gone.
- */
- SkMallocPixelRef(void* addr, size_t size, SkColorTable* ctable);
- virtual ~SkMallocPixelRef();
-
- //! Return the allocation size for the pixels
- size_t getSize() const { return fSize; }
-
- // overrides from SkPixelRef
- virtual void flatten(SkFlattenableWriteBuffer&) const;
- virtual Factory getFactory() const {
- return Create;
- }
- static SkPixelRef* Create(SkFlattenableReadBuffer& buffer) {
- return SkNEW_ARGS(SkMallocPixelRef, (buffer));
- }
-
-protected:
- // overrides from SkPixelRef
- virtual void* onLockPixels(SkColorTable**);
- virtual void onUnlockPixels();
-
- SkMallocPixelRef(SkFlattenableReadBuffer& buffer);
-
-private:
- void* fStorage;
- size_t fSize;
- SkColorTable* fCTable;
-
- typedef SkPixelRef INHERITED;
-};
-
-#endif
diff --git a/include/core/SkMask.h b/include/core/SkMask.h
deleted file mode 100644
index 764ead6..0000000
--- a/include/core/SkMask.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkMask_DEFINED
-#define SkMask_DEFINED
-
-#include "SkRect.h"
-
-/** \class SkMask
- SkMask is used to describe alpha bitmaps, either 1bit, 8bit, or
- the 3-channel 3D format. These are passed to SkMaskFilter objects.
-*/
-struct SkMask {
- enum Format {
- kBW_Format, //!< 1bit per pixel mask (e.g. monochrome)
- kA8_Format, //!< 8bits per pixel mask (e.g. antialiasing)
- k3D_Format, //!< 3 8bit per pixl planes: alpha, mul, add
- kLCD_Format //!< 3 bytes/pixel: r/g/b
- };
-
- enum {
- kCountMaskFormats = kLCD_Format + 1
- };
-
- uint8_t* fImage;
- SkIRect fBounds;
- uint16_t fRowBytes;
- uint8_t fFormat; // Format
-
- /** Return the byte size of the mask, assuming only 1 plane.
- Does not account for k3D_Format. For that, use computeFormatImageSize()
- */
- size_t computeImageSize() const;
- /** Return the byte size of the mask, taking into account
- any extra planes (e.g. k3D_Format).
- */
- size_t computeTotalImageSize() const;
-
- /** Returns the address of the byte that holds the specified bit.
- Asserts that the mask is kBW_Format, and that x,y are in range.
- x,y are in the same coordiate space as fBounds.
- */
- uint8_t* getAddr1(int x, int y) const
- {
- SkASSERT(fFormat == kBW_Format);
- SkASSERT(fBounds.contains(x, y));
- SkASSERT(fImage != NULL);
- return fImage + ((x - fBounds.fLeft) >> 3) + (y - fBounds.fTop) * fRowBytes;
- }
- /** Returns the address of the specified byte.
- Asserts that the mask is kA8_Format, and that x,y are in range.
- x,y are in the same coordiate space as fBounds.
- */
- uint8_t* getAddr(int x, int y) const
- {
- SkASSERT(fFormat != kBW_Format);
- SkASSERT(fBounds.contains(x, y));
- SkASSERT(fImage != NULL);
- return fImage + x - fBounds.fLeft + (y - fBounds.fTop) * fRowBytes;
- }
-
- static uint8_t* AllocImage(size_t bytes);
- static void FreeImage(void* image);
-
- enum CreateMode {
- kJustComputeBounds_CreateMode, //!< compute bounds and return
- kJustRenderImage_CreateMode, //!< render into preallocate mask
- kComputeBoundsAndRenderImage_CreateMode //!< compute bounds, alloc image and render into it
- };
-};
-
-#endif
-
diff --git a/include/core/SkMaskFilter.h b/include/core/SkMaskFilter.h
deleted file mode 100644
index 749a73a..0000000
--- a/include/core/SkMaskFilter.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkMaskFilter_DEFINED
-#define SkMaskFilter_DEFINED
-
-#include "SkFlattenable.h"
-#include "SkMask.h"
-
-class SkBlitter;
-class SkBounder;
-class SkMatrix;
-class SkPath;
-class SkRegion;
-
-/** \class SkMaskFilter
-
- SkMaskFilter is the base class for object that perform transformations on
- an alpha-channel mask before drawing it. A subclass of SkMaskFilter may be
- installed into a SkPaint. Once there, each time a primitive is drawn, it
- is first scan converted into a SkMask::kA8_Format mask, and handed to the
- filter, calling its filterMask() method. If this returns true, then the
- new mask is used to render into the device.
-
- Blur and emboss are implemented as subclasses of SkMaskFilter.
-*/
-class SkMaskFilter : public SkFlattenable {
-public:
- SkMaskFilter() {}
-
- /** Returns the format of the resulting mask that this subclass will return
- when its filterMask() method is called.
- */
- virtual SkMask::Format getFormat() = 0;
-
- /** Create a new mask by filter the src mask.
- If src.fImage == null, then do not allocate or create the dst image
- but do fill out the other fields in dstMask.
- If you do allocate a dst image, use SkMask::AllocImage()
- If this returns false, dst mask is ignored.
- @param dst the result of the filter. If src.fImage == null, dst should not allocate its image
- @param src the original image to be filtered.
- @param matrix the CTM
- @param margin if not null, return the buffer dx/dy need when calculating the effect. Used when
- drawing a clipped object to know how much larger to allocate the src before
- applying the filter. If returning false, ignore this parameter.
- @return true if the dst mask was correctly created.
- */
- virtual bool filterMask(SkMask* dst, const SkMask& src, const SkMatrix&, SkIPoint* margin);
-
- /** Helper method that, given a path in device space, will rasterize it into a kA8_Format mask
- and then call filterMask(). If this returns true, the specified blitter will be called
- to render that mask. Returns false if filterMask() returned false.
- This method is not exported to java.
- */
- bool filterPath(const SkPath& devPath, const SkMatrix& devMatrix,
- const SkRegion& devClip, SkBounder*, SkBlitter* blitter);
-
- virtual void flatten(SkFlattenableWriteBuffer& ) {}
-protected:
- // empty for now, but lets get our subclass to remember to init us for the future
- SkMaskFilter(SkFlattenableReadBuffer&) {}
-};
-
-/** \class SkAutoMaskImage
-
- Stack class used to manage the fImage buffer in a SkMask.
- When this object loses scope, the buffer is freed with SkMask::FreeImage().
-*/
-class SkAutoMaskImage {
-public:
- SkAutoMaskImage(SkMask* mask, bool alloc)
- {
- if (alloc)
- mask->fImage = SkMask::AllocImage(mask->computeImageSize());
- fImage = mask->fImage;
- }
- ~SkAutoMaskImage()
- {
- SkMask::FreeImage(fImage);
- }
-private:
- uint8_t* fImage;
-};
-
-#endif
-
diff --git a/include/core/SkMath.h b/include/core/SkMath.h
deleted file mode 100644
index 5c2b475..0000000
--- a/include/core/SkMath.h
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkMath_DEFINED
-#define SkMath_DEFINED
-
-#include "SkTypes.h"
-
-//! Returns the number of leading zero bits (0...32)
-int SkCLZ_portable(uint32_t);
-
-/** Computes the 64bit product of a * b, and then shifts the answer down by
- shift bits, returning the low 32bits. shift must be [0..63]
- e.g. to perform a fixedmul, call SkMulShift(a, b, 16)
-*/
-int32_t SkMulShift(int32_t a, int32_t b, unsigned shift);
-
-/** Computes numer1 * numer2 / denom in full 64 intermediate precision.
- It is an error for denom to be 0. There is no special handling if
- the result overflows 32bits.
-*/
-int32_t SkMulDiv(int32_t numer1, int32_t numer2, int32_t denom);
-
-/** Computes (numer1 << shift) / denom in full 64 intermediate precision.
- It is an error for denom to be 0. There is no special handling if
- the result overflows 32bits.
-*/
-int32_t SkDivBits(int32_t numer, int32_t denom, int shift);
-
-/** Return the integer square root of value, with a bias of bitBias
-*/
-int32_t SkSqrtBits(int32_t value, int bitBias);
-
-/** Return the integer square root of n, treated as a SkFixed (16.16)
-*/
-#define SkSqrt32(n) SkSqrtBits(n, 15)
-
-/** Return the integer cube root of value, with a bias of bitBias
- */
-int32_t SkCubeRootBits(int32_t value, int bitBias);
-
-/** Returns -1 if n < 0, else returns 0
-*/
-#define SkExtractSign(n) ((int32_t)(n) >> 31)
-
-/** If sign == -1, returns -n, else sign must be 0, and returns n.
- Typically used in conjunction with SkExtractSign().
-*/
-static inline int32_t SkApplySign(int32_t n, int32_t sign) {
- SkASSERT(sign == 0 || sign == -1);
- return (n ^ sign) - sign;
-}
-
-/** Returns (value < 0 ? 0 : value) efficiently (i.e. no compares or branches)
-*/
-static inline int SkClampPos(int value) {
- return value & ~(value >> 31);
-}
-
-/** Given an integer and a positive (max) integer, return the value
- pinned against 0 and max, inclusive.
- Note: only works as long as max - value doesn't wrap around
- @param value The value we want returned pinned between [0...max]
- @param max The positive max value
- @return 0 if value < 0, max if value > max, else value
-*/
-static inline int SkClampMax(int value, int max) {
- // ensure that max is positive
- SkASSERT(max >= 0);
- // ensure that if value is negative, max - value doesn't wrap around
- SkASSERT(value >= 0 || max - value > 0);
-
-#ifdef SK_CPU_HAS_CONDITIONAL_INSTR
- if (value < 0) {
- value = 0;
- }
- if (value > max) {
- value = max;
- }
- return value;
-#else
-
- int diff = max - value;
- // clear diff if diff is positive
- diff &= diff >> 31;
-
- // clear the result if value < 0
- return (value + diff) & ~(value >> 31);
-#endif
-}
-
-/** Given a positive value and a positive max, return the value
- pinned against max.
- Note: only works as long as max - value doesn't wrap around
- @return max if value >= max, else value
-*/
-static inline unsigned SkClampUMax(unsigned value, unsigned max) {
-#ifdef SK_CPU_HAS_CONDITIONAL_INSTR
- if (value > max) {
- value = max;
- }
- return value;
-#else
- int diff = max - value;
- // clear diff if diff is positive
- diff &= diff >> 31;
-
- return value + diff;
-#endif
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-#if defined(__arm__) && !defined(__thumb__)
- #define SkCLZ(x) __builtin_clz(x)
-#endif
-
-#ifndef SkCLZ
- #define SkCLZ(x) SkCLZ_portable(x)
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-
-/** Returns the smallest power-of-2 that is >= the specified value. If value
- is already a power of 2, then it is returned unchanged. It is undefined
- if value is <= 0.
-*/
-static inline int SkNextPow2(int value) {
- SkASSERT(value > 0);
- return 1 << (32 - SkCLZ(value - 1));
-}
-
-/** Returns the log2 of the specified value, were that value to be rounded up
- to the next power of 2. It is undefined to pass 0. Examples:
- SkNextLog2(1) -> 0
- SkNextLog2(2) -> 1
- SkNextLog2(3) -> 2
- SkNextLog2(4) -> 2
- SkNextLog2(5) -> 3
-*/
-static inline int SkNextLog2(uint32_t value) {
- SkASSERT(value != 0);
- return 32 - SkCLZ(value - 1);
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-/** SkMulS16(a, b) multiplies a * b, but requires that a and b are both int16_t.
- With this requirement, we can generate faster instructions on some
- architectures.
-*/
-#if defined(__arm__) && !defined(__thumb__)
- static inline int32_t SkMulS16(S16CPU x, S16CPU y) {
- SkASSERT((int16_t)x == x);
- SkASSERT((int16_t)y == y);
- int32_t product;
- asm("smulbb %0, %1, %2 \n"
- : "=r"(product)
- : "r"(x), "r"(y)
- :
- );
- return product;
- }
-#else
- #ifdef SK_DEBUG
- static inline int32_t SkMulS16(S16CPU x, S16CPU y) {
- SkASSERT((int16_t)x == x);
- SkASSERT((int16_t)y == y);
- return x * y;
- }
- #else
- #define SkMulS16(x, y) ((x) * (y))
- #endif
-#endif
-
-/** Return a*b/255, truncating away any fractional bits. Only valid if both
- a and b are 0..255
-*/
-static inline U8CPU SkMulDiv255Trunc(U8CPU a, U8CPU b) {
- SkASSERT((uint8_t)a == a);
- SkASSERT((uint8_t)b == b);
- unsigned prod = SkMulS16(a, b) + 1;
- return (prod + (prod >> 8)) >> 8;
-}
-
-/** Return a*b/255, rounding any fractional bits. Only valid if both
- a and b are 0..255
- */
-static inline U8CPU SkMulDiv255Round(U8CPU a, U8CPU b) {
- SkASSERT((uint8_t)a == a);
- SkASSERT((uint8_t)b == b);
- unsigned prod = SkMulS16(a, b) + 128;
- return (prod + (prod >> 8)) >> 8;
-}
-
-/** Return a*b/((1 << shift) - 1), rounding any fractional bits.
- Only valid if a and b are unsigned and <= 32767 and shift is > 0 and <= 8
-*/
-static inline unsigned SkMul16ShiftRound(unsigned a, unsigned b, int shift) {
- SkASSERT(a <= 32767);
- SkASSERT(b <= 32767);
- SkASSERT(shift > 0 && shift <= 8);
- unsigned prod = SkMulS16(a, b) + (1 << (shift - 1));
- return (prod + (prod >> shift)) >> shift;
-}
-
-///////////////////////////////////////////////////////////////////////////////
-
-#ifdef SK_DEBUG
- class SkMath {
- public:
- static void UnitTest();
- };
-#endif
-
-#endif
-
diff --git a/include/core/SkMatrix.h b/include/core/SkMatrix.h
deleted file mode 100644
index 2b25dca..0000000
--- a/include/core/SkMatrix.h
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkMatrix_DEFINED
-#define SkMatrix_DEFINED
-
-#include "SkRect.h"
-
-class SkString;
-
-/** \class SkMatrix
-
- The SkMatrix class holds a 3x3 matrix for transforming coordinates.
- SkMatrix does not have a constructor, so it must be explicitly initialized
- using either reset() - to construct an identity matrix, or one of the set
- functions (e.g. setTranslate, setRotate, etc.).
-*/
-class SkMatrix {
-public:
- /** Enum of bit fields for the mask return by getType().
- Use this to identify the complexity of the matrix.
- */
- enum TypeMask {
- kIdentity_Mask = 0,
- kTranslate_Mask = 0x01, //!< set if the matrix has translation
- kScale_Mask = 0x02, //!< set if the matrix has X or Y scale
- kAffine_Mask = 0x04, //!< set if the matrix skews or rotates
- kPerspective_Mask = 0x08 //!< set if the matrix is in perspective
- };
-
- /** Returns a mask bitfield describing the types of transformations
- that the matrix will perform. This information is used by routines
- like mapPoints, to optimize its inner loops to only perform as much
- arithmetic as is necessary.
- */
- TypeMask getType() const {
- if (fTypeMask & kUnknown_Mask) {
- fTypeMask = this->computeTypeMask();
- }
- // only return the public masks
- return (TypeMask)(fTypeMask & 0xF);
- }
-
- /** Returns true if the matrix is identity.
- */
- bool isIdentity() const {
- return this->getType() == 0;
- }
-
- /** Returns true if will map a rectangle to another rectangle. This can be
- true if the matrix is identity, scale-only, or rotates a multiple of
- 90 degrees.
- */
- bool rectStaysRect() const {
- if (fTypeMask & kUnknown_Mask) {
- fTypeMask = this->computeTypeMask();
- }
- return (fTypeMask & kRectStaysRect_Mask) != 0;
- }
-
- enum {
- kMScaleX,
- kMSkewX,
- kMTransX,
- kMSkewY,
- kMScaleY,
- kMTransY,
- kMPersp0,
- kMPersp1,
- kMPersp2
- };
-
- SkScalar operator[](int index) const {
- SkASSERT((unsigned)index < 9);
- return fMat[index];
- }
-
- SkScalar get(int index) const {
- SkASSERT((unsigned)index < 9);
- return fMat[index];
- }
-
- SkScalar getScaleX() const { return fMat[kMScaleX]; }
- SkScalar getScaleY() const { return fMat[kMScaleY]; }
- SkScalar getSkewY() const { return fMat[kMSkewY]; }
- SkScalar getSkewX() const { return fMat[kMSkewX]; }
- SkScalar getTranslateX() const { return fMat[kMTransX]; }
- SkScalar getTranslateY() const { return fMat[kMTransY]; }
- SkScalar getPerspX() const { return fMat[kMPersp0]; }
- SkScalar getPerspY() const { return fMat[kMPersp1]; }
-
- void set(int index, SkScalar value) {
- SkASSERT((unsigned)index < 9);
- fMat[index] = value;
- this->setTypeMask(kUnknown_Mask);
- }
-
- void setScaleX(SkScalar v) { this->set(kMScaleX, v); }
- void setScaleY(SkScalar v) { this->set(kMScaleY, v); }
- void setSkewY(SkScalar v) { this->set(kMSkewY, v); }
- void setSkewX(SkScalar v) { this->set(kMSkewX, v); }
- void setTranslateX(SkScalar v) { this->set(kMTransX, v); }
- void setTranslateY(SkScalar v) { this->set(kMTransY, v); }
- void setPerspX(SkScalar v) { this->set(kMPersp0, v); }
- void setPerspY(SkScalar v) { this->set(kMPersp1, v); }
-
- /** Set the matrix to identity
- */
- void reset();
-
- /** Set the matrix to translate by (dx, dy).
- */
- void setTranslate(SkScalar dx, SkScalar dy);
- /** Set the matrix to scale by sx and sy, with a pivot point at (px, py).
- The pivot point is the coordinate that should remain unchanged by the
- specified transformation.
- */
- void setScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py);
- /** Set the matrix to scale by sx and sy.
- */
- void setScale(SkScalar sx, SkScalar sy);
- /** Set the matrix to rotate by the specified number of degrees, with a
- pivot point at (px, py). The pivot point is the coordinate that should
- remain unchanged by the specified transformation.
- */
- void setRotate(SkScalar degrees, SkScalar px, SkScalar py);
- /** Set the matrix to rotate about (0,0) by the specified number of degrees.
- */
- void setRotate(SkScalar degrees);
- /** Set the matrix to rotate by the specified sine and cosine values, with
- a pivot point at (px, py). The pivot point is the coordinate that
- should remain unchanged by the specified transformation.
- */
- void setSinCos(SkScalar sinValue, SkScalar cosValue,
- SkScalar px, SkScalar py);
- /** Set the matrix to rotate by the specified sine and cosine values.
- */
- void setSinCos(SkScalar sinValue, SkScalar cosValue);
- /** Set the matrix to skew by sx and sy, with a pivot point at (px, py).
- The pivot point is the coordinate that should remain unchanged by the
- specified transformation.
- */
- void setSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py);
- /** Set the matrix to skew by sx and sy.
- */
- void setSkew(SkScalar kx, SkScalar ky);
- /** Set the matrix to the concatenation of the two specified matrices,
- returning true if the the result can be represented. Either of the
- two matrices may also be the target matrix. *this = a * b;
- */
- bool setConcat(const SkMatrix& a, const SkMatrix& b);
-
- /** Preconcats the matrix with the specified translation.
- M' = M * T(dx, dy)
- */
- bool preTranslate(SkScalar dx, SkScalar dy);
- /** Preconcats the matrix with the specified scale.
- M' = M * S(sx, sy, px, py)
- */
- bool preScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py);
- /** Preconcats the matrix with the specified scale.
- M' = M * S(sx, sy)
- */
- bool preScale(SkScalar sx, SkScalar sy);
- /** Preconcats the matrix with the specified rotation.
- M' = M * R(degrees, px, py)
- */
- bool preRotate(SkScalar degrees, SkScalar px, SkScalar py);
- /** Preconcats the matrix with the specified rotation.
- M' = M * R(degrees)
- */
- bool preRotate(SkScalar degrees);
- /** Preconcats the matrix with the specified skew.
- M' = M * K(kx, ky, px, py)
- */
- bool preSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py);
- /** Preconcats the matrix with the specified skew.
- M' = M * K(kx, ky)
- */
- bool preSkew(SkScalar kx, SkScalar ky);
- /** Preconcats the matrix with the specified matrix.
- M' = M * other
- */
- bool preConcat(const SkMatrix& other);
-
- /** Postconcats the matrix with the specified translation.
- M' = T(dx, dy) * M
- */
- bool postTranslate(SkScalar dx, SkScalar dy);
- /** Postconcats the matrix with the specified scale.
- M' = S(sx, sy, px, py) * M
- */
- bool postScale(SkScalar sx, SkScalar sy, SkScalar px, SkScalar py);
- /** Postconcats the matrix with the specified scale.
- M' = S(sx, sy) * M
- */
- bool postScale(SkScalar sx, SkScalar sy);
- /** Postconcats the matrix by dividing it by the specified integers.
- M' = S(1/divx, 1/divy, 0, 0) * M
- */
- bool postIDiv(int divx, int divy);
- /** Postconcats the matrix with the specified rotation.
- M' = R(degrees, px, py) * M
- */
- bool postRotate(SkScalar degrees, SkScalar px, SkScalar py);
- /** Postconcats the matrix with the specified rotation.
- M' = R(degrees) * M
- */
- bool postRotate(SkScalar degrees);
- /** Postconcats the matrix with the specified skew.
- M' = K(kx, ky, px, py) * M
- */
- bool postSkew(SkScalar kx, SkScalar ky, SkScalar px, SkScalar py);
- /** Postconcats the matrix with the specified skew.
- M' = K(kx, ky) * M
- */
- bool postSkew(SkScalar kx, SkScalar ky);
- /** Postconcats the matrix with the specified matrix.
- M' = other * M
- */
- bool postConcat(const SkMatrix& other);
-
- enum ScaleToFit {
- /**
- * Scale in X and Y independently, so that src matches dst exactly.
- * This may change the aspect ratio of the src.
- */
- kFill_ScaleToFit,
- /**
- * Compute a scale that will maintain the original src aspect ratio,
- * but will also ensure that src fits entirely inside dst. At least one
- * axis (X or Y) will fit exactly. kStart aligns the result to the
- * left and top edges of dst.
- */
- kStart_ScaleToFit,
- /**
- * Compute a scale that will maintain the original src aspect ratio,
- * but will also ensure that src fits entirely inside dst. At least one
- * axis (X or Y) will fit exactly. The result is centered inside dst.
- */
- kCenter_ScaleToFit,
- /**
- * Compute a scale that will maintain the original src aspect ratio,
- * but will also ensure that src fits entirely inside dst. At least one
- * axis (X or Y) will fit exactly. kEnd aligns the result to the
- * right and bottom edges of dst.
- */
- kEnd_ScaleToFit
- };
-
- /** Set the matrix to the scale and translate values that map the source
- rectangle to the destination rectangle, returning true if the the result
- can be represented.
- @param src the source rectangle to map from.
- @param dst the destination rectangle to map to.
- @param stf the ScaleToFit option
- @return true if the matrix can be represented by the rectangle mapping.
- */
- bool setRectToRect(const SkRect& src, const SkRect& dst, ScaleToFit stf);
-
- /** Set the matrix such that the specified src points would map to the
- specified dst points. count must be within [0..4].
- @param src The array of src points
- @param dst The array of dst points
- @param count The number of points to use for the transformation
- @return true if the matrix was set to the specified transformation
- */
- bool setPolyToPoly(const SkPoint src[], const SkPoint dst[], int count);
-
- /** If this matrix can be inverted, return true and if inverse is not null,
- set inverse to be the inverse of this matrix. If this matrix cannot be
- inverted, ignore inverse and return false
- */
- bool invert(SkMatrix* inverse) const;
-
- /** Apply this matrix to the array of points specified by src, and write
- the transformed points into the array of points specified by dst.
- dst[] = M * src[]
- @param dst Where the transformed coordinates are written. It must
- contain at least count entries
- @param src The original coordinates that are to be transformed. It
- must contain at least count entries
- @param count The number of points in src to read, and then transform
- into dst.
- */
- void mapPoints(SkPoint dst[], const SkPoint src[], int count) const;
-
- /** Apply this matrix to the array of points, overwriting it with the
- transformed values.
- dst[] = M * pts[]
- @param pts The points to be transformed. It must contain at least
- count entries
- @param count The number of points in pts.
- */
- void mapPoints(SkPoint pts[], int count) const {
- this->mapPoints(pts, pts, count);
- }
-
- void mapXY(SkScalar x, SkScalar y, SkPoint* result) const {
- SkASSERT(result);
- this->getMapXYProc()(*this, x, y, result);
- }
-
- /** Apply this matrix to the array of vectors specified by src, and write
- the transformed vectors into the array of vectors specified by dst.
- This is similar to mapPoints, but ignores any translation in the matrix.
- @param dst Where the transformed coordinates are written. It must
- contain at least count entries
- @param src The original coordinates that are to be transformed. It
- must contain at least count entries
- @param count The number of vectors in src to read, and then transform
- into dst.
- */
- void mapVectors(SkVector dst[], const SkVector src[], int count) const;
-
- /** Apply this matrix to the array of vectors specified by src, and write
- the transformed vectors into the array of vectors specified by dst.
- This is similar to mapPoints, but ignores any translation in the matrix.
- @param vecs The vectors to be transformed. It must contain at least
- count entries
- @param count The number of vectors in vecs.
- */
- void mapVectors(SkVector vecs[], int count) const {
- this->mapVectors(vecs, vecs, count);
- }
-
- /** Apply this matrix to the src rectangle, and write the transformed
- rectangle into dst. This is accomplished by transforming the 4 corners
- of src, and then setting dst to the bounds of those points.
- @param dst Where the transformed rectangle is written.
- @param src The original rectangle to be transformed.
- @return the result of calling rectStaysRect()
- */
- bool mapRect(SkRect* dst, const SkRect& src) const;
-
- /** Apply this matrix to the rectangle, and write the transformed rectangle
- back into it. This is accomplished by transforming the 4 corners of
- rect, and then setting it to the bounds of those points
- @param rect The rectangle to transform.
- @return the result of calling rectStaysRect()
- */
- bool mapRect(SkRect* rect) const {
- return this->mapRect(rect, *rect);
- }
-
- /** Return the mean radius of a circle after it has been mapped by
- this matrix. NOTE: in perspective this value assumes the circle
- has its center at the origin.
- */
- SkScalar mapRadius(SkScalar radius) const;
-
- typedef void (*MapXYProc)(const SkMatrix& mat, SkScalar x, SkScalar y,
- SkPoint* result);
-
- static MapXYProc GetMapXYProc(TypeMask mask) {
- SkASSERT((mask & ~kAllMasks) == 0);
- return gMapXYProcs[mask & kAllMasks];
- }
-
- MapXYProc getMapXYProc() const {
- return GetMapXYProc(this->getType());
- }
-
- typedef void (*MapPtsProc)(const SkMatrix& mat, SkPoint dst[],
- const SkPoint src[], int count);
-
- static MapPtsProc GetMapPtsProc(TypeMask mask) {
- SkASSERT((mask & ~kAllMasks) == 0);
- return gMapPtsProcs[mask & kAllMasks];
- }
-
- MapPtsProc getMapPtsProc() const {
- return GetMapPtsProc(this->getType());
- }
-
- /** If the matrix can be stepped in X (not complex perspective)
- then return true and if step[XY] is not null, return the step[XY] value.
- If it cannot, return false and ignore step.
- */
- bool fixedStepInX(SkScalar y, SkFixed* stepX, SkFixed* stepY) const;
-
- friend bool operator==(const SkMatrix& a, const SkMatrix& b) {
- return memcmp(a.fMat, b.fMat, sizeof(a.fMat)) == 0;
- }
-
- friend bool operator!=(const SkMatrix& a, const SkMatrix& b) {
- return memcmp(a.fMat, b.fMat, sizeof(a.fMat)) != 0;
- }
-
- void dump() const;
- void toDumpString(SkString*) const;
-
-#ifdef SK_DEBUG
- /** @cond UNIT_TEST */
-
- static void UnitTest();
- /** @endcond */
-#endif
-
-private:
- enum {
- /** Set if the matrix will map a rectangle to another rectangle. This
- can be true if the matrix is scale-only, or rotates a multiple of
- 90 degrees. This bit is not set if the matrix is identity.
-
- This bit will be set on identity matrices
- */
- kRectStaysRect_Mask = 0x10,
-
- kUnknown_Mask = 0x80,
-
- kAllMasks = kTranslate_Mask |
- kScale_Mask |
- kAffine_Mask |
- kPerspective_Mask |
- kRectStaysRect_Mask
- };
-
- SkScalar fMat[9];
- mutable uint8_t fTypeMask;
-
- uint8_t computeTypeMask() const;
-
- void setTypeMask(int mask) {
- // allow kUnknown or a valid mask
- SkASSERT(kUnknown_Mask == mask || (mask & kAllMasks) == mask);
- fTypeMask = SkToU8(mask);
- }
-
- void clearTypeMask(int mask) {
- // only allow a valid mask
- SkASSERT((mask & kAllMasks) == mask);
- fTypeMask &= ~mask;
- }
-
- static bool Poly2Proc(const SkPoint[], SkMatrix*, const SkPoint& scale);
- static bool Poly3Proc(const SkPoint[], SkMatrix*, const SkPoint& scale);
- static bool Poly4Proc(const SkPoint[], SkMatrix*, const SkPoint& scale);
-
- static void Identity_xy(const SkMatrix&, SkScalar, SkScalar, SkPoint*);
- static void Trans_xy(const SkMatrix&, SkScalar, SkScalar, SkPoint*);
- static void Scale_xy(const SkMatrix&, SkScalar, SkScalar, SkPoint*);
- static void ScaleTrans_xy(const SkMatrix&, SkScalar, SkScalar, SkPoint*);
- static void Rot_xy(const SkMatrix&, SkScalar, SkScalar, SkPoint*);
- static void RotTrans_xy(const SkMatrix&, SkScalar, SkScalar, SkPoint*);
- static void Persp_xy(const SkMatrix&, SkScalar, SkScalar, SkPoint*);
-
- static const MapXYProc gMapXYProcs[];
-
- static void Identity_pts(const SkMatrix&, SkPoint[], const SkPoint[], int);
- static void Trans_pts(const SkMatrix&, SkPoint dst[], const SkPoint[], int);
- static void Scale_pts(const SkMatrix&, SkPoint dst[], const SkPoint[], int);
- static void ScaleTrans_pts(const SkMatrix&, SkPoint dst[], const SkPoint[],
- int count);
- static void Rot_pts(const SkMatrix&, SkPoint dst[], const SkPoint[], int);
- static void RotTrans_pts(const SkMatrix&, SkPoint dst[], const SkPoint[],
- int count);
- static void Persp_pts(const SkMatrix&, SkPoint dst[], const SkPoint[], int);
-
- static const MapPtsProc gMapPtsProcs[];
-
- friend class SkPerspIter;
-};
-
-#endif
-
diff --git a/include/core/SkOSFile.h b/include/core/SkOSFile.h
deleted file mode 100644
index de8090c..0000000
--- a/include/core/SkOSFile.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-//
-#ifndef SkOSFile_DEFINED
-#define SkOSFile_DEFINED
-
-#include "SkString.h"
-
-#if defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX)
- #include <dirent.h>
-#endif
-
-struct SkFILE;
-
-enum SkFILE_Flags {
- kRead_SkFILE_Flag = 0x01,
- kWrite_SkFILE_Flag = 0x02
-};
-
-SkFILE* sk_fopen(const char path[], SkFILE_Flags);
-void sk_fclose(SkFILE*);
-
-size_t sk_fgetsize(SkFILE*);
-/** Return true if the file could seek back to the beginning
-*/
-bool sk_frewind(SkFILE*);
-
-size_t sk_fread(void* buffer, size_t byteCount, SkFILE*);
-size_t sk_fwrite(const void* buffer, size_t byteCount, SkFILE*);
-void sk_fflush(SkFILE*);
-
-int sk_fseek( SkFILE*, size_t, int );
-size_t sk_ftell( SkFILE* );
-
-class SkOSFile {
-public:
- class Iter {
- public:
- Iter();
- Iter(const char path[], const char suffix[] = NULL);
- ~Iter();
-
- void reset(const char path[], const char suffix[] = NULL);
- bool next(SkString* name, bool getDir = false);
-
- private:
-#ifdef SK_BUILD_FOR_WIN
- HANDLE fHandle;
- uint16_t* fPath16;
-#elif defined(SK_BUILD_FOR_MAC) || defined(SK_BUILD_FOR_UNIX)
- DIR* fDIR;
- SkString fPath, fSuffix;
-#endif
- };
-};
-
-class SkUTF16_Str {
-public:
- SkUTF16_Str(const char src[]);
- ~SkUTF16_Str()
- {
- sk_free(fStr);
- }
- const uint16_t* get() const { return fStr; }
-
-private:
- uint16_t* fStr;
-};
-
-#endif
-
diff --git a/include/core/SkPackBits.h b/include/core/SkPackBits.h
deleted file mode 100644
index c11231b..0000000
--- a/include/core/SkPackBits.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPackBits_DEFINED
-#define SkPackBits_DEFINED
-
-#include "SkTypes.h"
-
-class SkPackBits {
-public:
- /** Given the number of 16bit values that will be passed to Pack16,
- returns the worst-case size needed for the dst[] buffer.
- */
- static size_t ComputeMaxSize16(int count);
-
- /** Given the number of 8bit values that will be passed to Pack8,
- returns the worst-case size needed for the dst[] buffer.
- */
- static size_t ComputeMaxSize8(int count);
-
- /** Write the src array into a packed format. The packing process may end
- up writing more bytes than it read, so dst[] must be large enough.
- @param src Input array of 16bit values
- @param count Number of entries in src[]
- @param dst Buffer (allocated by caller) to write the packed data
- into
- @return the number of bytes written to dst[]
- */
- static size_t Pack16(const uint16_t src[], int count, uint8_t dst[]);
-
- /** Write the src array into a packed format. The packing process may end
- up writing more bytes than it read, so dst[] must be large enough.
- @param src Input array of 8bit values
- @param count Number of entries in src[]
- @param dst Buffer (allocated by caller) to write the packed data
- into
- @return the number of bytes written to dst[]
- */
- static size_t Pack8(const uint8_t src[], int count, uint8_t dst[]);
-
- /** Unpack the data in src[], and expand it into dst[]. The src[] data was
- written by a previous call to Pack16.
- @param src Input data to unpack, previously created by Pack16.
- @param srcSize Number of bytes of src to unpack
- @param dst Buffer (allocated by caller) to expand the src[] into.
- @return the number of dst elements (not bytes) written into dst.
- */
- static int Unpack16(const uint8_t src[], size_t srcSize, uint16_t dst[]);
-
- /** Unpack the data in src[], and expand it into dst[]. The src[] data was
- written by a previous call to Pack8.
- @param src Input data to unpack, previously created by Pack8.
- @param srcSize Number of bytes of src to unpack
- @param dst Buffer (allocated by caller) to expand the src[] into.
- @return the number of bytes written into dst.
- */
- static int Unpack8(const uint8_t src[], size_t srcSize, uint8_t dst[]);
-
- /** Unpack the data from src[], skip the first dstSkip bytes, then write
- dstWrite bytes into dst[]. The src[] data was written by a previous
- call to Pack8. Return the number of bytes actually writtten into dst[]
- @param src Input data to unpack, previously created by Pack8.
- @param dst Buffer (allocated by caller) to expand the src[] into.
- @param dstSkip Number of bytes of unpacked src to skip before writing
- into dst
- @param dstWrite Number of bytes of unpacked src to write into dst (after
- skipping dstSkip bytes)
- */
- static void Unpack8(uint8_t dst[], size_t dstSkip, size_t dstWrite,
- const uint8_t src[]);
-};
-
-#endif
diff --git a/include/core/SkPaint.h b/include/core/SkPaint.h
deleted file mode 100644
index fc390ab..0000000
--- a/include/core/SkPaint.h
+++ /dev/null
@@ -1,814 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPaint_DEFINED
-#define SkPaint_DEFINED
-
-#include "SkColor.h"
-#include "SkMath.h"
-#include "SkPorterDuff.h"
-
-class SkAutoGlyphCache;
-class SkColorFilter;
-class SkDescriptor;
-class SkFlattenableReadBuffer;
-class SkFlattenableWriteBuffer;
-struct SkGlyph;
-struct SkRect;
-class SkGlyphCache;
-class SkMaskFilter;
-class SkMatrix;
-class SkPath;
-class SkPathEffect;
-class SkRasterizer;
-class SkShader;
-class SkDrawLooper;
-class SkTypeface;
-class SkXfermode;
-
-typedef const SkGlyph& (*SkDrawCacheProc)(SkGlyphCache*, const char**,
- SkFixed x, SkFixed y);
-
-typedef const SkGlyph& (*SkMeasureCacheProc)(SkGlyphCache*, const char**);
-
-/** \class SkPaint
-
- The SkPaint class holds the style and color information about how to draw
- geometries, text and bitmaps.
-*/
-class SkPaint {
-public:
- SkPaint();
- SkPaint(const SkPaint& paint);
- ~SkPaint();
-
- SkPaint& operator=(const SkPaint&);
-
- friend int operator==(const SkPaint& a, const SkPaint& b);
- friend int operator!=(const SkPaint& a, const SkPaint& b)
- {
- return !(a == b);
- }
-
- void flatten(SkFlattenableWriteBuffer&) const;
- void unflatten(SkFlattenableReadBuffer&);
-
- /** Restores the paint to its initial settings.
- */
- void reset();
-
- /** Specifies the bit values that are stored in the paint's flags.
- */
- enum Flags {
- kAntiAlias_Flag = 0x01, //!< mask to enable antialiasing
- kFilterBitmap_Flag = 0x02, //!< mask to enable bitmap filtering
- kDither_Flag = 0x04, //!< mask to enable dithering
- kUnderlineText_Flag = 0x08, //!< mask to enable underline text
- kStrikeThruText_Flag = 0x10, //!< mask to enable strike-thru text
- kFakeBoldText_Flag = 0x20, //!< mask to enable fake-bold text
- kLinearText_Flag = 0x40, //!< mask to enable linear-text
- kSubpixelText_Flag = 0x80, //!< mask to enable subpixel-text
- kDevKernText_Flag = 0x100, //!< mask to enable device kerning text
-
- kAllFlags = 0x1FF
- };
-
- /** Return the paint's flags. Use the Flag enum to test flag values.
- @return the paint's flags (see enums ending in _Flag for bit masks)
- */
- uint32_t getFlags() const { return fFlags; }
-
- /** Set the paint's flags. Use the Flag enum to specific flag values.
- @param flags The new flag bits for the paint (see Flags enum)
- */
- void setFlags(uint32_t flags);
-
- /** Helper for getFlags(), returning true if kAntiAlias_Flag bit is set
- @return true if the antialias bit is set in the paint's flags.
- */
- bool isAntiAlias() const
- {
- return SkToBool(this->getFlags() & kAntiAlias_Flag);
- }
-
- /** Helper for setFlags(), setting or clearing the kAntiAlias_Flag bit
- @param aa true to enable antialiasing, false to disable it
- */
- void setAntiAlias(bool aa);
-
- /** Helper for getFlags(), returning true if kDither_Flag bit is set
- @return true if the dithering bit is set in the paint's flags.
- */
- bool isDither() const
- {
- return SkToBool(this->getFlags() & kDither_Flag);
- }
-
- /** Helper for setFlags(), setting or clearing the kDither_Flag bit
- @param dither true to enable dithering, false to disable it
- */
- void setDither(bool dither);
-
- /** Helper for getFlags(), returning true if kLinearText_Flag bit is set
- @return true if the lineartext bit is set in the paint's flags
- */
- bool isLinearText() const
- {
- return SkToBool(this->getFlags() & kLinearText_Flag);
- }
-
- /** Helper for setFlags(), setting or clearing the kLinearText_Flag bit
- @param linearText true to set the linearText bit in the paint's flags,
- false to clear it.
- */
- void setLinearText(bool linearText);
-
- /** Helper for getFlags(), returning true if kSubpixelText_Flag bit is set
- @return true if the lineartext bit is set in the paint's flags
- */
- bool isSubpixelText() const
- {
- return SkToBool(this->getFlags() & kSubpixelText_Flag);
- }
-
- /** Helper for setFlags(), setting or clearing the kSubpixelText_Flag bit
- @param subpixelText true to set the subpixelText bit in the paint's
- flags, false to clear it.
- */
- void setSubpixelText(bool subpixelText);
-
- /** Helper for getFlags(), returning true if kUnderlineText_Flag bit is set
- @return true if the underlineText bit is set in the paint's flags.
- */
- bool isUnderlineText() const
- {
- return SkToBool(this->getFlags() & kUnderlineText_Flag);
- }
-
- /** Helper for setFlags(), setting or clearing the kUnderlineText_Flag bit
- @param underlineText true to set the underlineText bit in the paint's
- flags, false to clear it.
- */
- void setUnderlineText(bool underlineText);
-
- /** Helper for getFlags(), returns true if kStrikeThruText_Flag bit is set
- @return true if the strikeThruText bit is set in the paint's flags.
- */
- bool isStrikeThruText() const
- {
- return SkToBool(this->getFlags() & kStrikeThruText_Flag);
- }
-
- /** Helper for setFlags(), setting or clearing the kStrikeThruText_Flag bit
- @param strikeThruText true to set the strikeThruText bit in the
- paint's flags, false to clear it.
- */
- void setStrikeThruText(bool strikeThruText);
-
- /** Helper for getFlags(), returns true if kFakeBoldText_Flag bit is set
- @return true if the kFakeBoldText_Flag bit is set in the paint's flags.
- */
- bool isFakeBoldText() const
- {
- return SkToBool(this->getFlags() & kFakeBoldText_Flag);
- }
-
- /** Helper for setFlags(), setting or clearing the kFakeBoldText_Flag bit
- @param fakeBoldText true to set the kFakeBoldText_Flag bit in the paint's
- flags, false to clear it.
- */
- void setFakeBoldText(bool fakeBoldText);
-
- /** Helper for getFlags(), returns true if kDevKernText_Flag bit is set
- @return true if the kernText bit is set in the paint's flags.
- */
- bool isDevKernText() const
- {
- return SkToBool(this->getFlags() & kDevKernText_Flag);
- }
-
- /** Helper for setFlags(), setting or clearing the kKernText_Flag bit
- @param kernText true to set the kKernText_Flag bit in the paint's
- flags, false to clear it.
- */
- void setDevKernText(bool devKernText);
-
- bool isFilterBitmap() const
- {
- return SkToBool(this->getFlags() & kFilterBitmap_Flag);
- }
-
- void setFilterBitmap(bool filterBitmap);
-
- /** Styles apply to rect, oval, path, and text.
- Bitmaps are always drawn in "fill", and lines are always drawn in
- "stroke".
- */
- enum Style {
- kFill_Style, //!< fill with the paint's color
- kStroke_Style, //!< stroke with the paint's color
- kStrokeAndFill_Style, //!< fill and stroke with the paint's color
-
- kStyleCount,
- };
-
- /** Return the paint's style, used for controlling how primitives'
- geometries are interpreted (except for drawBitmap, which always assumes
- kFill_Style).
- @return the paint's Style
- */
- Style getStyle() const { return (Style)fStyle; }
-
- /** Set the paint's style, used for controlling how primitives'
- geometries are interpreted (except for drawBitmap, which always assumes
- Fill).
- @param style The new style to set in the paint
- */
- void setStyle(Style style);
-
- /** Return the paint's color. Note that the color is a 32bit value
- containing alpha as well as r,g,b. This 32bit value is not
- premultiplied, meaning that its alpha can be any value, regardless of
- the values of r,g,b.
- @return the paint's color (and alpha).
- */
- SkColor getColor() const { return fColor; }
-
- /** Set the paint's color. Note that the color is a 32bit value containing
- alpha as well as r,g,b. This 32bit value is not premultiplied, meaning
- that its alpha can be any value, regardless of the values of r,g,b.
- @param color The new color (including alpha) to set in the paint.
- */
- void setColor(SkColor color);
-
- /** Helper to getColor() that just returns the color's alpha value.
- @return the alpha component of the paint's color.
- */
- uint8_t getAlpha() const { return SkToU8(SkColorGetA(fColor)); }
-
- /** Helper to setColor(), that only assigns the color's alpha value,
- leaving its r,g,b values unchanged.
- @param a set the alpha component (0..255) of the paint's color.
- */
- void setAlpha(U8CPU a);
-
- /** Helper to setColor(), that takes a,r,g,b and constructs the color value
- using SkColorSetARGB()
- @param a The new alpha component (0..255) of the paint's color.
- @param r The new red component (0..255) of the paint's color.
- @param g The new green component (0..255) of the paint's color.
- @param b The new blue component (0..255) of the paint's color.
- */
- void setARGB(U8CPU a, U8CPU r, U8CPU g, U8CPU b);
-
- /** Return the width for stroking.
- <p />
- A value of 0 strokes in hairline mode.
- Hairlines always draw 1-pixel wide, regardless of the matrix.
- @return the paint's stroke width, used whenever the paint's style is
- Stroke or StrokeAndFill.
- */
- SkScalar getStrokeWidth() const { return fWidth; }
-
- /** Set the width for stroking.
- Pass 0 to stroke in hairline mode.
- Hairlines always draw 1-pixel wide, regardless of the matrix.
- @param width set the paint's stroke width, used whenever the paint's
- style is Stroke or StrokeAndFill.
- */
- void setStrokeWidth(SkScalar width);
-
- /** Return the paint's stroke miter value. This is used to control the
- behavior of miter joins when the joins angle is sharp.
- @return the paint's miter limit, used whenever the paint's style is
- Stroke or StrokeAndFill.
- */
- SkScalar getStrokeMiter() const { return fMiterLimit; }
-
- /** Set the paint's stroke miter value. This is used to control the
- behavior of miter joins when the joins angle is sharp. This value must
- be >= 0.
- @param miter set the miter limit on the paint, used whenever the
- paint's style is Stroke or StrokeAndFill.
- */
- void setStrokeMiter(SkScalar miter);
-
- /** Cap enum specifies the settings for the paint's strokecap. This is the
- treatment that is applied to the beginning and end of each non-closed
- contour (e.g. lines).
- */
- enum Cap {
- kButt_Cap, //!< begin/end contours with no extension
- kRound_Cap, //!< begin/end contours with a semi-circle extension
- kSquare_Cap, //!< begin/end contours with a half square extension
-
- kCapCount,
- kDefault_Cap = kButt_Cap
- };
-
- /** Join enum specifies the settings for the paint's strokejoin. This is
- the treatment that is applied to corners in paths and rectangles.
- */
- enum Join {
- kMiter_Join, //!< connect path segments with a sharp join
- kRound_Join, //!< connect path segments with a round join
- kBevel_Join, //!< connect path segments with a flat bevel join
-
- kJoinCount,
- kDefault_Join = kMiter_Join
- };
-
- /** Return the paint's stroke cap type, controlling how the start and end
- of stroked lines and paths are treated.
- @return the line cap style for the paint, used whenever the paint's
- style is Stroke or StrokeAndFill.
- */
- Cap getStrokeCap() const { return (Cap)fCapType; }
-
- /** Set the paint's stroke cap type.
- @param cap set the paint's line cap style, used whenever the paint's
- style is Stroke or StrokeAndFill.
- */
- void setStrokeCap(Cap cap);
-
- /** Return the paint's stroke join type.
- @return the paint's line join style, used whenever the paint's style is
- Stroke or StrokeAndFill.
- */
- Join getStrokeJoin() const { return (Join)fJoinType; }
-
- /** Set the paint's stroke join type.
- @param join set the paint's line join style, used whenever the paint's
- style is Stroke or StrokeAndFill.
- */
- void setStrokeJoin(Join join);
-
- /** Applies any/all effects (patheffect, stroking) to src, returning the
- result in dst. The result is that drawing src with this paint will be
- the same as drawing dst with a default paint (at least from the
- geometric perspective).
- @param src input path
- @param dst output path (may be the same as src)
- @return true if the path should be filled, or false if it should be
- drawn with a hairline (width == 0)
- */
- bool getFillPath(const SkPath& src, SkPath* dst) const;
-
- /** Returns true if the current paint settings allow for fast computation of
- bounds (i.e. there is nothing complex like a patheffect that would make
- the bounds computation expensive.
- */
- bool canComputeFastBounds() const;
-
- /** Only call this if canComputeFastBounds() returned true. This takes a
- raw rectangle (the raw bounds of a shape), and adjusts it for stylistic
- effects in the paint (e.g. stroking). If needed, it uses the storage
- rect parameter. It returns the adjusted bounds that can then be used
- for quickReject tests.
-
- The returned rect will either be orig or storage, thus the caller
- should not rely on storage being set to the result, but should always
- use the retured value. It is legal for orig and storage to be the same
- rect.
-
- e.g.
- if (paint.canComputeFastBounds()) {
- SkRect r, storage;
- path.computeBounds(&r, SkPath::kFast_BoundsType);
- const SkRect& fastR = paint.computeFastBounds(r, &storage);
- if (canvas->quickReject(fastR, ...)) {
- // don't draw the path
- }
- }
- */
- const SkRect& computeFastBounds(const SkRect& orig, SkRect* storage) const;
-
- /** Get the paint's shader object.
- <p />
- The shader's reference count is not affected.
- @return the paint's shader (or NULL)
- */
- SkShader* getShader() const { return fShader; }
-
- /** Set or clear the shader object.
- <p />
- Pass NULL to clear any previous shader.
- As a convenience, the parameter passed is also returned.
- If a previous shader exists, its reference count is decremented.
- If shader is not NULL, its reference count is incremented.
- @param shader May be NULL. The shader to be installed in the paint
- @return shader
- */
- SkShader* setShader(SkShader* shader);
-
- /** Get the paint's colorfilter. If there is a colorfilter, its reference
- count is not changed.
- @return the paint's colorfilter (or NULL)
- */
- SkColorFilter* getColorFilter() const { return fColorFilter; }
-
- /** Set or clear the paint's colorfilter, returning the parameter.
- <p />
- If the paint already has a filter, its reference count is decremented.
- If filter is not NULL, its reference count is incremented.
- @param filter May be NULL. The filter to be installed in the paint
- @return filter
- */
- SkColorFilter* setColorFilter(SkColorFilter* filter);
-
- /** Get the paint's xfermode object.
- <p />
- The xfermode's reference count is not affected.
- @return the paint's xfermode (or NULL)
- */
- SkXfermode* getXfermode() const { return fXfermode; }
-
- /** Set or clear the xfermode object.
- <p />
- Pass NULL to clear any previous xfermode.
- As a convenience, the parameter passed is also returned.
- If a previous xfermode exists, its reference count is decremented.
- If xfermode is not NULL, its reference count is incremented.
- @param xfermode May be NULL. The new xfermode to be installed in the
- paint
- @return xfermode
- */
- SkXfermode* setXfermode(SkXfermode* xfermode);
-
- /** Helper for setXfermode, passing the corresponding xfermode object
- returned from the PorterDuff factory.
- @param mode The porter-duff mode used to create an xfermode for the
- paint.
- @return the resulting xfermode object (or NULL if the mode is
- SrcOver)
- */
- SkXfermode* setPorterDuffXfermode(SkPorterDuff::Mode mode);
-
- /** Get the paint's patheffect object.
- <p />
- The patheffect reference count is not affected.
- @return the paint's patheffect (or NULL)
- */
- SkPathEffect* getPathEffect() const { return fPathEffect; }
-
- /** Set or clear the patheffect object.
- <p />
- Pass NULL to clear any previous patheffect.
- As a convenience, the parameter passed is also returned.
- If a previous patheffect exists, its reference count is decremented.
- If patheffect is not NULL, its reference count is incremented.
- @param effect May be NULL. The new patheffect to be installed in the
- paint
- @return effect
- */
- SkPathEffect* setPathEffect(SkPathEffect* effect);
-
- /** Get the paint's maskfilter object.
- <p />
- The maskfilter reference count is not affected.
- @return the paint's maskfilter (or NULL)
- */
- SkMaskFilter* getMaskFilter() const { return fMaskFilter; }
-
- /** Set or clear the maskfilter object.
- <p />
- Pass NULL to clear any previous maskfilter.
- As a convenience, the parameter passed is also returned.
- If a previous maskfilter exists, its reference count is decremented.
- If maskfilter is not NULL, its reference count is incremented.
- @param maskfilter May be NULL. The new maskfilter to be installed in
- the paint
- @return maskfilter
- */
- SkMaskFilter* setMaskFilter(SkMaskFilter* maskfilter);
-
- // These attributes are for text/fonts
-
- /** Get the paint's typeface object.
- <p />
- The typeface object identifies which font to use when drawing or
- measuring text. The typeface reference count is not affected.
- @return the paint's typeface (or NULL)
- */
- SkTypeface* getTypeface() const { return fTypeface; }
-
- /** Set or clear the typeface object.
- <p />
- Pass NULL to clear any previous typeface.
- As a convenience, the parameter passed is also returned.
- If a previous typeface exists, its reference count is decremented.
- If typeface is not NULL, its reference count is incremented.
- @param typeface May be NULL. The new typeface to be installed in the
- paint
- @return typeface
- */
- SkTypeface* setTypeface(SkTypeface* typeface);
-
- /** Get the paint's rasterizer (or NULL).
- <p />
- The raster controls how paths/text are turned into alpha masks.
- @return the paint's rasterizer (or NULL)
- */
- SkRasterizer* getRasterizer() const { return fRasterizer; }
-
- /** Set or clear the rasterizer object.
- <p />
- Pass NULL to clear any previous rasterizer.
- As a convenience, the parameter passed is also returned.
- If a previous rasterizer exists in the paint, its reference count is
- decremented. If rasterizer is not NULL, its reference count is
- incremented.
- @param rasterizer May be NULL. The new rasterizer to be installed in
- the paint.
- @return rasterizer
- */
- SkRasterizer* setRasterizer(SkRasterizer* rasterizer);
-
- SkDrawLooper* getLooper() const { return fLooper; }
- SkDrawLooper* setLooper(SkDrawLooper*);
-
- enum Align {
- kLeft_Align,
- kCenter_Align,
- kRight_Align,
-
- kAlignCount
- };
- /** Return the paint's Align value for drawing text.
- @return the paint's Align value for drawing text.
- */
- Align getTextAlign() const { return (Align)fTextAlign; }
- /** Set the paint's text alignment.
- @param align set the paint's Align value for drawing text.
- */
- void setTextAlign(Align align);
-
- /** Return the paint's text size.
- @return the paint's text size.
- */
- SkScalar getTextSize() const { return fTextSize; }
-
- /** Set the paint's text size. This value must be > 0
- @param textSize set the paint's text size.
- */
- void setTextSize(SkScalar textSize);
-
- /** Return the paint's horizontal scale factor for text. The default value
- is 1.0.
- @return the paint's scale factor in X for drawing/measuring text
- */
- SkScalar getTextScaleX() const { return fTextScaleX; }
-
- /** Set the paint's horizontal scale factor for text. The default value
- is 1.0. Values > 1.0 will stretch the text wider. Values < 1.0 will
- stretch the text narrower.
- @param scaleX set the paint's scale factor in X for drawing/measuring
- text.
- */
- void setTextScaleX(SkScalar scaleX);
-
- /** Return the paint's horizontal skew factor for text. The default value
- is 0.
- @return the paint's skew factor in X for drawing text.
- */
- SkScalar getTextSkewX() const { return fTextSkewX; }
-
- /** Set the paint's horizontal skew factor for text. The default value
- is 0. For approximating oblique text, use values around -0.25.
- @param skewX set the paint's skew factor in X for drawing text.
- */
- void setTextSkewX(SkScalar skewX);
-
- /** Describes how to interpret the text parameters that are passed to paint
- methods like measureText() and getTextWidths().
- */
- enum TextEncoding {
- kUTF8_TextEncoding, //!< the text parameters are UTF8
- kUTF16_TextEncoding, //!< the text parameters are UTF16
- kGlyphID_TextEncoding //!< the text parameters are glyph indices
- };
-
- TextEncoding getTextEncoding() const
- {
- return (TextEncoding)fTextEncoding;
- }
-
- void setTextEncoding(TextEncoding encoding);
-
- struct FontMetrics {
- SkScalar fTop; //!< The greatest distance above the baseline for any glyph (will be <= 0)
- SkScalar fAscent; //!< The recommended distance above the baseline (will be <= 0)
- SkScalar fDescent; //!< The recommended distance below the baseline (will be >= 0)
- SkScalar fBottom; //!< The greatest distance below the baseline for any glyph (will be >= 0)
- SkScalar fLeading; //!< The recommended distance to add between lines of text (will be >= 0)
- };
-
- /** Return the recommend spacing between lines (which will be
- fDescent - fAscent + fLeading).
- If metrics is not null, return in it the font metrics for the
- typeface/pointsize/etc. currently set in the paint.
- @param metrics If not null, returns the font metrics for the
- current typeface/pointsize/etc setting in this
- paint.
- @param scale If not 0, return width as if the canvas were scaled
- by this value
- @param return the recommended spacing between lines
- */
- SkScalar getFontMetrics(FontMetrics* metrics, SkScalar scale = 0) const;
-
- /** Return the recommend line spacing. This will be
- fDescent - fAscent + fLeading
- */
- SkScalar getFontSpacing() const { return this->getFontMetrics(NULL, 0); }
-
- /** Convert the specified text into glyph IDs, returning the number of
- glyphs ID written. If glyphs is NULL, it is ignore and only the count
- is returned.
- */
- int textToGlyphs(const void* text, size_t byteLength,
- uint16_t glyphs[]) const;
-
- /** Return the number of drawable units in the specified text buffer.
- This looks at the current TextEncoding field of the paint. If you also
- want to have the text converted into glyph IDs, call textToGlyphs
- instead.
- */
- int countText(const void* text, size_t byteLength) const
- {
- return this->textToGlyphs(text, byteLength, NULL);
- }
-
- /** Return the width of the text.
- @param text The text to be measured
- @param length Number of bytes of text to measure
- @param bounds If not NULL, returns the bounds of the text,
- relative to (0, 0).
- @param scale If not 0, return width as if the canvas were scaled
- by this value
- @return The advance width of the text
- */
- SkScalar measureText(const void* text, size_t length,
- SkRect* bounds, SkScalar scale = 0) const;
-
- /** Return the width of the text.
- @param text Address of the text
- @param length Number of bytes of text to measure
- @return The width of the text
- */
- SkScalar measureText(const void* text, size_t length) const
- {
- return this->measureText(text, length, NULL, 0);
- }
-
- /** Specify the direction the text buffer should be processed in breakText()
- */
- enum TextBufferDirection {
- /** When measuring text for breakText(), begin at the start of the text
- buffer and proceed forward through the data. This is the default.
- */
- kForward_TextBufferDirection,
- /** When measuring text for breakText(), begin at the end of the text
- buffer and proceed backwards through the data.
- */
- kBackward_TextBufferDirection
- };
-
- /** Return the width of the text.
- @param text The text to be measured
- @param length Number of bytes of text to measure
- @param maxWidth Maximum width. Only the subset of text whose accumulated
- widths are <= maxWidth are measured.
- @param measuredWidth Optional. If non-null, this returns the actual
- width of the measured text.
- @param tbd Optional. The direction the text buffer should be
- traversed during measuring.
- @return The number of bytes of text that were measured. Will be
- <= length.
- */
- size_t breakText(const void* text, size_t length, SkScalar maxWidth,
- SkScalar* measuredWidth = NULL,
- TextBufferDirection tbd = kForward_TextBufferDirection)
- const;
-
- /** Return the advance widths for the characters in the string.
- @param text the text
- @param byteLength number of bytes to of text
- @param widths If not null, returns the array of advance widths of
- the glyphs. If not NULL, must be at least a large
- as the number of unichars in the specified text.
- @param bounds If not null, returns the bounds for each of
- character, relative to (0, 0)
- @return the number of unichars in the specified text.
- */
- int getTextWidths(const void* text, size_t byteLength, SkScalar widths[],
- SkRect bounds[] = NULL) const;
-
- /** Return the path (outline) for the specified text.
- Note: just like SkCanvas::drawText, this will respect the Align setting
- in the paint.
- */
- void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y,
- SkPath* path) const;
-
-private:
- SkTypeface* fTypeface;
- SkScalar fTextSize;
- SkScalar fTextScaleX;
- SkScalar fTextSkewX;
-
- SkPathEffect* fPathEffect;
- SkShader* fShader;
- SkXfermode* fXfermode;
- SkMaskFilter* fMaskFilter;
- SkColorFilter* fColorFilter;
- SkRasterizer* fRasterizer;
- SkDrawLooper* fLooper;
-
- SkColor fColor;
- SkScalar fWidth;
- SkScalar fMiterLimit;
- unsigned fFlags : 9;
- unsigned fTextAlign : 2;
- unsigned fCapType : 2;
- unsigned fJoinType : 2;
- unsigned fStyle : 2;
- unsigned fTextEncoding : 2; // 3 values
-
- SkDrawCacheProc getDrawCacheProc() const;
- SkMeasureCacheProc getMeasureCacheProc(TextBufferDirection dir,
- bool needFullMetrics) const;
-
- SkScalar measure_text(SkGlyphCache*, const char* text, size_t length,
- int* count, SkRect* bounds) const;
-
- SkGlyphCache* detachCache(const SkMatrix*) const;
-
- void descriptorProc(const SkMatrix* deviceMatrix,
- void (*proc)(const SkDescriptor*, void*),
- void* context) const;
-
- enum {
- kCanonicalTextSizeForPaths = 64
- };
- friend class SkCanvas;
- friend class SkDraw;
- friend class SkAutoGlyphCache;
- friend class SkTextToPathIter;
-};
-
-//////////////////////////////////////////////////////////////////////////
-
-#include "SkPathEffect.h"
-
-/** \class SkStrokePathEffect
-
- SkStrokePathEffect simulates stroking inside a patheffect, allowing the
- caller to have explicit control of when to stroke a path. Typically this is
- used if the caller wants to stroke before another patheffect is applied
- (using SkComposePathEffect or SkSumPathEffect).
-*/
-class SkStrokePathEffect : public SkPathEffect {
-public:
- SkStrokePathEffect(const SkPaint&);
- SkStrokePathEffect(SkScalar width, SkPaint::Style, SkPaint::Join,
- SkPaint::Cap, SkScalar miterLimit = -1);
-
- // overrides
- // This method is not exported to java.
- virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width);
-
- // overrides for SkFlattenable
- // This method is not exported to java.
- virtual void flatten(SkFlattenableWriteBuffer&);
- // This method is not exported to java.
- virtual Factory getFactory();
-
-private:
- SkScalar fWidth, fMiter;
- uint8_t fStyle, fJoin, fCap;
-
- static SkFlattenable* CreateProc(SkFlattenableReadBuffer&);
- SkStrokePathEffect(SkFlattenableReadBuffer&);
-
- typedef SkPathEffect INHERITED;
-
- // illegal
- SkStrokePathEffect(const SkStrokePathEffect&);
- SkStrokePathEffect& operator=(const SkStrokePathEffect&);
-};
-
-#endif
-
diff --git a/include/core/SkPath.h b/include/core/SkPath.h
deleted file mode 100644
index e2409ad..0000000
--- a/include/core/SkPath.h
+++ /dev/null
@@ -1,588 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPath_DEFINED
-#define SkPath_DEFINED
-
-#include "SkMatrix.h"
-#include "SkTDArray.h"
-
-class SkFlattenableReadBuffer;
-class SkFlattenableWriteBuffer;
-class SkAutoPathBoundsUpdate;
-class SkString;
-
-/** \class SkPath
-
- The SkPath class encapsulates compound (multiple contour) geometric paths
- consisting of straight line segments, quadratic curves, and cubic curves.
-*/
-class SkPath {
-public:
- SkPath();
- SkPath(const SkPath&);
- ~SkPath();
-
- SkPath& operator=(const SkPath&);
-
- enum FillType {
- /** Specifies that "inside" is computed by a non-zero sum of signed
- edge crossings
- */
- kWinding_FillType,
- /** Specifies that "inside" is computed by an odd number of edge
- crossings
- */
- kEvenOdd_FillType,
- /** Same as Winding, but draws outside of the path, rather than inside
- */
- kInverseWinding_FillType,
- /** Same as EvenOdd, but draws outside of the path, rather than inside
- */
- kInverseEvenOdd_FillType
- };
-
- /** Return the path's fill type. This is used to define how "inside" is
- computed. The default value is kWinding_FillType.
-
- @return the path's fill type
- */
- FillType getFillType() const { return (FillType)fFillType; }
-
- /** Set the path's fill type. This is used to define how "inside" is
- computed. The default value is kWinding_FillType.
-
- @param ft The new fill type for this path
- */
- void setFillType(FillType ft) { fFillType = SkToU8(ft); }
-
- /** Returns true if the filltype is one of the Inverse variants */
- bool isInverseFillType() const { return (fFillType & 2) != 0; }
-
- /** Toggle between inverse and normal filltypes. This reverse the return
- value of isInverseFillType()
- */
- void toggleInverseFillType() { fFillType ^= 2; }
-
- /** Clear any lines and curves from the path, making it empty. This frees up
- internal storage associated with those segments.
- This does NOT change the fill-type setting.
- */
- void reset();
-
- /** Similar to reset(), in that all lines and curves are removed from the
- path. However, any internal storage for those lines/curves is retained,
- making reuse of the path potentially faster.
- This does NOT change the fill-type setting.
- */
- void rewind();
-
- /** Returns true if the path is empty (contains no lines or curves)
-
- @return true if the path is empty (contains no lines or curves)
- */
- bool isEmpty() const;
-
- /** Returns true if the path specifies a rectangle. If so, and if rect is
- not null, set rect to the bounds of the path. If the path does not
- specify a rectangle, return false and ignore rect.
-
- @param rect If not null, returns the bounds of the path if it specifies
- a rectangle
- @return true if the path specifies a rectangle
- */
- bool isRect(SkRect* rect) const;
-
- /** Returns the number of points in the path. Up to max points are copied.
-
- @param points If not null, receives up to max points
- @param max The maximum number of points to copy into points
- @return the actual number of points in the path
- */
- int getPoints(SkPoint points[], int max) const;
-
- //! Swap contents of this and other. Guaranteed not to throw
- void swap(SkPath& other);
-
- enum BoundsType {
- /** compute the bounds of the path's control points, may be larger than
- with kExact_BoundsType, but may be faster to compute
- */
- kFast_BoundsType,
- /** compute the exact bounds of the path, may be smaller than with
- kFast_BoundsType, but may be slower to compute
- */
- kExact_BoundsType
- };
-
- /** Compute the bounds of the path, and write the answer into bounds. If the
- path contains 0 or 1 points, the bounds is set to (0,0,0,0)
-
- @param bounds Returns the computed bounds of the path
- @param btype Specifies if the computed bounds should be exact
- (slower) or approximate (faster)
- */
- void computeBounds(SkRect* bounds, BoundsType btype) const;
-
- /** Calling this will, if the internal cache of the bounds is out of date,
- update it so that subsequent calls to computeBounds will be instanteous.
- This also means that any copies or simple transformations of the path
- will inherit the cached bounds.
- */
- void updateBoundsCache() const;
-
- // Construction methods
-
- /** Hint to the path to prepare for adding more points. This can allow the
- path to more efficiently grow its storage.
-
- @param extraPtCount The number of extra points the path should
- preallocate for.
- */
- void incReserve(unsigned extraPtCount);
-
- /** Set the beginning of the next contour to the point (x,y).
-
- @param x The x-coordinate of the start of a new contour
- @param y The y-coordinate of the start of a new contour
- */
- void moveTo(SkScalar x, SkScalar y);
-
- /** Set the beginning of the next contour to the point
-
- @param p The start of a new contour
- */
- void moveTo(const SkPoint& p) {
- this->moveTo(p.fX, p.fY);
- }
-
- /** Set the beginning of the next contour relative to the last point on the
- previous contour. If there is no previous contour, this is treated the
- same as moveTo().
-
- @param dx The amount to add to the x-coordinate of the end of the
- previous contour, to specify the start of a new contour
- @param dy The amount to add to the y-coordinate of the end of the
- previous contour, to specify the start of a new contour
- */
- void rMoveTo(SkScalar dx, SkScalar dy);
-
- /** Add a line from the last point to the specified point (x,y). If no
- moveTo() call has been made for this contour, the first point is
- automatically set to (0,0).
-
- @param x The x-coordinate of the end of a line
- @param y The y-coordinate of the end of a line
- */
- void lineTo(SkScalar x, SkScalar y);
-
- /** Add a line from the last point to the specified point. If no moveTo()
- call has been made for this contour, the first point is automatically
- set to (0,0).
-
- @param p The end of a line
- */
- void lineTo(const SkPoint& p) {
- this->lineTo(p.fX, p.fY);
- }
-
- /** Same as lineTo, but the coordinates are considered relative to the last
- point on this contour. If there is no previous point, then a moveTo(0,0)
- is inserted automatically.
-
- @param dx The amount to add to the x-coordinate of the previous point
- on this contour, to specify a line
- @param dy The amount to add to the y-coordinate of the previous point
- on this contour, to specify a line
- */
- void rLineTo(SkScalar dx, SkScalar dy);
-
- /** Add a quadratic bezier from the last point, approaching control point
- (x1,y1), and ending at (x2,y2). If no moveTo() call has been made for
- this contour, the first point is automatically set to (0,0).
-
- @param x1 The x-coordinate of the control point on a quadratic curve
- @param y1 The y-coordinate of the control point on a quadratic curve
- @param x2 The x-coordinate of the end point on a quadratic curve
- @param y2 The y-coordinate of the end point on a quadratic curve
- */
- void quadTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2);
-
- /** Add a quadratic bezier from the last point, approaching control point
- p1, and ending at p2. If no moveTo() call has been made for this
- contour, the first point is automatically set to (0,0).
-
- @param p1 The control point on a quadratic curve
- @param p2 The end point on a quadratic curve
- */
- void quadTo(const SkPoint& p1, const SkPoint& p2) {
- this->quadTo(p1.fX, p1.fY, p2.fX, p2.fY);
- }
-
- /** Same as quadTo, but the coordinates are considered relative to the last
- point on this contour. If there is no previous point, then a moveTo(0,0)
- is inserted automatically.
-
- @param dx1 The amount to add to the x-coordinate of the last point on
- this contour, to specify the control point of a quadratic curve
- @param dy1 The amount to add to the y-coordinate of the last point on
- this contour, to specify the control point of a quadratic curve
- @param dx2 The amount to add to the x-coordinate of the last point on
- this contour, to specify the end point of a quadratic curve
- @param dy2 The amount to add to the y-coordinate of the last point on
- this contour, to specify the end point of a quadratic curve
- */
- void rQuadTo(SkScalar dx1, SkScalar dy1, SkScalar dx2, SkScalar dy2);
-
- /** Add a cubic bezier from the last point, approaching control points
- (x1,y1) and (x2,y2), and ending at (x3,y3). If no moveTo() call has been
- made for this contour, the first point is automatically set to (0,0).
-
- @param x1 The x-coordinate of the 1st control point on a cubic curve
- @param y1 The y-coordinate of the 1st control point on a cubic curve
- @param x2 The x-coordinate of the 2nd control point on a cubic curve
- @param y2 The y-coordinate of the 2nd control point on a cubic curve
- @param x3 The x-coordinate of the end point on a cubic curve
- @param y3 The y-coordinate of the end point on a cubic curve
- */
- void cubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2,
- SkScalar x3, SkScalar y3);
-
- /** Add a cubic bezier from the last point, approaching control points p1
- and p2, and ending at p3. If no moveTo() call has been made for this
- contour, the first point is automatically set to (0,0).
-
- @param p1 The 1st control point on a cubic curve
- @param p2 The 2nd control point on a cubic curve
- @param p3 The end point on a cubic curve
- */
- void cubicTo(const SkPoint& p1, const SkPoint& p2, const SkPoint& p3) {
- this->cubicTo(p1.fX, p1.fY, p2.fX, p2.fY, p3.fX, p3.fY);
- }
-
- /** Same as cubicTo, but the coordinates are considered relative to the
- current point on this contour. If there is no previous point, then a
- moveTo(0,0) is inserted automatically.
-
- @param dx1 The amount to add to the x-coordinate of the last point on
- this contour, to specify the 1st control point of a cubic curve
- @param dy1 The amount to add to the y-coordinate of the last point on
- this contour, to specify the 1st control point of a cubic curve
- @param dx2 The amount to add to the x-coordinate of the last point on
- this contour, to specify the 2nd control point of a cubic curve
- @param dy2 The amount to add to the y-coordinate of the last point on
- this contour, to specify the 2nd control point of a cubic curve
- @param dx3 The amount to add to the x-coordinate of the last point on
- this contour, to specify the end point of a cubic curve
- @param dy3 The amount to add to the y-coordinate of the last point on
- this contour, to specify the end point of a cubic curve
- */
- void rCubicTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2,
- SkScalar x3, SkScalar y3);
-
- /** Append the specified arc to the path as a new contour. If the start of
- the path is different from the path's current last point, then an
- automatic lineTo() is added to connect the current contour to the start
- of the arc. However, if the path is empty, then we call moveTo() with
- the first point of the arc. The sweep angle is treated mod 360.
-
- @param oval The bounding oval defining the shape and size of the arc
- @param startAngle Starting angle (in degrees) where the arc begins
- @param sweepAngle Sweep angle (in degrees) measured clockwise. This is
- treated mod 360.
- @param forceMoveTo If true, always begin a new contour with the arc
- */
- void arcTo(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle,
- bool forceMoveTo);
-
- /** Append a line and arc to the current path. This is the same as the
- PostScript call "arct".
- */
- void arcTo(SkScalar x1, SkScalar y1, SkScalar x2, SkScalar y2,
- SkScalar radius);
-
- /** Append a line and arc to the current path. This is the same as the
- PostScript call "arct".
- */
- void arcTo(const SkPoint p1, const SkPoint p2, SkScalar radius) {
- this->arcTo(p1.fX, p1.fY, p2.fX, p2.fY, radius);
- }
-
- /** Close the current contour. If the current point is not equal to the
- first point of the contour, a line segment is automatically added.
- */
- void close();
-
- enum Direction {
- /** clockwise direction for adding closed contours */
- kCW_Direction,
- /** counter-clockwise direction for adding closed contours */
- kCCW_Direction
- };
-
- /** Add a closed rectangle contour to the path
- @param rect The rectangle to add as a closed contour to the path
- @param dir The direction to wind the rectangle's contour
- */
- void addRect(const SkRect& rect, Direction dir = kCW_Direction);
-
- /** Add a closed rectangle contour to the path
-
- @param left The left side of a rectangle to add as a closed contour
- to the path
- @param top The top of a rectangle to add as a closed contour to the
- path
- @param right The right side of a rectangle to add as a closed contour
- to the path
- @param bottom The bottom of a rectangle to add as a closed contour to
- the path
- @param dir The direction to wind the rectangle's contour
- */
- void addRect(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom,
- Direction dir = kCW_Direction);
-
- /** Add a closed oval contour to the path
-
- @param oval The bounding oval to add as a closed contour to the path
- @param dir The direction to wind the oval's contour
- */
- void addOval(const SkRect& oval, Direction dir = kCW_Direction);
-
- /** Add a closed circle contour to the path
-
- @param x The x-coordinate of the center of a circle to add as a
- closed contour to the path
- @param y The y-coordinate of the center of a circle to add as a
- closed contour to the path
- @param radius The radius of a circle to add as a closed contour to the
- path
- @param dir The direction to wind the circle's contour
- */
- void addCircle(SkScalar x, SkScalar y, SkScalar radius,
- Direction dir = kCW_Direction);
-
- /** Add the specified arc to the path as a new contour.
-
- @param oval The bounds of oval used to define the size of the arc
- @param startAngle Starting angle (in degrees) where the arc begins
- @param sweepAngle Sweep angle (in degrees) measured clockwise
- */
- void addArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle);
-
- /** Add a closed round-rectangle contour to the path
- @param rect The bounds of a round-rectangle to add as a closed contour
- @param rx The x-radius of the rounded corners on the round-rectangle
- @param ry The y-radius of the rounded corners on the round-rectangle
- @param dir The direction to wind the round-rectangle's contour
- */
- void addRoundRect(const SkRect& rect, SkScalar rx, SkScalar ry,
- Direction dir = kCW_Direction);
-
- /** Add a closed round-rectangle contour to the path. Each corner receives
- two radius values [X, Y]. The corners are ordered top-left, top-right,
- bottom-right, bottom-left.
- @param rect The bounds of a round-rectangle to add as a closed contour
- @param radii Array of 8 scalars, 4 [X,Y] pairs for each corner
- @param dir The direction to wind the round-rectangle's contour
- */
- void addRoundRect(const SkRect& rect, const SkScalar radii[],
- Direction dir = kCW_Direction);
-
- /** Add a copy of src to the path, offset by (dx,dy)
- @param src The path to add as a new contour
- @param dx The amount to translate the path in X as it is added
- @param dx The amount to translate the path in Y as it is added
- */
- void addPath(const SkPath& src, SkScalar dx, SkScalar dy);
-
- /** Add a copy of src to the path
- */
- void addPath(const SkPath& src) {
- SkMatrix m;
- m.reset();
- this->addPath(src, m);
- }
-
- /** Add a copy of src to the path, transformed by matrix
- @param src The path to add as a new contour
- */
- void addPath(const SkPath& src, const SkMatrix& matrix);
-
- /** Offset the path by (dx,dy), returning true on success
-
- @param dx The amount in the X direction to offset the entire path
- @param dy The amount in the Y direction to offset the entire path
- @param dst The translated path is written here
- */
- void offset(SkScalar dx, SkScalar dy, SkPath* dst) const;
-
- /** Offset the path by (dx,dy), returning true on success
-
- @param dx The amount in the X direction to offset the entire path
- @param dy The amount in the Y direction to offset the entire path
- */
- void offset(SkScalar dx, SkScalar dy) {
- this->offset(dx, dy, this);
- }
-
- /** Transform the points in this path by matrix, and write the answer into
- dst.
-
- @param matrix The matrix to apply to the path
- @param dst The transformed path is written here
- */
- void transform(const SkMatrix& matrix, SkPath* dst) const;
-
- /** Transform the points in this path by matrix
-
- @param matrix The matrix to apply to the path
- */
- void transform(const SkMatrix& matrix) {
- this->transform(matrix, this);
- }
-
- /** Return the last point on the path. If no points have been added, (0,0)
- is returned.
-
- @param lastPt The last point on the path is returned here
- */
- void getLastPt(SkPoint* lastPt) const;
-
- /** Set the last point on the path. If no points have been added,
- moveTo(x,y) is automatically called.
-
- @param x The new x-coordinate for the last point
- @param y The new y-coordinate for the last point
- */
- void setLastPt(SkScalar x, SkScalar y);
-
- /** Set the last point on the path. If no points have been added, moveTo(p)
- is automatically called.
-
- @param p The new location for the last point
- */
- void setLastPt(const SkPoint& p) {
- this->setLastPt(p.fX, p.fY);
- }
-
- enum Verb {
- kMove_Verb, //!< iter.next returns 1 point
- kLine_Verb, //!< iter.next returns 2 points
- kQuad_Verb, //!< iter.next returns 3 points
- kCubic_Verb, //!< iter.next returns 4 points
- kClose_Verb, //!< iter.next returns 1 point (the last point)
- kDone_Verb //!< iter.next returns 0 points
- };
-
- /** Iterate through all of the segments (lines, quadratics, cubics) of
- each contours in a path.
- */
- class Iter {
- public:
- Iter();
- Iter(const SkPath&, bool forceClose);
-
- void setPath(const SkPath&, bool forceClose);
-
- /** Return the next verb in this iteration of the path. When all
- segments have been visited, return kDone_Verb.
-
- @param pts The points representing the current verb and/or segment
- @return The verb for the current segment
- */
- Verb next(SkPoint pts[4]);
-
- /** If next() returns kLine_Verb, then this query returns true if the
- line was the result of a close() command (i.e. the end point is the
- initial moveto for this contour). If next() returned a different
- verb, this returns an undefined value.
-
- @return If the last call to next() returned kLine_Verb, return true
- if it was the result of an explicit close command.
- */
- bool isCloseLine() const { return SkToBool(fCloseLine); }
-
- /** Returns true if the current contour is closed (has a kClose_Verb)
- @return true if the current contour is closed (has a kClose_Verb)
- */
- bool isClosedContour() const;
-
- private:
- const SkPoint* fPts;
- const uint8_t* fVerbs;
- const uint8_t* fVerbStop;
- SkPoint fMoveTo;
- SkPoint fLastPt;
- SkBool8 fForceClose;
- SkBool8 fNeedClose;
- SkBool8 fNeedMoveTo;
- SkBool8 fCloseLine;
-
- bool cons_moveTo(SkPoint pts[1]);
- Verb autoClose(SkPoint pts[2]);
- };
-
-#ifdef SK_DEBUG
- /** @cond UNIT_TEST */
- void dump(bool forceClose, const char title[] = NULL) const;
- static void UnitTest();
- /** @endcond */
-#endif
-
- void flatten(SkFlattenableWriteBuffer&) const;
- void unflatten(SkFlattenableReadBuffer&);
-
- /** Subdivide the path so that no segment is longer that dist.
- If bendLines is true, then turn all line segments into curves.
- If dst == null, then the original path itself is modified (not const!)
- */
- void subdivide(SkScalar dist, bool bendLines, SkPath* dst = NULL) const;
-
- /** Return an SVG-compatible string of the path.
- */
- void toString(SkString*) const;
-
- SkDEBUGCODE(void validate() const;)
-
-private:
- SkTDArray<SkPoint> fPts;
- SkTDArray<uint8_t> fVerbs;
- mutable SkRect fFastBounds;
- mutable uint8_t fFastBoundsIsDirty;
- uint8_t fFillType;
-
- friend class Iter;
- void cons_moveto();
-
- friend class SkPathStroker;
- /* Append the first contour of path, ignoring path's initial point. If no
- moveTo() call has been made for this contour, the first point is
- automatically set to (0,0).
- */
- void pathTo(const SkPath& path);
-
- /* Append, in reverse order, the first contour of path, ignoring path's
- last point. If no moveTo() call has been made for this contour, the
- first point is automatically set to (0,0).
- */
- void reversePathTo(const SkPath&);
-
- friend const SkPoint* sk_get_path_points(const SkPath&, int index);
- friend class SkAutoPathBoundsUpdate;
-};
-
-#endif
-
diff --git a/include/core/SkPathEffect.h b/include/core/SkPathEffect.h
deleted file mode 100644
index f97adb7..0000000
--- a/include/core/SkPathEffect.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPathEffect_DEFINED
-#define SkPathEffect_DEFINED
-
-#include "SkFlattenable.h"
-
-class SkPath;
-
-/** \class SkPathEffect
-
- SkPathEffect is the base class for objects in the SkPaint that affect
- the geometry of a drawing primitive before it is transformed by the
- canvas' matrix and drawn.
-
- Dashing is implemented as a subclass of SkPathEffect.
-*/
-class SkPathEffect : public SkFlattenable {
-public:
- // This method is not exported to java.
- SkPathEffect() {}
-
- /** Given a src path and a width value, return true if the patheffect
- has produced a new path (dst) and a new width value. If false is returned,
- ignore dst and width.
- On input, width >= 0 means the src should be stroked
- On output, width >= 0 means the dst should be stroked
- */
- virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width) = 0;
-
-private:
- // illegal
- SkPathEffect(const SkPathEffect&);
- SkPathEffect& operator=(const SkPathEffect&);
-};
-
-/** \class SkPairPathEffect
-
- Common baseclass for Compose and Sum. This subclass manages two pathEffects,
- including flattening them. It does nothing in filterPath, and is only useful
- for managing the lifetimes of its two arguments.
-*/
-class SkPairPathEffect : public SkPathEffect {
-public:
- SkPairPathEffect(SkPathEffect* pe0, SkPathEffect* pe1);
- virtual ~SkPairPathEffect();
-
-protected:
- SkPairPathEffect(SkFlattenableReadBuffer&);
- virtual void flatten(SkFlattenableWriteBuffer&);
- // these are visible to our subclasses
- SkPathEffect* fPE0, *fPE1;
-
-private:
- typedef SkPathEffect INHERITED;
-};
-
-/** \class SkComposePathEffect
-
- This subclass of SkPathEffect composes its two arguments, to create
- a compound pathEffect.
-*/
-class SkComposePathEffect : public SkPairPathEffect {
-public:
- /** Construct a pathEffect whose effect is to apply first the inner pathEffect
- and the the outer pathEffect (e.g. outer(inner(path)))
- The reference counts for outer and inner are both incremented in the constructor,
- and decremented in the destructor.
- */
- SkComposePathEffect(SkPathEffect* outer, SkPathEffect* inner)
- : INHERITED(outer, inner) {}
-
- // overrides
-
- // This method is not exported to java.
- virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width);
-
-protected:
- virtual Factory getFactory() { return CreateProc; }
-
-private:
- static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
- return SkNEW_ARGS(SkComposePathEffect, (buffer));
- }
- SkComposePathEffect(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
-
- // illegal
- SkComposePathEffect(const SkComposePathEffect&);
- SkComposePathEffect& operator=(const SkComposePathEffect&);
-
- typedef SkPairPathEffect INHERITED;
-};
-
-/** \class SkSumPathEffect
-
- This subclass of SkPathEffect applies two pathEffects, one after the other.
- Its filterPath() returns true if either of the effects succeeded.
-*/
-class SkSumPathEffect : public SkPairPathEffect {
-public:
- /** Construct a pathEffect whose effect is to apply two effects, in sequence.
- (e.g. first(path) + second(path))
- The reference counts for first and second are both incremented in the constructor,
- and decremented in the destructor.
- */
- SkSumPathEffect(SkPathEffect* first, SkPathEffect* second)
- : INHERITED(first, second) {}
-
- // overrides
- // This method is not exported to java.
- virtual bool filterPath(SkPath* dst, const SkPath& src, SkScalar* width);
-
-protected:
- virtual Factory getFactory() { return CreateProc; }
-
-private:
- static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
- return SkNEW_ARGS(SkSumPathEffect, (buffer));
- }
- SkSumPathEffect(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {}
-
- // illegal
- SkSumPathEffect(const SkSumPathEffect&);
- SkSumPathEffect& operator=(const SkSumPathEffect&);
-
- typedef SkPairPathEffect INHERITED;
-};
-
-#endif
-
diff --git a/include/core/SkPathMeasure.h b/include/core/SkPathMeasure.h
deleted file mode 100644
index 5ab97ca..0000000
--- a/include/core/SkPathMeasure.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPathMeasure_DEFINED
-#define SkPathMeasure_DEFINED
-
-#include "SkPath.h"
-#include "SkTDArray.h"
-
-class SkPathMeasure : SkNoncopyable {
-public:
- SkPathMeasure();
- /** Initialize the pathmeasure with the specified path. The path must remain valid
- for the lifetime of the measure object, or until setPath() is called with
- a different path (or null), since the measure object keeps a pointer to the
- path object (does not copy its data).
- */
- SkPathMeasure(const SkPath& path, bool forceClosed);
- ~SkPathMeasure();
-
- /** Reset the pathmeasure with the specified path. The path must remain valid
- for the lifetime of the measure object, or until setPath() is called with
- a different path (or null), since the measure object keeps a pointer to the
- path object (does not copy its data).
- */
- void setPath(const SkPath*, bool forceClosed);
-
- /** Return the total length of the current contour, or 0 if no path
- is associated (e.g. resetPath(null))
- */
- SkScalar getLength();
-
- /** Pins distance to 0 <= distance <= getLength(), and then computes
- the corresponding position and tangent.
- Returns false if there is no path, or a zero-length path was specified, in which case
- position and tangent are unchanged.
- */
- bool getPosTan(SkScalar distance, SkPoint* position, SkVector* tangent);
-
- enum MatrixFlags {
- kGetPosition_MatrixFlag = 0x01,
- kGetTangent_MatrixFlag = 0x02,
- kGetPosAndTan_MatrixFlag = kGetPosition_MatrixFlag | kGetTangent_MatrixFlag
- };
- /** Pins distance to 0 <= distance <= getLength(), and then computes
- the corresponding matrix (by calling getPosTan).
- Returns false if there is no path, or a zero-length path was specified, in which case
- matrix is unchanged.
- */
- bool getMatrix(SkScalar distance, SkMatrix* matrix, MatrixFlags flags = kGetPosAndTan_MatrixFlag);
- /** Given a start and stop distance, return in dst the intervening segment(s).
- If the segment is zero-length, return false, else return true.
- startD and stopD are pinned to legal values (0..getLength()). If startD <= stopD
- then return false (and leave dst untouched).
- Begin the segment with a moveTo if startWithMoveTo is true
- */
- bool getSegment(SkScalar startD, SkScalar stopD, SkPath* dst, bool startWithMoveTo);
-
- /** Return true if the current contour is closed()
- */
- bool isClosed();
-
- /** Move to the next contour in the path. Return true if one exists, or false if
- we're done with the path.
- */
- bool nextContour();
-
-#ifdef SK_DEBUG
- void dump();
- static void UnitTest();
-#endif
-
-private:
- SkPath::Iter fIter;
- const SkPath* fPath;
- SkScalar fLength; // relative to the current contour
- int fFirstPtIndex; // relative to the current contour
- bool fIsClosed; // relative to the current contour
- bool fForceClosed;
-
- struct Segment {
- SkScalar fDistance; // total distance up to this point
- unsigned fPtIndex : 15;
- unsigned fTValue : 15;
- unsigned fType : 2;
-
- SkScalar getScalarT() const;
- };
- SkTDArray<Segment> fSegments;
-
- static const Segment* NextSegment(const Segment*);
-
- void buildSegments();
- SkScalar compute_quad_segs(const SkPoint pts[3], SkScalar distance,
- int mint, int maxt, int ptIndex);
- SkScalar compute_cubic_segs(const SkPoint pts[3], SkScalar distance,
- int mint, int maxt, int ptIndex);
- const Segment* distanceToSegment(SkScalar distance, SkScalar* t);
-};
-
-#endif
-
diff --git a/include/core/SkPerspIter.h b/include/core/SkPerspIter.h
deleted file mode 100644
index 81ce7c8..0000000
--- a/include/core/SkPerspIter.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPerspIter_DEFINED
-#define SkPerspIter_DEFINED
-
-#include "SkMatrix.h"
-
-class SkPerspIter {
-public:
- /** Iterate a line through the matrix [x,y] ... [x+count-1, y].
- @param m The matrix we will be iterating a line through
- @param x The initial X coordinate to be mapped through the matrix
- @param y The initial Y coordinate to be mapped through the matrix
- @param count The number of points (x,y) (x+1,y) (x+2,y) ... we will eventually map
- */
- SkPerspIter(const SkMatrix& m, SkScalar x, SkScalar y, int count);
-
- /** Return the buffer of [x,y] fixed point values we will be filling.
- This always returns the same value, so it can be saved across calls to
- next().
- */
- const SkFixed* getXY() const { return fStorage; }
-
- /** Return the number of [x,y] pairs that have been filled in the getXY() buffer.
- When this returns 0, the iterator is finished.
- */
- int next();
-
-private:
- enum {
- kShift = 4,
- kCount = (1 << kShift)
- };
- const SkMatrix& fMatrix;
- SkFixed fStorage[kCount * 2];
- SkFixed fX, fY;
- SkScalar fSX, fSY;
- int fCount;
-};
-
-#endif
diff --git a/include/core/SkPicture.h b/include/core/SkPicture.h
deleted file mode 100644
index be7bad5..0000000
--- a/include/core/SkPicture.h
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPicture_DEFINED
-#define SkPicture_DEFINED
-
-#include "SkRefCnt.h"
-
-class SkCanvas;
-class SkPicturePlayback;
-class SkPictureRecord;
-class SkStream;
-class SkWStream;
-
-/** \class SkPicture
-
- The SkPicture class records the drawing commands made to a canvas, to
- be played back at a later time.
-*/
-class SkPicture : public SkRefCnt {
-public:
- /** The constructor prepares the picture to record.
- @param width the width of the virtual device the picture records.
- @param height the height of the virtual device the picture records.
- */
- SkPicture();
- /** Make a copy of the contents of src. If src records more drawing after
- this call, those elements will not appear in this picture.
- */
- SkPicture(const SkPicture& src);
- explicit SkPicture(SkStream*);
- virtual ~SkPicture();
-
- /**
- * Swap the contents of the two pictures. Guaranteed to succeed.
- */
- void swap(SkPicture& other);
-
- enum RecordingFlags {
- /* This flag specifies that when clipPath() is called, the path will
- be faithfully recorded, but the recording canvas' current clip will
- only see the path's bounds. This speeds up the recording process
- without compromising the fidelity of the playback. The only side-
- effect for recording is that calling getTotalClip() or related
- clip-query calls will reflect the path's bounds, not the actual
- path.
- */
- kUsePathBoundsForClip_RecordingFlag = 0x01
- };
-
- /** Returns the canvas that records the drawing commands.
- @param width the base width for the picture, as if the recording
- canvas' bitmap had this width.
- @param height the base width for the picture, as if the recording
- canvas' bitmap had this height.
- @param recordFlags optional flags that control recording.
- @return the picture canvas.
- */
- SkCanvas* beginRecording(int width, int height, uint32_t recordFlags = 0);
-
- /** Returns the recording canvas if one is active, or NULL if recording is
- not active. This does not alter the refcnt on the canvas (if present).
- */
- SkCanvas* getRecordingCanvas() const;
- /** Signal that the caller is done recording. This invalidates the canvas
- returned by beginRecording/getRecordingCanvas, and prepares the picture
- for drawing. Note: this happens implicitly the first time the picture
- is drawn.
- */
- void endRecording();
-
- /** Replays the drawing commands on the specified canvas. This internally
- calls endRecording() if that has not already been called.
- @param surface the canvas receiving the drawing commands.
- */
- void draw(SkCanvas* surface);
-
- /** Return the width of the picture's recording canvas. This
- value reflects what was passed to setSize(), and does not necessarily
- reflect the bounds of what has been recorded into the picture.
- @return the width of the picture's recording canvas
- */
- int width() const { return fWidth; }
-
- /** Return the height of the picture's recording canvas. This
- value reflects what was passed to setSize(), and does not necessarily
- reflect the bounds of what has been recorded into the picture.
- @return the height of the picture's recording canvas
- */
- int height() const { return fHeight; }
-
- void serialize(SkWStream*) const;
-
- /** Signals that the caller is prematurely done replaying the drawing
- commands. This can be called from a canvas virtual while the picture
- is drawing. Has no effect if the picture is not drawing.
- */
- void abortPlayback();
-
-private:
- int fWidth, fHeight;
- SkPictureRecord* fRecord;
- SkPicturePlayback* fPlayback;
-
- friend class SkFlatPicture;
- friend class SkPicturePlayback;
-};
-
-class SkAutoPictureRecord : SkNoncopyable {
-public:
- SkAutoPictureRecord(SkPicture* pict, int width, int height,
- uint32_t recordingFlags = 0) {
- fPicture = pict;
- fCanvas = pict->beginRecording(width, height, recordingFlags);
- }
- ~SkAutoPictureRecord() {
- fPicture->endRecording();
- }
-
- /** Return the canvas to draw into for recording into the picture.
- */
- SkCanvas* getRecordingCanvas() const { return fCanvas; }
-
-private:
- SkPicture* fPicture;
- SkCanvas* fCanvas;
-};
-
-
-#endif
diff --git a/include/core/SkPixelRef.h b/include/core/SkPixelRef.h
deleted file mode 100644
index 82e5ca7..0000000
--- a/include/core/SkPixelRef.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPixelRef_DEFINED
-#define SkPixelRef_DEFINED
-
-#include "SkRefCnt.h"
-#include "SkString.h"
-
-class SkColorTable;
-class SkMutex;
-class SkFlattenableReadBuffer;
-class SkFlattenableWriteBuffer;
-
-/** \class SkPixelRef
-
- This class is the smart container for pixel memory, and is used with
- SkBitmap. A pixelref is installed into a bitmap, and then the bitmap can
- access the actual pixel memory by calling lockPixels/unlockPixels.
-
- This class can be shared/accessed between multiple threads.
-*/
-class SkPixelRef : public SkRefCnt {
-public:
- explicit SkPixelRef(SkMutex* mutex = NULL);
-
- /** Return the pixel memory returned from lockPixels, or null if the
- lockCount is 0.
- */
- void* pixels() const { return fPixels; }
-
- /** Return the current colorTable (if any) if pixels are locked, or null.
- */
- SkColorTable* colorTable() const { return fColorTable; }
-
- /** Return the current lockcount (defaults to 0)
- */
- int getLockCount() const { return fLockCount; }
-
- /** Call to access the pixel memory, which is returned. Balance with a call
- to unlockPixels().
- */
- void lockPixels();
- /** Call to balanace a previous call to lockPixels(). Returns the pixels
- (or null) after the unlock. NOTE: lock calls can be nested, but the
- matching number of unlock calls must be made in order to free the
- memory (if the subclass implements caching/deferred-decoding.)
- */
- void unlockPixels();
-
- /** Returns a non-zero, unique value corresponding to the pixels in this
- pixelref. Each time the pixels are changed (and notifyPixelsChanged is
- called), a different generation ID will be returned.
- */
- uint32_t getGenerationID() const;
-
- /** Call this if you have changed the contents of the pixels. This will in-
- turn cause a different generation ID value to be returned from
- getGenerationID().
- */
- void notifyPixelsChanged();
-
- /** Returns true if this pixelref is marked as immutable, meaning that the
- contents of its pixels will not change for the lifetime of the pixelref.
- */
- bool isImmutable() const { return fIsImmutable; }
-
- /** Marks this pixelref is immutable, meaning that the contents of its
- pixels will not change for the lifetime of the pixelref. This state can
- be set on a pixelref, but it cannot be cleared once it is set.
- */
- void setImmutable();
-
- /** Return the optional URI string associated with this pixelref. May be
- null.
- */
- const char* getURI() const { return fURI.size() ? fURI.c_str() : NULL; }
-
- /** Copy a URI string to this pixelref, or clear the URI if the uri is null
- */
- void setURI(const char uri[]) {
- fURI.set(uri);
- }
-
- /** Copy a URI string to this pixelref
- */
- void setURI(const char uri[], size_t len) {
- fURI.set(uri, len);
- }
-
- /** Assign a URI string to this pixelref.
- */
- void setURI(const SkString& uri) { fURI = uri; }
-
- // serialization
-
- typedef SkPixelRef* (*Factory)(SkFlattenableReadBuffer&);
-
- virtual Factory getFactory() const { return NULL; }
- virtual void flatten(SkFlattenableWriteBuffer&) const;
-
- static Factory NameToFactory(const char name[]);
- static const char* FactoryToName(Factory);
- static void Register(const char name[], Factory);
-
- class Registrar {
- public:
- Registrar(const char name[], Factory factory) {
- SkPixelRef::Register(name, factory);
- }
- };
-
-protected:
- /** Called when the lockCount goes from 0 to 1. The caller will have already
- acquire a mutex for thread safety, so this method need not do that.
- */
- virtual void* onLockPixels(SkColorTable**) = 0;
- /** Called when the lock count goes from 1 to 0. The caller will have
- already acquire a mutex for thread safety, so this method need not do
- that.
- */
- virtual void onUnlockPixels() = 0;
-
- /** Return the mutex associated with this pixelref. This value is assigned
- in the constructor, and cannot change during the lifetime of the object.
- */
- SkMutex* mutex() const { return fMutex; }
-
- SkPixelRef(SkFlattenableReadBuffer&, SkMutex*);
-
-private:
- SkMutex* fMutex; // must remain in scope for the life of this object
- void* fPixels;
- SkColorTable* fColorTable; // we do not track ownership, subclass does
- int fLockCount;
-
- mutable uint32_t fGenerationID;
-
- SkString fURI;
-
- // can go from false to true, but never from true to false
- bool fIsImmutable;
-};
-
-#endif
diff --git a/include/core/SkPoint.h b/include/core/SkPoint.h
deleted file mode 100644
index d23f696..0000000
--- a/include/core/SkPoint.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPoint_DEFINED
-#define SkPoint_DEFINED
-
-#include "SkMath.h"
-#include "SkScalar.h"
-
-/** \struct SkIPoint
-
- SkIPoint holds two 32 bit integer coordinates
-*/
-struct SkIPoint {
- int32_t fX, fY;
-
- /** Set the x and y values of the point. */
- void set(int32_t x, int32_t y) { fX = x; fY = y; }
-
- /** Rotate the point clockwise, writing the new point into dst
- It is legal for dst == this
- */
- void rotateCW(SkIPoint* dst) const;
-
- /** Rotate the point clockwise, writing the new point back into the point
- */
-
- void rotateCW() { this->rotateCW(this); }
-
- /** Rotate the point counter-clockwise, writing the new point into dst.
- It is legal for dst == this
- */
- void rotateCCW(SkIPoint* dst) const;
-
- /** Rotate the point counter-clockwise, writing the new point back into
- the point
- */
- void rotateCCW() { this->rotateCCW(this); }
-
- /** Negate the X and Y coordinates of the point.
- */
- void negate() { fX = -fX; fY = -fY; }
-
- /** Return a new point whose X and Y coordinates are the negative of the
- original point's
- */
- SkIPoint operator-() const {
- SkIPoint neg;
- neg.fX = -fX;
- neg.fY = -fY;
- return neg;
- }
-
- /** Add v's coordinates to this point's */
- void operator+=(const SkIPoint& v) {
- fX += v.fX;
- fY += v.fY;
- }
-
- /** Subtract v's coordinates from this point's */
- void operator-=(const SkIPoint& v) {
- fX -= v.fX;
- fY -= v.fY;
- }
-
- /** Returns true if the point's coordinates equal (x,y) */
- bool equals(int32_t x, int32_t y) const {
- return fX == x && fY == y;
- }
-
- friend bool operator==(const SkIPoint& a, const SkIPoint& b) {
- return a.fX == b.fX && a.fY == b.fY;
- }
-
- friend bool operator!=(const SkIPoint& a, const SkIPoint& b) {
- return a.fX != b.fX || a.fY != b.fY;
- }
-
- /** Returns a new point whose coordinates are the difference between
- a and b (i.e. a - b)
- */
- friend SkIPoint operator-(const SkIPoint& a, const SkIPoint& b) {
- SkIPoint v;
- v.set(a.fX - b.fX, a.fY - b.fY);
- return v;
- }
-
- /** Returns a new point whose coordinates are the sum of a and b (a + b)
- */
- friend SkIPoint operator+(const SkIPoint& a, const SkIPoint& b) {
- SkIPoint v;
- v.set(a.fX + b.fX, a.fY + b.fY);
- return v;
- }
-
- /** Returns the dot product of a and b, treating them as 2D vectors
- */
- static int32_t DotProduct(const SkIPoint& a, const SkIPoint& b) {
- return a.fX * b.fX + a.fY * b.fY;
- }
-
- /** Returns the cross product of a and b, treating them as 2D vectors
- */
- static int32_t CrossProduct(const SkIPoint& a, const SkIPoint& b) {
- return a.fX * b.fY - a.fY * b.fX;
- }
-};
-
-struct SkPoint {
- SkScalar fX, fY;
-
- /** Set the point's X and Y coordinates */
- void set(SkScalar x, SkScalar y) { fX = x; fY = y; }
-
- /** Set the point's X and Y coordinates by automatically promoting (x,y) to
- SkScalar values.
- */
- void iset(int32_t x, int32_t y) {
- fX = SkIntToScalar(x);
- fY = SkIntToScalar(y);
- }
-
- /** Set the point's X and Y coordinates by automatically promoting p's
- coordinates to SkScalar values.
- */
- void iset(const SkIPoint& p) {
- fX = SkIntToScalar(p.fX);
- fY = SkIntToScalar(p.fY);
- }
-
- /** Return the euclidian distance from (0,0) to the point
- */
- SkScalar length() const { return SkPoint::Length(fX, fY); }
-
- /** Set the point (vector) to be unit-length in the same direction as it
- currently is, and return its old length. If the old length is
- degenerately small (nearly zero), do nothing and return false, otherwise
- return true.
- */
- bool normalize();
-
- /** Set the point (vector) to be unit-length in the same direction as the
- x,y params. If the vector (x,y) has a degenerate length (i.e. nearly 0)
- then return false and do nothing, otherwise return true.
- */
- bool setNormalize(SkScalar x, SkScalar y);
-
- /** Scale the point (vector) to have the specified length, and return that
- length. If the original length is degenerately small (nearly zero),
- do nothing and return false, otherwise return true.
- */
- bool setLength(SkScalar length);
-
- /** Set the point (vector) to have the specified length in the same
- direction as (x,y). If the vector (x,y) has a degenerate length
- (i.e. nearly 0) then return false and do nothing, otherwise return true.
- */
- bool setLength(SkScalar x, SkScalar y, SkScalar length);
-
- /** Scale the point's coordinates by scale, writing the answer into dst.
- It is legal for dst == this.
- */
- void scale(SkScalar scale, SkPoint* dst) const;
-
- /** Scale the point's coordinates by scale, writing the answer back into
- the point.
- */
- void scale(SkScalar value) { this->scale(value, this); }
-
- /** Rotate the point clockwise by 90 degrees, writing the answer into dst.
- It is legal for dst == this.
- */
- void rotateCW(SkPoint* dst) const;
-
- /** Rotate the point clockwise by 90 degrees, writing the answer back into
- the point.
- */
- void rotateCW() { this->rotateCW(this); }
-
- /** Rotate the point counter-clockwise by 90 degrees, writing the answer
- into dst. It is legal for dst == this.
- */
- void rotateCCW(SkPoint* dst) const;
-
- /** Rotate the point counter-clockwise by 90 degrees, writing the answer
- back into the point.
- */
- void rotateCCW() { this->rotateCCW(this); }
-
- /** Negate the point's coordinates
- */
- void negate() {
- fX = -fX;
- fY = -fY;
- }
-
- /** Returns a new point whose coordinates are the negative of the point's
- */
- SkPoint operator-() const {
- SkPoint neg;
- neg.fX = -fX;
- neg.fY = -fY;
- return neg;
- }
-
- /** Add v's coordinates to the point's
- */
- void operator+=(const SkPoint& v) {
- fX += v.fX;
- fY += v.fY;
- }
-
- /** Subtract v's coordinates from the point's
- */
- void operator-=(const SkPoint& v) {
- fX -= v.fX;
- fY -= v.fY;
- }
-
- /** Returns true if the point's coordinates equal (x,y)
- */
- bool equals(SkScalar x, SkScalar y) const { return fX == x && fY == y; }
-
- friend bool operator==(const SkPoint& a, const SkPoint& b) {
- return a.fX == b.fX && a.fY == b.fY;
- }
-
- friend bool operator!=(const SkPoint& a, const SkPoint& b) {
- return a.fX != b.fX || a.fY != b.fY;
- }
-
- /** Returns a new point whose coordinates are the difference between
- a's and b's (a - b)
- */
- friend SkPoint operator-(const SkPoint& a, const SkPoint& b) {
- SkPoint v;
- v.set(a.fX - b.fX, a.fY - b.fY);
- return v;
- }
-
- /** Returns a new point whose coordinates are the sum of a's and b's (a + b)
- */
- friend SkPoint operator+(const SkPoint& a, const SkPoint& b) {
- SkPoint v;
- v.set(a.fX + b.fX, a.fY + b.fY);
- return v;
- }
-
- /** Returns the euclidian distance from (0,0) to (x,y)
- */
- static SkScalar Length(SkScalar x, SkScalar y);
-
- /** Returns the euclidian distance between a and b
- */
- static SkScalar Distance(const SkPoint& a, const SkPoint& b) {
- return Length(a.fX - b.fX, a.fY - b.fY);
- }
-
- /** Returns the dot product of a and b, treating them as 2D vectors
- */
- static SkScalar DotProduct(const SkPoint& a, const SkPoint& b) {
- return SkScalarMul(a.fX, b.fX) + SkScalarMul(a.fY, b.fY);
- }
-
- /** Returns the cross product of a and b, treating them as 2D vectors
- */
- static SkScalar CrossProduct(const SkPoint& a, const SkPoint& b) {
- return SkScalarMul(a.fX, b.fY) - SkScalarMul(a.fY, b.fX);
- }
-};
-
-typedef SkPoint SkVector;
-
-#endif
-
diff --git a/include/core/SkPorterDuff.h b/include/core/SkPorterDuff.h
deleted file mode 100644
index f03e9cb..0000000
--- a/include/core/SkPorterDuff.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPorterDuff_DEFINED
-#define SkPorterDuff_DEFINED
-
-#include "SkColor.h"
-
-class SkXfermode;
-
-class SkPorterDuff {
-public:
- /** List of predefined xfermodes. In general, the algebra for the modes
- uses the following symbols:
- Sa, Sc - source alpha and color
- Da, Dc - destination alpha and color (before compositing)
- [a, c] - Resulting (alpha, color) values
- For these equations, the colors are in premultiplied state.
- If no xfermode is specified, kSrcOver is assumed.
- */
- enum Mode {
- kClear_Mode, //!< [0, 0]
- kSrc_Mode, //!< [Sa, Sc]
- kDst_Mode, //!< [Da, Dc]
- kSrcOver_Mode, //!< [Sa + Da - Sa*Da, Rc = Sc + (1 - Sa)*Dc]
- kDstOver_Mode, //!< [Sa + Da - Sa*Da, Rc = Dc + (1 - Da)*Sc]
- kSrcIn_Mode, //!< [Sa * Da, Sc * Da]
- kDstIn_Mode, //!< [Sa * Da, Sa * Dc]
- kSrcOut_Mode, //!< [Sa * (1 - Da), Sc * (1 - Da)]
- kDstOut_Mode, //!< [Da * (1 - Sa), Dc * (1 - Sa)]
- kSrcATop_Mode, //!< [Da, Sc * Da + (1 - Sa) * Dc]
- kDstATop_Mode, //!< [Sa, Sa * Dc + Sc * (1 - Da)]
- kXor_Mode, //!< [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc]
- kDarken_Mode, //!< [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)]
- kLighten_Mode, //!< [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)]
- kMultiply_Mode, //!< [Sa * Da, Sc * Dc]
- kScreen_Mode, //!< [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc]
-
- kModeCount
- };
- /** Return an SkXfermode object for the specified mode.
- */
- static SkXfermode* CreateXfermode(Mode mode);
-
- /** Return a function pointer to a routine that applies the specified
- porter-duff transfer mode.
- */
- static SkXfermodeProc GetXfermodeProc(Mode mode);
-
- /** Return a function pointer to a routine that applies the specified
- porter-duff transfer mode and srcColor to a 16bit device color. Note,
- if the mode+srcColor might return a non-opaque color, then there is not
- 16bit proc, and this will return NULL.
- */
- static SkXfermodeProc16 GetXfermodeProc16(Mode mode, SkColor srcColor);
-
- /** If the specified xfermode advertises itself as one of the porterduff
- modes (via SkXfermode::Coeff), return true and if not null, set mode
- to the corresponding porterduff mode. If it is not recognized as a one,
- return false and ignore the mode parameter.
- */
- static bool IsMode(SkXfermode*, Mode* mode);
-};
-
-#endif
-
diff --git a/include/core/SkPostConfig.h b/include/core/SkPostConfig.h
deleted file mode 100644
index 8feae72..0000000
--- a/include/core/SkPostConfig.h
+++ /dev/null
@@ -1,226 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPostConfig_DEFINED
-#define SkPostConfig_DEFINED
-
-#if defined(SK_BUILD_FOR_WIN32) || defined(SK_BUILD_FOR_WINCE)
- #define SK_BUILD_FOR_WIN
-#endif
-
-#if defined(SK_DEBUG) && defined(SK_RELEASE)
- #error "cannot define both SK_DEBUG and SK_RELEASE"
-#elif !defined(SK_DEBUG) && !defined(SK_RELEASE)
- #error "must define either SK_DEBUG or SK_RELEASE"
-#endif
-
-#if defined SK_SUPPORT_UNITTEST && !defined(SK_DEBUG)
- #error "can't have unittests without debug"
-#endif
-
-#if defined(SK_SCALAR_IS_FIXED) && defined(SK_SCALAR_IS_FLOAT)
- #error "cannot define both SK_SCALAR_IS_FIXED and SK_SCALAR_IS_FLOAT"
-#elif !defined(SK_SCALAR_IS_FIXED) && !defined(SK_SCALAR_IS_FLOAT)
- #ifdef SK_CAN_USE_FLOAT
- #define SK_SCALAR_IS_FLOAT
- #else
- #define SK_SCALAR_IS_FIXED
- #endif
-#endif
-
-#if defined(SK_SCALAR_IS_FLOAT) && !defined(SK_CAN_USE_FLOAT)
- #define SK_CAN_USE_FLOAT
- // we do nothing in the else case: fixed-scalars can have floats or not
-#endif
-
-#if defined(SK_CPU_LENDIAN) && defined(SK_CPU_BENDIAN)
- #error "cannot define both SK_CPU_LENDIAN and SK_CPU_BENDIAN"
-#elif !defined(SK_CPU_LENDIAN) && !defined(SK_CPU_BENDIAN)
- #error "must define either SK_CPU_LENDIAN or SK_CPU_BENDIAN"
-#endif
-
-// ensure the port has defined all of these, or none of them
-#ifdef SK_A32_SHIFT
- #if !defined(SK_R32_SHIFT) || !defined(SK_G32_SHIFT) || !defined(SK_B32_SHIFT)
- #error "all or none of the 32bit SHIFT amounts must be defined"
- #endif
-#else
- #if defined(SK_R32_SHIFT) || defined(SK_G32_SHIFT) || defined(SK_B32_SHIFT)
- #error "all or none of the 32bit SHIFT amounts must be defined"
- #endif
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-
-#ifndef SkNEW
- #define SkNEW(type_name) new type_name
- #define SkNEW_ARGS(type_name, args) new type_name args
- #define SkNEW_ARRAY(type_name, count) new type_name[count]
- #define SkDELETE(obj) delete obj
- #define SkDELETE_ARRAY(array) delete[] array
-#endif
-
-#ifndef SK_CRASH
-#if 1 // set to 0 for infinite loop, which can help connecting gdb
- #define SK_CRASH() *(int *)(uintptr_t)0xbbadbeef = 0
-#else
- #define SK_CRASH() do {} while (true)
-#endif
-#endif
-
-///////////////////////////////////////////////////////////////////////////////
-
-#if defined(SK_SOFTWARE_FLOAT) && defined(SK_SCALAR_IS_FLOAT)
- // if this is defined, we convert floats to 2scompliment ints for compares
- #ifndef SK_SCALAR_SLOW_COMPARES
- #define SK_SCALAR_SLOW_COMPARES
- #endif
- #ifndef SK_USE_FLOATBITS
- #define SK_USE_FLOATBITS
- #endif
-#endif
-
-#ifdef SK_BUILD_FOR_WIN
- #define WIN32_LEAN_AND_MEAN
- #include <windows.h>
- #undef WIN32_LEAN_AND_MEAN
-
- #ifndef SK_DEBUGBREAK
- #define SK_DEBUGBREAK(cond) do { if (!(cond)) DebugBreak(); } while (false)
- #endif
-#elif defined(SK_BUILD_FOR_MAC)
- #ifndef SK_DEBUGBREAK
- #define SK_DEBUGBREAK(cond) do { if (!(cond)) SK_CRASH(); } while (false)
- #endif
-#else
- #ifdef SK_DEBUG
- #include <stdio.h>
- #ifndef SK_DEBUGBREAK
- #define SK_DEBUGBREAK(cond) do { if (cond) break; \
- SkDebugf("%s:%d: failed assertion \"%s\"\n", \
- __FILE__, __LINE__, #cond); SK_CRASH(); } while (false)
- #endif
- #endif
-#endif
-
-// stdlib macros
-
-#if 0
-#if !defined(strlen) && defined(SK_DEBUG)
- extern size_t sk_strlen(const char*);
- #define strlen(s) sk_strlen(s)
-#endif
-#ifndef sk_strcpy
- #define sk_strcpy(dst, src) strcpy(dst, src)
-#endif
-#ifndef sk_strchr
- #define sk_strchr(s, c) strchr(s, c)
-#endif
-#ifndef sk_strrchr
- #define sk_strrchr(s, c) strrchr(s, c)
-#endif
-#ifndef sk_strcmp
- #define sk_strcmp(s, t) strcmp(s, t)
-#endif
-#ifndef sk_strncmp
- #define sk_strncmp(s, t, n) strncmp(s, t, n)
-#endif
-#ifndef sk_memcpy
- #define sk_memcpy(dst, src, n) memcpy(dst, src, n)
-#endif
-#ifndef memmove
- #define memmove(dst, src, n) memmove(dst, src, n)
-#endif
-#ifndef sk_memset
- #define sk_memset(dst, val, n) memset(dst, val, n)
-#endif
-#ifndef sk_memcmp
- #define sk_memcmp(s, t, n) memcmp(s, t, n)
-#endif
-
-#define sk_strequal(s, t) (!sk_strcmp(s, t))
-#define sk_strnequal(s, t, n) (!sk_strncmp(s, t, n))
-#endif
-
-//////////////////////////////////////////////////////////////////////
-
-#if defined(SK_BUILD_FOR_WIN32) || defined(SK_BUILD_FOR_MAC)
- #ifndef SkLONGLONG
- #ifdef SK_BUILD_FOR_WIN32
- #define SkLONGLONG __int64
- #else
- #define SkLONGLONG long long
- #endif
- #endif
-#endif
-
-// experimental for now
-#define SK_SUPPORT_MIPMAP
-
-//////////////////////////////////////////////////////////////////////////////////////////////
-#ifndef SK_BUILD_FOR_WINCE
-#include <string.h>
-#include <stdlib.h>
-#else
-#define _CMNINTRIN_DECLARE_ONLY
-#include "cmnintrin.h"
-#endif
-
-#if defined SK_DEBUG && defined SK_BUILD_FOR_WIN32
-//#define _CRTDBG_MAP_ALLOC
-#ifdef free
-#undef free
-#endif
-#include <crtdbg.h>
-#undef free
-
-#ifdef SK_DEBUGx
-#if defined(SK_SIMULATE_FAILED_MALLOC) && defined(__cplusplus)
- void * operator new(
- size_t cb,
- int nBlockUse,
- const char * szFileName,
- int nLine,
- int foo
- );
- void * operator new[](
- size_t cb,
- int nBlockUse,
- const char * szFileName,
- int nLine,
- int foo
- );
- void operator delete(
- void *pUserData,
- int, const char*, int, int
- );
- void operator delete(
- void *pUserData
- );
- void operator delete[]( void * p );
- #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__, 0)
-#else
- #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
-#endif
- #define new DEBUG_CLIENTBLOCK
-#else
-#define DEBUG_CLIENTBLOCK
-#endif // _DEBUG
-
-#endif
-
-#endif
-
diff --git a/include/core/SkPreConfig.h b/include/core/SkPreConfig.h
deleted file mode 100644
index 05f3d43..0000000
--- a/include/core/SkPreConfig.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPreConfig_DEFINED
-#define SkPreConfig_DEFINED
-
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(SK_BUILD_FOR_PALM) && !defined(SK_BUILD_FOR_WINCE) && !defined(SK_BUILD_FOR_WIN32) && !defined(SK_BUILD_FOR_SYMBIAN) && !defined(SK_BUILD_FOR_UNIX) && !defined(SK_BUILD_FOR_MAC)
-
- #if defined(PALMOS_SDK_VERSION)
- #define SK_BUILD_FOR_PALM
- #elif defined(UNDER_CE)
- #define SK_BUILD_FOR_WINCE
- #elif defined(WIN32)
- #define SK_BUILD_FOR_WIN32
- #elif defined(__SYMBIAN32__)
- #define SK_BUILD_FOR_WIN32
- #elif defined(linux)
- #define SK_BUILD_FOR_UNIX
- #else
- #define SK_BUILD_FOR_MAC
- #endif
-
-#endif
-
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(SK_DEBUG) && !defined(SK_RELEASE)
- #ifdef NDEBUG
- #define SK_RELEASE
- #else
- #define SK_DEBUG
- #endif
-#endif
-
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(SK_RESTRICT)
- #define SK_RESTRICT __restrict__
-#endif
-
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(SK_SCALAR_IS_FLOAT) && !defined(SK_SCALAR_IS_FIXED)
- #define SK_SCALAR_IS_FLOAT
- #define SK_CAN_USE_FLOAT
-#endif
-
-//////////////////////////////////////////////////////////////////////
-
-#if !defined(SK_CPU_BENDIAN) && !defined(SK_CPU_LENDIAN)
- #if defined (__ppc__) || defined(__ppc64__)
- #define SK_CPU_BENDIAN
- #else
- #define SK_CPU_LENDIAN
- #endif
-#endif
-
-//////////////////////////////////////////////////////////////////////
-
-#if (defined(__arm__) && !defined(__thumb__)) || defined(SK_BUILD_FOR_BREW) || defined(SK_BUILD_FOR_WINCE) || (defined(SK_BUILD_FOR_SYMBIAN) && !defined(__MARM_THUMB__))
- /* e.g. the ARM instructions have conditional execution, making tiny branches cheap */
- #define SK_CPU_HAS_CONDITIONAL_INSTR
-#endif
-
-#endif
-
diff --git a/include/core/SkPtrRecorder.h b/include/core/SkPtrRecorder.h
deleted file mode 100644
index ff1e14d..0000000
--- a/include/core/SkPtrRecorder.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkPtrRecorder_DEFINED
-#define SkPtrRecorder_DEFINED
-
-#include "SkRefCnt.h"
-#include "SkTDArray.h"
-
-class SkPtrRecorder : public SkRefCnt {
-public:
- uint32_t recordPtr(void*);
-
- int count() const { return fList.count(); }
- void getPtrs(void* array[]) const;
-
- void reset();
-
-protected:
- virtual void incPtr(void* ptr) {}
- virtual void decPtr(void* ptr) {}
-
-private:
- struct Pair {
- void* fPtr;
- uint32_t fIndex;
- };
- SkTDArray<Pair> fList;
-
- static int Cmp(const Pair& a, const Pair& b);
-
- typedef SkRefCnt INHERITED;
-};
-
-#endif
diff --git a/include/core/SkRandom.h b/include/core/SkRandom.h
deleted file mode 100644
index 33b563a..0000000
--- a/include/core/SkRandom.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkRandom_DEFINED
-#define SkRandom_DEFINED
-
-#include "Sk64.h"
-#include "SkScalar.h"
-
-/** \class SkRandom
-
- Utility class that implements pseudo random 32bit numbers using a fast
- linear equation. Unlike rand(), this class holds its own seed (initially
- set to 0), so that multiple instances can be used with no side-effects.
-*/
-class SkRandom {
-public:
- SkRandom() : fSeed(0) {}
- SkRandom(uint32_t seed) : fSeed(seed) {}
-
- /** Return the next pseudo random number as an unsigned 32bit value.
- */
- uint32_t nextU() { uint32_t r = fSeed * kMul + kAdd; fSeed = r; return r; }
-
- /** Return the next pseudo random number as a signed 32bit value.
- */
- int32_t nextS() { return (int32_t)this->nextU(); }
-
- /** Return the next pseudo random number as an unsigned 16bit value.
- */
- U16CPU nextU16() { return this->nextU() >> 16; }
-
- /** Return the next pseudo random number as a signed 16bit value.
- */
- S16CPU nextS16() { return this->nextS() >> 16; }
-
- /** Return the next pseudo random number, as an unsigned value of
- at most bitCount bits.
- @param bitCount The maximum number of bits to be returned
- */
- uint32_t nextBits(unsigned bitCount) {
- SkASSERT(bitCount > 0 && bitCount <= 32);
- return this->nextU() >> (32 - bitCount);
- }
-
- /** Return the next pseudo random unsigned number, mapped to lie within
- [min, max] inclusive.
- */
- uint32_t nextRangeU(uint32_t min, uint32_t max) {
- SkASSERT(min <= max);
- return min + this->nextU() % (max - min + 1);
- }
-
- /** Return the next pseudo random number expressed as an unsigned SkFixed
- in the range [0..SK_Fixed1).
- */
- SkFixed nextUFixed1() { return this->nextU() >> 16; }
-
- /** Return the next pseudo random number expressed as a signed SkFixed
- in the range (-SK_Fixed1..SK_Fixed1).
- */
- SkFixed nextSFixed1() { return this->nextS() >> 15; }
-
- /** Return the next pseudo random number expressed as a SkScalar
- in the range [0..SK_Scalar1).
- */
- SkScalar nextUScalar1() { return SkFixedToScalar(this->nextUFixed1()); }
-
- /** Return the next pseudo random number expressed as a SkScalar
- in the range (-SK_Scalar1..SK_Scalar1).
- */
- SkScalar nextSScalar1() { return SkFixedToScalar(this->nextSFixed1()); }
-
- /** Return the next pseudo random number as a signed 64bit value.
- */
- void next64(Sk64* a) {
- SkASSERT(a);
- a->set(this->nextS(), this->nextU());
- }
-
- /** Set the seed of the random object. The seed is initialized to 0 when the
- object is first created, and is updated each time the next pseudo random
- number is requested.
- */
- void setSeed(int32_t seed) { fSeed = (uint32_t)seed; }
-
-private:
- // See "Numerical Recipes in C", 1992 page 284 for these constants
- enum {
- kMul = 1664525,
- kAdd = 1013904223
- };
- uint32_t fSeed;
-};
-
-#endif
-
diff --git a/include/core/SkRasterizer.h b/include/core/SkRasterizer.h
deleted file mode 100644
index d81e613..0000000
--- a/include/core/SkRasterizer.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkRasterizer_DEFINED
-#define SkRasterizer_DEFINED
-
-#include "SkFlattenable.h"
-#include "SkMask.h"
-
-class SkMaskFilter;
-class SkMatrix;
-class SkPath;
-struct SkIRect;
-
-class SkRasterizer : public SkFlattenable {
-public:
- SkRasterizer() {}
-
- /** Turn the path into a mask, respecting the specified local->device matrix.
- */
- bool rasterize(const SkPath& path, const SkMatrix& matrix,
- const SkIRect* clipBounds, SkMaskFilter* filter,
- SkMask* mask, SkMask::CreateMode mode);
-
- virtual void flatten(SkFlattenableWriteBuffer& ) {}
-protected:
- SkRasterizer(SkFlattenableReadBuffer&);
-
- virtual bool onRasterize(const SkPath& path, const SkMatrix& matrix,
- const SkIRect* clipBounds,
- SkMask* mask, SkMask::CreateMode mode);
-
-private:
- typedef SkFlattenable INHERITED;
-};
-
-#endif
diff --git a/include/core/SkReader32.h b/include/core/SkReader32.h
deleted file mode 100644
index 1c72a87..0000000
--- a/include/core/SkReader32.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkReader32_DEFINED
-#define SkReader32_DEFINED
-
-#include "SkTypes.h"
-
-#include "SkScalar.h"
-#include "SkPoint.h"
-#include "SkRect.h"
-
-class SkReader32 : SkNoncopyable {
-public:
- SkReader32() : fCurr(NULL), fStop(NULL), fBase(NULL) {}
- SkReader32(const void* data, size_t size) {
- this->setMemory(data, size);
- }
-
- void setMemory(const void* data, size_t size) {
- SkASSERT(ptr_align_4(data));
- SkASSERT(SkAlign4(size) == size);
-
- fBase = fCurr = (const char*)data;
- fStop = (const char*)data + size;
- }
-
- uint32_t size() const { return fStop - fBase; }
- uint32_t offset() const { return fCurr - fBase; }
- bool eof() const { return fCurr >= fStop; }
- const void* base() const { return fBase; }
- const void* peek() const { return fCurr; }
- void rewind() { fCurr = fBase; }
-
- void setOffset(size_t offset) {
- SkASSERT(SkAlign4(offset) == offset);
- SkASSERT(offset <= this->size());
- fCurr = fBase + offset;
- }
-
- bool readBool() { return this->readInt() != 0; }
-
- int32_t readInt() {
- SkASSERT(ptr_align_4(fCurr));
- int32_t value = *(const int32_t*)fCurr;
- fCurr += sizeof(value);
- SkASSERT(fCurr <= fStop);
- return value;
- }
-
- SkScalar readScalar() {
- SkASSERT(ptr_align_4(fCurr));
- SkScalar value = *(const SkScalar*)fCurr;
- fCurr += sizeof(value);
- SkASSERT(fCurr <= fStop);
- return value;
- }
-
- const SkPoint* skipPoint() {
- return (const SkPoint*)this->skip(sizeof(SkPoint));
- }
-
- const SkRect* skipRect() {
- return (const SkRect*)this->skip(sizeof(SkRect));
- }
-
- const void* skip(size_t size) {
- SkASSERT(ptr_align_4(fCurr));
- const void* addr = fCurr;
- fCurr += SkAlign4(size);
- SkASSERT(fCurr <= fStop);
- return addr;
- }
-
- void read(void* dst, size_t size) {
- SkASSERT(dst != NULL);
- SkASSERT(ptr_align_4(fCurr));
- memcpy(dst, fCurr, size);
- fCurr += SkAlign4(size);
- SkASSERT(fCurr <= fStop);
- }
-
- uint8_t readU8() { return (uint8_t)this->readInt(); }
- uint16_t readU16() { return (uint16_t)this->readInt(); }
- int32_t readS32() { return this->readInt(); }
- uint32_t readU32() { return this->readInt(); }
-
-private:
- // these are always 4-byte aligned
- const char* fCurr; // current position within buffer
- const char* fStop; // end of buffer
- const char* fBase; // beginning of buffer
-
-#ifdef SK_DEBUG
- static bool ptr_align_4(const void* ptr)
- {
- return (((const char*)ptr - (const char*)NULL) & 3) == 0;
- }
-#endif
-};
-
-#endif
diff --git a/include/core/SkRect.h b/include/core/SkRect.h
deleted file mode 100644
index a9f25aa..0000000
--- a/include/core/SkRect.h
+++ /dev/null
@@ -1,435 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkRect_DEFINED
-#define SkRect_DEFINED
-
-#include "SkPoint.h"
-
-/** \struct SkIRect
-
- SkIRect holds four 32 bit integer coordinates for a rectangle
-*/
-struct SkIRect {
- int32_t fLeft, fTop, fRight, fBottom;
-
- /** Return true if the rectangle's width or height are <= 0
- */
- bool isEmpty() const { return fLeft >= fRight || fTop >= fBottom; }
-
- /** Returns the rectangle's width. This does not check for a valid rectangle (i.e. left <= right)
- so the result may be negative.
- */
- int width() const { return fRight - fLeft; }
-
- /** Returns the rectangle's height. This does not check for a valid rectangle (i.e. top <= bottom)
- so the result may be negative.
- */
- int height() const { return fBottom - fTop; }
-
- friend int operator==(const SkIRect& a, const SkIRect& b)
- {
- return !memcmp(&a, &b, sizeof(a));
- }
- friend int operator!=(const SkIRect& a, const SkIRect& b)
- {
- return memcmp(&a, &b, sizeof(a));
- }
-
- /** Set the rectangle to (0,0,0,0)
- */
- void setEmpty() { memset(this, 0, sizeof(*this)); }
-
- void set(int32_t left, int32_t top, int32_t right, int32_t bottom)
- {
- fLeft = left;
- fTop = top;
- fRight = right;
- fBottom = bottom;
- }
-
- /** Offset set the rectangle by adding dx to its left and right,
- and adding dy to its top and bottom.
- */
- void offset(int32_t dx, int32_t dy)
- {
- fLeft += dx;
- fTop += dy;
- fRight += dx;
- fBottom += dy;
- }
-
- /** Inset the rectangle by (dx,dy). If dx is positive, then the sides are moved inwards,
- making the rectangle narrower. If dx is negative, then the sides are moved outwards,
- making the rectangle wider. The same hods true for dy and the top and bottom.
- */
- void inset(int32_t dx, int32_t dy)
- {
- fLeft += dx;
- fTop += dy;
- fRight -= dx;
- fBottom -= dy;
- }
- /** Returns true if (x,y) is inside the rectangle and the rectangle is not
- empty. The left and top are considered to be inside, while the right
- and bottom are not. Thus for the rectangle (0, 0, 5, 10), the
- points (0,0) and (0,9) are inside, while (-1,0) and (5,9) are not.
- */
- bool contains(int32_t x, int32_t y) const
- {
- return (unsigned)(x - fLeft) < (unsigned)(fRight - fLeft) &&
- (unsigned)(y - fTop) < (unsigned)(fBottom - fTop);
- }
-
- /** Returns true if the 4 specified sides of a rectangle are inside or equal to this rectangle.
- If either rectangle is empty, contains() returns false.
- */
- bool contains(int32_t left, int32_t top, int32_t right, int32_t bottom) const
- {
- return left < right && top < bottom && !this->isEmpty() && // check for empties
- fLeft <= left && fTop <= top &&
- fRight >= right && fBottom >= bottom;
- }
-
- /** Returns true if the specified rectangle r is inside or equal to this rectangle.
- */
- bool contains(const SkIRect& r) const
- {
- return !r.isEmpty() && !this->isEmpty() && // check for empties
- fLeft <= r.fLeft && fTop <= r.fTop &&
- fRight >= r.fRight && fBottom >= r.fBottom;
- }
-
- /** Return true if this rectangle contains the specified rectangle.
- For speed, this method does not check if either this or the specified
- rectangles are empty, and if either is, its return value is undefined.
- In the debugging build however, we assert that both this and the
- specified rectangles are non-empty.
- */
- bool containsNoEmptyCheck(int32_t left, int32_t top,
- int32_t right, int32_t bottom) const
- {
- SkASSERT(fLeft < fRight && fTop < fBottom);
- SkASSERT(left < right && top < bottom);
-
- return fLeft <= left && fTop <= top &&
- fRight >= right && fBottom >= bottom;
- }
-
- /** If r intersects this rectangle, return true and set this rectangle to that
- intersection, otherwise return false and do not change this rectangle.
- If either rectangle is empty, do nothing and return false.
- */
- bool intersect(const SkIRect& r)
- {
- SkASSERT(&r);
- return this->intersect(r.fLeft, r.fTop, r.fRight, r.fBottom);
- }
-
- /** If rectangles a and b intersect, return true and set this rectangle to
- that intersection, otherwise return false and do not change this
- rectangle. If either rectangle is empty, do nothing and return false.
- */
- bool intersect(const SkIRect& a, const SkIRect& b)
- {
- SkASSERT(&a && &b);
-
- if (!a.isEmpty() && !b.isEmpty() &&
- a.fLeft < b.fRight && b.fLeft < a.fRight &&
- a.fTop < b.fBottom && b.fTop < a.fBottom)
- {
- fLeft = SkMax32(a.fLeft, b.fLeft);
- fTop = SkMax32(a.fTop, b.fTop);
- fRight = SkMin32(a.fRight, b.fRight);
- fBottom = SkMin32(a.fBottom, b.fBottom);
- return true;
- }
- return false;
- }
-
- /** If rectangles a and b intersect, return true and set this rectangle to
- that intersection, otherwise return false and do not change this
- rectangle. For speed, no check to see if a or b are empty is performed.
- If either is, then the return result is undefined. In the debug build,
- we assert that both rectangles are non-empty.
- */
- bool intersectNoEmptyCheck(const SkIRect& a, const SkIRect& b)
- {
- SkASSERT(&a && &b);
- SkASSERT(!a.isEmpty() && !b.isEmpty());
-
- if (a.fLeft < b.fRight && b.fLeft < a.fRight &&
- a.fTop < b.fBottom && b.fTop < a.fBottom)
- {
- fLeft = SkMax32(a.fLeft, b.fLeft);
- fTop = SkMax32(a.fTop, b.fTop);
- fRight = SkMin32(a.fRight, b.fRight);
- fBottom = SkMin32(a.fBottom, b.fBottom);
- return true;
- }
- return false;
- }
-
- /** If the rectangle specified by left,top,right,bottom intersects this rectangle,
- return true and set this rectangle to that intersection,
- otherwise return false and do not change this rectangle.
- If either rectangle is empty, do nothing and return false.
- */
- bool intersect(int32_t left, int32_t top, int32_t right, int32_t bottom)
- {
- if (left < right && top < bottom && !this->isEmpty() &&
- fLeft < right && left < fRight && fTop < bottom && top < fBottom)
- {
- if (fLeft < left) fLeft = left;
- if (fTop < top) fTop = top;
- if (fRight > right) fRight = right;
- if (fBottom > bottom) fBottom = bottom;
- return true;
- }
- return false;
- }
-
- /** Returns true if a and b are not empty, and they intersect
- */
- static bool Intersects(const SkIRect& a, const SkIRect& b)
- {
- return !a.isEmpty() && !b.isEmpty() && // check for empties
- a.fLeft < b.fRight && b.fLeft < a.fRight &&
- a.fTop < b.fBottom && b.fTop < a.fBottom;
- }
-
- /** Update this rectangle to enclose itself and the specified rectangle.
- If this rectangle is empty, just set it to the specified rectangle. If the specified
- rectangle is empty, do nothing.
- */
- void join(int32_t left, int32_t top, int32_t right, int32_t bottom);
-
- /** Update this rectangle to enclose itself and the specified rectangle.
- If this rectangle is empty, just set it to the specified rectangle. If the specified
- rectangle is empty, do nothing.
- */
- void join(const SkIRect& r)
- {
- this->join(r.fLeft, r.fTop, r.fRight, r.fBottom);
- }
-
- /** Swap top/bottom or left/right if there are flipped.
- This can be called if the edges are computed separately,
- and may have crossed over each other.
- When this returns, left <= right && top <= bottom
- */
- void sort();
-};
-
-/** \struct SkRect
-*/
-struct SkRect {
- SkScalar fLeft, fTop, fRight, fBottom;
-
- /** Return true if the rectangle's width or height are <= 0
- */
- bool isEmpty() const { return fLeft >= fRight || fTop >= fBottom; }
- SkScalar width() const { return fRight - fLeft; }
- SkScalar height() const { return fBottom - fTop; }
- SkScalar centerX() const { return SkScalarHalf(fLeft + fRight); }
- SkScalar centerY() const { return SkScalarHalf(fTop + fBottom); }
-
- friend int operator==(const SkRect& a, const SkRect& b)
- {
- return !memcmp(&a, &b, sizeof(a));
- }
- friend int operator!=(const SkRect& a, const SkRect& b)
- {
- return memcmp(&a, &b, sizeof(a));
- }
-
- /** return the 4 points that enclose the rectangle
- */
- void toQuad(SkPoint quad[4]) const;
-
- /** Set this rectangle to the empty rectangle (0,0,0,0)
- */
- void setEmpty() { memset(this, 0, sizeof(*this)); }
-
- void set(const SkIRect& src)
- {
- fLeft = SkIntToScalar(src.fLeft);
- fTop = SkIntToScalar(src.fTop);
- fRight = SkIntToScalar(src.fRight);
- fBottom = SkIntToScalar(src.fBottom);
- }
-
- void set(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom)
- {
- fLeft = left;
- fTop = top;
- fRight = right;
- fBottom = bottom;
- }
-
- /** Initialize the rect with the 4 specified integers. The routine handles
- converting them to scalars (by calling SkIntToScalar)
- */
- void iset(int left, int top, int right, int bottom) {
- fLeft = SkIntToScalar(left);
- fTop = SkIntToScalar(top);
- fRight = SkIntToScalar(right);
- fBottom = SkIntToScalar(bottom);
- }
-
- /** Set this rectangle to be the bounds of the array of points.
- If the array is empty (count == 0), then set this rectangle
- to the empty rectangle (0,0,0,0)
- */
- void set(const SkPoint pts[], int count);
-
- /** Offset set the rectangle by adding dx to its left and right,
- and adding dy to its top and bottom.
- */
- void offset(SkScalar dx, SkScalar dy)
- {
- fLeft += dx;
- fTop += dy;
- fRight += dx;
- fBottom += dy;
- }
-
- /** Inset the rectangle by (dx,dy). If dx is positive, then the sides are moved inwards,
- making the rectangle narrower. If dx is negative, then the sides are moved outwards,
- making the rectangle wider. The same hods true for dy and the top and bottom.
- */
- void inset(SkScalar dx, SkScalar dy)
- {
- fLeft += dx;
- fTop += dy;
- fRight -= dx;
- fBottom -= dy;
- }
-
- /** If this rectangle intersects r, return true and set this rectangle to that
- intersection, otherwise return false and do not change this rectangle.
- If either rectangle is empty, do nothing and return false.
- */
- bool intersect(const SkRect& r);
-
- /** If this rectangle intersects the rectangle specified by left, top, right, bottom,
- return true and set this rectangle to that intersection, otherwise return false
- and do not change this rectangle.
- If either rectangle is empty, do nothing and return false.
- */
- bool intersect(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom);
-
- /** Return true if this rectangle is not empty, and the specified sides of
- a rectangle are not empty, and they intersect.
- */
- bool intersects(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom) const
- {
- return // first check that both are not empty
- left < right && top < bottom &&
- fLeft < fRight && fTop < fBottom &&
- // now check for intersection
- fLeft < right && left < fRight &&
- fTop < bottom && top < fBottom;
- }
-
- /** Return true if rectangles a and b are not empty and intersect.
- */
- static bool Intersects(const SkRect& a, const SkRect& b)
- {
- return !a.isEmpty() && !b.isEmpty() && // check for empties
- a.fLeft < b.fRight && b.fLeft < a.fRight &&
- a.fTop < b.fBottom && b.fTop < a.fBottom;
- }
-
- /** Update this rectangle to enclose itself and the specified rectangle.
- If this rectangle is empty, just set it to the specified rectangle. If the specified
- rectangle is empty, do nothing.
- */
- void join(SkScalar left, SkScalar top, SkScalar right, SkScalar bottom);
-
- /** Update this rectangle to enclose itself and the specified rectangle.
- If this rectangle is empty, just set it to the specified rectangle. If the specified
- rectangle is empty, do nothing.
- */
- void join(const SkRect& r)
- {
- this->join(r.fLeft, r.fTop, r.fRight, r.fBottom);
- }
-
- /** Returns true if (p.fX,p.fY) is inside the rectangle. The left and top coordinates of
- the rectangle are considered to be inside, while the right and bottom coordinates
- are not. Thus for the rectangle (0, 0, 5, 10), the points (0,0) and (0,9) are inside,
- while (-1,0) and (5,9) are not.
- If this rectangle is empty, return false.
- */
- bool contains(const SkPoint& p) const
- {
- return !this->isEmpty() &&
- fLeft <= p.fX && p.fX < fRight &&
- fTop <= p.fY && p.fY < fBottom;
- }
-
- /** Returns true if (x,y) is inside the rectangle. The left and top coordinates of
- the rectangle are considered to be inside, while the right and bottom coordinates
- are not. Thus for the rectangle (0, 0, 5, 10), the points (0,0) and (0,9) are inside,
- while (-1,0) and (5,9) are not.
- If this rectangle is empty, return false.
- */
- bool contains(SkScalar x, SkScalar y) const
- {
- return !this->isEmpty() &&
- fLeft <= x && x < fRight &&
- fTop <= y && y < fBottom;
- }
-
- /** Return true if this rectangle contains r.
- If either rectangle is empty, return false.
- */
- bool contains(const SkRect& r) const
- {
- return !r.isEmpty() && !this->isEmpty() && // check for empties
- fLeft <= r.fLeft && fTop <= r.fTop &&
- fRight >= r.fRight && fBottom >= r.fBottom;
- }
-
- /** Set the dst integer rectangle by rounding this rectangle's coordinates
- to their nearest integer values.
- */
- void round(SkIRect* dst) const
- {
- SkASSERT(dst);
- dst->set(SkScalarRound(fLeft), SkScalarRound(fTop), SkScalarRound(fRight), SkScalarRound(fBottom));
- }
-
- /** Set the dst integer rectangle by rounding "out" this rectangle, choosing the floor of top and left,
- and the ceiling of right and bototm.
- */
- void roundOut(SkIRect* dst) const
- {
- SkASSERT(dst);
- dst->set(SkScalarFloor(fLeft), SkScalarFloor(fTop), SkScalarCeil(fRight), SkScalarCeil(fBottom));
- }
-
- /** Swap top/bottom or left/right if there are flipped.
- This can be called if the edges are computed separately,
- and may have crossed over each other.
- When this returns, left <= right && top <= bottom
- */
- void sort();
-};
-
-#endif
-
diff --git a/include/core/SkRefCnt.h b/include/core/SkRefCnt.h
deleted file mode 100644
index adb59dd..0000000
--- a/include/core/SkRefCnt.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkRefCnt_DEFINED
-#define SkRefCnt_DEFINED
-
-#include "SkThread.h"
-
-/** \class SkRefCnt
-
- SkRefCnt is the base class for objects that may be shared by multiple
- objects. When a new owner wants a reference, it calls ref(). When an owner
- wants to release its reference, it calls unref(). When the shared object's
- reference count goes to zero as the result of an unref() call, its (virtual)
- destructor is called. It is an error for the destructor to be called
- explicitly (or via the object going out of scope on the stack or calling
- delete) if getRefCnt() > 1.
-*/
-class SkRefCnt : SkNoncopyable {
-public:
- /** Default construct, initializing the reference count to 1.
- */
- SkRefCnt() : fRefCnt(1) {}
-
- /** Destruct, asserting that the reference count is 1.
- */
- virtual ~SkRefCnt() { SkASSERT(fRefCnt == 1); }
-
- /** Return the reference count.
- */
- int32_t getRefCnt() const { return fRefCnt; }
-
- /** Increment the reference count. Must be balanced by a call to unref().
- */
- void ref() const {
- SkASSERT(fRefCnt > 0);
- sk_atomic_inc(&fRefCnt);
- }
-
- /** Decrement the reference count. If the reference count is 1 before the
- decrement, then call delete on the object. Note that if this is the
- case, then the object needs to have been allocated via new, and not on
- the stack.
- */
- void unref() const {
- SkASSERT(fRefCnt > 0);
- if (sk_atomic_dec(&fRefCnt) == 1) {
- fRefCnt = 1; // so our destructor won't complain
- SkDELETE(this);
- }
- }
-
- /** Helper version of ref(), that first checks to see if this is not null.
- If this is null, then do nothing.
- */
- void safeRef() const {
- if (this) {
- this->ref();
- }
- }
-
- /** Helper version of unref(), that first checks to see if this is not null.
- If this is null, then do nothing.
- */
- void safeUnref() const {
- if (this) {
- this->unref();
- }
- }
-
-private:
- mutable int32_t fRefCnt;
-};
-
-/** \class SkAutoUnref
-
- SkAutoUnref is a stack-helper class that will automatically call unref() on
- the object it points to when the SkAutoUnref object goes out of scope.
- If obj is null, do nothing.
-*/
-class SkAutoUnref : SkNoncopyable {
-public:
- SkAutoUnref(SkRefCnt* obj) : fObj(obj) {}
- ~SkAutoUnref();
-
- SkRefCnt* get() const { return fObj; }
-
- /** If the hosted object is null, do nothing and return false, else call
- ref() on it and return true
- */
- bool ref();
-
- /** If the hosted object is null, do nothing and return false, else call
- unref() on it, set its reference to null, and return true
- */
- bool unref();
-
- /** If the hosted object is null, do nothing and return NULL, else call
- unref() on it, set its reference to null, and return the object
- */
- SkRefCnt* detach();
-
-private:
- SkRefCnt* fObj;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-/** Helper macro to safely assign one SkRefCnt[TS]* to another, checking for
- null in on each side of the assignment, and ensuring that ref() is called
- before unref(), in case the two pointers point to the same object.
-*/
-#define SkRefCnt_SafeAssign(dst, src) \
- do { \
- if (src) src->ref(); \
- if (dst) dst->unref(); \
- dst = src; \
- } while (0)
-
-#endif
-
diff --git a/include/core/SkRegion.h b/include/core/SkRegion.h
deleted file mode 100644
index 8b15a89..0000000
--- a/include/core/SkRegion.h
+++ /dev/null
@@ -1,352 +0,0 @@
-/*
- * Copyright (C) 2005 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkRegion_DEFINED
-#define SkRegion_DEFINED
-
-#include "SkRect.h"
-
-class SkPath;
-class SkRgnBuilder;
-
-namespace android {
- class Region;
-}
-
-#define SkRegion_gEmptyRunHeadPtr ((SkRegion::RunHead*)-1)
-#define SkRegion_gRectRunHeadPtr 0
-
-/** \class SkRegion
-
- The SkRegion class encapsulates the geometric region used to specify
- clipping areas for drawing.
-*/
-class SkRegion {
-public:
- typedef int32_t RunType;
- enum {
- kRunTypeSentinel = 0x7FFFFFFF
- };
-
- SkRegion();
- SkRegion(const SkRegion&);
- explicit SkRegion(const SkIRect&);
- ~SkRegion();
-
- SkRegion& operator=(const SkRegion&);
-
- friend int operator==(const SkRegion& a, const SkRegion& b);
- friend int operator!=(const SkRegion& a, const SkRegion& b) {
- return !(a == b);
- }
-
- /** Replace this region with the specified region, and return true if the
- resulting region is non-empty.
- */
- bool set(const SkRegion& src) {
- SkASSERT(&src);
- *this = src;
- return !this->isEmpty();
- }
-
- /** Swap the contents of this and the specified region. This operation
- is gauarenteed to never fail.
- */
- void swap(SkRegion&);
-
- /** Return true if this region is empty */
- bool isEmpty() const { return fRunHead == SkRegion_gEmptyRunHeadPtr; }
- /** Return true if this region is a single, non-empty rectangle */
- bool isRect() const { return fRunHead == SkRegion_gRectRunHeadPtr; }
- /** Return true if this region consists of more than 1 rectangular area */
- bool isComplex() const { return !this->isEmpty() && !this->isRect(); }
- /** Return the bounds of this region. If the region is empty, returns an
- empty rectangle.
- */
- const SkIRect& getBounds() const { return fBounds; }
-
- /** Returns true if the region is non-empty, and if so, sets the specified
- path to the boundary(s) of the region.
- */
- bool getBoundaryPath(SkPath* path) const;
-
- /** Set the region to be empty, and return false, since the resulting
- region is empty
- */
- bool setEmpty();
-
- /** If rect is non-empty, set this region to that rectangle and return true,
- otherwise set this region to empty and return false.
- */
- bool setRect(const SkIRect&);
-
- /** If left < right and top < bottom, set this region to that rectangle and
- return true, otherwise set this region to empty and return false.
- */
- bool setRect(int32_t left, int32_t top, int32_t right, int32_t bottom);
-
- /** Set this region to the specified region, and return true if it is
- non-empty. */
- bool setRegion(const SkRegion&);
-
- /** Set this region to the area described by the path, clipped.
- Return true if the resulting region is non-empty.
- This produces a region that is identical to the pixels that would be
- drawn by the path (with no antialiasing) with the specified clip.
- */
- bool setPath(const SkPath&, const SkRegion& clip);
-
- /** Returns true if the specified rectangle has a non-empty intersection
- with this region.
- */
- bool intersects(const SkIRect&) const;
-
- /** Returns true if the specified region has a non-empty intersection
- with this region.
- */
- bool intersects(const SkRegion&) const;
-
- /** Return true if the specified x,y coordinate is inside the region.
- */
- bool contains(int32_t x, int32_t y) const;
-
- /** Return true if the specified rectangle is completely inside the region.
- This works for simple (rectangular) and complex regions, and always
- returns the correct result. Note: if either this region or the rectangle
- is empty, contains() returns false.
- */
- bool contains(const SkIRect&) const;
-
- /** Return true if the specified region is completely inside the region.
- This works for simple (rectangular) and complex regions, and always
- returns the correct result. Note: if either region is empty, contains()
- returns false.
- */
- bool contains(const SkRegion&) const;
-
- /** Return true if this region is a single rectangle (not complex) and the
- specified rectangle is contained by this region. Returning false is not
- a guarantee that the rectangle is not contained by this region, but
- return true is a guarantee that the rectangle is contained by this region.
- */
- bool quickContains(const SkIRect& r) const {
- return this->quickContains(r.fLeft, r.fTop, r.fRight, r.fBottom);
- }
-
- /** Return true if this region is a single rectangle (not complex) and the
- specified rectangle is contained by this region. Returning false is not
- a guarantee that the rectangle is not contained by this region, but
- return true is a guarantee that the rectangle is contained by this
- region.
- */
- bool quickContains(int32_t left, int32_t top, int32_t right,
- int32_t bottom) const {
- SkASSERT(this->isEmpty() == fBounds.isEmpty()); // valid region
-
- return left < right && top < bottom &&
- fRunHead == SkRegion_gRectRunHeadPtr && // this->isRect()
- /* fBounds.contains(left, top, right, bottom); */
- fBounds.fLeft <= left && fBounds.fTop <= top &&
- fBounds.fRight >= right && fBounds.fBottom >= bottom;
- }
-
- /** Return true if this region is empty, or if the specified rectangle does
- not intersect the region. Returning false is not a guarantee that they
- intersect, but returning true is a guarantee that they do not.
- */
- bool quickReject(const SkIRect& rect) const
- {
- return this->isEmpty() || rect.isEmpty() ||
- !SkIRect::Intersects(fBounds, rect);
- }
-
- /** Return true if this region, or rgn, is empty, or if their bounds do not
- intersect. Returning false is not a guarantee that they intersect, but
- returning true is a guarantee that they do not.
- */
- bool quickReject(const SkRegion& rgn) const {
- return this->isEmpty() || rgn.isEmpty() ||
- !SkIRect::Intersects(fBounds, rgn.fBounds);
- }
-
- /** Translate the region by the specified (dx, dy) amount.
- */
- void translate(int dx, int dy) { this->translate(dx, dy, this); }
-
- /** Translate the region by the specified (dx, dy) amount, writing the
- resulting region into dst. Note: it is legal to pass this region as the
- dst parameter, effectively translating the region in place. If dst is
- null, nothing happens.
- */
- void translate(int dx, int dy, SkRegion* dst) const;
-
- /** The logical operations that can be performed when combining two regions.
- */
- enum Op {
- kDifference_Op, //!< subtract the op region from the first region
- kIntersect_Op, //!< intersect the two regions
- kUnion_Op, //!< union (inclusive-or) the two regions
- kXOR_Op, //!< exclusive-or the two regions
- /** subtract the first region from the op region */
- kReverseDifference_Op,
- kReplace_Op //!< replace the dst region with the op region
- };
-
- /** Set this region to the result of applying the Op to this region and the
- specified rectangle: this = (this op rect).
- Return true if the resulting region is non-empty.
- */
- bool op(const SkIRect& rect, Op op) { return this->op(*this, rect, op); }
-
- /** Set this region to the result of applying the Op to this region and the
- specified rectangle: this = (this op rect).
- Return true if the resulting region is non-empty.
- */
- bool op(int left, int top, int right, int bottom, Op op) {
- SkIRect rect;
- rect.set(left, top, right, bottom);
- return this->op(*this, rect, op);
- }
-
- /** Set this region to the result of applying the Op to this region and the
- specified region: this = (this op rgn).
- Return true if the resulting region is non-empty.
- */
- bool op(const SkRegion& rgn, Op op) { return this->op(*this, rgn, op); }
- /** Set this region to the result of applying the Op to the specified
- rectangle and region: this = (rect op rgn).
- Return true if the resulting region is non-empty.
- */
- bool op(const SkIRect& rect, const SkRegion& rgn, Op);
- /** Set this region to the result of applying the Op to the specified
- region and rectangle: this = (rgn op rect).
- Return true if the resulting region is non-empty.
- */
- bool op(const SkRegion& rgn, const SkIRect& rect, Op);
- /** Set this region to the result of applying the Op to the specified
- regions: this = (rgna op rgnb).
- Return true if the resulting region is non-empty.
- */
- bool op(const SkRegion& rgna, const SkRegion& rgnb, Op op);
-
- /** Returns the sequence of rectangles, sorted in Y and X, that make up
- this region.
- */
- class Iterator {
- public:
- Iterator() : fRgn(NULL), fDone(true) {}
- Iterator(const SkRegion&);
- // if we have a region, reset to it and return true, else return false
- bool rewind();
- // reset the iterator, using the new region
- void reset(const SkRegion&);
- bool done() { return fDone; }
- void next();
- const SkIRect& rect() const { return fRect; }
-
- private:
- const SkRegion* fRgn;
- const RunType* fRuns;
- SkIRect fRect;
- bool fDone;
- };
-
- /** Returns the sequence of rectangles, sorted in Y and X, that make up
- this region intersected with the specified clip rectangle.
- */
- class Cliperator {
- public:
- Cliperator(const SkRegion&, const SkIRect& clip);
- bool done() { return fDone; }
- void next();
- const SkIRect& rect() const { return fRect; }
-
- private:
- Iterator fIter;
- SkIRect fClip;
- SkIRect fRect;
- bool fDone;
- };
-
- /** Returns the sequence of runs that make up this region for the specified
- Y scanline, clipped to the specified left and right X values.
- */
- class Spanerator {
- public:
- Spanerator(const SkRegion&, int y, int left, int right);
- bool next(int* left, int* right);
-
- private:
- const SkRegion::RunType* fRuns;
- int fLeft, fRight;
- bool fDone;
- };
-
- /** Write the region to the buffer, and return the number of bytes written.
- If buffer is NULL, it still returns the number of bytes.
- */
- uint32_t flatten(void* buffer) const;
- /** Initialized the region from the buffer, returning the number
- of bytes actually read.
- */
- uint32_t unflatten(const void* buffer);
-
- SkDEBUGCODE(void dump() const;)
- SkDEBUGCODE(void validate() const;)
- SkDEBUGCODE(static void UnitTest();)
-
- // expose this to allow for regression test on complex regions
- SkDEBUGCODE(bool debugSetRuns(const RunType runs[], int count);)
-
-private:
- enum {
- kOpCount = kReplace_Op + 1
- };
-
- enum {
- kRectRegionRuns = 6 // need to store a region of a rect [T B L R S S]
- };
-
- friend class android::Region; // needed for marshalling efficiently
- void allocateRuns(int count); // allocate space for count runs
-
- struct RunHead;
-
- SkIRect fBounds;
- RunHead* fRunHead;
-
- void freeRuns();
- const RunType* getRuns(RunType tmpStorage[], int* count) const;
- bool setRuns(RunType runs[], int count);
-
- int count_runtype_values(int* itop, int* ibot) const;
-
- static void BuildRectRuns(const SkIRect& bounds,
- RunType runs[kRectRegionRuns]);
- // returns true if runs are just a rect
- static bool ComputeRunBounds(const RunType runs[], int count,
- SkIRect* bounds);
-
- friend struct RunHead;
- friend class Iterator;
- friend class Spanerator;
- friend class SkRgnBuilder;
- friend class SkFlatRegion;
-};
-
-
-#endif
-
diff --git a/include/core/SkScalar.h b/include/core/SkScalar.h
deleted file mode 100644
index 86341eb..0000000
--- a/include/core/SkScalar.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkScalar_DEFINED
-#define SkScalar_DEFINED
-
-#include "SkFixed.h"
-
-/** \file SkScalar.h
-
- Types and macros for the data type SkScalar. This is the fractional numeric type
- that, depending on the compile-time flag SK_SCALAR_IS_FLOAT, may be implemented
- either as an IEEE float, or as a 16.16 SkFixed. The macros in this file are written
- to allow the calling code to manipulate SkScalar values without knowing which representation
- is in effect.
-*/
-
-#ifdef SK_SCALAR_IS_FLOAT
- #include "SkFloatingPoint.h"
-
- /** SkScalar is our type for fractional values and coordinates. Depending on
- compile configurations, it is either represented as an IEEE float, or
- as a 16.16 fixed point integer.
- */
- typedef float SkScalar;
- extern const uint32_t gIEEENotANumber;
- extern const uint32_t gIEEEInfinity;
-
- /** SK_Scalar1 is defined to be 1.0 represented as an SkScalar
- */
- #define SK_Scalar1 (1.0f)
- /** SK_Scalar1 is defined to be 1/2 represented as an SkScalar
- */
- #define SK_ScalarHalf (0.5f)
- /** SK_ScalarInfinity is defined to be infinity as an SkScalar
- */
- #define SK_ScalarInfinity (*(const float*)&gIEEEInfinity)
- /** SK_ScalarMax is defined to be the largest value representable as an SkScalar
- */
- #define SK_ScalarMax (3.4028235e+38f)
- /** SK_ScalarMin is defined to be the smallest value representable as an SkScalar
- */
- #define SK_ScalarMin (1.1754944e-38f)
- /** SK_ScalarNaN is defined to be 'Not a Number' as an SkScalar
- */
- #define SK_ScalarNaN (*(const float*)(const void*)&gIEEENotANumber)
- /** SkScalarIsNaN(n) returns true if argument is not a number
- */
- static inline bool SkScalarIsNaN(float x) { return x != x; }
- /** SkIntToScalar(n) returns its integer argument as an SkScalar
- */
- #define SkIntToScalar(n) ((float)(n))
- /** SkFixedToScalar(n) returns its SkFixed argument as an SkScalar
- */
- #define SkFixedToScalar(x) SkFixedToFloat(x)
- /** SkScalarToFixed(n) returns its SkScalar argument as an SkFixed
- */
- #define SkScalarToFixed(x) SkFloatToFixed(x)
-
- #define SkScalarToFloat(n) (n)
- #define SkFloatToScalar(n) (n)
-
- #define SkScalarToDouble(n) (double)(n)
- #define SkDoubleToScalar(n) (float)(n)
-
- /** SkScalarFraction(x) returns the signed fractional part of the argument
- */
- #define SkScalarFraction(x) sk_float_mod(x, 1.0f)
- /** Rounds the SkScalar to the nearest integer value
- */
- #define SkScalarRound(x) sk_float_round2int(x)
- /** Returns the smallest integer that is >= the specified SkScalar
- */
- #define SkScalarCeil(x) sk_float_ceil2int(x)
- /** Returns the largest integer that is <= the specified SkScalar
- */
- #define SkScalarFloor(x) sk_float_floor2int(x)
- /** Returns the absolute value of the specified SkScalar
- */
- #define SkScalarAbs(x) sk_float_abs(x)
- /** Returns the value pinned between 0 and max inclusive
- */
- inline SkScalar SkScalarClampMax(SkScalar x, SkScalar max) {
- return x < 0 ? 0 : x > max ? max : x;
- }
- /** Returns the value pinned between min and max inclusive
- */
- inline SkScalar SkScalarPin(SkScalar x, SkScalar min, SkScalar max) {
- return x < min ? min : x > max ? max : x;
- }
- /** Returns the specified SkScalar squared (x*x)
- */
- inline SkScalar SkScalarSquare(SkScalar x) { return x * x; }
- /** Returns the product of two SkScalars
- */
- #define SkScalarMul(a, b) ((float)(a) * (b))
- /** Returns the product of two SkScalars plus a third SkScalar
- */
- #define SkScalarMulAdd(a, b, c) ((float)(a) * (b) + (c))
- /** Returns the product of a SkScalar and an int rounded to the nearest integer value
- */
- #define SkScalarMulRound(a, b) SkScalarRound((float)(a) * (b))
- /** Returns the product of a SkScalar and an int promoted to the next larger int
- */
- #define SkScalarMulCeil(a, b) SkScalarCeil((float)(a) * (b))
- /** Returns the product of a SkScalar and an int truncated to the next smaller int
- */
- #define SkScalarMulFloor(a, b) SkScalarFloor((float)(a) * (b))
- /** Returns the quotient of two SkScalars (a/b)
- */
- #define SkScalarDiv(a, b) ((float)(a) / (b))
- /** Returns the mod of two SkScalars (a mod b)
- */
- #define SkScalarMod(x,y) sk_float_mod(x,y)
- /** Returns the product of the first two arguments, divided by the third argument
- */
- #define SkScalarMulDiv(a, b, c) ((float)(a) * (b) / (c))
- /** Returns the multiplicative inverse of the SkScalar (1/x)
- */
- #define SkScalarInvert(x) (SK_Scalar1 / (x))
- #define SkScalarFastInvert(x) (SK_Scalar1 / (x))
- /** Returns the square root of the SkScalar
- */
- #define SkScalarSqrt(x) sk_float_sqrt(x)
- /** Returns the average of two SkScalars (a+b)/2
- */
- #define SkScalarAve(a, b) (((a) + (b)) * 0.5f)
- /** Returns the geometric mean of two SkScalars
- */
- #define SkScalarMean(a, b) sk_float_sqrt((float)(a) * (b))
- /** Returns one half of the specified SkScalar
- */
- #define SkScalarHalf(a) ((a) * 0.5f)
-
- #define SK_ScalarSqrt2 1.41421356f
- #define SK_ScalarPI 3.14159265f
- #define SK_ScalarTanPIOver8 0.414213562f
- #define SK_ScalarRoot2Over2 0.707106781f
-
- #define SkDegreesToRadians(degrees) ((degrees) * (SK_ScalarPI / 180))
- float SkScalarSinCos(SkScalar radians, SkScalar* cosValue);
- #define SkScalarSin(radians) (float)sk_float_sin(radians)
- #define SkScalarCos(radians) (float)sk_float_cos(radians)
- #define SkScalarTan(radians) (float)sk_float_tan(radians)
- #define SkScalarASin(val) (float)sk_float_asin(val)
- #define SkScalarACos(val) (float)sk_float_acos(val)
- #define SkScalarATan2(y, x) (float)sk_float_atan2(y,x)
- #define SkScalarExp(x) (float)sk_float_exp(x)
- #define SkScalarLog(x) (float)sk_float_log(x)
-
- inline SkScalar SkMaxScalar(SkScalar a, SkScalar b) { return a > b ? a : b; }
- inline SkScalar SkMinScalar(SkScalar a, SkScalar b) { return a < b ? a : b; }
-
-#else
- typedef SkFixed SkScalar;
-
- #define SK_Scalar1 SK_Fixed1
- #define SK_ScalarHalf SK_FixedHalf
- #define SK_ScalarInfinity SK_FixedMax
- #define SK_ScalarMax SK_FixedMax
- #define SK_ScalarMin SK_FixedMin
- #define SK_ScalarNaN SK_FixedNaN
- #define SkScalarIsNaN(x) ((x) == SK_FixedNaN)
- #define SkIntToScalar(n) SkIntToFixed(n)
- #define SkFixedToScalar(x) (x)
- #define SkScalarToFixed(x) (x)
- #ifdef SK_CAN_USE_FLOAT
- #define SkScalarToFloat(n) SkFixedToFloat(n)
- #define SkFloatToScalar(n) SkFloatToFixed(n)
-
- #define SkScalarToDouble(n) SkFixedToDouble(n)
- #define SkDoubleToScalar(n) SkDoubleToFixed(n)
- #endif
- #define SkScalarFraction(x) SkFixedFraction(x)
- #define SkScalarRound(x) SkFixedRound(x)
- #define SkScalarCeil(x) SkFixedCeil(x)
- #define SkScalarFloor(x) SkFixedFloor(x)
- #define SkScalarAbs(x) SkFixedAbs(x)
- #define SkScalarClampMax(x, max) SkClampMax(x, max)
- #define SkScalarPin(x, min, max) SkPin32(x, min, max)
- #define SkScalarSquare(x) SkFixedSquare(x)
- #define SkScalarMul(a, b) SkFixedMul(a, b)
- #define SkScalarMulAdd(a, b, c) SkFixedMulAdd(a, b, c)
- #define SkScalarMulRound(a, b) SkFixedMulCommon(a, b, SK_FixedHalf)
- #define SkScalarMulCeil(a, b) SkFixedMulCommon(a, b, SK_Fixed1 - 1)
- #define SkScalarMulFloor(a, b) SkFixedMulCommon(a, b, 0)
- #define SkScalarDiv(a, b) SkFixedDiv(a, b)
- #define SkScalarMod(a, b) SkFixedMod(a, b)
- #define SkScalarMulDiv(a, b, c) SkMulDiv(a, b, c)
- #define SkScalarInvert(x) SkFixedInvert(x)
- #define SkScalarFastInvert(x) SkFixedFastInvert(x)
- #define SkScalarSqrt(x) SkFixedSqrt(x)
- #define SkScalarAve(a, b) SkFixedAve(a, b)
- #define SkScalarMean(a, b) SkFixedMean(a, b)
- #define SkScalarHalf(a) ((a) >> 1)
-
- #define SK_ScalarSqrt2 SK_FixedSqrt2
- #define SK_ScalarPI SK_FixedPI
- #define SK_ScalarTanPIOver8 SK_FixedTanPIOver8
- #define SK_ScalarRoot2Over2 SK_FixedRoot2Over2
-
- #define SkDegreesToRadians(degrees) SkFractMul(degrees, SK_FractPIOver180)
- #define SkScalarSinCos(radians, cosPtr) SkFixedSinCos(radians, cosPtr)
- #define SkScalarSin(radians) SkFixedSin(radians)
- #define SkScalarCos(radians) SkFixedCos(radians)
- #define SkScalarTan(val) SkFixedTan(val)
- #define SkScalarASin(val) SkFixedASin(val)
- #define SkScalarACos(val) SkFixedACos(val)
- #define SkScalarATan2(y, x) SkFixedATan2(y,x)
- #define SkScalarExp(x) SkFixedExp(x)
- #define SkScalarLog(x) SkFixedLog(x)
-
- #define SkMaxScalar(a, b) SkMax32(a, b)
- #define SkMinScalar(a, b) SkMin32(a, b)
-#endif
-
-#define SK_ScalarNearlyZero (SK_Scalar1 / (1 << 12))
-
-/* <= is slower than < for floats, so we use < for our tolerance test
-*/
-
-inline bool SkScalarNearlyZero(SkScalar x, SkScalar tolerance = SK_ScalarNearlyZero)
-{
- SkASSERT(tolerance > 0);
- return SkScalarAbs(x) < tolerance;
-}
-
-/** Linearly interpolate between A and B, based on t.
- If t is 0, return A
- If t is 1, return B
- else interpolate.
- t must be [0..SK_Scalar1]
-*/
-inline SkScalar SkScalarInterp(SkScalar A, SkScalar B, SkScalar t)
-{
- SkASSERT(t >= 0 && t <= SK_Scalar1);
- return A + SkScalarMul(B - A, t);
-}
-
-#endif
-
diff --git a/include/core/SkScalarCompare.h b/include/core/SkScalarCompare.h
deleted file mode 100644
index fee554c..0000000
--- a/include/core/SkScalarCompare.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkScalarCompare_DEFINED
-#define SkScalarCompare_DEFINED
-
-#include "SkFloatBits.h"
-#include "SkRect.h"
-
-#ifdef SK_SCALAR_SLOW_COMPARES
- typedef int32_t SkScalarCompareType;
- typedef SkIRect SkRectCompareType;
- #define SkScalarToCompareType(x) SkScalarAs2sCompliment(x)
-#else
- typedef SkScalar SkScalarCompareType;
- typedef SkRect SkRectCompareType;
- #define SkScalarToCompareType(x) (x)
-#endif
-
-#endif
-
diff --git a/include/core/SkScalerContext.h b/include/core/SkScalerContext.h
deleted file mode 100644
index 583833e..0000000
--- a/include/core/SkScalerContext.h
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkScalerContext_DEFINED
-#define SkScalerContext_DEFINED
-
-#include "SkMask.h"
-#include "SkMatrix.h"
-#include "SkPaint.h"
-#include "SkPath.h"
-#include "SkPoint.h"
-
-class SkDescriptor;
-class SkMaskFilter;
-class SkPathEffect;
-class SkRasterizer;
-
-// needs to be != to any valid SkMask::Format
-#define MASK_FORMAT_JUST_ADVANCE (0xFF)
-
-struct SkGlyph {
- void* fImage;
- SkPath* fPath;
- SkFixed fAdvanceX, fAdvanceY;
-
- uint32_t fID;
- uint16_t fWidth, fHeight;
- int16_t fTop, fLeft;
-
- uint8_t fMaskFormat;
- int8_t fRsbDelta, fLsbDelta; // used by auto-kerning
-
- unsigned rowBytes() const {
- unsigned rb = fWidth;
- if (SkMask::kBW_Format == fMaskFormat) {
- rb = (rb + 7) >> 3;
- } else {
- rb = SkAlign4(rb);
- }
- return rb;
- }
-
- bool isJustAdvance() const {
- return MASK_FORMAT_JUST_ADVANCE == fMaskFormat;
- }
-
- bool isFullMetrics() const {
- return MASK_FORMAT_JUST_ADVANCE != fMaskFormat;
- }
-
- uint16_t getGlyphID() const {
- return ID2Code(fID);
- }
-
- unsigned getGlyphID(unsigned baseGlyphCount) const {
- unsigned code = ID2Code(fID);
- SkASSERT(code >= baseGlyphCount);
- return code - baseGlyphCount;
- }
-
- unsigned getSubX() const {
- return ID2SubX(fID);
- }
-
- SkFixed getSubXFixed() const {
- return SubToFixed(ID2SubX(fID));
- }
-
- SkFixed getSubYFixed() const {
- return SubToFixed(ID2SubY(fID));
- }
-
- size_t computeImageSize() const;
-
- /** Call this to set all of the metrics fields to 0 (e.g. if the scaler
- encounters an error measuring a glyph). Note: this does not alter the
- fImage, fPath, fID, fMaskFormat fields.
- */
- void zeroMetrics();
-
- enum {
- kSubBits = 2,
- kSubMask = ((1 << kSubBits) - 1),
- kSubShift = 24, // must be large enough for glyphs and unichars
- kCodeMask = ((1 << kSubShift) - 1),
- // relative offsets for X and Y subpixel bits
- kSubShiftX = kSubBits,
- kSubShiftY = 0
- };
-
- static unsigned ID2Code(uint32_t id) {
- return id & kCodeMask;
- }
-
- static unsigned ID2SubX(uint32_t id) {
- return id >> (kSubShift + kSubShiftX);
- }
-
- static unsigned ID2SubY(uint32_t id) {
- return (id >> (kSubShift + kSubShiftY)) & kSubMask;
- }
-
- static unsigned FixedToSub(SkFixed n) {
- return (n >> (16 - kSubBits)) & kSubMask;
- }
-
- static SkFixed SubToFixed(unsigned sub) {
- SkASSERT(sub <= kSubMask);
- return sub << (16 - kSubBits);
- }
-
- static uint32_t MakeID(unsigned code) {
- return code;
- }
-
- static uint32_t MakeID(unsigned code, SkFixed x, SkFixed y) {
- SkASSERT(code <= kCodeMask);
- x = FixedToSub(x);
- y = FixedToSub(y);
- return (x << (kSubShift + kSubShiftX)) |
- (y << (kSubShift + kSubShiftY)) |
- code;
- }
-
- void toMask(SkMask* mask) const;
-};
-
-class SkScalerContext {
-public:
- enum Hints {
- kNo_Hints,
- kSubpixel_Hints,
- kNormal_Hints
- };
- enum Flags {
- kFrameAndFill_Flag = 0x01,
- kDevKernText_Flag = 0x02,
- kGammaForBlack_Flag = 0x04, // illegal to set both Gamma flags
- kGammaForWhite_Flag = 0x08 // illegal to set both Gamma flags
- };
- struct Rec {
- uint32_t fFontID;
- SkScalar fTextSize, fPreScaleX, fPreSkewX;
- SkScalar fPost2x2[2][2];
- SkScalar fFrameWidth, fMiterLimit;
- uint8_t fHints;
- uint8_t fMaskFormat;
- uint8_t fStrokeJoin;
- uint8_t fFlags;
-
- void getMatrixFrom2x2(SkMatrix*) const;
- void getLocalMatrix(SkMatrix*) const;
- void getSingleMatrix(SkMatrix*) const;
- };
-
- SkScalerContext(const SkDescriptor* desc);
- virtual ~SkScalerContext();
-
- void setBaseGlyphCount(unsigned baseGlyphCount) {
- fBaseGlyphCount = baseGlyphCount;
- }
-
- uint16_t charToGlyphID(SkUnichar uni);
-
- unsigned getGlyphCount() const { return this->generateGlyphCount(); }
- void getAdvance(SkGlyph*);
- void getMetrics(SkGlyph*);
- void getImage(const SkGlyph&);
- void getPath(const SkGlyph&, SkPath*);
- void getFontMetrics(SkPaint::FontMetrics* mX,
- SkPaint::FontMetrics* mY);
-
- static inline void MakeRec(const SkPaint&, const SkMatrix*, Rec* rec);
- static SkScalerContext* Create(const SkDescriptor*);
-
-protected:
- Rec fRec;
- unsigned fBaseGlyphCount;
-
- virtual unsigned generateGlyphCount() const = 0;
- virtual uint16_t generateCharToGlyph(SkUnichar) = 0;
- virtual void generateAdvance(SkGlyph*) = 0;
- virtual void generateMetrics(SkGlyph*) = 0;
- virtual void generateImage(const SkGlyph&) = 0;
- virtual void generatePath(const SkGlyph&, SkPath*) = 0;
- virtual void generateFontMetrics(SkPaint::FontMetrics* mX,
- SkPaint::FontMetrics* mY) = 0;
-
-private:
- SkPathEffect* fPathEffect;
- SkMaskFilter* fMaskFilter;
- SkRasterizer* fRasterizer;
- SkScalar fDevFrameWidth;
-
- void internalGetPath(const SkGlyph& glyph, SkPath* fillPath,
- SkPath* devPath, SkMatrix* fillToDevMatrix);
-
- mutable SkScalerContext* fAuxScalerContext;
-
- SkScalerContext* getGlyphContext(const SkGlyph& glyph) const;
-
- // return loaded fAuxScalerContext or NULL
- SkScalerContext* loadAuxContext() const;
-};
-
-#define kRec_SkDescriptorTag SkSetFourByteTag('s', 'r', 'e', 'c')
-#define kPathEffect_SkDescriptorTag SkSetFourByteTag('p', 't', 'h', 'e')
-#define kMaskFilter_SkDescriptorTag SkSetFourByteTag('m', 's', 'k', 'f')
-#define kRasterizer_SkDescriptorTag SkSetFourByteTag('r', 'a', 's', 't')
-
-#endif
-
diff --git a/include/core/SkScan.h b/include/core/SkScan.h
deleted file mode 100644
index 037dc09..0000000
--- a/include/core/SkScan.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/* libs/graphics/sgl/SkScan.h
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#ifndef SkScan_DEFINED
-#define SkScan_DEFINED
-
-#include "SkRect.h"
-
-class SkRegion;
-class SkBlitter;
-class SkPath;
-
-/** Defines a fixed-point rectangle, identical to the integer SkIRect, but its
- coordinates are treated as SkFixed rather than int32_t.
-*/
-typedef SkIRect SkXRect;
-
-class SkScan {
-public:
- static void FillIRect(const SkIRect&, const SkRegion* clip, SkBlitter*);
- static void FillXRect(const SkXRect&, const SkRegion* clip, SkBlitter*);
-
-#ifdef SK_SCALAR_IS_FIXED
- static void FillRect(const SkRect& rect, const SkRegion* clip,
- SkBlitter* blitter) {
- SkScan::FillXRect(*(const SkXRect*)&rect, clip, blitter);
- }
-#else
- static void FillRect(const SkRect&, const SkRegion* clip, SkBlitter*);
-#endif
-
- static void FillTriangle(const SkPoint pts[], const SkRegion*, SkBlitter*);
- static void FillPath(const SkPath&, const SkRegion& clip, SkBlitter*);
-
- static void FillTriangle(const SkPoint& a, const SkPoint& b,
- const SkPoint& c, const SkRegion* clip,
- SkBlitter* blitter) {
- SkPoint pts[3];
- pts[0] = a;
- pts[1] = b;
- pts[2] = c;
- FillTriangle(pts, clip, blitter);
- }
-
- static void HairLine(const SkPoint&, const SkPoint&, const SkRegion* clip, SkBlitter*);
- static void HairRect(const SkRect&, const SkRegion* clip, SkBlitter*);
- static void HairPath(const SkPath&, const SkRegion* clip, SkBlitter*);
-
- static void FrameRect(const SkRect&, SkScalar width, const SkRegion* clip, SkBlitter*);
-
- static void AntiFillXRect(const SkXRect&, const SkRegion* clip, SkBlitter*);
-#ifdef SK_SCALAR_IS_FIXED
- static void AntiFillRect(const SkRect& rect, const SkRegion* clip,
- SkBlitter* blitter) {
- SkScan::AntiFillXRect(*(const SkXRect*)&rect, clip, blitter);
- }
-#else
- static void AntiFillRect(const SkRect&, const SkRegion* clip, SkBlitter*);
-#endif
-
- static void AntiFillPath(const SkPath&, const SkRegion& clip, SkBlitter*);
-
- static void AntiHairLine(const SkPoint&, const SkPoint&, const SkRegion* clip, SkBlitter*);
- static void AntiHairRect(const SkRect&, const SkRegion* clip, SkBlitter*);
- static void AntiHairPath(const SkPath&, const SkRegion* clip, SkBlitter*);
-};
-
-/** Assign an SkXRect from a SkIRect, by promoting the src rect's coordinates
- from int to SkFixed. Does not check for overflow if the src coordinates
- exceed 32K
-*/
-static inline void XRect_set(SkXRect* xr, const SkIRect& src) {
- xr->fLeft = SkIntToFixed(src.fLeft);
- xr->fTop = SkIntToFixed(src.fTop);
- xr->fRight = SkIntToFixed(src.fRight);
- xr->fBottom = SkIntToFixed(src.fBottom);
-}
-
-/** Assign an SkXRect from a SkRect, by promoting the src rect's coordinates
- from SkScalar to SkFixed. Does not check for overflow if the src coordinates
- exceed 32K
-*/
-static inline void XRect_set(SkXRect* xr, const SkRect& src) {
- xr->fLeft = SkScalarToFixed(src.fLeft);
- xr->fTop = SkScalarToFixed(src.fTop);
- xr->fRight = SkScalarToFixed(src.fRight);
- xr->fBottom = SkScalarToFixed(src.fBottom);
-}
-
-/** Round the SkXRect coordinates, and store the result in the SkIRect.
-*/
-static inline void XRect_round(const SkXRect& xr, SkIRect* dst) {
- dst->fLeft = SkFixedRound(xr.fLeft);
- dst->fTop = SkFixedRound(xr.fTop);
- dst->fRight = SkFixedRound(xr.fRight);
- dst->fBottom = SkFixedRound(xr.fBottom);
-}
-
-/** Round the SkXRect coordinates out (i.e. use floor for left/top, and ceiling
- for right/bottom), and store the result in the SkIRect.
-*/
-static inline void XRect_roundOut(const SkXRect& xr, SkIRect* dst) {
- dst->fLeft = SkFixedFloor(xr.fLeft);
- dst->fTop = SkFixedFloor(xr.fTop);
- dst->fRight = SkFixedCeil(xr.fRight);
- dst->fBottom = SkFixedCeil(xr.fBottom);
-}
-
-#endif
diff --git a/include/core/SkShader.h b/include/core/SkShader.h
deleted file mode 100644
index 7c13e3d..0000000
--- a/include/core/SkShader.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkShader_DEFINED
-#define SkShader_DEFINED
-
-#include "SkBitmap.h"
-#include "SkFlattenable.h"
-#include "SkMask.h"
-#include "SkMatrix.h"
-#include "SkPaint.h"
-
-class SkPath;
-
-/** \class SkShader
-
- SkShader is the based class for objects that return horizontal spans of colors during drawing.
- A subclass of SkShader is installed in a SkPaint calling paint.setShader(shader). After that
- any object (other than a bitmap) that is drawn with that paint will get its color(s) from the
- shader.
-*/
-class SkShader : public SkFlattenable {
-public:
- SkShader();
- virtual ~SkShader();
-
- /** Return true if the shader has a non-identity local matrix.
- @param localM Optional: If not null, return the shader's local matrix
- @return true if the shader has a non-identity local matrix.
- */
- bool getLocalMatrix(SkMatrix* localM) const;
- /** Set the shader's local matrix.
- @param localM The shader's new local matrix.
- */
- void setLocalMatrix(const SkMatrix& localM);
- /** Reset the shader's local matrix to identity.
- */
- void resetLocalMatrix();
-
- enum TileMode {
- kClamp_TileMode, //!< replicate the edge color if the shader draws outside of its original bounds
- kRepeat_TileMode, //!< repeat the shader's image horizontally and vertically
- kMirror_TileMode, //!< repeat the shader's image horizontally and vertically, alternating mirror images so that adjacent images always seam
-
- kTileModeCount
- };
-
- // override these in your subclass
-
- enum Flags {
- //!< set if all of the colors will be opaque
- kOpaqueAlpha_Flag = 0x01,
- //! set if this shader's shadeSpan16() method can be called
- kHasSpan16_Flag = 0x02,
- /** Set this bit if the shader's native data type is instrinsically 16
- bit, meaning that calling the 32bit shadeSpan() entry point will
- mean the the impl has to up-sample 16bit data into 32bit. Used as a
- a means of clearing a dither request if the it will have no effect
- */
- kIntrinsicly16_Flag = 0x04
- };
-
- /** Called sometimes before drawing with this shader.
- Return the type of alpha your shader will return.
- The default implementation returns 0. Your subclass should override if it can
- (even sometimes) report a non-zero value, since that will enable various blitters
- to perform faster.
- */
- virtual uint32_t getFlags() { return 0; }
-
- /** Return the alpha associated with the data returned by shadeSpan16(). If
- kHasSpan16_Flag is not set, this value is meaningless.
- */
- virtual uint8_t getSpan16Alpha() const { return fPaintAlpha; }
-
- /** Called once before drawing, with the current paint and
- device matrix. Return true if your shader supports these
- parameters, or false if not. If false is returned, nothing
- will be drawn.
- */
- virtual bool setContext( const SkBitmap& device,
- const SkPaint& paint,
- const SkMatrix& matrix);
-
- /** Called for each span of the object being drawn. Your subclass
- should set the appropriate colors (with premultiplied alpha) that
- correspond to the specified device coordinates.
- */
- virtual void shadeSpan(int x, int y, SkPMColor[], int count) = 0;
- /** Called only for 16bit devices when getFlags() returns kOpaqueAlphaFlag | kHasSpan16_Flag
- */
- virtual void shadeSpan16(int x, int y, uint16_t[], int count);
- /** Similar to shadeSpan, but only returns the alpha-channel for a span.
- The default implementation calls shadeSpan() and then extracts the alpha
- values from the returned colors.
- */
- virtual void shadeSpanAlpha(int x, int y, uint8_t alpha[], int count);
-
- /** Helper function that returns true if this shader's shadeSpan16() method can
- be called.
- */
- bool canCallShadeSpan16()
- {
- return SkShader::CanCallShadeSpan16(this->getFlags());
- }
-
- /** Helper to check the flags to know if it is legal to call shadeSpan16()
- */
- static bool CanCallShadeSpan16(uint32_t flags) {
- return (flags & kHasSpan16_Flag) != 0;
- }
-
- /** Called before a session using the shader begins. Some shaders override
- this to defer some of their work (like calling bitmap.lockPixels()).
- Must be balanced by a call to endSession.
- */
- virtual void beginSession();
- virtual void endSession();
-
- /** Optional methods for shaders that can pretend to be a bitmap/texture
- to play along with opengl. Default just returns false and ignores
- the out parameters.
- */
- virtual bool asABitmap(SkBitmap* outTexture, SkMatrix* outMatrix,
- TileMode xy[2]);
-
- //////////////////////////////////////////////////////////////////////////
- // Factory methods for stock shaders
-
- /** Call this to create a new shader that will draw with the specified bitmap.
- @param src The bitmap to use inside the shader
- @param tmx The tiling mode to use when sampling the bitmap in the x-direction.
- @param tmy The tiling mode to use when sampling the bitmap in the y-direction.
- @return Returns a new shader object. Note: this function never returns null.
- */
- static SkShader* CreateBitmapShader(const SkBitmap& src,
- TileMode tmx, TileMode tmy);
-
- virtual void flatten(SkFlattenableWriteBuffer& );
-protected:
- enum MatrixClass {
- kLinear_MatrixClass, // no perspective
- kFixedStepInX_MatrixClass, // fast perspective, need to call fixedStepInX() each scanline
- kPerspective_MatrixClass // slow perspective, need to mappoints each pixel
- };
- static MatrixClass ComputeMatrixClass(const SkMatrix&);
-
- // These can be called by your subclass after setContext() has been called
- uint8_t getPaintAlpha() const { return fPaintAlpha; }
- SkBitmap::Config getDeviceConfig() const { return (SkBitmap::Config)fDeviceConfig; }
- const SkMatrix& getTotalInverse() const { return fTotalInverse; }
- MatrixClass getInverseClass() const { return (MatrixClass)fTotalInverseClass; }
-
- SkShader(SkFlattenableReadBuffer& );
-private:
- SkMatrix* fLocalMatrix;
- SkMatrix fTotalInverse;
- uint8_t fPaintAlpha;
- uint8_t fDeviceConfig;
- uint8_t fTotalInverseClass;
- SkDEBUGCODE(SkBool8 fInSession;)
-
- static SkShader* CreateBitmapShader(const SkBitmap& src,
- TileMode, TileMode,
- void* storage, size_t storageSize);
- friend class SkAutoBitmapShaderInstall;
- typedef SkFlattenable INHERITED;
-};
-
-#endif
-
diff --git a/include/core/SkStream.h b/include/core/SkStream.h
deleted file mode 100644
index 26ef43f..0000000
--- a/include/core/SkStream.h
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkStream_DEFINED
-#define SkStream_DEFINED
-
-#include "SkRefCnt.h"
-#include "SkScalar.h"
-
-class SkStream : public SkRefCnt {
-public:
- virtual ~SkStream();
- /** Called to rewind to the beginning of the stream. If this cannot be
- done, return false.
- */
- virtual bool rewind() = 0;
- /** If this stream represents a file, this method returns the file's name.
- If it does not, it returns NULL (the default behavior).
- */
- virtual const char* getFileName();
- /** Called to read or skip size number of bytes.
- If buffer is NULL and size > 0, skip that many bytes, returning how many were skipped.
- If buffer is NULL and size == 0, return the total length of the stream.
- If buffer != NULL, copy the requested number of bytes into buffer, returning how many were copied.
- @param buffer If buffer is NULL, ignore and just skip size bytes, otherwise copy size bytes into buffer
- @param size The number of bytes to skip or copy
- @return bytes read on success
- */
- virtual size_t read(void* buffer, size_t size) = 0;
-
- /** Return the total length of the stream.
- */
- size_t getLength() { return this->read(NULL, 0); }
-
- /** Skip the specified number of bytes, returning the actual number
- of bytes that could be skipped.
- */
- size_t skip(size_t bytes);
-
- /** If the stream is backed by RAM, this method returns the starting
- address for the data. If not (i.e. it is backed by a file or other
- structure), this method returns NULL.
- The default implementation returns NULL.
- */
- virtual const void* getMemoryBase();
-
- int8_t readS8();
- int16_t readS16();
- int32_t readS32();
-
- uint8_t readU8() { return (uint8_t)this->readS8(); }
- uint16_t readU16() { return (uint16_t)this->readS16(); }
- uint32_t readU32() { return (uint32_t)this->readS32(); }
-
- bool readBool() { return this->readU8() != 0; }
- SkScalar readScalar();
- size_t readPackedUInt();
-
- static void UnitTest();
-};
-
-class SkWStream : SkNoncopyable {
-public:
- virtual ~SkWStream();
-
- /** Called to write bytes to a SkWStream. Returns true on success
- @param buffer the address of at least size bytes to be written to the stream
- @param size The number of bytes in buffer to write to the stream
- @return true on success
- */
- virtual bool write(const void* buffer, size_t size) = 0;
- virtual void newline();
- virtual void flush();
-
- // helpers
-
- bool write8(U8CPU);
- bool write16(U16CPU);
- bool write32(uint32_t);
-
- bool writeText(const char text[]);
- bool writeDecAsText(int32_t);
- bool writeHexAsText(uint32_t, int minDigits = 0);
- bool writeScalarAsText(SkScalar);
-
- bool writeBool(bool v) { return this->write8(v); }
- bool writeScalar(SkScalar);
- bool writePackedUInt(size_t);
-
- bool writeStream(SkStream* input, size_t length);
-
- static void UnitTest();
-};
-
-////////////////////////////////////////////////////////////////////////////////////////
-
-#include "SkString.h"
-
-struct SkFILE;
-
-/** A stream that reads from a FILE*, which is opened in the constructor and
- closed in the destructor
- */
-class SkFILEStream : public SkStream {
-public:
- /** Initialize the stream by calling fopen on the specified path. Will be
- closed in the destructor.
- */
- explicit SkFILEStream(const char path[] = NULL);
- virtual ~SkFILEStream();
-
- /** Returns true if the current path could be opened.
- */
- bool isValid() const { return fFILE != NULL; }
- /** Close the current file, and open a new file with the specified
- path. If path is NULL, just close the current file.
- */
- void setPath(const char path[]);
-
- virtual bool rewind();
- virtual size_t read(void* buffer, size_t size);
- virtual const char* getFileName();
-
-private:
- SkFILE* fFILE;
- SkString fName;
-};
-
-/** A stream that reads from a file descriptor
- */
-class SkFDStream : public SkStream {
-public:
- /** Initialize the stream with a dup() of the specified file descriptor.
- If closeWhenDone is true, then the descriptor will be closed in the
- destructor.
- */
- SkFDStream(int fileDesc, bool closeWhenDone);
- virtual ~SkFDStream();
-
- /** Returns true if the current path could be opened.
- */
- bool isValid() const { return fFD >= 0; }
-
- virtual bool rewind();
- virtual size_t read(void* buffer, size_t size);
- virtual const char* getFileName() { return NULL; }
-
-private:
- int fFD;
- bool fCloseWhenDone;
-};
-
-class SkMemoryStream : public SkStream {
-public:
- SkMemoryStream();
- /** We allocate (and free) the memory. Write to it via getMemoryBase()
- */
- SkMemoryStream(size_t length);
- /** if copyData is true, the stream makes a private copy of the data
- */
- SkMemoryStream(const void* data, size_t length, bool copyData = false);
- virtual ~SkMemoryStream();
-
- /** Resets the stream to the specified data and length,
- just like the constructor.
- if copyData is true, the stream makes a private copy of the data
- */
- virtual void setMemory(const void* data, size_t length,
- bool copyData = false);
- void skipToAlign4();
- virtual bool rewind();
- virtual size_t read(void* buffer, size_t size);
- virtual const void* getMemoryBase();
- const void* getAtPos();
- size_t seek(size_t offset);
- size_t peek() const { return fOffset; }
-
-private:
- const void* fSrc;
- size_t fSize, fOffset;
- SkBool8 fWeOwnTheData;
-};
-
-/** \class SkBufferStream
- This is a wrapper class that adds buffering to another stream.
- The caller can provide the buffer, or ask SkBufferStream to allocated/free
- it automatically.
-*/
-class SkBufferStream : public SkStream {
-public:
- /** Provide the stream to be buffered (proxy), and the size of the buffer that
- should be used. This will be allocated and freed automatically. If bufferSize is 0,
- a default buffer size will be used.
- The proxy stream is referenced, and will be unreferenced in when the
- bufferstream is destroyed.
- */
- SkBufferStream(SkStream* proxy, size_t bufferSize = 0);
- /** Provide the stream to be buffered (proxy), and a buffer and size to be used.
- This buffer is owned by the caller, and must be at least bufferSize bytes big.
- Passing NULL for buffer will cause the buffer to be allocated/freed automatically.
- If buffer is not NULL, it is an error for bufferSize to be 0.
- The proxy stream is referenced, and will be unreferenced in when the
- bufferstream is destroyed.
- */
- SkBufferStream(SkStream* proxy, void* buffer, size_t bufferSize);
- virtual ~SkBufferStream();
-
- virtual bool rewind();
- virtual const char* getFileName();
- virtual size_t read(void* buffer, size_t size);
- virtual const void* getMemoryBase();
-
-private:
- enum {
- kDefaultBufferSize = 128
- };
- // illegal
- SkBufferStream(const SkBufferStream&);
- SkBufferStream& operator=(const SkBufferStream&);
-
- SkStream* fProxy;
- char* fBuffer;
- size_t fOrigBufferSize, fBufferSize, fBufferOffset;
- bool fWeOwnTheBuffer;
-
- void init(void*, size_t);
-};
-
-/////////////////////////////////////////////////////////////////////////////////////////////
-
-class SkFILEWStream : public SkWStream {
-public:
- SkFILEWStream(const char path[]);
- virtual ~SkFILEWStream();
-
- /** Returns true if the current path could be opened.
- */
- bool isValid() const { return fFILE != NULL; }
-
- virtual bool write(const void* buffer, size_t size);
- virtual void flush();
-private:
- SkFILE* fFILE;
-};
-
-class SkMemoryWStream : public SkWStream {
-public:
- SkMemoryWStream(void* buffer, size_t size);
- virtual bool write(const void* buffer, size_t size);
-
-private:
- char* fBuffer;
- size_t fMaxLength;
- size_t fBytesWritten;
-};
-
-class SkDynamicMemoryWStream : public SkWStream {
-public:
- SkDynamicMemoryWStream();
- virtual ~SkDynamicMemoryWStream();
- virtual bool write(const void* buffer, size_t size);
- // random access write
- // modifies stream and returns true if offset + size is less than or equal to getOffset()
- bool write(const void* buffer, size_t offset, size_t size);
- bool read(void* buffer, size_t offset, size_t size);
- size_t getOffset() { return fBytesWritten; }
-
- // copy what has been written to the stream into dst
- void copyTo(void* dst) const;
- /* return a cache of the flattened data returned by copyTo().
- This copy is only valid until the next call to write().
- The memory is managed by the stream class.
- */
- const char* getStream() const;
-
- // same as getStream, but additionally detach the flattened datat
- const char* detach();
-
- // reset the stream to its original state
- void reset();
- void padToAlign4();
-private:
- struct Block;
- Block* fHead;
- Block* fTail;
- size_t fBytesWritten;
- mutable char* fCopyToCache;
-};
-
-
-class SkDebugWStream : public SkWStream {
-public:
- // overrides
- virtual bool write(const void* buffer, size_t size);
- virtual void newline();
-};
-
-// for now
-typedef SkFILEStream SkURLStream;
-
-#endif
-
diff --git a/include/core/SkString.h b/include/core/SkString.h
deleted file mode 100644
index 743b093..0000000
--- a/include/core/SkString.h
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkString_DEFINED
-#define SkString_DEFINED
-
-#include "SkScalar.h"
-
-/* Some helper functions for C strings
-*/
-
-bool SkStrStartsWith(const char string[], const char prefix[]);
-bool SkStrEndsWith(const char string[], const char suffix[]);
-int SkStrStartsWithOneOf(const char string[], const char prefixes[]);
-
-#define SkStrAppendS32_MaxSize 11
-char* SkStrAppendS32(char buffer[], int32_t);
-#define SkStrAppendScalar_MaxSize 11
-char* SkStrAppendScalar(char buffer[], SkScalar);
-
-/** \class SkString
-
- Light weight class for managing strings. Uses reference
- counting to make string assignments and copies very fast
- with no extra RAM cost. Assumes UTF8 encoding.
-*/
-class SkString {
-public:
- SkString();
- explicit SkString(size_t len);
- explicit SkString(const char text[]);
- SkString(const char text[], size_t len);
- explicit SkString(const SkString&);
- ~SkString();
-
- bool isEmpty() const { return fRec->fLength == 0; }
- size_t size() const { return (size_t) fRec->fLength; }
- const char* c_str() const { return fRec->data(); }
-
- bool equals(const SkString&) const;
- bool equals(const char text[]) const;
- bool equals(const char text[], size_t len) const;
-
- bool startsWith(const char prefix[]) const
- {
- return SkStrStartsWith(fRec->data(), prefix);
- }
- bool endsWith(const char suffix[]) const
- {
- return SkStrEndsWith(fRec->data(), suffix);
- }
-
- friend int operator==(const SkString& a, const SkString& b)
- {
- return a.equals(b);
- }
- friend int operator!=(const SkString& a, const SkString& b)
- {
- return !a.equals(b);
- }
-
- // these methods edit the string
-
- SkString& operator=(const SkString&);
-
- char* writable_str();
-
- void reset();
- void resize(size_t len) { this->set(NULL, len); }
- void set(const SkString& src) { *this = src; }
- void set(const char text[]);
- void set(const char text[], size_t len);
- void setUTF16(const uint16_t[]);
- void setUTF16(const uint16_t[], size_t len);
-
- void insert(size_t offset, const SkString& src) { this->insert(offset, src.c_str(), src.size()); }
- void insert(size_t offset, const char text[]);
- void insert(size_t offset, const char text[], size_t len);
- void insertUnichar(size_t offset, SkUnichar);
- void insertS32(size_t offset, int32_t value);
- void insertHex(size_t offset, uint32_t value, int minDigits = 0);
- void insertScalar(size_t offset, SkScalar);
-
- void append(const SkString& str) { this->insert((size_t)-1, str); }
- void append(const char text[]) { this->insert((size_t)-1, text); }
- void append(const char text[], size_t len) { this->insert((size_t)-1, text, len); }
- void appendUnichar(SkUnichar uni) { this->insertUnichar((size_t)-1, uni); }
- void appendS32(int32_t value) { this->insertS32((size_t)-1, value); }
- void appendHex(uint32_t value, int minDigits = 0) { this->insertHex((size_t)-1, value, minDigits); }
- void appendScalar(SkScalar value) { this->insertScalar((size_t)-1, value); }
-
- void prepend(const SkString& str) { this->insert(0, str); }
- void prepend(const char text[]) { this->insert(0, text); }
- void prepend(const char text[], size_t len) { this->insert(0, text, len); }
- void prependUnichar(SkUnichar uni) { this->insertUnichar(0, uni); }
- void prependS32(int32_t value) { this->insertS32(0, value); }
- void prependHex(uint32_t value, int minDigits = 0) { this->insertHex(0, value, minDigits); }
- void prependScalar(SkScalar value) { this->insertScalar((size_t)-1, value); }
-
- void printf(const char format[], ...);
- void appendf(const char format[], ...);
- void prependf(const char format[], ...);
-
- void remove(size_t offset, size_t length);
-
- /** Swap contents between this and other. This function is guaranteed
- to never fail or throw.
- */
- void swap(SkString& other);
-
- /** @cond UNIT_TEST */
- SkDEBUGCODE(static void UnitTest();)
- /** @endcond */
-
-private:
- struct Rec {
- public:
- uint16_t fLength;
- uint16_t fRefCnt;
- char fBeginningOfData;
-
- char* data() { return &fBeginningOfData; }
- const char* data() const { return &fBeginningOfData; }
- };
- Rec* fRec;
-
-#ifdef SK_DEBUG
- const char* fStr;
- void validate() const;
-#else
- void validate() const {}
-#endif
-
- static const Rec gEmptyRec;
- static Rec* AllocRec(const char text[], U16CPU len);
- static Rec* RefRec(Rec*);
-};
-
-class SkAutoUCS2 {
-public:
- SkAutoUCS2(const char utf8[]);
- ~SkAutoUCS2();
-
- /** This returns the number of ucs2 characters
- */
- int count() const { return fCount; }
- /** This returns a null terminated ucs2 string
- */
- const uint16_t* getUCS2() const { return fUCS2; }
-
-private:
- int fCount;
- uint16_t* fUCS2;
-};
-
-#endif
-
diff --git a/include/core/SkStroke.h b/include/core/SkStroke.h
deleted file mode 100644
index b593b69..0000000
--- a/include/core/SkStroke.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkStroke_DEFINED
-#define SkStroke_DEFINED
-
-#include "SkPoint.h"
-#include "SkPaint.h"
-
-struct SkRect;
-class SkPath;
-
-#define SK_DefaultStrokeWidth SK_Scalar1
-#define SK_DefaultMiterLimit SkIntToScalar(4)
-
-
-/** \class SkStroke
- SkStroke is the utility class that constructs paths by stroking
- geometries (lines, rects, ovals, roundrects, paths). This is
- invoked when a geometry or text is drawn in a canvas with the
- kStroke_Mask bit set in the paint.
-*/
-class SkStroke {
-public:
- SkStroke();
- SkStroke(const SkPaint&);
- SkStroke(const SkPaint&, SkScalar width); // width overrides paint.getStrokeWidth()
-
- SkPaint::Cap getCap() const { return (SkPaint::Cap)fCap; }
- void setCap(SkPaint::Cap);
-
- SkPaint::Join getJoin() const { return (SkPaint::Join)fJoin; }
- void setJoin(SkPaint::Join);
-
- void setMiterLimit(SkScalar);
- void setWidth(SkScalar);
-
- bool getDoFill() const { return SkToBool(fDoFill); }
- void setDoFill(bool doFill) { fDoFill = SkToU8(doFill); }
-
- void strokeLine(const SkPoint& start, const SkPoint& end, SkPath*) const;
- void strokeRect(const SkRect& rect, SkPath*) const;
- void strokeOval(const SkRect& oval, SkPath*) const;
- void strokeRRect(const SkRect& rect, SkScalar rx, SkScalar ry, SkPath*) const;
- void strokePath(const SkPath& path, SkPath*) const;
-
- ////////////////////////////////////////////////////////////////
-
-private:
- SkScalar fWidth, fMiterLimit;
- uint8_t fCap, fJoin;
- SkBool8 fDoFill;
-
- friend class SkPaint;
-};
-
-#endif
-
diff --git a/include/core/SkTDArray.h b/include/core/SkTDArray.h
deleted file mode 100644
index 4d2d7f7..0000000
--- a/include/core/SkTDArray.h
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkTDArray_DEFINED
-#define SkTDArray_DEFINED
-
-#include "SkTypes.h"
-
-template <typename T> class SkTDArray {
-public:
- SkTDArray() {
- fReserve = fCount = 0;
- fArray = NULL;
-#ifdef SK_DEBUG
- fData = NULL;
-#endif
- }
- SkTDArray(const T src[], size_t count) {
- SkASSERT(src || count == 0);
-
- fReserve = fCount = 0;
- fArray = NULL;
-#ifdef SK_DEBUG
- fData = NULL;
-#endif
- if (count) {
- fArray = (T*)sk_malloc_throw(count * sizeof(T));
-#ifdef SK_DEBUG
- fData = (ArrayT*)fArray;
-#endif
- memcpy(fArray, src, sizeof(T) * count);
- fReserve = fCount = count;
- }
- }
- SkTDArray(const SkTDArray<T>& src) {
- fReserve = fCount = 0;
- fArray = NULL;
-#ifdef SK_DEBUG
- fData = NULL;
-#endif
- SkTDArray<T> tmp(src.fArray, src.fCount);
- this->swap(tmp);
- }
- ~SkTDArray() {
- sk_free(fArray);
- }
-
- SkTDArray<T>& operator=(const SkTDArray<T>& src) {
- if (this != &src) {
- if (src.fCount > fReserve) {
- SkTDArray<T> tmp(src.fArray, src.fCount);
- this->swap(tmp);
- } else {
- memcpy(fArray, src.fArray, sizeof(T) * src.fCount);
- fCount = src.fCount;
- }
- }
- return *this;
- }
-
- friend int operator==(const SkTDArray<T>& a, const SkTDArray<T>& b) {
- return a.fCount == b.fCount &&
- (a.fCount == 0 ||
- !memcmp(a.fArray, b.fArray, a.fCount * sizeof(T)));
- }
-
- void swap(SkTDArray<T>& other) {
- SkTSwap(fArray, other.fArray);
-#ifdef SK_DEBUG
- SkTSwap(fData, other.fData);
-#endif
- SkTSwap(fReserve, other.fReserve);
- SkTSwap(fCount, other.fCount);
- }
-
- bool isEmpty() const { return fCount == 0; }
- int count() const { return fCount; }
- T* begin() const { return fArray; }
- T* end() const { return fArray ? fArray + fCount : NULL; }
- T& operator[](int index) const {
- SkASSERT((unsigned)index < fCount);
- return fArray[index];
- }
-
- void reset() {
- if (fArray) {
- sk_free(fArray);
- fArray = NULL;
-#ifdef SK_DEBUG
- fData = NULL;
-#endif
- fReserve = fCount = 0;
- } else {
- SkASSERT(fReserve == 0 && fCount == 0);
- }
- }
-
- void rewind() {
- // same as setCount(0)
- fCount = 0;
- }
-
- void setCount(size_t count) {
- if (count > fReserve) {
- this->growBy(count - fCount);
- } else {
- fCount = count;
- }
- }
-
- void setReserve(size_t reserve) {
- if (reserve > fReserve) {
- SkASSERT(reserve > fCount);
- size_t count = fCount;
- this->growBy(reserve - fCount);
- fCount = count;
- }
- }
-
- T* prepend() {
- this->growBy(1);
- memmove(fArray + 1, fArray, (fCount - 1) * sizeof(T));
- return fArray;
- }
-
- T* append() {
- return this->append(1, NULL);
- }
- T* append(size_t count, const T* src = NULL) {
- unsigned oldCount = fCount;
- if (count) {
- SkASSERT(src == NULL || fArray == NULL ||
- src + count <= fArray || fArray + oldCount <= src);
-
- this->growBy(count);
- if (src) {
- memcpy(fArray + oldCount, src, sizeof(T) * count);
- }
- }
- return fArray + oldCount;
- }
-
- T* appendClear() {
- T* result = this->append();
- *result = 0;
- return result;
- }
-
- T* insert(size_t index) {
- return this->insert(index, 1, NULL);
- }
- T* insert(size_t index, size_t count, const T* src = NULL) {
- SkASSERT(count);
- SkASSERT(index <= fCount);
- int oldCount = fCount;
- this->growBy(count);
- T* dst = fArray + index;
- memmove(dst + count, dst, sizeof(T) * (oldCount - index));
- if (src) {
- memcpy(dst, src, sizeof(T) * count);
- }
- return dst;
- }
-
- void remove(size_t index, size_t count = 1) {
- SkASSERT(index + count <= fCount);
- fCount = fCount - count;
- memmove(fArray + index, fArray + index + count, sizeof(T) * (fCount - index));
- }
-
- void removeShuffle(size_t index) {
- SkASSERT(index < fCount);
- unsigned newCount = fCount - 1;
- fCount = newCount;
- if (index != newCount) {
- memcpy(fArray + index, fArray + newCount, sizeof(T));
- }
- }
-
- int find(const T& elem) const {
- const T* iter = fArray;
- const T* stop = fArray + fCount;
-
- for (; iter < stop; iter++) {
- if (*iter == elem) {
- return (int) (iter - fArray);
- }
- }
- return -1;
- }
-
- int rfind(const T& elem) const {
- const T* iter = fArray + fCount;
- const T* stop = fArray;
-
- while (iter > stop) {
- if (*--iter == elem) {
- return iter - stop;
- }
- }
- return -1;
- }
-
- // routines to treat the array like a stack
- T* push() { return this->append(); }
- void push(const T& elem) { *this->append() = elem; }
- const T& top() const { return (*this)[fCount - 1]; }
- T& top() { return (*this)[fCount - 1]; }
- void pop(T* elem) { if (elem) *elem = (*this)[fCount - 1]; --fCount; }
- void pop() { --fCount; }
-
- void deleteAll() {
- T* iter = fArray;
- T* stop = fArray + fCount;
- while (iter < stop) {
- delete (*iter);
- iter += 1;
- }
- this->reset();
- }
-
- void freeAll() {
- T* iter = fArray;
- T* stop = fArray + fCount;
- while (iter < stop) {
- sk_free(*iter);
- iter += 1;
- }
- this->reset();
- }
-
- void unrefAll() {
- T* iter = fArray;
- T* stop = fArray + fCount;
- while (iter < stop) {
- (*iter)->unref();
- iter += 1;
- }
- this->reset();
- }
-
-#ifdef SK_DEBUG
- void validate() const {
- SkASSERT((fReserve == 0 && fArray == NULL) ||
- (fReserve > 0 && fArray != NULL));
- SkASSERT(fCount <= fReserve);
- SkASSERT(fData == (ArrayT*)fArray);
- }
-#endif
-
-private:
-#ifdef SK_DEBUG
- enum {
- kDebugArraySize = 16
- };
- typedef T ArrayT[kDebugArraySize];
- ArrayT* fData;
-#endif
- T* fArray;
- size_t fReserve, fCount;
-
- void growBy(size_t extra) {
- SkASSERT(extra);
-
- if (fCount + extra > fReserve) {
- size_t size = fCount + extra + 4;
- size += size >> 2;
-
- fArray = (T*)sk_realloc_throw(fArray, size * sizeof(T));
-#ifdef SK_DEBUG
- fData = (ArrayT*)fArray;
-#endif
- fReserve = size;
- }
- fCount += extra;
- }
-};
-
-#endif
-
diff --git a/include/core/SkTDStack.h b/include/core/SkTDStack.h
deleted file mode 100644
index 5bc10ee..0000000
--- a/include/core/SkTDStack.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkTDStack_DEFINED
-#define SkTDStack_DEFINED
-
-#include "SkTypes.h"
-
-template <typename T> class SkTDStack : SkNoncopyable {
-public:
- SkTDStack() : fCount(0), fTotalCount(0)
- {
- fInitialRec.fNext = NULL;
- fRec = &fInitialRec;
-
- // fCount = kSlotCount;
- }
- ~SkTDStack()
- {
- Rec* rec = fRec;
- while (rec != &fInitialRec)
- {
- Rec* next = rec->fNext;
- sk_free(rec);
- rec = next;
- }
- }
-
- int count() const { return fTotalCount; }
-
- T* push()
- {
- SkASSERT(fCount <= kSlotCount);
- if (fCount == kSlotCount)
- {
- Rec* rec = (Rec*)sk_malloc_throw(sizeof(Rec));
- rec->fNext = fRec;
- fRec = rec;
- fCount = 0;
- }
- ++fTotalCount;
- return &fRec->fSlots[fCount++];
- }
- void push(const T& elem) { *this->push() = elem; }
- const T& index(int idx) const
- {
- SkASSERT(fRec && fCount > idx);
- return fRec->fSlots[fCount - idx - 1];
- }
- T& index(int idx)
- {
- SkASSERT(fRec && fCount > idx);
- return fRec->fSlots[fCount - idx - 1];
- }
- const T& top() const
- {
- SkASSERT(fRec && fCount > 0);
- return fRec->fSlots[fCount - 1];
- }
- T& top()
- {
- SkASSERT(fRec && fCount > 0);
- return fRec->fSlots[fCount - 1];
- }
- void pop(T* elem)
- {
- if (elem)
- *elem = fRec->fSlots[fCount - 1];
- this->pop();
- }
- void pop()
- {
- SkASSERT(fCount > 0 && fRec);
- --fTotalCount;
- if (--fCount == 0)
- {
- if (fRec != &fInitialRec)
- {
- Rec* rec = fRec->fNext;
- sk_free(fRec);
- fCount = kSlotCount;
- fRec = rec;
- }
- else
- SkASSERT(fTotalCount == 0);
- }
- }
-
-private:
- enum {
- kSlotCount = 8
- };
-
- struct Rec;
- friend struct Rec;
-
- struct Rec {
- Rec* fNext;
- T fSlots[kSlotCount];
- };
- Rec fInitialRec;
- Rec* fRec;
- int fCount, fTotalCount;
-};
-
-#endif
-
diff --git a/include/core/SkTDict.h b/include/core/SkTDict.h
deleted file mode 100644
index 0b92779..0000000
--- a/include/core/SkTDict.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkTDict_DEFINED
-#define SkTDict_DEFINED
-
-#include "SkChunkAlloc.h"
-#include "SkTSearch.h"
-#include "SkTDArray.h"
-
-template <typename T> class SkTDict : SkNoncopyable {
-public:
- SkTDict(size_t minStringAlloc) : fStrings(minStringAlloc) {}
-
- void reset()
- {
- fArray.reset();
- fStrings.reset();
- }
-
- int count() const { return fArray.count(); }
-
- bool set(const char name[], const T& value)
- {
- return set(name, strlen(name), value);
- }
-
- bool set(const char name[], size_t len, const T& value)
- {
- SkASSERT(name);
-
- int index = this->find_index(name, len);
-
- if (index >= 0)
- {
- fArray[index].fValue = value;
- return false;
- }
- else
- {
- Pair* pair = fArray.insert(~index);
- char* copy = (char*)fStrings.alloc(len + 1, SkChunkAlloc::kThrow_AllocFailType);
- memcpy(copy, name, len);
- copy[len] = '\0';
- pair->fName = copy;
- pair->fValue = value;
- return true;
- }
- }
-
- bool find(const char name[]) const
- {
- return this->find_index(name) >= 0;
- }
-
- bool find(const char name[], size_t len) const
- {
- return this->find_index(name, len) >= 0;
- }
-
- bool find(const char name[], T* value) const
- {
- return find(name, strlen(name), value);
- }
-
- bool find(const char name[], size_t len, T* value) const
- {
- int index = this->find_index(name, len);
-
- if (index >= 0)
- {
- if (value)
- *value = fArray[index].fValue;
- return true;
- }
- return false;
- }
-
- bool findKey(T& value, const char** name) const
- {
- Pair* end = fArray.end();
- for (Pair* pair = fArray.begin(); pair < end; pair++) {
- if (pair->fValue != value)
- continue;
- *name = pair->fName;
- return true;
- }
- return false;
- }
-
-public:
- struct Pair {
- const char* fName;
- T fValue;
-
- friend int operator<(const Pair& a, const Pair& b)
- {
- return strcmp(a.fName, b.fName);
- }
- friend int operator!=(const Pair& a, const Pair& b)
- {
- return strcmp(a.fName, b.fName);
- }
- };
- friend class Iter;
-
-public:
- class Iter {
- public:
- Iter(const SkTDict<T>& dict)
- {
- fIter = dict.fArray.begin();
- fStop = dict.fArray.end();
- }
- const char* next(T* value)
- {
- const char* name = NULL;
- if (fIter < fStop)
- {
- name = fIter->fName;
- if (value)
- *value = fIter->fValue;
- fIter += 1;
- }
- return name;
- }
- private:
- Pair* fIter;
- Pair* fStop;
- };
-
-private:
- SkTDArray<Pair> fArray;
- SkChunkAlloc fStrings;
-
- int find_index(const char name[]) const
- {
- return find_index(name, strlen(name));
- }
-
- int find_index(const char name[], size_t len) const
- {
- SkASSERT(name);
-
- int count = fArray.count();
- int index = ~0;
-
- if (count)
- index = SkStrSearch(&fArray.begin()->fName, count, name, len, sizeof(Pair));
- return index;
- }
- friend class Iter;
-};
-
-#endif
-
diff --git a/include/core/SkTRegistry.h b/include/core/SkTRegistry.h
deleted file mode 100644
index f0f427c..0000000
--- a/include/core/SkTRegistry.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2009, The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkTRegistry_DEFINED
-#define SkTRegistry_DEFINED
-
-#include "SkTypes.h"
-
-/** Template class that registers itself (in the constructor) into a linked-list
- and provides a function-pointer. This can be used to auto-register a set of
- services, e.g. a set of image codecs.
- */
-template <typename T, typename P> class SkTRegistry : SkNoncopyable {
-public:
- typedef T (*Factory)(P);
-
- SkTRegistry(Factory fact) {
- fFact = fact;
- fChain = gHead;
- gHead = this;
- }
-
- static const SkTRegistry* Head() { return gHead; }
-
- const SkTRegistry* next() const { return fChain; }
- Factory factory() const { return fFact; }
-
-private:
- Factory fFact;
- SkTRegistry* fChain;
-
- static SkTRegistry* gHead;
-};
-
-// The caller still needs to declare an instance of this somewhere
-template <typename T, typename P> SkTRegistry<T, P>* SkTRegistry<T, P>::gHead;
-
-#endif
diff --git a/include/core/SkTSearch.h b/include/core/SkTSearch.h
deleted file mode 100644
index f29e6f5..0000000
--- a/include/core/SkTSearch.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkTSearch_DEFINED
-#define SkTSearch_DEFINED
-
-#include "SkTypes.h"
-
-template <typename T>
-int SkTSearch(const T* base, int count, const T& target, size_t elemSize)
-{
- SkASSERT(count >= 0);
- if (count <= 0)
- return ~0;
-
- SkASSERT(base != NULL); // base may be NULL if count is zero
-
- int lo = 0;
- int hi = count - 1;
-
- while (lo < hi)
- {
- int mid = (hi + lo) >> 1;
- const T* elem = (const T*)((const char*)base + mid * elemSize);
-
- if (*elem < target)
- lo = mid + 1;
- else
- hi = mid;
- }
-
- const T* elem = (const T*)((const char*)base + hi * elemSize);
- if (*elem != target)
- {
- if (*elem < target)
- hi += 1;
- hi = ~hi;
- }
- return hi;
-}
-
-template <typename T>
-int SkTSearch(const T* base, int count, const T& target, size_t elemSize,
- int (*compare)(const T&, const T&))
-{
- SkASSERT(count >= 0);
- if (count <= 0) {
- return ~0;
- }
-
- SkASSERT(base != NULL); // base may be NULL if count is zero
-
- int lo = 0;
- int hi = count - 1;
-
- while (lo < hi) {
- int mid = (hi + lo) >> 1;
- const T* elem = (const T*)((const char*)base + mid * elemSize);
-
- if ((*compare)(*elem, target) < 0)
- lo = mid + 1;
- else
- hi = mid;
- }
-
- const T* elem = (const T*)((const char*)base + hi * elemSize);
- int pred = (*compare)(*elem, target);
- if (pred != 0) {
- if (pred < 0)
- hi += 1;
- hi = ~hi;
- }
- return hi;
-}
-
-template <typename T>
-int SkTSearch(const T** base, int count, const T* target, size_t elemSize,
- int (*compare)(const T*, const T*))
-{
- SkASSERT(count >= 0);
- if (count <= 0)
- return ~0;
-
- SkASSERT(base != NULL); // base may be NULL if count is zero
-
- int lo = 0;
- int hi = count - 1;
-
- while (lo < hi)
- {
- int mid = (hi + lo) >> 1;
- const T* elem = *(const T**)((const char*)base + mid * elemSize);
-
- if ((*compare)(elem, target) < 0)
- lo = mid + 1;
- else
- hi = mid;
- }
-
- const T* elem = *(const T**)((const char*)base + hi * elemSize);
- int pred = (*compare)(elem, target);
- if (pred != 0)
- {
- if (pred < 0)
- hi += 1;
- hi = ~hi;
- }
- return hi;
-}
-
-int SkStrSearch(const char*const* base, int count, const char target[],
- size_t target_len, size_t elemSize);
-int SkStrSearch(const char*const* base, int count, const char target[],
- size_t elemSize);
-
-/** Like SkStrSearch, but treats target as if it were all lower-case. Assumes that
- base points to a table of lower-case strings.
-*/
-int SkStrLCSearch(const char*const* base, int count, const char target[],
- size_t target_len, size_t elemSize);
-int SkStrLCSearch(const char*const* base, int count, const char target[],
- size_t elemSize);
-
-/** Helper class to convert a string to lower-case, but only modifying the ascii
- characters. This makes the routine very fast and never changes the string
- length, but it is not suitable for linguistic purposes. Normally this is
- used for buiding and searching string tables.
-*/
-class SkAutoAsciiToLC {
-public:
- SkAutoAsciiToLC(const char str[], size_t len = (size_t)-1);
- ~SkAutoAsciiToLC();
-
- const char* lc() const { return fLC; }
- size_t length() const { return fLength; }
-
-private:
- char* fLC; // points to either the heap or fStorage
- size_t fLength;
- enum {
- STORAGE = 64
- };
- char fStorage[STORAGE+1];
-};
-
-extern "C" {
- typedef int (*SkQSortCompareProc)(const void*, const void*);
- void SkQSort(void* base, size_t count, size_t elemSize, SkQSortCompareProc);
-}
-
-SkDEBUGCODE(void SkQSort_UnitTest();)
-
-#endif
-
diff --git a/include/core/SkTemplates.h b/include/core/SkTemplates.h
deleted file mode 100644
index 27ebd41..0000000
--- a/include/core/SkTemplates.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkTemplates_DEFINED
-#define SkTemplates_DEFINED
-
-#include "SkTypes.h"
-
-/** \file SkTemplates.h
-
- This file contains light-weight template classes for type-safe and exception-safe
- resource management.
-*/
-
-/** \class SkAutoTCallVProc
-
- Call a function when this goes out of scope. The template uses two
- parameters, the object, and a function that is to be called in the destructor.
- If detach() is called, the object reference is set to null. If the object
- reference is null when the destructor is called, we do not call the
- function.
-*/
-template <typename T, void (*P)(T*)> class SkAutoTCallVProc : SkNoncopyable {
-public:
- SkAutoTCallVProc(T* obj): fObj(obj) {}
- ~SkAutoTCallVProc() { if (fObj) P(fObj); }
- T* detach() { T* obj = fObj; fObj = NULL; return obj; }
-private:
- T* fObj;
-};
-
-/** \class SkAutoTCallIProc
-
-Call a function when this goes out of scope. The template uses two
-parameters, the object, and a function that is to be called in the destructor.
-If detach() is called, the object reference is set to null. If the object
-reference is null when the destructor is called, we do not call the
-function.
-*/
-template <typename T, int (*P)(T*)> class SkAutoTCallIProc : SkNoncopyable {
-public:
- SkAutoTCallIProc(T* obj): fObj(obj) {}
- ~SkAutoTCallIProc() { if (fObj) P(fObj); }
- T* detach() { T* obj = fObj; fObj = NULL; return obj; }
-private:
- T* fObj;
-};
-
-template <typename T> class SkAutoTDelete : SkNoncopyable {
-public:
- SkAutoTDelete(T* obj) : fObj(obj) {}
- ~SkAutoTDelete() { delete fObj; }
-
- T* get() const { return fObj; }
- void free() { delete fObj; fObj = NULL; }
- T* detach() { T* obj = fObj; fObj = NULL; return obj; }
-
-private:
- T* fObj;
-};
-
-template <typename T> class SkAutoTDeleteArray : SkNoncopyable {
-public:
- SkAutoTDeleteArray(T array[]) : fArray(array) {}
- ~SkAutoTDeleteArray() { delete[] fArray; }
-
- T* get() const { return fArray; }
- void free() { delete[] fArray; fArray = NULL; }
- T* detach() { T* array = fArray; fArray = NULL; return array; }
-
-private:
- T* fArray;
-};
-
-/** Allocate an array of T elements, and free the array in the destructor
- */
-template <typename T> class SkAutoTArray : SkNoncopyable {
-public:
- /** Allocate count number of T elements
- */
- SkAutoTArray(size_t count) {
- fArray = NULL;
- if (count) {
- fArray = new T[count];
- }
- SkDEBUGCODE(fCount = count;)
- }
-
- ~SkAutoTArray() {
- delete[] fArray;
- }
-
- /** Return the array of T elements. Will be NULL if count == 0
- */
- T* get() const { return fArray; }
-
- /** Return the nth element in the array
- */
- T& operator[](int index) const {
- SkASSERT((unsigned)index < fCount);
- return fArray[index];
- }
-
-private:
- T* fArray;
- SkDEBUGCODE(size_t fCount;)
-};
-
-/** Wraps SkAutoTArray, with room for up to N elements preallocated
- */
-template <size_t N, typename T> class SkAutoSTArray : SkNoncopyable {
-public:
- /** Allocate count number of T elements
- */
- SkAutoSTArray(size_t count) {
- if (count > N) {
- fArray = new T[count];
- } else if (count) {
- fArray = new (fStorage) T[count];
- } else {
- fArray = NULL;
- }
- fCount = count;
- }
-
- ~SkAutoSTArray() {
- if (fCount > N) {
- delete[] fArray;
- } else {
- T* start = fArray;
- T* iter = start + fCount;
- while (iter > start) {
- (--iter)->~T();
- }
- }
- }
-
- /** Return the number of T elements in the array
- */
- size_t count() const { return fCount; }
-
- /** Return the array of T elements. Will be NULL if count == 0
- */
- T* get() const { return fArray; }
-
- /** Return the nth element in the array
- */
- T& operator[](int index) const {
- SkASSERT((unsigned)index < fCount);
- return fArray[index];
- }
-
-private:
- size_t fCount;
- T* fArray;
- // since we come right after fArray, fStorage should be properly aligned
- char fStorage[N * sizeof(T)];
-};
-
-/** Allocate a temp array on the stack/heap.
- Does NOT call any constructors/destructors on T (i.e. T must be POD)
-*/
-template <typename T> class SkAutoTMalloc : SkNoncopyable {
-public:
- SkAutoTMalloc(size_t count)
- {
- fPtr = (T*)sk_malloc_flags(count * sizeof(T), SK_MALLOC_THROW | SK_MALLOC_TEMP);
- }
- ~SkAutoTMalloc()
- {
- sk_free(fPtr);
- }
- T* get() const { return fPtr; }
-
-private:
- T* fPtr;
-};
-
-template <size_t N, typename T> class SkAutoSTMalloc : SkNoncopyable {
-public:
- SkAutoSTMalloc(size_t count)
- {
- if (count <= N)
- fPtr = fTStorage;
- else
- fPtr = (T*)sk_malloc_flags(count * sizeof(T), SK_MALLOC_THROW | SK_MALLOC_TEMP);
- }
- ~SkAutoSTMalloc()
- {
- if (fPtr != fTStorage)
- sk_free(fPtr);
- }
- T* get() const { return fPtr; }
-
-private:
- T* fPtr;
- union {
- uint32_t fStorage32[(N*sizeof(T) + 3) >> 2];
- T fTStorage[1]; // do NOT want to invoke T::T()
- };
-};
-
-#endif
-
diff --git a/include/core/SkThread.h b/include/core/SkThread.h
deleted file mode 100644
index 637492d..0000000
--- a/include/core/SkThread.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkThread_DEFINED
-#define SkThread_DEFINED
-
-#include "SkTypes.h"
-#include "SkThread_platform.h"
-
-/****** SkThread_platform needs to define the following...
-
-int32_t sk_atomic_inc(int32_t*);
-int32_t sk_atomic_dec(int32_t*);
-
-class SkMutex {
-public:
- SkMutex();
- ~SkMutex();
-
- void acquire();
- void release();
-};
-
-****************/
-
-class SkAutoMutexAcquire : SkNoncopyable {
-public:
- explicit SkAutoMutexAcquire(SkMutex& mutex) : fMutex(&mutex)
- {
- SkASSERT(fMutex != NULL);
- mutex.acquire();
- }
- /** If the mutex has not been release, release it now.
- */
- ~SkAutoMutexAcquire()
- {
- if (fMutex)
- fMutex->release();
- }
- /** If the mutex has not been release, release it now.
- */
- void release()
- {
- if (fMutex)
- {
- fMutex->release();
- fMutex = NULL;
- }
- }
-
-private:
- SkMutex* fMutex;
-};
-
-#endif
diff --git a/include/core/SkThread_platform.h b/include/core/SkThread_platform.h
deleted file mode 100644
index 825b737..0000000
--- a/include/core/SkThread_platform.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkThread_platform_DEFINED
-#define SkThread_platform_DEFINED
-
-#ifdef ANDROID
-
-#include <utils/threads.h>
-#include <utils/Atomic.h>
-
-#define sk_atomic_inc(addr) android_atomic_inc(addr)
-#define sk_atomic_dec(addr) android_atomic_dec(addr)
-
-class SkMutex : android::Mutex {
-public:
- // if isGlobal is true, then ignore any errors in the platform-specific
- // destructor
- SkMutex(bool isGlobal = true) {}
- ~SkMutex() {}
-
- void acquire() { this->lock(); }
- void release() { this->unlock(); }
-};
-
-#else
-
-/** Implemented by the porting layer, this function adds 1 to the int specified
- by the address (in a thread-safe manner), and returns the previous value.
-*/
-int32_t sk_atomic_inc(int32_t* addr);
-/** Implemented by the porting layer, this function subtracts 1 to the int
- specified by the address (in a thread-safe manner), and returns the previous
- value.
-*/
-int32_t sk_atomic_dec(int32_t* addr);
-
-class SkMutex {
-public:
- // if isGlobal is true, then ignore any errors in the platform-specific
- // destructor
- SkMutex(bool isGlobal = true);
- ~SkMutex();
-
- void acquire();
- void release();
-
-private:
- bool fIsGlobal;
- enum {
- kStorageIntCount = 12
- };
- uint32_t fStorage[kStorageIntCount];
-};
-
-#endif
-
-#endif
diff --git a/include/core/SkTime.h b/include/core/SkTime.h
deleted file mode 100644
index 9ee7110..0000000
--- a/include/core/SkTime.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkTime_DEFINED
-#define SkTime_DEFINED
-
-#include "SkTypes.h"
-
-/** \class SkTime
- Platform-implemented utilities to return time of day, and millisecond counter.
-*/
-class SkTime {
-public:
- struct DateTime {
- uint16_t fYear; //!< e.g. 2005
- uint8_t fMonth; //!< 1..12
- uint8_t fDayOfWeek; //!< 0..6, 0==Sunday
- uint8_t fDay; //!< 1..31
- uint8_t fHour; //!< 0..23
- uint8_t fMinute; //!< 0..59
- uint8_t fSecond; //!< 0..59
- };
- static void GetDateTime(DateTime*);
-
- static SkMSec GetMSecs();
-};
-
-#if defined(SK_DEBUG) && defined(SK_BUILD_FOR_WIN32)
- extern SkMSec gForceTickCount;
-#endif
-
-#define SK_TIME_FACTOR 1
-
-///////////////////////////////////////////////////////////////////////////////
-
-class SkAutoTime {
-public:
- // The label is not deep-copied, so its address must remain valid for the
- // lifetime of this object
- SkAutoTime(const char* label = NULL, SkMSec minToDump = 0) : fLabel(label)
- {
- fNow = SkTime::GetMSecs();
- fMinToDump = minToDump;
- }
- ~SkAutoTime()
- {
- SkMSec dur = SkTime::GetMSecs() - fNow;
- if (dur >= fMinToDump) {
- SkDebugf("%s %d\n", fLabel ? fLabel : "", dur);
- }
- }
-private:
- const char* fLabel;
- SkMSec fNow;
- SkMSec fMinToDump;
-};
-
-#endif
-
diff --git a/include/core/SkTypeface.h b/include/core/SkTypeface.h
deleted file mode 100644
index 546edca..0000000
--- a/include/core/SkTypeface.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkTypeface_DEFINED
-#define SkTypeface_DEFINED
-
-#include "SkRefCnt.h"
-
-class SkStream;
-class SkWStream;
-
-/** \class SkTypeface
-
- The SkTypeface class specifies the typeface and intrinsic style of a font.
- This is used in the paint, along with optionally algorithmic settings like
- textSize, textSkewX, textScaleX, kFakeBoldText_Mask, to specify
- how text appears when drawn (and measured).
-
- Typeface objects are immutable, and so they can be shred between threads.
- To enable this, Typeface inherits from the thread-safe version of SkRefCnt.
-*/
-class SkTypeface : public SkRefCnt {
-public:
- /** Style specifies the intrinsic style attributes of a given typeface
- */
- enum Style {
- kNormal = 0,
- kBold = 0x01,
- kItalic = 0x02,
-
- // helpers
- kBoldItalic = 0x03
- };
-
- /** Returns the typeface's intrinsic style attributes
- */
- Style style() const { return fStyle; }
-
- /** DEPRECATED */
- Style getStyle() const { return this->style(); }
-
- /** Returns true if getStyle() has the kBold bit set.
- */
- bool isBold() const { return (fStyle & kBold) != 0; }
-
- /** Returns true if getStyle() has the kItalic bit set.
- */
- bool isItalic() const { return (fStyle & kItalic) != 0; }
-
- uint32_t uniqueID() const { return fUniqueID; }
-
- /** Return the uniqueID for the specified typeface. If the face is null,
- resolve it to the default font and return its uniqueID.
- */
- static uint32_t UniqueID(const SkTypeface* face);
-
- /** Return a new reference to the typeface that most closely matches the
- requested familyName and style. Pass null as the familyName to return
- the default font for the requested style. Will never return null
-
- @param familyName May be NULL. The name of the font family.
- @param style The style (normal, bold, italic) of the typeface.
- @return reference to the closest-matching typeface. Call must call
- unref() when they are done.
- */
- static SkTypeface* Create(const char familyName[], Style style = kNormal);
-
- /** Return a new reference to the typeface that most closely matches the
- requested typeface and specified Style. Use this call if you want to
- pick a new style from the same family of the existing typeface.
- If family is NULL, this selects from the default font's family.
-
- @param family May be NULL. The name of the existing type face.
- @param s The style (normal, bold, italic) of the type face.
- @return reference to the closest-matching typeface. Call must call
- unref() when they are done.
- */
- static SkTypeface* CreateFromTypeface(const SkTypeface* family, Style s);
-
- /** Returns true if the two typefaces reference the same underlying font,
- even if one is null (which maps to the default font).
- */
- static bool Equal(const SkTypeface* facea, const SkTypeface* faceb);
-
- /** Returns a 32bit hash value for the typeface. Takes care of mapping null
- to the default typeface.
- */
- static uint32_t Hash(const SkTypeface* face);
-
- /** Return a new typeface given a file. If the file does not exist, or is
- not a valid font file, returns null.
- */
- static SkTypeface* CreateFromFile(const char path[]);
-
- /** Return a new typeface given a stream. If the stream is
- not a valid font file, returns null. Ownership of the stream is
- transferred, so the caller must not reference it again.
- */
- static SkTypeface* CreateFromStream(SkStream* stream);
-
- // Serialization
- void serialize(SkWStream*) const;
- static SkTypeface* Deserialize(SkStream*);
-
-protected:
- /** uniqueID must be unique (please!) and non-zero
- */
- SkTypeface(Style style, uint32_t uniqueID)
- : fUniqueID(uniqueID), fStyle(style) {}
-
-private:
- uint32_t fUniqueID;
- Style fStyle;
-
- typedef SkRefCnt INHERITED;
-};
-
-#endif
diff --git a/include/core/SkTypes.h b/include/core/SkTypes.h
deleted file mode 100644
index 0554c73..0000000
--- a/include/core/SkTypes.h
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkTypes_DEFINED
-#define SkTypes_DEFINED
-
-#include "SkPreConfig.h"
-#include "SkUserConfig.h"
-#include "SkPostConfig.h"
-
-#ifndef SK_IGNORE_STDINT_DOT_H
- #include <stdint.h>
-#endif
-
-#include <stdio.h>
-
-/** \file SkTypes.h
-*/
-
-/*
- memory wrappers to be implemented by the porting layer (platform)
-*/
-
-/** Called internally if we run out of memory. The platform implementation must
- not return, but should either throw an exception or otherwise exit.
-*/
-extern void sk_out_of_memory(void);
-/** Called internally if we hit an unrecoverable error.
- The platform implementation must not return, but should either throw
- an exception or otherwise exit.
-*/
-extern void sk_throw(void);
-
-enum {
- SK_MALLOC_TEMP = 0x01, //!< hint to sk_malloc that the requested memory will be freed in the scope of the stack frame
- SK_MALLOC_THROW = 0x02 //!< instructs sk_malloc to call sk_throw if the memory cannot be allocated.
-};
-/** Return a block of memory (at least 4-byte aligned) of at least the
- specified size. If the requested memory cannot be returned, either
- return null (if SK_MALLOC_TEMP bit is clear) or call sk_throw()
- (if SK_MALLOC_TEMP bit is set). To free the memory, call sk_free().
-*/
-extern void* sk_malloc_flags(size_t size, unsigned flags);
-/** Same as sk_malloc(), but hard coded to pass SK_MALLOC_THROW as the flag
-*/
-extern void* sk_malloc_throw(size_t size);
-/** Same as standard realloc(), but this one never returns null on failure. It will throw
- an exception if it fails.
-*/
-extern void* sk_realloc_throw(void* buffer, size_t size);
-/** Free memory returned by sk_malloc(). It is safe to pass null.
-*/
-extern void sk_free(void*);
-
-///////////////////////////////////////////////////////////////////////
-
-#define SK_INIT_TO_AVOID_WARNING = 0
-
-#ifndef SkDebugf
- void SkDebugf(const char format[], ...);
-#endif
-
-#ifdef SK_DEBUG
- #define SkASSERT(cond) SK_DEBUGBREAK(cond)
- #define SkDEBUGCODE(code) code
- #define SkDECLAREPARAM(type, var) , type var
- #define SkPARAM(var) , var
-// #define SkDEBUGF(args ) SkDebugf##args
- #define SkDEBUGF(args ) SkDebugf args
- #define SkAssertResult(cond) SkASSERT(cond)
-#else
- #define SkASSERT(cond)
- #define SkDEBUGCODE(code)
- #define SkDEBUGF(args)
- #define SkDECLAREPARAM(type, var)
- #define SkPARAM(var)
-
- // unlike SkASSERT, this guy executes its condition in the non-debug build
- #define SkAssertResult(cond) cond
-#endif
-
-///////////////////////////////////////////////////////////////////////
-
-/** Fast type for signed 8 bits. Use for parameter passing and local variables, not for storage
-*/
-typedef int S8CPU;
-/** Fast type for unsigned 8 bits. Use for parameter passing and local variables, not for storage
-*/
-typedef int S16CPU;
-/** Fast type for signed 16 bits. Use for parameter passing and local variables, not for storage
-*/
-typedef unsigned U8CPU;
-/** Fast type for unsigned 16 bits. Use for parameter passing and local variables, not for storage
-*/
-typedef unsigned U16CPU;
-
-/** Meant to be faster than bool (doesn't promise to be 0 or 1, just 0 or non-zero
-*/
-typedef int SkBool;
-/** Meant to be a small version of bool, for storage purposes. Will be 0 or 1
-*/
-typedef uint8_t SkBool8;
-
-#ifdef SK_DEBUG
- int8_t SkToS8(long);
- uint8_t SkToU8(size_t);
- int16_t SkToS16(long);
- uint16_t SkToU16(size_t);
- int32_t SkToS32(long);
- uint32_t SkToU32(size_t);
-#else
- #define SkToS8(x) ((int8_t)(x))
- #define SkToU8(x) ((uint8_t)(x))
- #define SkToS16(x) ((int16_t)(x))
- #define SkToU16(x) ((uint16_t)(x))
- #define SkToS32(x) ((int32_t)(x))
- #define SkToU32(x) ((uint32_t)(x))
-#endif
-
-/** Returns 0 or 1 based on the condition
-*/
-#define SkToBool(cond) ((cond) != 0)
-
-#define SK_MaxS16 32767
-#define SK_MinS16 -32767
-#define SK_MaxU16 0xFFFF
-#define SK_MinU16 0
-#define SK_MaxS32 0x7FFFFFFF
-#define SK_MinS32 0x80000001
-#define SK_MaxU32 0xFFFFFFFF
-#define SK_MinU32 0
-#define SK_NaN32 0x80000000
-
-#ifndef SK_OFFSETOF
- #define SK_OFFSETOF(type, field) ((char*)&(((type*)1)->field) - (char*)1)
-#endif
-
-/** Returns the number of entries in an array (not a pointer)
-*/
-#define SK_ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0]))
-
-/** Returns x rounded up to a multiple of 2
-*/
-#define SkAlign2(x) (((x) + 1) >> 1 << 1)
-/** Returns x rounded up to a multiple of 4
-*/
-#define SkAlign4(x) (((x) + 3) >> 2 << 2)
-
-typedef uint32_t SkFourByteTag;
-#define SkSetFourByteTag(a, b, c, d) (((a) << 24) | ((b) << 16) | ((c) << 8) | (d))
-
-/** 32 bit integer to hold a unicode value
-*/
-typedef int32_t SkUnichar;
-/** 32 bit value to hold a millisecond count
-*/
-typedef uint32_t SkMSec;
-/** 1 second measured in milliseconds
-*/
-#define SK_MSec1 1000
-/** maximum representable milliseconds
-*/
-#define SK_MSecMax 0x7FFFFFFF
-/** Returns a < b for milliseconds, correctly handling wrap-around from 0xFFFFFFFF to 0
-*/
-#define SkMSec_LT(a, b) ((int32_t)(a) - (int32_t)(b) < 0)
-/** Returns a <= b for milliseconds, correctly handling wrap-around from 0xFFFFFFFF to 0
-*/
-#define SkMSec_LE(a, b) ((int32_t)(a) - (int32_t)(b) <= 0)
-
-
-/****************************************************************************
- The rest of these only build with C++
-*/
-#ifdef __cplusplus
-
-/** Faster than SkToBool for integral conditions. Returns 0 or 1
-*/
-inline int Sk32ToBool(uint32_t n)
-{
- return (n | (0-n)) >> 31;
-}
-
-template <typename T> inline void SkTSwap(T& a, T& b)
-{
- T c(a);
- a = b;
- b = c;
-}
-
-inline int32_t SkAbs32(int32_t value)
-{
-#ifdef SK_CPU_HAS_CONDITIONAL_INSTR
- if (value < 0)
- value = -value;
- return value;
-#else
- int32_t mask = value >> 31;
- return (value ^ mask) - mask;
-#endif
-}
-
-inline int32_t SkMax32(int32_t a, int32_t b)
-{
- if (a < b)
- a = b;
- return a;
-}
-
-inline int32_t SkMin32(int32_t a, int32_t b)
-{
- if (a > b)
- a = b;
- return a;
-}
-
-inline int32_t SkSign32(int32_t a)
-{
- return (a >> 31) | ((unsigned) -a >> 31);
-}
-
-inline int32_t SkFastMin32(int32_t value, int32_t max)
-{
-#ifdef SK_CPU_HAS_CONDITIONAL_INSTR
- if (value > max)
- value = max;
- return value;
-#else
- int diff = max - value;
- // clear diff if it is negative (clear if value > max)
- diff &= (diff >> 31);
- return value + diff;
-#endif
-}
-
-/** Returns signed 32 bit value pinned between min and max, inclusively
-*/
-inline int32_t SkPin32(int32_t value, int32_t min, int32_t max)
-{
-#ifdef SK_CPU_HAS_CONDITIONAL_INSTR
- if (value < min)
- value = min;
- if (value > max)
- value = max;
-#else
- if (value < min)
- value = min;
- else if (value > max)
- value = max;
-#endif
- return value;
-}
-
-inline uint32_t SkSetClearShift(uint32_t bits, bool cond, unsigned shift)
-{
- SkASSERT((int)cond == 0 || (int)cond == 1);
- return (bits & ~(1 << shift)) | ((int)cond << shift);
-}
-
-inline uint32_t SkSetClearMask(uint32_t bits, bool cond, uint32_t mask)
-{
- return cond ? bits | mask : bits & ~mask;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-
-/** \class SkNoncopyable
-
-SkNoncopyable is the base class for objects that may do not want to
-be copied. It hides its copy-constructor and its assignment-operator.
-*/
-class SkNoncopyable {
-public:
- SkNoncopyable() {}
-
-private:
- SkNoncopyable(const SkNoncopyable&);
- SkNoncopyable& operator=(const SkNoncopyable&);
-};
-
-class SkAutoFree : SkNoncopyable {
-public:
- SkAutoFree() : fPtr(NULL) {}
- explicit SkAutoFree(void* ptr) : fPtr(ptr) {}
- ~SkAutoFree() { sk_free(fPtr); }
-
- /** Return the currently allocate buffer, or null
- */
- void* get() const { return fPtr; }
-
- /** Assign a new ptr allocated with sk_malloc (or null), and return the
- previous ptr. Note it is the caller's responsibility to sk_free the
- returned ptr.
- */
- void* set(void* ptr) {
- void* prev = fPtr;
- fPtr = ptr;
- return prev;
- }
-
- /** Transfer ownership of the current ptr to the caller, setting the
- internal reference to null. Note the caller is reponsible for calling
- sk_free on the returned address.
- */
- void* detach() { return this->set(NULL); }
-
- /** Free the current buffer, and set the internal reference to NULL. Same
- as calling sk_free(detach())
- */
- void free() {
- sk_free(fPtr);
- fPtr = NULL;
- }
-
-private:
- void* fPtr;
- // illegal
- SkAutoFree(const SkAutoFree&);
- SkAutoFree& operator=(const SkAutoFree&);
-};
-
-class SkAutoMalloc : public SkAutoFree {
-public:
- explicit SkAutoMalloc(size_t size)
- : SkAutoFree(sk_malloc_flags(size, SK_MALLOC_THROW | SK_MALLOC_TEMP)) {}
-
- SkAutoMalloc(size_t size, unsigned flags)
- : SkAutoFree(sk_malloc_flags(size, flags)) {}
- SkAutoMalloc() {}
-
- void* alloc(size_t size,
- unsigned flags = (SK_MALLOC_THROW | SK_MALLOC_TEMP)) {
- sk_free(set(sk_malloc_flags(size, flags)));
- return get();
- }
-};
-
-template <size_t kSize> class SkAutoSMalloc : SkNoncopyable {
-public:
- explicit SkAutoSMalloc(size_t size)
- {
- if (size <= kSize)
- fPtr = fStorage;
- else
- fPtr = sk_malloc_flags(size, SK_MALLOC_THROW | SK_MALLOC_TEMP);
- }
- ~SkAutoSMalloc()
- {
- if (fPtr != (void*)fStorage)
- sk_free(fPtr);
- }
- void* get() const { return fPtr; }
-private:
- void* fPtr;
- uint32_t fStorage[(kSize + 3) >> 2];
- // illegal
- SkAutoSMalloc(const SkAutoSMalloc&);
- SkAutoSMalloc& operator=(const SkAutoSMalloc&);
-};
-
-#endif /* C++ */
-
-#endif
-
diff --git a/include/core/SkUnPreMultiply.h b/include/core/SkUnPreMultiply.h
deleted file mode 100644
index 4bdb980..0000000
--- a/include/core/SkUnPreMultiply.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-
-#ifndef SkUnPreMultiply_DEFINED
-#define SkUnPreMultiply_DEFINED
-
-#include "SkColor.h"
-
-class SkUnPreMultiply {
-public:
- typedef uint32_t Scale;
-
- // index this table with alpha [0..255]
- static const Scale* GetScaleTable() {
- return gTable;
- }
-
- static Scale GetScale(U8CPU alpha) {
- SkASSERT(alpha <= 255);
- return gTable[alpha];
- }
-
- /** Usage:
-
- const Scale* table = SkUnPreMultiply::GetScaleTable();
-
- for (...) {
- unsigned a = ...
- SkUnPreMultiply::Scale scale = table[a];
-
- red = SkUnPreMultiply::ApplyScale(scale, red);
- ...
- // now red is unpremultiplied
- }
- */
- static U8CPU ApplyScale(Scale scale, U8CPU component) {
- SkASSERT(component <= 255);
- return (scale * component + (1 << 23)) >> 24;
- }
-
- static SkColor PMColorToColor(SkPMColor c);
-
-private:
- static const uint32_t gTable[256];
-};
-
-#endif
diff --git a/include/core/SkUnitMapper.h b/include/core/SkUnitMapper.h
deleted file mode 100644
index 5d1ea35..0000000
--- a/include/core/SkUnitMapper.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkUnitMapper_DEFINED
-#define SkUnitMapper_DEFINED
-
-#include "SkRefCnt.h"
-#include "SkScalar.h"
-
-#include "SkFlattenable.h"
-
-class SkUnitMapper : public SkFlattenable {
-public:
- SkUnitMapper() {}
-
- /** Given a value in [0..0xFFFF], return a value in the same range.
- */
- virtual uint16_t mapUnit16(uint16_t x) = 0;
-
-protected:
- SkUnitMapper(SkFlattenableReadBuffer& rb) : SkFlattenable(rb) {}
-};
-
-#endif
-
diff --git a/include/core/SkUserConfig.h b/include/core/SkUserConfig.h
deleted file mode 100644
index 96c278a..0000000
--- a/include/core/SkUserConfig.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkUserConfig_DEFINED
-#define SkUserConfig_DEFINED
-
-/* SkTypes.h, the root of the public header files, does the following trick:
-
- #include "SkPreConfig.h"
- #include "SkUserConfig.h"
- #include "SkPostConfig.h"
-
- SkPreConfig.h runs first, and it is responsible for initializing certain
- skia defines.
-
- SkPostConfig.h runs last, and its job is to just check that the final
- defines are consistent (i.e. that we don't have mutually conflicting
- defines).
-
- SkUserConfig.h (this file) runs in the middle. It gets to change or augment
- the list of flags initially set in preconfig, and then postconfig checks
- that everything still makes sense.
-
- Below are optional defines that add, subtract, or change default behavior
- in Skia. Your port can locally edit this file to enable/disable flags as
- you choose, or these can be delared on your command line (i.e. -Dfoo).
-
- By default, this include file will always default to having all of the flags
- commented out, so including it will have no effect.
-*/
-
-///////////////////////////////////////////////////////////////////////////////
-
-//
-// ANDROID Specific changes - NO NOT CHECK BACK INTO code.google.com/p/skia
-//
-#include <utils/misc.h>
-
-#ifdef SK_BUILD_FOR_MAC
- #undef SK_BUILD_FOR_MAC
-#endif
-#define SK_BUILD_FOR_UNIX
-
-/* Scalars (the fractional value type in skia) can be implemented either as
- floats or 16.16 integers (fixed). Exactly one of these two symbols must be
- defined.
-*/
-#define SK_SCALAR_IS_FLOAT
-#undef SK_SCALAR_IS_FIXED
-
-
-/* Somewhat independent of how SkScalar is implemented, Skia also wants to know
- if it can use floats at all. Naturally, if SK_SCALAR_IS_FLOAT is defined,
- then so muse SK_CAN_USE_FLOAT, but if scalars are fixed, SK_CAN_USE_FLOAT
- can go either way.
- */
-#define SK_CAN_USE_FLOAT
-
-/* For some performance-critical scalar operations, skia will optionally work
- around the standard float operators if it knows that the CPU does not have
- native support for floats. If your environment uses software floating point,
- define this flag.
- */
-#define SK_SOFTWARE_FLOAT
-
-
-/* Skia has lots of debug-only code. Often this is just null checks or other
- parameter checking, but sometimes it can be quite intrusive (e.g. check that
- each 32bit pixel is in premultiplied form). This code can be very useful
- during development, but will slow things down in a shipping product.
-
- By default, these mutually exclusive flags are defined in SkPreConfig.h,
- based on the presence or absence of NDEBUG, but that decision can be changed
- here.
- */
-//#define SK_DEBUG
-//#define SK_RELEASE
-
-
-/* If, in debugging mode, Skia needs to stop (presumably to invoke a debugger)
- it will call SK_CRASH(). If this is not defined it, it is defined in
- SkPostConfig.h to write to an illegal address
- */
-//#define SK_CRASH() *(int *)(uintptr_t)0 = 0
-
-
-/* preconfig will have attempted to determine the endianness of the system,
- but you can change these mutually exclusive flags here.
- */
-#if __BYTE_ORDER == __BIG_ENDIAN
- #define SK_CPU_BENDIAN
- #undef SK_CPU_LENDIAN
-#else
- #define SK_CPU_LENDIAN
- #undef SK_CPU_BENDIAN
-#endif
-
-
-/* Some compilers don't support long long for 64bit integers. If yours does
- not, define this to the appropriate type.
- */
-#define SkLONGLONG int64_t
-
-
-/* Some envorinments do not suport writable globals (eek!). If yours does not,
- define this flag.
- */
-//#define SK_USE_RUNTIME_GLOBALS
-
-
-/* To write debug messages to a console, skia will call SkDebugf(...) following
- printf conventions (e.g. const char* format, ...). If you want to redirect
- this to something other than printf, define yours here
- */
-#define SkDebugf(...) Android_SkDebugf(__FILE__, __LINE__, \
- __FUNCTION__, __VA_ARGS__)
-void Android_SkDebugf(const char* file, int line,
- const char* function, const char* format, ...);
-
-
-
-/* If SK_DEBUG is defined, then you can optionally define SK_SUPPORT_UNITTEST
- which will run additional self-tests at startup. These can take a long time,
- so this flag is optional.
- */
-#ifdef SK_DEBUG
- #define SK_SUPPORT_UNITTEST
-#endif
-
-#endif
-
diff --git a/include/core/SkUtils.h b/include/core/SkUtils.h
deleted file mode 100644
index f3e3341..0000000
--- a/include/core/SkUtils.h
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkUtils_DEFINED
-#define SkUtils_DEFINED
-
-#include "SkTypes.h"
-
-///////////////////////////////////////////////////////////////////////////
-
-/** Similar to memset(), but it assigns a 16bit value into the buffer.
- @param buffer The memory to have value copied into it
- @param value The 16bit value to be copied into buffer
- @param count The number of times value should be copied into the buffer.
-*/
-void sk_memset16_portable(uint16_t dst[], uint16_t value, int count);
-
-/** Similar to memset(), but it assigns a 32bit value into the buffer.
- @param buffer The memory to have value copied into it
- @param value The 32bit value to be copied into buffer
- @param count The number of times value should be copied into the buffer.
-*/
-void sk_memset32_portable(uint32_t dst[], uint32_t value, int count);
-
-#ifdef ANDROID
- #include "cutils/memory.h"
-
- #define sk_memset16(dst, value, count) android_memset16(dst, value, (count) << 1)
- #define sk_memset32(dst, value, count) android_memset32(dst, value, (count) << 2)
-#endif
-
-#ifndef sk_memset16
- #define sk_memset16(dst, value, count) sk_memset16_portable(dst, value, count)
-#endif
-
-#ifndef sk_memset32
- #define sk_memset32(dst, value, count) sk_memset32_portable(dst, value, count)
-#endif
-
-
-///////////////////////////////////////////////////////////////////////////
-
-#define kMaxBytesInUTF8Sequence 4
-
-#ifdef SK_DEBUG
- int SkUTF8_LeadByteToCount(unsigned c);
-#else
- #define SkUTF8_LeadByteToCount(c) ((((0xE5 << 24) >> ((unsigned)c >> 4 << 1)) & 3) + 1)
-#endif
-
-inline int SkUTF8_CountUTF8Bytes(const char utf8[])
-{
- SkASSERT(utf8);
- return SkUTF8_LeadByteToCount(*(const uint8_t*)utf8);
-}
-
-int SkUTF8_CountUnichars(const char utf8[]);
-int SkUTF8_CountUnichars(const char utf8[], size_t byteLength);
-SkUnichar SkUTF8_ToUnichar(const char utf8[]);
-SkUnichar SkUTF8_NextUnichar(const char**);
-SkUnichar SkUTF8_PrevUnichar(const char**);
-
-/** Return the number of bytes need to convert a unichar
- into a utf8 sequence. Will be 1..kMaxBytesInUTF8Sequence,
- or 0 if uni is illegal.
-*/
-size_t SkUTF8_FromUnichar(SkUnichar uni, char utf8[] = NULL);
-
-///////////////////////////////////////////////////////////////////////////////
-
-#define SkUTF16_IsHighSurrogate(c) (((c) & 0xFC00) == 0xD800)
-#define SkUTF16_IsLowSurrogate(c) (((c) & 0xFC00) == 0xDC00)
-
-int SkUTF16_CountUnichars(const uint16_t utf16[]);
-int SkUTF16_CountUnichars(const uint16_t utf16[],
- int numberOf16BitValues);
-// returns the current unichar and then moves past it (*p++)
-SkUnichar SkUTF16_NextUnichar(const uint16_t**);
-// this guy backs up to the previus unichar value, and returns it (*--p)
-SkUnichar SkUTF16_PrevUnichar(const uint16_t**);
-size_t SkUTF16_FromUnichar(SkUnichar uni, uint16_t utf16[] = NULL);
-
-size_t SkUTF16_ToUTF8(const uint16_t utf16[], int numberOf16BitValues,
- char utf8[] = NULL);
-
-class SkUtils {
-public:
-#ifdef SK_DEBUG
- static void UnitTest();
-#endif
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-class SkAutoTrace {
-public:
- /** NOTE: label contents are not copied, just the ptr is
- retained, so DON'T DELETE IT.
- */
- SkAutoTrace(const char label[]) : fLabel(label) {
- SkDebugf("--- trace: %s Enter\n", fLabel);
- }
- ~SkAutoTrace() {
- SkDebugf("--- trace: %s Leave\n", fLabel);
- }
-private:
- const char* fLabel;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-class SkAutoMemoryUsageProbe {
-public:
- /** Record memory usage in constructor, and dump the result
- (delta and current total) in the destructor, with the optional
- label. NOTE: label contents are not copied, just the ptr is
- retained, so DON'T DELETE IT.
- */
- SkAutoMemoryUsageProbe(const char label[]);
- ~SkAutoMemoryUsageProbe();
-private:
- const char* fLabel;
- size_t fBytesAllocated;
-};
-
-#endif
-
diff --git a/include/core/SkWriter32.h b/include/core/SkWriter32.h
deleted file mode 100644
index aeeb37d..0000000
--- a/include/core/SkWriter32.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkWriter32_DEFINED
-#define SkWriter32_DEFINED
-
-#include "SkTypes.h"
-
-#include "SkScalar.h"
-#include "SkPoint.h"
-#include "SkRect.h"
-
-class SkStream;
-class SkWStream;
-
-class SkWriter32 : SkNoncopyable {
-public:
- SkWriter32(size_t minSize) {
- fMinSize = minSize;
- fSize = 0;
- fHead = fTail = NULL;
- }
- ~SkWriter32();
-
- bool writeBool(bool value) {
- this->writeInt(value);
- return value;
- }
-
- void writeInt(int32_t value) {
- *(int32_t*)this->reserve(sizeof(value)) = value;
- }
-
- void write8(int32_t value) {
- *(int32_t*)this->reserve(sizeof(value)) = value & 0xFF;
- }
-
- void write16(int32_t value) {
- *(int32_t*)this->reserve(sizeof(value)) = value & 0xFFFF;
- }
-
- void write32(int32_t value) {
- *(int32_t*)this->reserve(sizeof(value)) = value;
- }
-
- void writeScalar(SkScalar value) {
- *(SkScalar*)this->reserve(sizeof(value)) = value;
- }
-
- void writePoint(const SkPoint& pt) {
- *(SkPoint*)this->reserve(sizeof(pt)) = pt;
- }
-
- void writeRect(const SkRect& rect) {
- *(SkRect*)this->reserve(sizeof(rect)) = rect;
- }
-
- // write count bytes (must be a multiple of 4)
- void writeMul4(const void* values, size_t size) {
- SkASSERT(SkAlign4(size) == size);
- // if we could query how much is avail in the current block, we might
- // copy that much, and then alloc the rest. That would reduce the waste
- // in the current block
- memcpy(this->reserve(size), values, size);
- }
-
- void writePad(const void* src, size_t size);
-
- // return the current offset (will always be a multiple of 4)
- uint32_t size() const { return fSize; }
- void reset();
- uint32_t* reserve(size_t size); // size MUST be multiple of 4
-
- // return the address of the 4byte int at the specified offset (which must
- // be a multiple of 4. This does not allocate any new space, so the returned
- // address is only valid for 1 int.
- uint32_t* peek32(size_t offset);
-
- // copy into a single buffer (allocated by caller). Must be at least size()
- void flatten(void* dst) const;
-
- // read from the stream, and write up to length bytes. Return the actual
- // number of bytes written.
- size_t readFromStream(SkStream*, size_t length);
-
- bool writeToStream(SkWStream*);
-
-private:
- size_t fMinSize;
- uint32_t fSize;
-
- struct Block;
- Block* fHead;
- Block* fTail;
-
- Block* newBlock(size_t bytes);
-};
-
-#endif
diff --git a/include/core/SkXfermode.h b/include/core/SkXfermode.h
deleted file mode 100644
index f7e6510..0000000
--- a/include/core/SkXfermode.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (C) 2006 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef SkXfermode_DEFINED
-#define SkXfermode_DEFINED
-
-#include "SkFlattenable.h"
-#include "SkColor.h"
-
-/** \class SkXfermode
-
- SkXfermode is the base class for objects that are called to implement custom
- "transfer-modes" in the drawing pipeline. The static function Create(Modes)
- can be called to return an instance of any of the predefined subclasses as
- specified in the Modes enum. When an SkXfermode is assigned to an SkPaint,
- then objects drawn with that paint have the xfermode applied.
-*/
-class SkXfermode : public SkFlattenable {
-public:
- SkXfermode() {}
-
- virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
- const SkAlpha aa[]);
- virtual void xfer16(uint16_t dst[], const SkPMColor src[], int count,
- const SkAlpha aa[]);
- virtual void xfer4444(uint16_t dst[], const SkPMColor src[], int count,
- const SkAlpha aa[]);
- virtual void xferA8(SkAlpha dst[], const SkPMColor src[], int count,
- const SkAlpha aa[]);
-
- enum Coeff {
- kZero_Coeff,
- kOne_Coeff,
- kSC_Coeff,
- kISC_Coeff,
- kDC_Coeff,
- kIDC_Coeff,
- kSA_Coeff,
- kISA_Coeff,
- kDA_Coeff,
- kIDA_Coeff,
-
- kCoeffCount
- };
- virtual bool asCoeff(Coeff* src, Coeff* dst);
-
-protected:
- SkXfermode(SkFlattenableReadBuffer& rb) : SkFlattenable(rb) {}
-
- /** The default implementation of xfer32/xfer16/xferA8 in turn call this
- method, 1 color at a time (upscaled to a SkPMColor). The default
- implmentation of this method just returns dst. If performance is
- important, your subclass should override xfer32/xfer16/xferA8 directly.
-
- This method will not be called directly by the client, so it need not
- be implemented if your subclass has overridden xfer32/xfer16/xferA8
- */
- virtual SkPMColor xferColor(SkPMColor src, SkPMColor dst);
-
-private:
- typedef SkFlattenable INHERITED;
-};
-
-///////////////////////////////////////////////////////////////////////////////
-
-/** \class SkProcXfermode
-
- SkProcXfermode is a xfermode that applies the specified proc to its colors.
- This class is not exported to java.
-*/
-class SkProcXfermode : public SkXfermode {
-public:
- SkProcXfermode(SkXfermodeProc proc) : fProc(proc) {}
-
- // overrides from SkXfermode
- virtual void xfer32(SkPMColor dst[], const SkPMColor src[], int count,
- const SkAlpha aa[]);
- virtual void xfer16(uint16_t dst[], const SkPMColor src[], int count,
- const SkAlpha aa[]);
- virtual void xfer4444(uint16_t dst[], const SkPMColor src[], int count,
- const SkAlpha aa[]);
- virtual void xferA8(SkAlpha dst[], const SkPMColor src[], int count,
- const SkAlpha aa[]);
-
- // overrides from SkFlattenable
- virtual Factory getFactory() { return CreateProc; }
- virtual void flatten(SkFlattenableWriteBuffer&);
-
-protected:
- SkProcXfermode(SkFlattenableReadBuffer&);
-
-private:
- SkXfermodeProc fProc;
-
- static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
- return SkNEW_ARGS(SkProcXfermode, (buffer)); }
-
- typedef SkXfermode INHERITED;
-};
-
-#endif
-