blob: 364310ba2c8c5cf9bc1616fec9ae9773fc9783cc [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/cocoa/extensions/bundle_util.h"
#include <stddef.h>
#include "base/mac/mac_util.h"
#include "base/mac/scoped_nsobject.h"
#include "base/strings/sys_string_conversions.h"
#import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTweaker.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/image/image_skia_util_mac.h"
namespace {
const CGFloat kExtensionIconSize = 32;
} // namespace
CGFloat PopulateBundleItemsList(
const extensions::BundleInstaller::ItemList& items,
NSView* items_field) {
const CGFloat title_width =
[items_field frame].size.width - kExtensionIconSize;
CGFloat offset = 0;
// Go over the items backwards, since Cocoa coords go from the bottom up.
for (size_t i = items.size(); i > 0; --i) {
const extensions::BundleInstaller::Item& item = items[i - 1];
NSString* title = base::SysUTF16ToNSString(item.GetNameForDisplay());
base::scoped_nsobject<NSTextField> title_view([[NSTextField alloc]
initWithFrame:NSMakeRect(kExtensionIconSize, offset, title_width, 0)]);
[title_view setBordered:NO];
[title_view setEditable:NO];
[title_view setStringValue:title];
[GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:title_view];
NSRect title_frame = [title_view frame];
NSRect icon_frame =
NSMakeRect(0, offset, kExtensionIconSize, kExtensionIconSize);
// Vertically center-align icon and title.
CGFloat align = (icon_frame.size.height - title_frame.size.height) / 2;
if (align > 0) {
title_frame.origin.y += align;
[title_view setFrame:title_frame];
} else {
icon_frame.origin.y -= align;
}
gfx::ImageSkia skia_image = gfx::ImageSkia::CreateFrom1xBitmap(item.icon);
NSImage* image = gfx::NSImageFromImageSkiaWithColorSpace(
skia_image, base::mac::GetSystemColorSpace());
base::scoped_nsobject<NSImageView> icon_view(
[[NSImageView alloc] initWithFrame:icon_frame]);
[icon_view setImage:image];
[items_field addSubview:icon_view];
[items_field addSubview:title_view];
offset = NSMaxY(NSUnionRect(title_frame, icon_frame));
}
return offset;
}