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

Side by Side Diff: chrome/browser/ui/cocoa/table_row_nsimage_cache.mm

Issue 2187993002: Remove the TableRowNSImageCache. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 4 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
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/cocoa/table_row_nsimage_cache.h"
6
7 #include "base/logging.h"
8 #include "ui/gfx/image/image_skia.h"
9 #include "ui/gfx/image/image_skia_util_mac.h"
10
11 TableRowNSImageCache::TableRowNSImageCache(Table* model)
12 : model_(model),
13 icon_images_([[NSPointerArray alloc] initWithOptions:
14 NSPointerFunctionsStrongMemory |
15 NSPointerFunctionsObjectPersonality]) {
16 int count = model_->RowCount();
17 [icon_images_ setCount:count];
18 }
19
20 TableRowNSImageCache::~TableRowNSImageCache() {}
21
22 void TableRowNSImageCache::OnModelChanged() {
23 int count = model_->RowCount();
24 [icon_images_ setCount:0];
25 [icon_images_ setCount:count];
26 }
27
28 void TableRowNSImageCache::OnItemsChanged(int start, int length) {
29 DCHECK_LE(start + length, static_cast<int>([icon_images_ count]));
30 for (int i = start; i < (start + length); ++i) {
31 [icon_images_ replacePointerAtIndex:i withPointer:NULL];
32 }
33 DCHECK_EQ(model_->RowCount(),
34 static_cast<int>([icon_images_ count]));
35 }
36
37 void TableRowNSImageCache::OnItemsAdded(int start, int length) {
38 DCHECK_LE(start, static_cast<int>([icon_images_ count]));
39
40 // -[NSPointerArray insertPointer:atIndex:] throws if index == count.
41 // Instead expand the array with NULLs.
42 if (start == static_cast<int>([icon_images_ count])) {
43 [icon_images_ setCount:start + length];
44 } else {
45 for (int i = 0; i < length; ++i) {
46 [icon_images_ insertPointer:NULL atIndex:start]; // Values slide up.
47 }
48 }
49 DCHECK_EQ(model_->RowCount(),
50 static_cast<int>([icon_images_ count]));
51 }
52
53 void TableRowNSImageCache::OnItemsRemoved(int start, int length) {
54 DCHECK_LE(start + length, static_cast<int>([icon_images_ count]));
55 for (int i = 0; i < length; ++i) {
56 [icon_images_ removePointerAtIndex:start]; // Values slide down.
57 }
58 DCHECK_EQ(model_->RowCount(),
59 static_cast<int>([icon_images_ count]));
60 }
61
62 NSImage* TableRowNSImageCache::GetImageForRow(int row) {
63 DCHECK_EQ(model_->RowCount(),
64 static_cast<int>([icon_images_ count]));
65 DCHECK_GE(row, 0);
66 DCHECK_LT(row, static_cast<int>([icon_images_ count]));
67 NSImage* image = static_cast<NSImage*>([icon_images_ pointerAtIndex:row]);
68 if (!image) {
69 const gfx::ImageSkia image_skia_icon =
70 model_->GetIcon(row);
71 // This means GetIcon() will get called until it returns a non-empty image.
72 // Empty images are intentionally not cached.
73 if (!image_skia_icon.isNull()) {
74 image = gfx::NSImageFromImageSkia(image_skia_icon);
75 DCHECK(image);
76 [icon_images_ replacePointerAtIndex:row withPointer:image];
77 }
78 }
79 return image;
80 }
81
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698