Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(730)

Side by Side Diff: debugger/SkDebugCanvas.cpp

Issue 15907023: Make SkDrawCommands lighter weight (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Addressed code review comments Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « debugger/QT/SkImageWidget.cpp ('k') | debugger/SkDrawCommand.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 1
2 /* 2 /*
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
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 "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
254 } 254 }
255 255
256 void SkDebugCanvas::toggleFilter(bool toggle) { 256 void SkDebugCanvas::toggleFilter(bool toggle) {
257 fFilter = toggle; 257 fFilter = toggle;
258 } 258 }
259 259
260 void SkDebugCanvas::clear(SkColor color) { 260 void SkDebugCanvas::clear(SkColor color) {
261 addDrawCommand(new Clear(color)); 261 addDrawCommand(new Clear(color));
262 } 262 }
263 263
264 static SkBitmap createBitmap(const SkPath& path) {
265 SkBitmap bitmap;
266 bitmap.setConfig(SkBitmap::kARGB_8888_Config,
267 SkDebugCanvas::kVizImageWidth,
268 SkDebugCanvas::kVizImageHeight);
269 bitmap.allocPixels();
270 bitmap.eraseColor(SK_ColorWHITE);
271 SkDevice* device = new SkDevice(bitmap);
272
273 SkCanvas canvas(device);
274 device->unref();
275
276 const SkRect& bounds = path.getBounds();
277
278 if (bounds.width() > bounds.height()) {
279 canvas.scale(SkDoubleToScalar((0.9*SkDebugCanvas::kVizImageWidth)/bounds .width()),
280 SkDoubleToScalar((0.9*SkDebugCanvas::kVizImageHeight)/bound s.width()));
281 } else {
282 canvas.scale(SkDoubleToScalar((0.9*SkDebugCanvas::kVizImageWidth)/bounds .height()),
283 SkDoubleToScalar((0.9*SkDebugCanvas::kVizImageHeight)/bound s.height()));
284 }
285 canvas.translate(-bounds.fLeft+2, -bounds.fTop+2);
286
287 SkPaint p;
288 p.setColor(SK_ColorBLACK);
289 p.setStyle(SkPaint::kStroke_Style);
290
291 canvas.drawPath(path, p);
292
293 return bitmap;
294 }
295
296 static SkBitmap createBitmap(const SkBitmap& input, const SkRect* srcRect) {
297 SkBitmap bitmap;
298 bitmap.setConfig(SkBitmap::kARGB_8888_Config,
299 SkDebugCanvas::kVizImageWidth,
300 SkDebugCanvas::kVizImageHeight);
301 bitmap.allocPixels();
302 bitmap.eraseColor(SK_ColorLTGRAY);
303 SkDevice* device = new SkDevice(bitmap);
304
305 SkCanvas canvas(device);
306 device->unref();
307
308 SkScalar xScale = SkIntToScalar(SkDebugCanvas::kVizImageWidth-2) / input.wid th();
309 SkScalar yScale = SkIntToScalar(SkDebugCanvas::kVizImageHeight-2) / input.he ight();
310
311 if (input.width() > input.height()) {
312 yScale *= input.height() / (float) input.width();
313 } else {
314 xScale *= input.width() / (float) input.height();
315 }
316
317 SkRect dst = SkRect::MakeXYWH(SK_Scalar1, SK_Scalar1,
318 xScale * input.width(),
319 yScale * input.height());
320
321 canvas.drawBitmapRect(input, NULL, dst);
322
323 if (NULL != srcRect) {
324 SkRect r = SkRect::MakeLTRB(srcRect->fLeft * xScale + SK_Scalar1,
325 srcRect->fTop * yScale + SK_Scalar1,
326 srcRect->fRight * xScale + SK_Scalar1,
327 srcRect->fBottom * yScale + SK_Scalar1);
328 SkPaint p;
329 p.setColor(SK_ColorRED);
330 p.setStyle(SkPaint::kStroke_Style);
331
332 canvas.drawRect(r, p);
333 }
334
335 return bitmap;
336 }
337
338 bool SkDebugCanvas::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) { 264 bool SkDebugCanvas::clipPath(const SkPath& path, SkRegion::Op op, bool doAA) {
339 SkBitmap bitmap = createBitmap(path); 265 addDrawCommand(new ClipPath(path, op, doAA));
340 addDrawCommand(new ClipPath(path, op, doAA, bitmap));
341 return true; 266 return true;
342 } 267 }
343 268
344 bool SkDebugCanvas::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) { 269 bool SkDebugCanvas::clipRect(const SkRect& rect, SkRegion::Op op, bool doAA) {
345 addDrawCommand(new ClipRect(rect, op, doAA)); 270 addDrawCommand(new ClipRect(rect, op, doAA));
346 return true; 271 return true;
347 } 272 }
348 273
349 bool SkDebugCanvas::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA) { 274 bool SkDebugCanvas::clipRRect(const SkRRect& rrect, SkRegion::Op op, bool doAA) {
350 addDrawCommand(new ClipRRect(rrect, op, doAA)); 275 addDrawCommand(new ClipRRect(rrect, op, doAA));
351 return true; 276 return true;
352 } 277 }
353 278
354 bool SkDebugCanvas::clipRegion(const SkRegion& region, SkRegion::Op op) { 279 bool SkDebugCanvas::clipRegion(const SkRegion& region, SkRegion::Op op) {
355 addDrawCommand(new ClipRegion(region, op)); 280 addDrawCommand(new ClipRegion(region, op));
356 return true; 281 return true;
357 } 282 }
358 283
359 bool SkDebugCanvas::concat(const SkMatrix& matrix) { 284 bool SkDebugCanvas::concat(const SkMatrix& matrix) {
360 addDrawCommand(new Concat(matrix)); 285 addDrawCommand(new Concat(matrix));
361 return true; 286 return true;
362 } 287 }
363 288
364 void SkDebugCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar left, 289 void SkDebugCanvas::drawBitmap(const SkBitmap& bitmap, SkScalar left,
365 SkScalar top, const SkPaint* paint = NULL) { 290 SkScalar top, const SkPaint* paint = NULL) {
366 SkBitmap resizedBitmap = createBitmap(bitmap, NULL); 291 addDrawCommand(new DrawBitmap(bitmap, left, top, paint));
367 addDrawCommand(new DrawBitmap(bitmap, left, top, paint, resizedBitmap));
368 } 292 }
369 293
370 void SkDebugCanvas::drawBitmapRectToRect(const SkBitmap& bitmap, 294 void SkDebugCanvas::drawBitmapRectToRect(const SkBitmap& bitmap,
371 const SkRect* src, const SkRect& dst, const SkPaint* paint) { 295 const SkRect* src, const SkRect& dst, const SkPaint* paint) {
372 SkBitmap resizedBitmap = createBitmap(bitmap, src); 296 addDrawCommand(new DrawBitmapRect(bitmap, src, dst, paint));
373 addDrawCommand(new DrawBitmapRect(bitmap, src, dst, paint, resizedBitmap));
374 } 297 }
375 298
376 void SkDebugCanvas::drawBitmapMatrix(const SkBitmap& bitmap, 299 void SkDebugCanvas::drawBitmapMatrix(const SkBitmap& bitmap,
377 const SkMatrix& matrix, const SkPaint* paint) { 300 const SkMatrix& matrix, const SkPaint* paint) {
378 SkBitmap resizedBitmap = createBitmap(bitmap, NULL); 301 addDrawCommand(new DrawBitmapMatrix(bitmap, matrix, paint));
379 addDrawCommand(new DrawBitmapMatrix(bitmap, matrix, paint, resizedBitmap));
380 } 302 }
381 303
382 void SkDebugCanvas::drawBitmapNine(const SkBitmap& bitmap, 304 void SkDebugCanvas::drawBitmapNine(const SkBitmap& bitmap,
383 const SkIRect& center, const SkRect& dst, const SkPaint* paint) { 305 const SkIRect& center, const SkRect& dst, const SkPaint* paint) {
384 SkBitmap resizedBitmap = createBitmap(bitmap, NULL); 306 addDrawCommand(new DrawBitmapNine(bitmap, center, dst, paint));
385 addDrawCommand(new DrawBitmapNine(bitmap, center, dst, paint, resizedBitmap) );
386 } 307 }
387 308
388 void SkDebugCanvas::drawData(const void* data, size_t length) { 309 void SkDebugCanvas::drawData(const void* data, size_t length) {
389 addDrawCommand(new DrawData(data, length)); 310 addDrawCommand(new DrawData(data, length));
390 } 311 }
391 312
392 void SkDebugCanvas::beginCommentGroup(const char* description) { 313 void SkDebugCanvas::beginCommentGroup(const char* description) {
393 addDrawCommand(new BeginCommentGroup(description)); 314 addDrawCommand(new BeginCommentGroup(description));
394 } 315 }
395 316
396 void SkDebugCanvas::addComment(const char* kywd, const char* value) { 317 void SkDebugCanvas::addComment(const char* kywd, const char* value) {
397 addDrawCommand(new Comment(kywd, value)); 318 addDrawCommand(new Comment(kywd, value));
398 } 319 }
399 320
400 void SkDebugCanvas::endCommentGroup() { 321 void SkDebugCanvas::endCommentGroup() {
401 addDrawCommand(new EndCommentGroup()); 322 addDrawCommand(new EndCommentGroup());
402 } 323 }
403 324
404 void SkDebugCanvas::drawOval(const SkRect& oval, const SkPaint& paint) { 325 void SkDebugCanvas::drawOval(const SkRect& oval, const SkPaint& paint) {
405 addDrawCommand(new DrawOval(oval, paint)); 326 addDrawCommand(new DrawOval(oval, paint));
406 } 327 }
407 328
408 void SkDebugCanvas::drawPaint(const SkPaint& paint) { 329 void SkDebugCanvas::drawPaint(const SkPaint& paint) {
409 addDrawCommand(new DrawPaint(paint)); 330 addDrawCommand(new DrawPaint(paint));
410 } 331 }
411 332
412 void SkDebugCanvas::drawPath(const SkPath& path, const SkPaint& paint) { 333 void SkDebugCanvas::drawPath(const SkPath& path, const SkPaint& paint) {
413 SkBitmap bitmap = createBitmap(path); 334 addDrawCommand(new DrawPath(path, paint));
414 addDrawCommand(new DrawPath(path, paint, bitmap));
415 } 335 }
416 336
417 void SkDebugCanvas::drawPicture(SkPicture& picture) { 337 void SkDebugCanvas::drawPicture(SkPicture& picture) {
418 addDrawCommand(new DrawPicture(picture)); 338 addDrawCommand(new DrawPicture(picture));
419 } 339 }
420 340
421 void SkDebugCanvas::drawPoints(PointMode mode, size_t count, 341 void SkDebugCanvas::drawPoints(PointMode mode, size_t count,
422 const SkPoint pts[], const SkPaint& paint) { 342 const SkPoint pts[], const SkPaint& paint) {
423 addDrawCommand(new DrawPoints(mode, count, pts, paint)); 343 addDrawCommand(new DrawPoints(mode, count, pts, paint));
424 } 344 }
(...skipping 11 matching lines...) Expand all
436 void SkDebugCanvas::drawRect(const SkRect& rect, const SkPaint& paint) { 356 void SkDebugCanvas::drawRect(const SkRect& rect, const SkPaint& paint) {
437 // NOTE(chudy): Messing up when renamed to DrawRect... Why? 357 // NOTE(chudy): Messing up when renamed to DrawRect... Why?
438 addDrawCommand(new DrawRectC(rect, paint)); 358 addDrawCommand(new DrawRectC(rect, paint));
439 } 359 }
440 360
441 void SkDebugCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint) { 361 void SkDebugCanvas::drawRRect(const SkRRect& rrect, const SkPaint& paint) {
442 addDrawCommand(new DrawRRect(rrect, paint)); 362 addDrawCommand(new DrawRRect(rrect, paint));
443 } 363 }
444 364
445 void SkDebugCanvas::drawSprite(const SkBitmap& bitmap, int left, int top, 365 void SkDebugCanvas::drawSprite(const SkBitmap& bitmap, int left, int top,
446 const SkPaint* paint = NULL) { 366 const SkPaint* paint = NULL) {
447 SkBitmap resizedBitmap = createBitmap(bitmap, NULL); 367 addDrawCommand(new DrawSprite(bitmap, left, top, paint));
448 addDrawCommand(new DrawSprite(bitmap, left, top, paint, resizedBitmap));
449 } 368 }
450 369
451 void SkDebugCanvas::drawText(const void* text, size_t byteLength, SkScalar x, 370 void SkDebugCanvas::drawText(const void* text, size_t byteLength, SkScalar x,
452 SkScalar y, const SkPaint& paint) { 371 SkScalar y, const SkPaint& paint) {
453 addDrawCommand(new DrawTextC(text, byteLength, x, y, paint)); 372 addDrawCommand(new DrawTextC(text, byteLength, x, y, paint));
454 } 373 }
455 374
456 void SkDebugCanvas::drawTextOnPath(const void* text, size_t byteLength, 375 void SkDebugCanvas::drawTextOnPath(const void* text, size_t byteLength,
457 const SkPath& path, const SkMatrix* matrix, const SkPaint& paint) { 376 const SkPath& path, const SkMatrix* matrix, const SkPaint& paint) {
458 addDrawCommand(new DrawTextOnPath(text, byteLength, path, matrix, paint)); 377 addDrawCommand(new DrawTextOnPath(text, byteLength, path, matrix, paint));
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
502 421
503 bool SkDebugCanvas::translate(SkScalar dx, SkScalar dy) { 422 bool SkDebugCanvas::translate(SkScalar dx, SkScalar dy) {
504 addDrawCommand(new Translate(dx, dy)); 423 addDrawCommand(new Translate(dx, dy));
505 return true; 424 return true;
506 } 425 }
507 426
508 void SkDebugCanvas::toggleCommand(int index, bool toggle) { 427 void SkDebugCanvas::toggleCommand(int index, bool toggle) {
509 SkASSERT(index < fCommandVector.count()); 428 SkASSERT(index < fCommandVector.count());
510 fCommandVector[index]->setVisible(toggle); 429 fCommandVector[index]->setVisible(toggle);
511 } 430 }
OLDNEW
« no previous file with comments | « debugger/QT/SkImageWidget.cpp ('k') | debugger/SkDrawCommand.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698