Home | History | Annotate | Download | only in mac
      1 /*
      2  * Copyright (C) 2007, 2009 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #import "config.h"
     27 #import "DragImage.h"
     28 
     29 #if ENABLE(DRAG_SUPPORT)
     30 #import "CachedImage.h"
     31 #import "Image.h"
     32 #import "KURL.h"
     33 #import "ResourceResponse.h"
     34 
     35 namespace WebCore {
     36 
     37 IntSize dragImageSize(RetainPtr<NSImage> image)
     38 {
     39     return (IntSize)[image.get() size];
     40 }
     41 
     42 void deleteDragImage(RetainPtr<NSImage>)
     43 {
     44     // Since this is a RetainPtr, there's nothing additional we need to do to
     45     // delete it. It will be released when it falls out of scope.
     46 }
     47 
     48 RetainPtr<NSImage> scaleDragImage(RetainPtr<NSImage> image, FloatSize scale)
     49 {
     50     NSSize originalSize = [image.get() size];
     51     NSSize newSize = NSMakeSize((originalSize.width * scale.width()), (originalSize.height * scale.height()));
     52     newSize.width = roundf(newSize.width);
     53     newSize.height = roundf(newSize.height);
     54     [image.get() setScalesWhenResized:YES];
     55     [image.get() setSize:newSize];
     56     return image;
     57 }
     58 
     59 RetainPtr<NSImage> dissolveDragImageToFraction(RetainPtr<NSImage> image, float delta)
     60 {
     61     RetainPtr<NSImage> dissolvedImage(AdoptNS, [[NSImage alloc] initWithSize:[image.get() size]]);
     62 
     63     NSPoint point = [image.get() isFlipped] ? NSMakePoint(0, [image.get() size].height) : NSZeroPoint;
     64 
     65     // In this case the dragging image is always correct.
     66     [dissolvedImage.get() setFlipped:[image.get() isFlipped]];
     67 
     68     [dissolvedImage.get() lockFocus];
     69     [image.get() dissolveToPoint:point fraction: delta];
     70     [dissolvedImage.get() unlockFocus];
     71 
     72     [image.get() lockFocus];
     73     [dissolvedImage.get() compositeToPoint:point operation:NSCompositeCopy];
     74     [image.get() unlockFocus];
     75 
     76     return image;
     77 }
     78 
     79 RetainPtr<NSImage> createDragImageFromImage(Image* image)
     80 {
     81     RetainPtr<NSImage> dragImage(AdoptNS, [image->getNSImage() copy]);
     82     [dragImage.get() setSize:(NSSize)(image->size())];
     83     return dragImage;
     84 }
     85 
     86 RetainPtr<NSImage> createDragImageIconForCachedImage(CachedImage* image)
     87 {
     88     const String& filename = image->response().suggestedFilename();
     89     NSString *extension = nil;
     90     int dotIndex = filename.reverseFind('.');
     91 
     92     if (dotIndex > 0 && dotIndex < (int)(filename.length() - 1)) // require that a . exists after the first character and before the last
     93         extension = filename.substring(dotIndex + 1);
     94     else {
     95         // It might be worth doing a further lookup to pull the extension from the MIME type.
     96         extension = @"";
     97     }
     98 
     99     return [[NSWorkspace sharedWorkspace] iconForFileType:extension];
    100 }
    101 
    102 } // namespace WebCore
    103 
    104 #endif // ENABLE(DRAG_SUPPORT)
    105