From eb344c8a4beadf5ea388bdd55abc645161c84a7d Mon Sep 17 00:00:00 2001 From: "tfarina@chromium.org" Date: Wed, 5 Dec 2012 14:59:46 +0000 Subject: bookmarks: Break the dependency in ui/cocoa. BUG=144783 R=sky@chromium.org,mrossetti@chromium.org Review URL: https://chromiumcodereview.appspot.com/11428161 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@171221 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/bookmarks/DEPS | 1 - .../bookmarks/bookmark_pasteboard_helper_mac.h | 12 -- .../bookmarks/bookmark_pasteboard_helper_mac.mm | 152 --------------------- 3 files changed, 165 deletions(-) (limited to 'chrome/browser/bookmarks') diff --git a/chrome/browser/bookmarks/DEPS b/chrome/browser/bookmarks/DEPS index b40f808..d07579d 100644 --- a/chrome/browser/bookmarks/DEPS +++ b/chrome/browser/bookmarks/DEPS @@ -34,7 +34,6 @@ include_rules = [ "!chrome/browser/profiles/profile_keyed_service_factory.h", "!chrome/browser/ui/bookmarks/bookmark_tab_helper.h", "!chrome/browser/ui/chrome_select_file_policy.h", - "!chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h", "!chrome/browser/ui/webui/chrome_url_data_manager.h", "!chrome/browser/view_type_utils.h", # Do not add to the list of temporarily-allowed dependencies above, diff --git a/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h b/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h index 98fe3e1..d5d7797 100644 --- a/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h +++ b/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.h @@ -7,13 +7,9 @@ #include "base/file_path.h" #include "chrome/browser/bookmarks/bookmark_node_data.h" -#include "ui/gfx/native_widget_types.h" #if defined(__OBJC__) -@class NSImage; @class NSString; -#else // __OBJC__ -class NSImage; #endif // __OBJC__ // This set of functions lets C++ code interact with the cocoa pasteboard @@ -40,14 +36,6 @@ bool ReadFromPasteboard(PasteboardType type, // valid bookmark. bool PasteboardContainsBookmarks(PasteboardType type); -// Returns a drag image for a bookmark. -NSImage* DragImageForBookmark(NSImage* favicon, const string16& title); - -// Copies the bookmark nodes to the dragging pasteboard and initiates a -// drag from the specified view. |view| must be a |TabContentsViewCocoa*|. -void StartDrag(Profile* profile, const std::vector& nodes, - gfx::NativeView view); - } // namespace bookmark_pasteboard_helper_mac #if defined(__OBJC__) diff --git a/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.mm b/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.mm index 1cbf701..f0a66f73 100644 --- a/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.mm +++ b/chrome/browser/bookmarks/bookmark_pasteboard_helper_mac.mm @@ -6,18 +6,8 @@ #import -#include - -#include "base/memory/scoped_nsobject.h" #include "base/sys_string_conversions.h" #include "chrome/browser/bookmarks/bookmark_model.h" -#include "chrome/browser/bookmarks/bookmark_model_factory.h" -#include "chrome/browser/profiles/profile.h" -#import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_controller.h" -#include "grit/ui_resources.h" -#include "ui/base/resource/resource_bundle.h" -#include "ui/gfx/mac/nsimage_cache.h" -#include "ui/gfx/scoped_ns_graphics_context_save_gstate_mac.h" NSString* const kBookmarkDictionaryListPboardType = @"BookmarkDictionaryListPboardType"; @@ -245,60 +235,6 @@ NSPasteboard* PasteboardFromType( return [NSPasteboard pasteboardWithName:type_string]; } -// Make a drag image from the drop data. -NSImage* MakeDragImage(BookmarkModel* model, - const std::vector& nodes) { - if (nodes.size() == 1) { - const BookmarkNode* node = nodes[0]; - const gfx::Image& favicon = model->GetFavicon(node); - return bookmark_pasteboard_helper_mac::DragImageForBookmark( - favicon.IsEmpty() ? nil : favicon.ToNSImage(), node->GetTitle()); - } else { - // TODO(feldstein): Do something better than this. Should have badging - // and a single drag image. - // http://crbug.com/37264 - return [NSImage imageNamed:NSImageNameMultipleDocuments]; - } -} - -// Draws string |title| within box |frame|, positioning it at the origin. -// Truncates text with fading if it is too long to fit horizontally. -// Based on code from GradientButtonCell but simplified where possible. -void DrawTruncatedTitle(NSAttributedString* title, NSRect frame) { - NSSize size = [title size]; - if (std::floor(size.width) <= NSWidth(frame)) { - [title drawAtPoint:frame.origin]; - return; - } - - // Gradient is about twice our line height long. - CGFloat gradient_width = std::min(size.height * 2, NSWidth(frame) / 4); - NSRect solid_part, gradient_part; - NSDivideRect(frame, &gradient_part, &solid_part, gradient_width, NSMaxXEdge); - CGContextRef context = static_cast( - [[NSGraphicsContext currentContext] graphicsPort]); - CGContextBeginTransparencyLayerWithRect(context, NSRectToCGRect(frame), 0); - { // Draw text clipped to frame. - gfx::ScopedNSGraphicsContextSaveGState scoped_state; - [NSBezierPath clipRect:frame]; - [title drawAtPoint:frame.origin]; - } - - NSColor* color = [NSColor blackColor]; - NSColor* alpha_color = [color colorWithAlphaComponent:0.0]; - scoped_nsobject mask( - [[NSGradient alloc] initWithStartingColor:color - endingColor:alpha_color]); - // Draw the gradient mask. - CGContextSetBlendMode(context, kCGBlendModeDestinationIn); - [mask drawFromPoint:NSMakePoint(NSMaxX(frame) - gradient_width, - NSMinY(frame)) - toPoint:NSMakePoint(NSMaxX(frame), - NSMinY(frame)) - options:NSGradientDrawsBeforeStartingLocation]; - CGContextEndTransparencyLayer(context); -} - } // namespace namespace bookmark_pasteboard_helper_mac { @@ -349,92 +285,4 @@ bool PasteboardContainsBookmarks(PasteboardType type) { return [pb availableTypeFromArray:availableTypes] != nil; } -NSImage* DragImageForBookmark(NSImage* favicon, const string16& title) { - // If no favicon, use a default. - if (!favicon) { - ResourceBundle& rb = ResourceBundle::GetSharedInstance(); - favicon = rb.GetNativeImageNamed(IDR_DEFAULT_FAVICON).ToNSImage(); - } - - // If no title, just use icon. - if (title.empty()) - return favicon; - NSString* ns_title = base::SysUTF16ToNSString(title); - - // Set the look of the title. - NSDictionary* attrs = - [NSDictionary dictionaryWithObject:[NSFont systemFontOfSize: - [NSFont smallSystemFontSize]] - forKey:NSFontAttributeName]; - scoped_nsobject rich_title( - [[NSAttributedString alloc] initWithString:ns_title - attributes:attrs]); - - // Set up sizes and locations for rendering. - const CGFloat kIconMargin = 2.0; // Gap between icon and text. - CGFloat text_left = [favicon size].width + kIconMargin; - NSSize drag_image_size = [favicon size]; - NSSize text_size = [rich_title size]; - CGFloat max_text_width = bookmarks::kDefaultBookmarkWidth - text_left; - text_size.width = std::min(text_size.width, max_text_width); - drag_image_size.width = text_left + text_size.width; - - // Render the drag image. - NSImage* drag_image = - [[[NSImage alloc] initWithSize:drag_image_size] autorelease]; - [drag_image lockFocus]; - [favicon drawAtPoint:NSMakePoint(0, 0) - fromRect:NSZeroRect - operation:NSCompositeSourceOver - fraction:0.7]; - NSRect target_text_rect = NSMakeRect(text_left, 0, - text_size.width, drag_image_size.height); - DrawTruncatedTitle(rich_title, target_text_rect); - [drag_image unlockFocus]; - - return drag_image; -} - -void StartDrag(Profile* profile, - const std::vector& nodes, - gfx::NativeView view) { - - std::vector elements; - for (std::vector::const_iterator it = nodes.begin(); - it != nodes.end(); ++it) { - elements.push_back(BookmarkNodeData::Element(*it)); - } - - WriteToPasteboard(kDragPasteboard, elements, profile->GetPath().value()); - - // Synthesize an event for dragging, since we can't be sure that - // [NSApp currentEvent] will return a valid dragging event. - NSWindow* window = [view window]; - NSPoint position = [window mouseLocationOutsideOfEventStream]; - NSTimeInterval event_time = [[NSApp currentEvent] timestamp]; - NSEvent* drag_event = [NSEvent mouseEventWithType:NSLeftMouseDragged - location:position - modifierFlags:NSLeftMouseDraggedMask - timestamp:event_time - windowNumber:[window windowNumber] - context:nil - eventNumber:0 - clickCount:1 - pressure:1.0]; - - // TODO(avi): Do better than this offset. - NSImage* drag_image = - MakeDragImage(BookmarkModelFactory::GetForProfile(profile), nodes); - NSSize image_size = [drag_image size]; - position.x -= std::floor(image_size.width / 2); - position.y -= std::floor(image_size.height / 5); - [window dragImage:drag_image - at:position - offset:NSZeroSize - event:drag_event - pasteboard:[NSPasteboard pasteboardWithName:NSDragPboard] - source:nil - slideBack:YES]; -} - } // namespace bookmark_pasteboard_helper_mac -- cgit v1.1