Index: src/core/SkPaint.cpp |
diff --git a/src/core/SkPaint.cpp b/src/core/SkPaint.cpp |
index cc6d7ba1b3d792acc0f00b2f5d04dd224e086b0d..c3f217cefc60e5501e08a88755b5f537dbcb956c 100644 |
--- a/src/core/SkPaint.cpp |
+++ b/src/core/SkPaint.cpp |
@@ -18,8 +18,8 @@ |
#include "SkImageFilter.h" |
#include "SkMaskFilter.h" |
#include "SkMaskGamma.h" |
-#include "SkOrderedReadBuffer.h" |
-#include "SkOrderedWriteBuffer.h" |
+#include "SkReadBuffer.h" |
+#include "SkWriteBuffer.h" |
#include "SkPaintDefaults.h" |
#include "SkPaintOptionsAndroid.h" |
#include "SkPathEffect.h" |
@@ -1474,8 +1474,8 @@ void SkPaint::getPosTextPath(const void* textData, size_t length, |
} |
static void add_flattenable(SkDescriptor* desc, uint32_t tag, |
- SkOrderedWriteBuffer* buffer) { |
- buffer->writeToMemory(desc->addEntry(tag, buffer->size(), NULL)); |
+ SkWriteBuffer* buffer) { |
+ buffer->writeToMemory(desc->addEntry(tag, buffer->bytesWritten(), NULL)); |
} |
// SkFontHost can override this choice in FilterRec() |
@@ -1815,18 +1815,18 @@ void SkPaint::descriptorProc(const SkDeviceProperties* deviceProperties, |
SkMaskFilter* mf = this->getMaskFilter(); |
SkRasterizer* ra = this->getRasterizer(); |
- SkOrderedWriteBuffer peBuffer, mfBuffer, raBuffer; |
+ SkWriteBuffer peBuffer, mfBuffer, raBuffer; |
if (pe) { |
peBuffer.writeFlattenable(pe); |
- descSize += peBuffer.size(); |
+ descSize += peBuffer.bytesWritten(); |
entryCount += 1; |
rec.fMaskFormat = SkMask::kA8_Format; // force antialiasing when we do the scan conversion |
// seems like we could support kLCD as well at this point... |
} |
if (mf) { |
mfBuffer.writeFlattenable(mf); |
- descSize += mfBuffer.size(); |
+ descSize += mfBuffer.bytesWritten(); |
entryCount += 1; |
rec.fMaskFormat = SkMask::kA8_Format; // force antialiasing with maskfilters |
/* Pre-blend is not currently applied to filtered text. |
@@ -1837,15 +1837,15 @@ void SkPaint::descriptorProc(const SkDeviceProperties* deviceProperties, |
} |
if (ra) { |
raBuffer.writeFlattenable(ra); |
- descSize += raBuffer.size(); |
+ descSize += raBuffer.bytesWritten(); |
entryCount += 1; |
rec.fMaskFormat = SkMask::kA8_Format; // force antialiasing when we do the scan conversion |
} |
#ifdef SK_BUILD_FOR_ANDROID |
- SkOrderedWriteBuffer androidBuffer; |
+ SkWriteBuffer androidBuffer; |
fPaintOptionsAndroid.flatten(androidBuffer); |
- descSize += androidBuffer.size(); |
+ descSize += androidBuffer.bytesWritten(); |
entryCount += 1; |
#endif |
@@ -1999,7 +1999,7 @@ static const uint32_t kPODPaintSize = 5 * sizeof(SkScalar) + |
/* To save space/time, we analyze the paint, and write a truncated version of |
it if there are not tricky elements like shaders, etc. |
*/ |
-void SkPaint::flatten(SkFlattenableWriteBuffer& buffer) const { |
+void SkPaint::flatten(SkWriteBuffer& buffer) const { |
uint8_t flatFlags = 0; |
if (this->getTypeface()) { |
flatFlags |= kHasTypeface_FlatFlag; |
@@ -2021,42 +2021,24 @@ void SkPaint::flatten(SkFlattenableWriteBuffer& buffer) const { |
} |
#endif |
- if (buffer.isOrderedBinaryBuffer()) { |
- SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); |
- uint32_t* ptr = buffer.getOrderedBinaryBuffer()->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(); |
- // previously flags:16, textAlign:8, flatFlags:8 |
- // now flags:16, hinting:4, textAlign:4, flatFlags:8 |
- *ptr++ = (this->getFlags() << 16) | |
- // hinting added later. 0 in this nibble means use the default. |
- ((this->getHinting()+1) << 12) | |
- (this->getTextAlign() << 8) | |
- flatFlags; |
- *ptr++ = pack_4(this->getStrokeCap(), this->getStrokeJoin(), |
- this->getStyle(), this->getTextEncoding()); |
- } else { |
- buffer.writeScalar(fTextSize); |
- buffer.writeScalar(fTextScaleX); |
- buffer.writeScalar(fTextSkewX); |
- buffer.writeScalar(fWidth); |
- buffer.writeScalar(fMiterLimit); |
- buffer.writeColor(fColor); |
- buffer.writeUInt(fFlags); |
- buffer.writeUInt(fHinting); |
- buffer.writeUInt(fTextAlign); |
- buffer.writeUInt(flatFlags); |
- |
- buffer.writeUInt(fCapType); |
- buffer.writeUInt(fJoinType); |
- buffer.writeUInt(fStyle); |
- buffer.writeUInt(fTextEncoding); |
- } |
+ 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(); |
+ // previously flags:16, textAlign:8, flatFlags:8 |
+ // now flags:16, hinting:4, textAlign:4, flatFlags:8 |
+ *ptr++ = (this->getFlags() << 16) | |
+ // hinting added later. 0 in this nibble means use the default. |
+ ((this->getHinting()+1) << 12) | |
+ (this->getTextAlign() << 8) | |
+ flatFlags; |
+ *ptr++ = 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 |
@@ -2087,58 +2069,38 @@ void SkPaint::flatten(SkFlattenableWriteBuffer& buffer) const { |
#endif |
} |
-void SkPaint::unflatten(SkFlattenableReadBuffer& buffer) { |
+void SkPaint::unflatten(SkReadBuffer& buffer) { |
uint8_t flatFlags = 0; |
- if (buffer.isOrderedBinaryBuffer()) { |
- SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); |
- const void* podData = buffer.getOrderedBinaryBuffer()->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++); |
- |
- // previously flags:16, textAlign:8, flatFlags:8 |
- // now flags:16, hinting:4, textAlign:4, flatFlags:8 |
- uint32_t tmp = *pod++; |
- this->setFlags(tmp >> 16); |
- |
- // hinting added later. 0 in this nibble means use the default. |
- uint32_t hinting = (tmp >> 12) & 0xF; |
- this->setHinting(0 == hinting ? kNormal_Hinting : static_cast<Hinting>(hinting-1)); |
- |
- this->setTextAlign(static_cast<Align>((tmp >> 8) & 0xF)); |
- |
- flatFlags = tmp & 0xFF; |
- |
- tmp = *pod++; |
- this->setStrokeCap(static_cast<Cap>((tmp >> 24) & 0xFF)); |
- this->setStrokeJoin(static_cast<Join>((tmp >> 16) & 0xFF)); |
- this->setStyle(static_cast<Style>((tmp >> 8) & 0xFF)); |
- this->setTextEncoding(static_cast<TextEncoding>((tmp >> 0) & 0xFF)); |
- } else { |
- this->setTextSize(buffer.readScalar()); |
- this->setTextScaleX(buffer.readScalar()); |
- this->setTextSkewX(buffer.readScalar()); |
- // Skip the hinting scalar factor, which is not supported. |
- buffer.readScalar(); |
- this->setStrokeWidth(buffer.readScalar()); |
- this->setStrokeMiter(buffer.readScalar()); |
- this->setColor(buffer.readColor()); |
- this->setFlags(buffer.readUInt()); |
- this->setHinting(static_cast<SkPaint::Hinting>(buffer.readUInt())); |
- this->setTextAlign(static_cast<SkPaint::Align>(buffer.readUInt())); |
- flatFlags = buffer.readUInt(); |
- |
- this->setStrokeCap(static_cast<SkPaint::Cap>(buffer.readUInt())); |
- this->setStrokeJoin(static_cast<SkPaint::Join>(buffer.readUInt())); |
- this->setStyle(static_cast<SkPaint::Style>(buffer.readUInt())); |
- this->setTextEncoding(static_cast<SkPaint::TextEncoding>(buffer.readUInt())); |
- } |
+ SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); |
+ 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++); |
+ |
+ // previously flags:16, textAlign:8, flatFlags:8 |
+ // now flags:16, hinting:4, textAlign:4, flatFlags:8 |
+ uint32_t tmp = *pod++; |
+ this->setFlags(tmp >> 16); |
+ |
+ // hinting added later. 0 in this nibble means use the default. |
+ uint32_t hinting = (tmp >> 12) & 0xF; |
+ this->setHinting(0 == hinting ? kNormal_Hinting : static_cast<Hinting>(hinting-1)); |
+ |
+ this->setTextAlign(static_cast<Align>((tmp >> 8) & 0xF)); |
+ |
+ flatFlags = tmp & 0xFF; |
+ |
+ tmp = *pod++; |
+ this->setStrokeCap(static_cast<Cap>((tmp >> 24) & 0xFF)); |
+ this->setStrokeJoin(static_cast<Join>((tmp >> 16) & 0xFF)); |
+ this->setStyle(static_cast<Style>((tmp >> 8) & 0xFF)); |
+ this->setTextEncoding(static_cast<TextEncoding>((tmp >> 0) & 0xFF)); |
if (flatFlags & kHasTypeface_FlatFlag) { |
this->setTypeface(buffer.readTypeface()); |