| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2007 The Android Open Source Project | 3 * Copyright 2007 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "SkPictureFlat.h" | 10 #include "SkPictureFlat.h" |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 131 fHeight = src.fHeight; | 131 fHeight = src.fHeight; |
| 132 fRecord = NULL; | 132 fRecord = NULL; |
| 133 | 133 |
| 134 /* We want to copy the src's playback. However, if that hasn't been built | 134 /* We want to copy the src's playback. However, if that hasn't been built |
| 135 yet, we need to fake a call to endRecording() without actually calling | 135 yet, we need to fake a call to endRecording() without actually calling |
| 136 it (since it is destructive, and we don't want to change src). | 136 it (since it is destructive, and we don't want to change src). |
| 137 */ | 137 */ |
| 138 if (src.fPlayback) { | 138 if (src.fPlayback) { |
| 139 fPlayback = SkNEW_ARGS(SkPicturePlayback, (*src.fPlayback)); | 139 fPlayback = SkNEW_ARGS(SkPicturePlayback, (*src.fPlayback)); |
| 140 } else if (src.fRecord) { | 140 } else if (src.fRecord) { |
| 141 SkPictInfo info; |
| 142 this->createHeader(&info); |
| 141 // here we do a fake src.endRecording() | 143 // here we do a fake src.endRecording() |
| 142 fPlayback = SkNEW_ARGS(SkPicturePlayback, (*src.fRecord)); | 144 fPlayback = SkNEW_ARGS(SkPicturePlayback, (*src.fRecord, info)); |
| 143 } else { | 145 } else { |
| 144 fPlayback = NULL; | 146 fPlayback = NULL; |
| 145 } | 147 } |
| 146 } | 148 } |
| 147 | 149 |
| 148 SkPicture::~SkPicture() { | 150 SkPicture::~SkPicture() { |
| 149 SkSafeUnref(fRecord); | 151 SkSafeUnref(fRecord); |
| 150 SkDELETE(fPlayback); | 152 SkDELETE(fPlayback); |
| 151 SkSafeUnref(fAccelData); | 153 SkSafeUnref(fAccelData); |
| 152 } | 154 } |
| (...skipping 13 matching lines...) Expand all Loading... |
| 166 } | 168 } |
| 167 | 169 |
| 168 SkPicture* SkPicture::clone() const { | 170 SkPicture* SkPicture::clone() const { |
| 169 SkPicture* clonedPicture = SkNEW(SkPicture); | 171 SkPicture* clonedPicture = SkNEW(SkPicture); |
| 170 clone(clonedPicture, 1); | 172 clone(clonedPicture, 1); |
| 171 return clonedPicture; | 173 return clonedPicture; |
| 172 } | 174 } |
| 173 | 175 |
| 174 void SkPicture::clone(SkPicture* pictures, int count) const { | 176 void SkPicture::clone(SkPicture* pictures, int count) const { |
| 175 SkPictCopyInfo copyInfo; | 177 SkPictCopyInfo copyInfo; |
| 178 SkPictInfo info; |
| 179 this->createHeader(&info); |
| 176 | 180 |
| 177 for (int i = 0; i < count; i++) { | 181 for (int i = 0; i < count; i++) { |
| 178 SkPicture* clone = &pictures[i]; | 182 SkPicture* clone = &pictures[i]; |
| 179 | 183 |
| 180 clone->fWidth = fWidth; | 184 clone->fWidth = fWidth; |
| 181 clone->fHeight = fHeight; | 185 clone->fHeight = fHeight; |
| 182 SkSafeSetNull(clone->fRecord); | 186 SkSafeSetNull(clone->fRecord); |
| 183 SkDELETE(clone->fPlayback); | 187 SkDELETE(clone->fPlayback); |
| 184 | 188 |
| 185 /* We want to copy the src's playback. However, if that hasn't been bui
lt | 189 /* We want to copy the src's playback. However, if that hasn't been bui
lt |
| 186 yet, we need to fake a call to endRecording() without actually calli
ng | 190 yet, we need to fake a call to endRecording() without actually calli
ng |
| 187 it (since it is destructive, and we don't want to change src). | 191 it (since it is destructive, and we don't want to change src). |
| 188 */ | 192 */ |
| 189 if (fPlayback) { | 193 if (fPlayback) { |
| 190 clone->fPlayback = SkNEW_ARGS(SkPicturePlayback, (*fPlayback, ©I
nfo)); | 194 clone->fPlayback = SkNEW_ARGS(SkPicturePlayback, (*fPlayback, ©I
nfo)); |
| 191 } else if (fRecord) { | 195 } else if (fRecord) { |
| 192 // here we do a fake src.endRecording() | 196 // here we do a fake src.endRecording() |
| 193 clone->fPlayback = SkNEW_ARGS(SkPicturePlayback, (*fRecord, true)); | 197 clone->fPlayback = SkNEW_ARGS(SkPicturePlayback, (*fRecord, info, tr
ue)); |
| 194 } else { | 198 } else { |
| 195 clone->fPlayback = NULL; | 199 clone->fPlayback = NULL; |
| 196 } | 200 } |
| 197 } | 201 } |
| 198 } | 202 } |
| 199 | 203 |
| 200 SkPicture::AccelData::Domain SkPicture::AccelData::GenerateDomain() { | 204 SkPicture::AccelData::Domain SkPicture::AccelData::GenerateDomain() { |
| 201 static int32_t gNextID = 0; | 205 static int32_t gNextID = 0; |
| 202 | 206 |
| 203 int32_t id = sk_atomic_inc(&gNextID); | 207 int32_t id = sk_atomic_inc(&gNextID); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 | 258 |
| 255 SkCanvas* SkPicture::getRecordingCanvas() const { | 259 SkCanvas* SkPicture::getRecordingCanvas() const { |
| 256 // will be null if we are not recording | 260 // will be null if we are not recording |
| 257 return fRecord; | 261 return fRecord; |
| 258 } | 262 } |
| 259 | 263 |
| 260 void SkPicture::endRecording() { | 264 void SkPicture::endRecording() { |
| 261 if (NULL == fPlayback) { | 265 if (NULL == fPlayback) { |
| 262 if (NULL != fRecord) { | 266 if (NULL != fRecord) { |
| 263 fRecord->endRecording(); | 267 fRecord->endRecording(); |
| 264 fPlayback = SkNEW_ARGS(SkPicturePlayback, (*fRecord)); | 268 SkPictInfo info; |
| 269 this->createHeader(&info); |
| 270 fPlayback = SkNEW_ARGS(SkPicturePlayback, (*fRecord, info)); |
| 265 SkSafeSetNull(fRecord); | 271 SkSafeSetNull(fRecord); |
| 266 } | 272 } |
| 267 } | 273 } |
| 268 SkASSERT(NULL == fRecord); | 274 SkASSERT(NULL == fRecord); |
| 269 } | 275 } |
| 270 | 276 |
| 271 const SkPicture::OperationList& SkPicture::OperationList::InvalidList() { | 277 const SkPicture::OperationList& SkPicture::OperationList::InvalidList() { |
| 272 static OperationList gInvalid; | 278 static OperationList gInvalid; |
| 273 return gInvalid; | 279 return gInvalid; |
| 274 } | 280 } |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 377 SkPicture* SkPicture::CreateFromBuffer(SkReadBuffer& buffer) { | 383 SkPicture* SkPicture::CreateFromBuffer(SkReadBuffer& buffer) { |
| 378 SkPictInfo info; | 384 SkPictInfo info; |
| 379 | 385 |
| 380 if (!InternalOnly_BufferIsSKP(buffer, &info)) { | 386 if (!InternalOnly_BufferIsSKP(buffer, &info)) { |
| 381 return NULL; | 387 return NULL; |
| 382 } | 388 } |
| 383 | 389 |
| 384 SkPicturePlayback* playback; | 390 SkPicturePlayback* playback; |
| 385 // Check to see if there is a playback to recreate. | 391 // Check to see if there is a playback to recreate. |
| 386 if (buffer.readBool()) { | 392 if (buffer.readBool()) { |
| 387 playback = SkPicturePlayback::CreateFromBuffer(buffer); | 393 playback = SkPicturePlayback::CreateFromBuffer(buffer, info); |
| 388 if (NULL == playback) { | 394 if (NULL == playback) { |
| 389 return NULL; | 395 return NULL; |
| 390 } | 396 } |
| 391 } else { | 397 } else { |
| 392 playback = NULL; | 398 playback = NULL; |
| 393 } | 399 } |
| 394 | 400 |
| 395 return SkNEW_ARGS(SkPicture, (playback, info.fWidth, info.fHeight)); | 401 return SkNEW_ARGS(SkPicture, (playback, info.fWidth, info.fHeight)); |
| 396 } | 402 } |
| 397 | 403 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 410 info->fFlags |= SkPictInfo::kScalarIsFloat_Flag; | 416 info->fFlags |= SkPictInfo::kScalarIsFloat_Flag; |
| 411 | 417 |
| 412 if (8 == sizeof(void*)) { | 418 if (8 == sizeof(void*)) { |
| 413 info->fFlags |= SkPictInfo::kPtrIs64Bit_Flag; | 419 info->fFlags |= SkPictInfo::kPtrIs64Bit_Flag; |
| 414 } | 420 } |
| 415 } | 421 } |
| 416 | 422 |
| 417 void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const { | 423 void SkPicture::serialize(SkWStream* stream, EncodeBitmap encoder) const { |
| 418 SkPicturePlayback* playback = fPlayback; | 424 SkPicturePlayback* playback = fPlayback; |
| 419 | 425 |
| 426 SkPictInfo info; |
| 427 this->createHeader(&info); |
| 420 if (NULL == playback && fRecord) { | 428 if (NULL == playback && fRecord) { |
| 421 playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord)); | 429 playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord, info)); |
| 422 } | 430 } |
| 423 | 431 |
| 424 SkPictInfo header; | 432 stream->write(&info, sizeof(info)); |
| 425 this->createHeader(&header); | |
| 426 stream->write(&header, sizeof(header)); | |
| 427 if (playback) { | 433 if (playback) { |
| 428 stream->writeBool(true); | 434 stream->writeBool(true); |
| 429 playback->serialize(stream, encoder); | 435 playback->serialize(stream, encoder); |
| 430 // delete playback if it is a local version (i.e. cons'd up just now) | 436 // delete playback if it is a local version (i.e. cons'd up just now) |
| 431 if (playback != fPlayback) { | 437 if (playback != fPlayback) { |
| 432 SkDELETE(playback); | 438 SkDELETE(playback); |
| 433 } | 439 } |
| 434 } else { | 440 } else { |
| 435 stream->writeBool(false); | 441 stream->writeBool(false); |
| 436 } | 442 } |
| 437 } | 443 } |
| 438 | 444 |
| 439 void SkPicture::flatten(SkWriteBuffer& buffer) const { | 445 void SkPicture::flatten(SkWriteBuffer& buffer) const { |
| 440 SkPicturePlayback* playback = fPlayback; | 446 SkPicturePlayback* playback = fPlayback; |
| 441 | 447 |
| 448 SkPictInfo info; |
| 449 this->createHeader(&info); |
| 442 if (NULL == playback && fRecord) { | 450 if (NULL == playback && fRecord) { |
| 443 playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord)); | 451 playback = SkNEW_ARGS(SkPicturePlayback, (*fRecord, info)); |
| 444 } | 452 } |
| 445 | 453 |
| 446 SkPictInfo header; | 454 buffer.writeByteArray(&info, sizeof(info)); |
| 447 this->createHeader(&header); | |
| 448 buffer.writeByteArray(&header, sizeof(header)); | |
| 449 if (playback) { | 455 if (playback) { |
| 450 buffer.writeBool(true); | 456 buffer.writeBool(true); |
| 451 playback->flatten(buffer); | 457 playback->flatten(buffer); |
| 452 // delete playback if it is a local version (i.e. cons'd up just now) | 458 // delete playback if it is a local version (i.e. cons'd up just now) |
| 453 if (playback != fPlayback) { | 459 if (playback != fPlayback) { |
| 454 SkDELETE(playback); | 460 SkDELETE(playback); |
| 455 } | 461 } |
| 456 } else { | 462 } else { |
| 457 buffer.writeBool(false); | 463 buffer.writeBool(false); |
| 458 } | 464 } |
| (...skipping 14 matching lines...) Expand all Loading... |
| 473 } | 479 } |
| 474 | 480 |
| 475 #ifdef SK_BUILD_FOR_ANDROID | 481 #ifdef SK_BUILD_FOR_ANDROID |
| 476 void SkPicture::abortPlayback() { | 482 void SkPicture::abortPlayback() { |
| 477 if (NULL == fPlayback) { | 483 if (NULL == fPlayback) { |
| 478 return; | 484 return; |
| 479 } | 485 } |
| 480 fPlayback->abort(); | 486 fPlayback->abort(); |
| 481 } | 487 } |
| 482 #endif | 488 #endif |
| OLD | NEW |