Source/WebCore: Clean up exports and headers for iOS.
[WebKit-https.git] / Source / WebKit / ios / Misc / WebNSStringDrawing.h
1 /*
2  * Copyright (C) 2005, 2006, 2007, 2008, 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 INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef WebNSStringDrawing_h
27 #define WebNSStringDrawing_h
28
29 #if TARGET_OS_IPHONE
30
31 #import <CoreGraphics/CoreGraphics.h>
32 #import <Foundation/Foundation.h>
33 #import <GraphicsServices/GraphicsServices.h>
34
35 typedef enum {
36     // The order of the enum items is important, and it is used for >= comparisions
37     WebEllipsisStyleNone = 0, // Old style, no truncation. Doesn't respect the "width" passed to it. Left in for compatability.
38     WebEllipsisStyleHead = 1,
39     WebEllipsisStyleTail = 2,
40     WebEllipsisStyleCenter = 3,
41     WebEllipsisStyleClip = 4, // Doesn't really clip, but instad truncates at the last character.
42     WebEllipsisStyleWordWrap = 5, // Truncates based on the width/height passed to it.
43     WebEllipsisStyleCharacterWrap = 6, // For "drawAtPoint", it is just like WebEllipsisStyleClip, since it doesn't really clip, but truncates at the last character
44 } WebEllipsisStyle;
45
46 typedef enum {
47     WebTextAlignmentLeft = 0,
48     WebTextAlignmentCenter = 1,
49     WebTextAlignmentRight = 2,
50 } WebTextAlignment;
51
52 @protocol WebTextRenderingAttributes
53
54 @property(nonatomic, readonly)          GSFontRef font; // font the text should be rendered with (defaults to nil)
55 @property(nonatomic, readonly)          CGFloat lineSpacing; // set to specify the line spacing (defaults to 0.0 which indicates the default line spacing)
56
57 @property(nonatomic, readonly)          WebEllipsisStyle ellipsisStyle; // text will be wrapped and truncated according to the line break mode (defaults to UILineBreakModeWordWrap)
58 @property(nonatomic, readonly)          CGFloat letterSpacing; // number of extra pixels to be added or subtracted between each pair of characters  (defalts to 0)
59 @property(nonatomic, readonly)          WebTextAlignment alignment; // specifies the horizontal alignment that should be used when rendering the text (defaults to UITextAlignmentLeft)
60 @property(nonatomic, readonly)          BOOL includeEmoji; // if yes, the text can include Emoji characters.
61 @property(nonatomic, readwrite)         CGRect truncationRect; // the truncation rect argument, if non-nil, will be used instead of an ellipsis character for truncation sizing. if no truncation occurs, the truncationRect will be changed to CGRectNull. If truncation occurs, the rect will be updated with its placement.
62
63 @property(nonatomic, readonly)          NSString **renderString; // An out-parameter for the actual rendered string. Defaults to nil.
64 @property(nonatomic, readonly)          BOOL drawUnderline; // if yes, the text will be painted with underline.
65
66 @end
67
68 @interface NSString (WebStringDrawing)
69
70 + (void)_web_setWordRoundingEnabled:(BOOL)flag;
71 + (BOOL)_web_wordRoundingEnabled;
72
73 + (void)_web_setWordRoundingAllowed:(BOOL)flag;
74 + (BOOL)_web_wordRoundingAllowed;
75
76 + (void)_web_setAscentRoundingEnabled:(BOOL)flag;
77 + (BOOL)_web_ascentRoundingEnabled;
78
79 - (CGSize)_web_drawAtPoint:(CGPoint)point withFont:(GSFontRef)font;
80
81 - (CGSize)_web_sizeWithFont:(GSFontRef)font;
82
83 // Size after applying ellipsis style and clipping to width.
84 - (CGSize)_web_sizeWithFont:(GSFontRef)font forWidth:(float)width ellipsis:(WebEllipsisStyle)ellipsisStyle;
85 - (CGSize)_web_sizeWithFont:(GSFontRef)font forWidth:(float)width ellipsis:(WebEllipsisStyle)ellipsisStyle letterSpacing:(float)letterSpacing;
86 - (CGSize)_web_sizeWithFont:(GSFontRef)font forWidth:(float)width ellipsis:(WebEllipsisStyle)ellipsisStyle letterSpacing:(float)letterSpacing resultRange:(NSRange *)resultRangeOut;
87
88 // Draw text to fit width. Clip or apply ellipsis according to style.
89 - (CGSize)_web_drawAtPoint:(CGPoint)point forWidth:(float)width withFont:(GSFontRef)font ellipsis:(WebEllipsisStyle)ellipsisStyle;
90 - (CGSize)_web_drawAtPoint:(CGPoint)point forWidth:(float)width withFont:(GSFontRef)font ellipsis:(WebEllipsisStyle)ellipsisStyle letterSpacing:(float)letterSpacing;
91 - (CGSize)_web_drawAtPoint:(CGPoint)point forWidth:(float)width withFont:(GSFontRef)font ellipsis:(WebEllipsisStyle)ellipsisStyle letterSpacing:(float)letterSpacing includeEmoji:(BOOL)includeEmoji;
92
93 // Wrap and clip to rect.
94 - (CGSize)_web_drawInRect:(CGRect)rect withFont:(GSFontRef)font ellipsis:(WebEllipsisStyle)ellipsisStyle alignment:(WebTextAlignment)alignment;
95 - (CGSize)_web_drawInRect:(CGRect)rect withFont:(GSFontRef)font ellipsis:(WebEllipsisStyle)ellipsisStyle alignment:(WebTextAlignment)alignment lineSpacing:(int)lineSpacing;
96 - (CGSize)_web_drawInRect:(CGRect)rect withFont:(GSFontRef)font ellipsis:(WebEllipsisStyle)ellipsisStyle alignment:(WebTextAlignment)alignment lineSpacing:(int)lineSpacing includeEmoji:(BOOL)includeEmoj truncationRect:(CGRect *)truncationRect;
97 - (CGSize)_web_sizeInRect:(CGRect)rect withFont:(GSFontRef)font ellipsis:(WebEllipsisStyle)ellipsisStyle;
98 - (CGSize)_web_sizeInRect:(CGRect)rect withFont:(GSFontRef)font ellipsis:(WebEllipsisStyle)ellipsisStyle lineSpacing:(int)lineSpacing;
99
100 // Clip or apply ellipsis according to style. Return the string which results.
101 - (NSString *)_web_stringForWidth:(float)width withFont:(GSFontRef)font ellipsis:(WebEllipsisStyle)ellipsisStyle letterSpacing:(float)letterSpacing includeEmoji:(BOOL)includeEmoji;
102
103 // These methods should eventually replace all string drawing/sizing methods above
104
105 // Sizing/drawing a single line of text
106 - (CGSize)_web_sizeForWidth:(CGFloat)width withAttributes:(id <WebTextRenderingAttributes>)attributes;
107 - (CGSize)_web_drawAtPoint:(CGPoint)point forWidth:(CGFloat)width withAttributes:(id <WebTextRenderingAttributes>)attributes;
108
109 // Sizing/drawing multiline text
110 - (CGSize)_web_sizeInRect:(CGRect)rect withAttributes:(id <WebTextRenderingAttributes>)attributes;
111 - (CGSize)_web_drawInRect:(CGRect)rect withAttributes:(id <WebTextRenderingAttributes>)attributes;
112
113 @end
114
115 #endif // TARGET_OS_IPHONE
116
117 #endif // WebNSStringDrawing_h