| Index: src/core/SkPaint.cpp
|
| diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp
|
| index d28168a58e9ea3c8fdbc248eeaa350e875031355..98ad74dac509d423fb50d69ac9109db6600ca5bd 100644
|
| --- a/src/core/SkPaint.cpp
|
| +++ b/src/core/SkPaint.cpp
|
| @@ -1772,26 +1772,6 @@ static uintptr_t asint(const void* p) {
|
| return reinterpret_cast<uintptr_t>(p);
|
| }
|
|
|
| -union Scalar32 {
|
| - SkScalar fScalar;
|
| - uint32_t f32;
|
| -};
|
| -
|
| -static uint32_t* write_scalar(uint32_t* ptr, SkScalar value) {
|
| - SkASSERT(sizeof(SkScalar) == sizeof(uint32_t));
|
| - Scalar32 tmp;
|
| - tmp.fScalar = value;
|
| - *ptr = tmp.f32;
|
| - return ptr + 1;
|
| -}
|
| -
|
| -static SkScalar read_scalar(const uint32_t*& ptr) {
|
| - SkASSERT(sizeof(SkScalar) == sizeof(uint32_t));
|
| - Scalar32 tmp;
|
| - tmp.f32 = *ptr++;
|
| - return tmp.fScalar;
|
| -}
|
| -
|
| static uint32_t pack_4(unsigned a, unsigned b, unsigned c, unsigned d) {
|
| SkASSERT(a == (uint8_t)a);
|
| SkASSERT(b == (uint8_t)b);
|
| @@ -1851,12 +1831,6 @@ static FlatFlags unpack_paint_flags(SkPaint* paint, uint32_t packed) {
|
| return (FlatFlags)(packed & kFlatFlagMask);
|
| }
|
|
|
| -// The size of a flat paint's POD fields
|
| -static const uint32_t kPODPaintSize = 5 * sizeof(SkScalar) +
|
| - 1 * sizeof(SkColor) +
|
| - 1 * sizeof(uint16_t) +
|
| - 6 * sizeof(uint8_t);
|
| -
|
| /* To save space/time, we analyze the paint, and write a truncated version of
|
| it if there are not tricky elements like shaders, etc.
|
| */
|
| @@ -1876,20 +1850,17 @@ void SkPaint::flatten(SkWriteBuffer& buffer) const {
|
| flatFlags |= kHasEffects_FlatFlag;
|
| }
|
|
|
| - SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize);
|
| - uint32_t* ptr = buffer.reserve(kPODPaintSize);
|
| -
|
| - ptr = write_scalar(ptr, this->getTextSize());
|
| - ptr = write_scalar(ptr, this->getTextScaleX());
|
| - ptr = write_scalar(ptr, this->getTextSkewX());
|
| - ptr = write_scalar(ptr, this->getStrokeWidth());
|
| - ptr = write_scalar(ptr, this->getStrokeMiter());
|
| - *ptr++ = this->getColor();
|
| + buffer.writeScalar(this->getTextSize());
|
| + buffer.writeScalar(this->getTextScaleX());
|
| + buffer.writeScalar(this->getTextSkewX());
|
| + buffer.writeScalar(this->getStrokeWidth());
|
| + buffer.writeScalar(this->getStrokeMiter());
|
| + buffer.writeColor(this->getColor());
|
|
|
| - *ptr++ = pack_paint_flags(this->getFlags(), this->getHinting(), this->getTextAlign(),
|
| - this->getFilterQuality(), flatFlags);
|
| - *ptr++ = pack_4(this->getStrokeCap(), this->getStrokeJoin(),
|
| - this->getStyle(), this->getTextEncoding());
|
| + buffer.writeUInt(pack_paint_flags(this->getFlags(), this->getHinting(), this->getTextAlign(),
|
| + this->getFilterQuality(), flatFlags));
|
| + buffer.writeUInt(pack_4(this->getStrokeCap(), this->getStrokeJoin(),
|
| + this->getStyle(), this->getTextEncoding()));
|
|
|
| // now we're done with ptr and the (pre)reserved space. If we need to write
|
| // additional fields, use the buffer directly
|
| @@ -1909,24 +1880,16 @@ void SkPaint::flatten(SkWriteBuffer& buffer) const {
|
| }
|
|
|
| void SkPaint::unflatten(SkReadBuffer& buffer) {
|
| - SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize);
|
| - if (!buffer.validateAvailable(kPODPaintSize)) {
|
| - return;
|
| - }
|
| - const void* podData = buffer.skip(kPODPaintSize);
|
| - const uint32_t* pod = reinterpret_cast<const uint32_t*>(podData);
|
| -
|
| - // the order we read must match the order we wrote in flatten()
|
| - this->setTextSize(read_scalar(pod));
|
| - this->setTextScaleX(read_scalar(pod));
|
| - this->setTextSkewX(read_scalar(pod));
|
| - this->setStrokeWidth(read_scalar(pod));
|
| - this->setStrokeMiter(read_scalar(pod));
|
| - this->setColor(*pod++);
|
| + this->setTextSize(buffer.readScalar());
|
| + this->setTextScaleX(buffer.readScalar());
|
| + this->setTextSkewX(buffer.readScalar());
|
| + this->setStrokeWidth(buffer.readScalar());
|
| + this->setStrokeMiter(buffer.readScalar());
|
| + this->setColor(buffer.readColor());
|
|
|
| - unsigned flatFlags = unpack_paint_flags(this, *pod++);
|
| + unsigned flatFlags = unpack_paint_flags(this, buffer.readUInt());
|
|
|
| - uint32_t tmp = *pod++;
|
| + uint32_t tmp = buffer.readUInt();
|
| this->setStrokeCap(static_cast<Cap>((tmp >> 24) & 0xFF));
|
| this->setStrokeJoin(static_cast<Join>((tmp >> 16) & 0xFF));
|
| this->setStyle(static_cast<Style>((tmp >> 8) & 0xFF));
|
|
|