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

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

Issue 10245003: Makes ImageSkia more like SkBitmap (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Nicer diff Created 8 years, 7 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
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 #ifndef UI_GFX_CANVAS_H_ 5 #ifndef UI_GFX_CANVAS_H_
6 #define UI_GFX_CANVAS_H_ 6 #define UI_GFX_CANVAS_H_
7 #pragma once 7 #pragma once
8 8
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/basictypes.h" 11 #include "base/basictypes.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/string16.h" 13 #include "base/string16.h"
14 #include "skia/ext/platform_canvas.h" 14 #include "skia/ext/platform_canvas.h"
15 #include "ui/gfx/image/image_skia.h"
15 #include "ui/gfx/native_widget_types.h" 16 #include "ui/gfx/native_widget_types.h"
16 17
17 class SkBitmap; 18 class SkBitmap;
18 19
19 namespace ui { 20 namespace ui {
20 class Transform; 21 class Transform;
21 } 22 }
22 23
23 namespace gfx { 24 namespace gfx {
24 25
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 int radius, 234 int radius,
234 const SkPaint& paint); 235 const SkPaint& paint);
235 236
236 // Draws the given rectangle with rounded corners of |radius| using the 237 // Draws the given rectangle with rounded corners of |radius| using the
237 // given |paint| parameters. 238 // given |paint| parameters.
238 void DrawRoundRect(const gfx::Rect& rect, int radius, const SkPaint& paint); 239 void DrawRoundRect(const gfx::Rect& rect, int radius, const SkPaint& paint);
239 240
240 // Draws the given path using the given |paint| parameters. 241 // Draws the given path using the given |paint| parameters.
241 void DrawPath(const SkPath& path, const SkPaint& paint); 242 void DrawPath(const SkPath& path, const SkPaint& paint);
242 243
243 // Draws a bitmap with the origin at the specified location. The upper left 244 // Draws an image with the origin at the specified location. The upper left
244 // corner of the bitmap is rendered at the specified location. 245 // corner of the bitmap is rendered at the specified location.
245 void DrawBitmapInt(const SkBitmap& bitmap, int x, int y); 246 // Parameters are specified relative to current canvas scale not pixels.
247 // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1.
248 void DrawBitmapInt(const gfx::ImageSkia&, int x, int y);
246 249
247 // Draws a bitmap with the origin at the specified location, using the 250 // Draws an image with the origin at the specified location, using the
248 // specified paint. The upper left corner of the bitmap is rendered at the 251 // specified paint. The upper left corner of the bitmap is rendered at the
249 // specified location. 252 // specified location.
250 void DrawBitmapInt(const SkBitmap& bitmap, 253 // Parameters are specified relative to current canvas scale not pixels.
254 // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1.
255 void DrawBitmapInt(const gfx::ImageSkia& image,
251 int x, int y, 256 int x, int y,
252 const SkPaint& paint); 257 const SkPaint& paint);
253 258
254 // Draws a portion of a bitmap in the specified location. The src parameters 259 // Draws a portion of an image in the specified location. The src parameters
255 // correspond to the region of the bitmap to draw in the region defined 260 // correspond to the region of the bitmap to draw in the region defined
256 // by the dest coordinates. 261 // by the dest coordinates.
257 // 262 //
258 // If the width or height of the source differs from that of the destination, 263 // If the width or height of the source differs from that of the destination,
259 // the bitmap will be scaled. When scaling down, it is highly recommended 264 // the image will be scaled. When scaling down, a mipmap will be generated.
260 // that you call buildMipMap(false) on your bitmap to ensure that it has 265 // Set |filter| to use filtering for images, otherwise the nearest-neighbor
261 // a mipmap, which will result in much higher-quality output. Set |filter| 266 // algorithm is used for resampling.
262 // to use filtering for bitmaps, otherwise the nearest-neighbor algorithm
263 // is used for resampling.
264 // 267 //
265 // An optional custom SkPaint can be provided. 268 // An optional custom SkPaint can be provided.
266 void DrawBitmapInt(const SkBitmap& bitmap, 269 // Parameters are specified relative to current canvas scale not pixels.
270 // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1.
271 void DrawBitmapInt(const gfx::ImageSkia& image,
267 int src_x, int src_y, int src_w, int src_h, 272 int src_x, int src_y, int src_w, int src_h,
268 int dest_x, int dest_y, int dest_w, int dest_h, 273 int dest_x, int dest_y, int dest_w, int dest_h,
269 bool filter); 274 bool filter);
270 void DrawBitmapInt(const SkBitmap& bitmap, 275 void DrawBitmapInt(const gfx::ImageSkia& image,
271 int src_x, int src_y, int src_w, int src_h, 276 int src_x, int src_y, int src_w, int src_h,
272 int dest_x, int dest_y, int dest_w, int dest_h, 277 int dest_x, int dest_y, int dest_w, int dest_h,
273 bool filter, 278 bool filter,
274 const SkPaint& paint); 279 const SkPaint& paint);
275 280
276 // TODO(pkotwicz): make this function private once gfx::ImageSkia stops
277 // calling this method.
278 void DrawBitmapFloat(const SkBitmap& bitmap,
279 float src_x, float src_y, float src_w, float src_h,
280 float dest_x, float dest_y, float dest_w, float dest_h,
281 bool filter,
282 const SkPaint& paint);
283
284 // Draws text with the specified color, font and location. The text is 281 // Draws text with the specified color, font and location. The text is
285 // aligned to the left, vertically centered, clipped to the region. If the 282 // aligned to the left, vertically centered, clipped to the region. If the
286 // text is too big, it is truncated and '...' is added to the end. 283 // text is too big, it is truncated and '...' is added to the end.
287 void DrawStringInt(const string16& text, 284 void DrawStringInt(const string16& text,
288 const gfx::Font& font, 285 const gfx::Font& font,
289 SkColor color, 286 SkColor color,
290 int x, int y, int w, int h); 287 int x, int y, int w, int h);
291 void DrawStringInt(const string16& text, 288 void DrawStringInt(const string16& text,
292 const gfx::Font& font, 289 const gfx::Font& font,
293 SkColor color, 290 SkColor color,
(...skipping 14 matching lines...) Expand all
308 const gfx::Font& font, 305 const gfx::Font& font,
309 SkColor color, 306 SkColor color,
310 const gfx::Rect& text_bounds, 307 const gfx::Rect& text_bounds,
311 int flags, 308 int flags,
312 const std::vector<ShadowValue>& shadows); 309 const std::vector<ShadowValue>& shadows);
313 310
314 // Draws a dotted gray rectangle used for focus purposes. 311 // Draws a dotted gray rectangle used for focus purposes.
315 void DrawFocusRect(const gfx::Rect& rect); 312 void DrawFocusRect(const gfx::Rect& rect);
316 313
317 // Tiles the image in the specified region. 314 // Tiles the image in the specified region.
318 void TileImageInt(const SkBitmap& bitmap, 315 // Parameters are specified relative to current canvas scale not pixels.
316 // Thus, |x| is 2 pixels if canvas scale = 2 & |x| = 1.
317 void TileImageInt(const gfx::ImageSkia& image,
319 int x, int y, int w, int h); 318 int x, int y, int w, int h);
320 void TileImageInt(const SkBitmap& bitmap, 319 void TileImageInt(const gfx::ImageSkia& image,
321 int src_x, int src_y, 320 int src_x, int src_y,
322 int dest_x, int dest_y, int w, int h); 321 int dest_x, int dest_y, int w, int h);
323 322
324 // Returns a native drawing context for platform specific drawing routines to 323 // Returns a native drawing context for platform specific drawing routines to
325 // use. Must be balanced by a call to EndPlatformPaint(). 324 // use. Must be balanced by a call to EndPlatformPaint().
326 NativeDrawingContext BeginPlatformPaint(); 325 NativeDrawingContext BeginPlatformPaint();
327 326
328 // Signifies the end of platform drawing using the native drawing context 327 // Signifies the end of platform drawing using the native drawing context
329 // returned by BeginPlatformPaint(). 328 // returned by BeginPlatformPaint().
330 void EndPlatformPaint(); 329 void EndPlatformPaint();
(...skipping 16 matching lines...) Expand all
347 #endif 346 #endif
348 347
349 skia::PlatformCanvas* platform_canvas() const { return owned_canvas_.get(); } 348 skia::PlatformCanvas* platform_canvas() const { return owned_canvas_.get(); }
350 SkCanvas* sk_canvas() const { return canvas_; } 349 SkCanvas* sk_canvas() const { return canvas_; }
351 350
352 private: 351 private:
353 // Test whether the provided rectangle intersects the current clip rect. 352 // Test whether the provided rectangle intersects the current clip rect.
354 bool IntersectsClipRectInt(int x, int y, int w, int h); 353 bool IntersectsClipRectInt(int x, int y, int w, int h);
355 bool IntersectsClipRect(const gfx::Rect& rect); 354 bool IntersectsClipRect(const gfx::Rect& rect);
356 355
356 // Returns the bitmap whose density best matches the current canvas scale.
357 // Returns a null bitmap if |image| contains no bitmaps.
358 // |bitmap_scale_factor| is set to the scale factor of the returned bitmap.
359 // Builds mip map for returned bitmap if necessary.
360 //
361 // An optional additional user defined scale can be provided.
362 const SkBitmap& GetBitmapToPaint(const gfx::ImageSkia& image,
363 float* bitmap_scale_factor) const;
364 const SkBitmap& GetBitmapToPaint(const gfx::ImageSkia& image,
365 float user_defined_scale_factor_x,
366 float user_defined_scale_factor_y,
367 float* bitmap_scale_factor) const;
368
357 #if defined(OS_WIN) 369 #if defined(OS_WIN)
358 // Draws text with the specified color, font and location. The text is 370 // Draws text with the specified color, font and location. The text is
359 // aligned to the left, vertically centered, clipped to the region. If the 371 // aligned to the left, vertically centered, clipped to the region. If the
360 // text is too big, it is truncated and '...' is added to the end. 372 // text is too big, it is truncated and '...' is added to the end.
361 void DrawStringInt(const string16& text, 373 void DrawStringInt(const string16& text,
362 HFONT font, 374 HFONT font,
363 SkColor color, 375 SkColor color,
364 const gfx::Rect& text_bounds, 376 const gfx::Rect& text_bounds,
365 int flags); 377 int flags);
366 #endif 378 #endif
367 379
368 scoped_ptr<skia::PlatformCanvas> owned_canvas_; 380 scoped_ptr<skia::PlatformCanvas> owned_canvas_;
369 SkCanvas* canvas_; 381 SkCanvas* canvas_;
370 382
371 DISALLOW_COPY_AND_ASSIGN(Canvas); 383 DISALLOW_COPY_AND_ASSIGN(Canvas);
372 }; 384 };
373 385
374 } // namespace gfx 386 } // namespace gfx
375 387
376 #endif // UI_GFX_CANVAS_H_ 388 #endif // UI_GFX_CANVAS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698