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

Side by Side Diff: ui/gfx/canvas.cc

Issue 11418217: Add skia::RefPtr class to wrap ref counted classes from Skia. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Drop TNoRef Created 8 years 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/gfx/canvas.h" 5 #include "ui/gfx/canvas.h"
6 6
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/i18n/rtl.h" 9 #include "base/i18n/rtl.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 for (int u = 0; u < col_pixels; u++) { 133 for (int u = 0; u < col_pixels; u++) {
134 if ((u % 2 + i % 2) % 2 != 0) { 134 if ((u % 2 + i % 2) % 2 != 0) {
135 dot[i * row_pixels + u] = color; 135 dot[i * row_pixels + u] = color;
136 } 136 }
137 } 137 }
138 } 138 }
139 } 139 }
140 140
141 // Make a shader for the bitmap with an origin of the box we'll draw. This 141 // Make a shader for the bitmap with an origin of the box we'll draw. This
142 // shader is refcounted and will have an initial refcount of 1. 142 // shader is refcounted and will have an initial refcount of 1.
143 SkShader* shader = SkShader::CreateBitmapShader( 143 skia::RefPtr<SkShader> shader = SkShader::CreateBitmapShader(
144 *dots, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode); 144 *dots, SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode);
145 // Assign the shader to the paint & release our reference. The paint will 145 // Assign the shader to the paint & release our reference. The paint will
146 // now own the shader and the shader will be destroyed when the paint goes 146 // now own the shader and the shader will be destroyed when the paint goes
147 // out of scope. 147 // out of scope.
148 SkPaint paint; 148 SkPaint paint;
149 paint.setShader(shader); 149 paint.setShader(shader.get());
150 shader->unref();
151 150
152 DrawRect(gfx::Rect(rect.x(), rect.y(), rect.width(), 1), paint); 151 DrawRect(gfx::Rect(rect.x(), rect.y(), rect.width(), 1), paint);
153 DrawRect(gfx::Rect(rect.x(), rect.y() + rect.height() - 1, rect.width(), 1), 152 DrawRect(gfx::Rect(rect.x(), rect.y() + rect.height() - 1, rect.width(), 1),
154 paint); 153 paint);
155 DrawRect(gfx::Rect(rect.x(), rect.y(), 1, rect.height()), paint); 154 DrawRect(gfx::Rect(rect.x(), rect.y(), 1, rect.height()), paint);
156 DrawRect(gfx::Rect(rect.x() + rect.width() - 1, rect.y(), 1, rect.height()), 155 DrawRect(gfx::Rect(rect.x() + rect.width() - 1, rect.y(), 1, rect.height()),
157 paint); 156 paint);
158 } 157 }
159 158
160 void Canvas::Save() { 159 void Canvas::Save() {
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 // Make a bitmap shader that contains the bitmap we want to draw. This is 365 // Make a bitmap shader that contains the bitmap we want to draw. This is
367 // basically what SkCanvas.drawBitmap does internally, but it gives us 366 // basically what SkCanvas.drawBitmap does internally, but it gives us
368 // more control over quality and will use the mipmap in the source image if 367 // more control over quality and will use the mipmap in the source image if
369 // it has one, whereas drawBitmap won't. 368 // it has one, whereas drawBitmap won't.
370 SkMatrix shader_scale; 369 SkMatrix shader_scale;
371 shader_scale.setScale(SkFloatToScalar(user_scale_x), 370 shader_scale.setScale(SkFloatToScalar(user_scale_x),
372 SkFloatToScalar(user_scale_y)); 371 SkFloatToScalar(user_scale_y));
373 shader_scale.preTranslate(SkIntToScalar(-src_x), SkIntToScalar(-src_y)); 372 shader_scale.preTranslate(SkIntToScalar(-src_x), SkIntToScalar(-src_y));
374 shader_scale.postTranslate(SkIntToScalar(dest_x), SkIntToScalar(dest_y)); 373 shader_scale.postTranslate(SkIntToScalar(dest_x), SkIntToScalar(dest_y));
375 374
376 SkShader* shader = gfx::CreateImageRepShader(image_rep, 375 skia::RefPtr<SkShader> shader = gfx::CreateImageRepShader(
377 SkShader::kRepeat_TileMode, 376 image_rep,
378 shader_scale); 377 SkShader::kRepeat_TileMode,
378 shader_scale);
379 379
380 // Set up our paint to use the shader & release our reference (now just owned 380 // Set up our paint to use the shader & release our reference (now just owned
381 // by the paint). 381 // by the paint).
382 SkPaint p(paint); 382 SkPaint p(paint);
383 p.setFilterBitmap(filter); 383 p.setFilterBitmap(filter);
384 p.setShader(shader); 384 p.setShader(shader.get());
385 shader->unref();
386 385
387 // The rect will be filled by the bitmap. 386 // The rect will be filled by the bitmap.
388 canvas_->drawRect(dest_rect, p); 387 canvas_->drawRect(dest_rect, p);
389 } 388 }
390 389
391 void Canvas::DrawImageInPath(const gfx::ImageSkia& image, 390 void Canvas::DrawImageInPath(const gfx::ImageSkia& image,
392 int x, 391 int x,
393 int y, 392 int y,
394 const SkPath& path, 393 const SkPath& path,
395 const SkPaint& paint) { 394 const SkPaint& paint) {
396 const gfx::ImageSkiaRep& image_rep = GetImageRepToPaint(image); 395 const gfx::ImageSkiaRep& image_rep = GetImageRepToPaint(image);
397 if (image_rep.is_null()) 396 if (image_rep.is_null())
398 return; 397 return;
399 398
400 SkMatrix matrix; 399 SkMatrix matrix;
401 matrix.setTranslate(SkIntToScalar(x), SkIntToScalar(y)); 400 matrix.setTranslate(SkIntToScalar(x), SkIntToScalar(y));
402 SkShader* shader = gfx::CreateImageRepShader(image_rep, 401 skia::RefPtr<SkShader> shader = gfx::CreateImageRepShader(
403 SkShader::kRepeat_TileMode, matrix); 402 image_rep,
403 SkShader::kRepeat_TileMode,
404 matrix);
404 405
405 SkPaint p(paint); 406 SkPaint p(paint);
406 p.setShader(shader); 407 p.setShader(shader.get());
407 shader->unref();
408 canvas_->drawPath(path, p); 408 canvas_->drawPath(path, p);
409 } 409 }
410 410
411 void Canvas::DrawStringInt(const string16& text, 411 void Canvas::DrawStringInt(const string16& text,
412 const gfx::Font& font, 412 const gfx::Font& font,
413 SkColor color, 413 SkColor color,
414 int x, int y, int w, int h) { 414 int x, int y, int w, int h) {
415 DrawStringInt(text, font, color, x, y, w, h, DefaultCanvasTextAlignment()); 415 DrawStringInt(text, font, color, x, y, w, h, DefaultCanvasTextAlignment());
416 } 416 }
417 417
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
458 tile_scale_x, tile_scale_y); 458 tile_scale_x, tile_scale_y);
459 if (image_rep.is_null()) 459 if (image_rep.is_null())
460 return; 460 return;
461 461
462 SkMatrix shader_scale; 462 SkMatrix shader_scale;
463 shader_scale.setScale(SkFloatToScalar(tile_scale_x), 463 shader_scale.setScale(SkFloatToScalar(tile_scale_x),
464 SkFloatToScalar(tile_scale_y)); 464 SkFloatToScalar(tile_scale_y));
465 shader_scale.preTranslate(SkIntToScalar(-src_x), SkIntToScalar(-src_y)); 465 shader_scale.preTranslate(SkIntToScalar(-src_x), SkIntToScalar(-src_y));
466 shader_scale.postTranslate(SkIntToScalar(dest_x), SkIntToScalar(dest_y)); 466 shader_scale.postTranslate(SkIntToScalar(dest_x), SkIntToScalar(dest_y));
467 467
468 SkShader* shader = gfx::CreateImageRepShader(image_rep, 468 skia::RefPtr<SkShader> shader = gfx::CreateImageRepShader(
469 SkShader::kRepeat_TileMode, 469 image_rep,
470 shader_scale); 470 SkShader::kRepeat_TileMode,
471 shader_scale);
471 472
472 SkPaint paint; 473 SkPaint paint;
473 paint.setShader(shader); 474 paint.setShader(shader.get());
474 paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); 475 paint.setXfermodeMode(SkXfermode::kSrcOver_Mode);
475 shader->unref();
476 476
477 SkRect dest_rect = { SkIntToScalar(dest_x), 477 SkRect dest_rect = { SkIntToScalar(dest_x),
478 SkIntToScalar(dest_y), 478 SkIntToScalar(dest_y),
479 SkIntToScalar(dest_x + w), 479 SkIntToScalar(dest_x + w),
480 SkIntToScalar(dest_y + h) }; 480 SkIntToScalar(dest_y + h) };
481 canvas_->drawRect(dest_rect, paint); 481 canvas_->drawRect(dest_rect, paint);
482 } 482 }
483 483
484 gfx::NativeDrawingContext Canvas::BeginPlatformPaint() { 484 gfx::NativeDrawingContext Canvas::BeginPlatformPaint() {
485 return skia::BeginPlatformPaint(canvas_); 485 return skia::BeginPlatformPaint(canvas_);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 532
533 float bitmap_scale = image_rep.GetScale(); 533 float bitmap_scale = image_rep.GetScale();
534 if (scale_x < bitmap_scale || scale_y < bitmap_scale) 534 if (scale_x < bitmap_scale || scale_y < bitmap_scale)
535 const_cast<SkBitmap&>(image_rep.sk_bitmap()).buildMipMap(); 535 const_cast<SkBitmap&>(image_rep.sk_bitmap()).buildMipMap();
536 } 536 }
537 537
538 return image_rep; 538 return image_rep;
539 } 539 }
540 540
541 } // namespace gfx 541 } // namespace gfx
OLDNEW
« skia/ext/refptr_unittest.cc ('K') | « skia/skia.gyp ('k') | ui/gfx/canvas_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698