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

Unified Diff: chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm

Issue 816223008: Update UI for WebStore bundle installs. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bundles_api
Patch Set: finnur review Created 5 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm
diff --git a/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm
index d42ba95a4e611bbf2479c252834b6e32f1ba0f1f..772ec08d917df7d912e09f099bf84199b87802fa 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.mm
@@ -5,6 +5,7 @@
#import "chrome/browser/ui/cocoa/extensions/extension_installed_bubble_controller.h"
#include "base/i18n/rtl.h"
+#include "base/mac/mac_util.h"
#include "base/memory/scoped_ptr.h"
#include "base/strings/sys_string_conversions.h"
#include "base/strings/utf_string_conversions.h"
@@ -43,11 +44,15 @@
#import "third_party/google_toolbox_for_mac/src/AppKit/GTMUILocalizerAndLayoutTweaker.h"
#import "ui/base/cocoa/controls/hyperlink_text_view.h"
#include "ui/base/l10n/l10n_util.h"
+#include "ui/gfx/image/image_skia_util_mac.h"
using content::BrowserThread;
using extensions::BundleInstaller;
using extensions::Extension;
+// Size of individual extension icons for bundle installs.
+const CGFloat kExtensionIconSize = 32;
+
class ExtensionInstalledBubbleBridge
: public ExtensionInstalledBubble::Delegate {
public:
@@ -337,12 +342,12 @@ bool ExtensionInstalledBubbleBridge::MaybeShowNow() {
if (type_ == extension_installed_bubble::kBundle) {
NSInteger installedListHeight =
[self addExtensionList:installedHeadingMsg_
- itemsMsg:installedItemsMsg_
+ itemsView:installedItemsView_
state:BundleInstaller::Item::STATE_INSTALLED];
NSInteger failedListHeight =
[self addExtensionList:failedHeadingMsg_
- itemsMsg:failedItemsMsg_
+ itemsView:failedItemsView_
state:BundleInstaller::Item::STATE_FAILED];
newWindowHeight += installedListHeight + failedListHeight;
@@ -462,41 +467,74 @@ bool ExtensionInstalledBubbleBridge::MaybeShowNow() {
}
- (NSInteger)addExtensionList:(NSTextField*)headingMsg
- itemsMsg:(NSTextField*)itemsMsg
+ itemsView:(NSView*)itemsView
state:(BundleInstaller::Item::State)state {
base::string16 heading = bundle_->GetHeadingTextFor(state);
bool hidden = heading.empty();
[headingMsg setHidden:hidden];
- [itemsMsg setHidden:hidden];
+ [itemsView setHidden:hidden];
if (hidden)
return 0;
[headingMsg setStringValue:base::SysUTF16ToNSString(heading)];
[GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:headingMsg];
- NSMutableString* joinedItems = [NSMutableString string];
+ const CGFloat titleWidth = [itemsView frame].size.width - kExtensionIconSize;
+ CGFloat offset = 0;
+ // Go over the items backwards, since Cocoa coords go from the bottom up.
Alexei Svitkine (slow) 2015/04/21 16:40:52 This code appears to be the same as in extension_i
Marc Treib 2015/04/22 08:09:16 Done. (Added new bundle_util.h/mm since there didn
BundleInstaller::ItemList items = bundle_->GetItemsWithState(state);
- for (size_t i = 0; i < items.size(); ++i) {
- if (i > 0)
- [joinedItems appendString:@"\n"];
- [joinedItems appendString:base::SysUTF16ToNSString(
- items[i].GetNameForDisplay())];
+ for (size_t i = items.size(); i > 0; --i) {
+ const BundleInstaller::Item& item = items[i - 1];
+
+ NSString* title = base::SysUTF16ToNSString(item.GetNameForDisplay());
+ base::scoped_nsobject<NSTextField> titleView([[NSTextField alloc]
+ initWithFrame:NSMakeRect(kExtensionIconSize, offset, titleWidth, 0)]);
+ [titleView setBordered:NO];
+ [titleView setEditable:NO];
+ [titleView setStringValue:title];
+ [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:titleView];
+
+ NSRect titleFrame = [titleView frame];
+ NSRect iconFrame =
+ NSMakeRect(0, offset, kExtensionIconSize, kExtensionIconSize);
+
+ // Vertically center-align icon and title.
+ CGFloat align = (iconFrame.size.height - titleFrame.size.height) / 2;
+ if (align > 0) {
+ titleFrame.origin.y += align;
+ [titleView setFrame:titleFrame];
+ } else {
+ iconFrame.origin.y -= align;
+ }
+
+ gfx::ImageSkia skiaImage = gfx::ImageSkia::CreateFrom1xBitmap(item.icon);
+ NSImage* image = gfx::NSImageFromImageSkiaWithColorSpace(
+ skiaImage, base::mac::GetSystemColorSpace());
+ base::scoped_nsobject<NSImageView> iconView(
+ [[NSImageView alloc] initWithFrame:iconFrame]);
+ [iconView setImage:image];
+
+ [itemsView addSubview:iconView];
+ [itemsView addSubview:titleView];
+
+ offset = NSMaxY(NSUnionRect(titleFrame, iconFrame));
}
- [itemsMsg setStringValue:joinedItems];
- [GTMUILocalizerAndLayoutTweaker sizeToFitFixedWidthTextField:itemsMsg];
+ NSRect frame = [itemsView frame];
+ frame.size.height = offset;
+ [itemsView setFrame:frame];
return NSHeight([headingMsg frame]) +
extension_installed_bubble::kInnerVerticalMargin +
- NSHeight([itemsMsg frame]);
+ NSHeight([itemsView frame]);
}
// Adjust y-position of messages to sit properly in new window height.
- (void)setMessageFrames:(int)newWindowHeight {
if (type_ == extension_installed_bubble::kBundle) {
// Layout the messages from the bottom up.
- NSTextField* msgs[] = { failedItemsMsg_, failedHeadingMsg_,
- installedItemsMsg_, installedHeadingMsg_ };
+ NSView* msgs[] = { failedItemsView_, failedHeadingMsg_,
+ installedItemsView_, installedHeadingMsg_ };
NSInteger offsetFromBottom = 0;
BOOL isFirstVisible = YES;
for (size_t i = 0; i < arraysize(msgs); ++i) {

Powered by Google App Engine
This is Rietveld 408576698