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

Side by Side Diff: include/core/SkBitmap.h

Issue 105893012: change offset to xy for pixelref subsetting (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 6 years, 11 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 | « gm/gmmain.cpp ('k') | include/core/SkBitmapDevice.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 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef SkBitmap_DEFINED 8 #ifndef SkBitmap_DEFINED
9 #define SkBitmap_DEFINED 9 #define SkBitmap_DEFINED
10 10
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 HeapAllocator will be used. 340 HeapAllocator will be used.
341 @param ctable ColorTable (or null) to use with the pixels that will 341 @param ctable ColorTable (or null) to use with the pixels that will
342 be allocated. Only used if config == Index8_Config. 342 be allocated. Only used if config == Index8_Config.
343 If it is non-null and the config is not Index8, it will 343 If it is non-null and the config is not Index8, it will
344 be ignored. 344 be ignored.
345 @return true if the allocation succeeds. If not the pixelref field of 345 @return true if the allocation succeeds. If not the pixelref field of
346 the bitmap will be unchanged. 346 the bitmap will be unchanged.
347 */ 347 */
348 bool allocPixels(Allocator* allocator, SkColorTable* ctable); 348 bool allocPixels(Allocator* allocator, SkColorTable* ctable);
349 349
350 /** Return the current pixelref object, if any 350 /**
351 */ 351 * Return the current pixelref object or NULL if there is none. This does
352 * not affect the refcount of the pixelref.
353 */
352 SkPixelRef* pixelRef() const { return fPixelRef; } 354 SkPixelRef* pixelRef() const { return fPixelRef; }
353 /** Return the offset into the pixelref, if any. Will return 0 if there is 355
354 no pixelref installed. 356 /**
355 */ 357 * A bitmap can reference a subset of a pixelref's pixels. That means the
356 size_t pixelRefOffset() const { return fPixelRefOffset; } 358 * bitmap's width/height can be <= the dimensions of the pixelref. The
357 /** Assign a pixelref and optional offset. Pixelrefs are reference counted, 359 * pixelref origin is the x,y location within the pixelref's pixels for
358 so the existing one (if any) will be unref'd and the new one will be 360 * the bitmap's top/left corner. To be valid the following must be true:
359 ref'd. 361 *
360 */ 362 * origin_x + bitmap_width <= pixelref_width
361 SkPixelRef* setPixelRef(SkPixelRef* pr, size_t offset = 0); 363 * origin_y + bitmap_height <= pixelref_height
364 *
365 * pixelRefOrigin() returns this origin, or (0,0) if there is no pixelRef.
366 */
367 SkIPoint pixelRefOrigin() const { return fPixelRefOrigin; }
368
369 /**
370 * Assign a pixelref and origin to the bitmap. Pixelrefs are reference,
371 * so the existing one (if any) will be unref'd and the new one will be
372 * ref'd. (x,y) specify the offset within the pixelref's pixels for the
373 * top/left corner of the bitmap. For a bitmap that encompases the entire
374 * pixels of the pixelref, these will be (0,0).
375 */
376 SkPixelRef* setPixelRef(SkPixelRef* pr, int dx, int dy);
377
378 SkPixelRef* setPixelRef(SkPixelRef* pr, const SkIPoint& origin) {
379 return this->setPixelRef(pr, origin.fX, origin.fY);
380 }
381
382 SkPixelRef* setPixelRef(SkPixelRef* pr) {
383 return this->setPixelRef(pr, 0, 0);
384 }
362 385
363 /** Call this to ensure that the bitmap points to the current pixel address 386 /** Call this to ensure that the bitmap points to the current pixel address
364 in the pixelref. Balance it with a call to unlockPixels(). These calls 387 in the pixelref. Balance it with a call to unlockPixels(). These calls
365 are harmless if there is no pixelref. 388 are harmless if there is no pixelref.
366 */ 389 */
367 void lockPixels() const; 390 void lockPixels() const;
368 /** When you are finished access the pixel memory, call this to balance a 391 /** When you are finished access the pixel memory, call this to balance a
369 previous call to lockPixels(). This allows pixelrefs that implement 392 previous call to lockPixels(). This allows pixelrefs that implement
370 cached/deferred image decoding to know when there are active clients of 393 cached/deferred image decoding to know when there are active clients of
371 a given image. 394 a given image.
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 int fHeight; 681 int fHeight;
659 }; 682 };
660 683
661 SkDEVCODE(void toString(SkString* str) const;) 684 SkDEVCODE(void toString(SkString* str) const;)
662 685
663 private: 686 private:
664 struct MipMap; 687 struct MipMap;
665 mutable MipMap* fMipMap; 688 mutable MipMap* fMipMap;
666 689
667 mutable SkPixelRef* fPixelRef; 690 mutable SkPixelRef* fPixelRef;
668 mutable size_t fPixelRefOffset;
669 mutable int fPixelLockCount; 691 mutable int fPixelLockCount;
670 // either user-specified (in which case it is not treated as mutable) 692 // either user-specified (in which case it is not treated as mutable)
671 // or a cache of the returned value from fPixelRef->lockPixels() 693 // or a cache of the returned value from fPixelRef->lockPixels()
672 mutable void* fPixels; 694 mutable void* fPixels;
673 mutable SkColorTable* fColorTable; // only meaningful for kIndex8 695 mutable SkColorTable* fColorTable; // only meaningful for kIndex8
674 696
697 SkIPoint fPixelRefOrigin;
698
675 enum Flags { 699 enum Flags {
676 kImageIsOpaque_Flag = 0x01, 700 kImageIsOpaque_Flag = 0x01,
677 kImageIsVolatile_Flag = 0x02, 701 kImageIsVolatile_Flag = 0x02,
678 kImageIsImmutable_Flag = 0x04, 702 kImageIsImmutable_Flag = 0x04,
679 #ifdef SK_BUILD_FOR_ANDROID 703 #ifdef SK_BUILD_FOR_ANDROID
680 /* A hint for the renderer responsible for drawing this bitmap 704 /* A hint for the renderer responsible for drawing this bitmap
681 * indicating that it should attempt to use mipmaps when this bitmap 705 * indicating that it should attempt to use mipmaps when this bitmap
682 * is drawn scaled down. 706 * is drawn scaled down.
683 */ 707 */
684 kHasHardwareMipMap_Flag = 0x08, 708 kHasHardwareMipMap_Flag = 0x08,
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 848
825 inline SkPMColor SkBitmap::getIndex8Color(int x, int y) const { 849 inline SkPMColor SkBitmap::getIndex8Color(int x, int y) const {
826 SkASSERT(fPixels); 850 SkASSERT(fPixels);
827 SkASSERT(fConfig == kIndex8_Config); 851 SkASSERT(fConfig == kIndex8_Config);
828 SkASSERT((unsigned)x < fWidth && (unsigned)y < fHeight); 852 SkASSERT((unsigned)x < fWidth && (unsigned)y < fHeight);
829 SkASSERT(fColorTable); 853 SkASSERT(fColorTable);
830 return (*fColorTable)[*((const uint8_t*)fPixels + y * fRowBytes + x)]; 854 return (*fColorTable)[*((const uint8_t*)fPixels + y * fRowBytes + x)];
831 } 855 }
832 856
833 #endif 857 #endif
OLDNEW
« no previous file with comments | « gm/gmmain.cpp ('k') | include/core/SkBitmapDevice.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698