1/* 2 * Copyright (C) 2005, 2006, 2014 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 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of Apple Inc. ("Apple") nor the names of 14 * its contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29#import "WebStringTruncator.h" 30 31#import "WebSystemInterface.h" 32#import <WebCore/Font.h> 33#import <WebCore/FontCache.h> 34#import <WebCore/FontPlatformData.h> 35#import <WebCore/StringTruncator.h> 36#import <runtime/InitializeThreading.h> 37#import <wtf/MainThread.h> 38#import <wtf/NeverDestroyed.h> 39 40static WebCore::Font& fontFromNSFont(NSFont *font) 41{ 42 static NeverDestroyed<RetainPtr<NSFont>> currentNSFont; 43 static NeverDestroyed<WebCore::Font> currentFont; 44 if ([font isEqual:currentNSFont.get().get()]) 45 return currentFont; 46 currentNSFont.get() = font; 47 currentFont.get() = WebCore::Font(WebCore::FontPlatformData(font, [font pointSize]), ![[NSGraphicsContext currentContext] isDrawingToScreen]); 48 return currentFont; 49} 50 51@implementation WebStringTruncator 52 53+ (void)initialize 54{ 55 InitWebCoreSystemInterface(); 56 JSC::initializeThreading(); 57 WTF::initializeMainThreadToProcessMainThread(); 58} 59 60+ (NSString *)centerTruncateString:(NSString *)string toWidth:(float)maxWidth 61{ 62 static NeverDestroyed<RetainPtr<NSFont>> menuFont = [NSFont menuFontOfSize:0]; 63 WebCore::FontCachePurgePreventer fontCachePurgePreventer; 64 return WebCore::StringTruncator::centerTruncate(string, maxWidth, fontFromNSFont(menuFont.get().get())); 65} 66 67+ (NSString *)centerTruncateString:(NSString *)string toWidth:(float)maxWidth withFont:(NSFont *)font 68{ 69 WebCore::FontCachePurgePreventer fontCachePurgePreventer; 70 return WebCore::StringTruncator::centerTruncate(string, maxWidth, fontFromNSFont(font)); 71} 72 73+ (NSString *)rightTruncateString:(NSString *)string toWidth:(float)maxWidth withFont:(NSFont *)font 74{ 75 WebCore::FontCachePurgePreventer fontCachePurgePreventer; 76 return WebCore::StringTruncator::rightTruncate(string, maxWidth, fontFromNSFont(font)); 77} 78 79+ (float)widthOfString:(NSString *)string font:(NSFont *)font 80{ 81 WebCore::FontCachePurgePreventer fontCachePurgePreventer; 82 return WebCore::StringTruncator::width(string, fontFromNSFont(font)); 83} 84 85@end 86