1/*
2 * Copyright (C) 2005, 2006, 2007, 2008 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 Computer, 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 <WebKit/WebHTMLView.h>
30
31#if !defined(ENABLE_NETSCAPE_PLUGIN_API)
32#define ENABLE_NETSCAPE_PLUGIN_API 1
33#endif
34
35#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4
36#define WebCGFloat float
37#else
38#define WebCGFloat CGFloat
39#endif
40
41@class DOMDocumentFragment;
42@class DOMNode;
43@class DOMRange;
44@class WebPluginController;
45
46@protocol WebHTMLHighlighter
47- (NSRect)highlightRectForLine:(NSRect)lineRect representedNode:(DOMNode *)node;
48- (void)paintHighlightForBox:(NSRect)boxRect onLine:(NSRect)lineRect behindText:(BOOL)text entireLine:(BOOL)line representedNode:(DOMNode *)node;
49@end
50
51extern const float _WebHTMLViewPrintingMinimumShrinkFactor;
52extern const float _WebHTMLViewPrintingMaximumShrinkFactor;
53
54@interface WebHTMLView (WebPrivate)
55
56+ (NSArray *)supportedMIMETypes;
57+ (NSArray *)supportedImageMIMETypes;
58+ (NSArray *)supportedNonImageMIMETypes;
59+ (NSArray *)unsupportedTextMIMETypes;
60
61- (void)close;
62
63// Modifier (flagsChanged) tracking SPI
64+ (void)_postFlagsChangedEvent:(NSEvent *)flagsChangedEvent;
65- (void)_updateMouseoverWithFakeEvent;
66
67- (void)_setAsideSubviews;
68- (void)_restoreSubviews;
69
70- (BOOL)_insideAnotherHTMLView;
71- (void)_clearLastHitViewIfSelf;
72- (void)_updateMouseoverWithEvent:(NSEvent *)event;
73
74+ (NSArray *)_insertablePasteboardTypes;
75+ (NSArray *)_selectionPasteboardTypes;
76- (void)_writeSelectionToPasteboard:(NSPasteboard *)pasteboard;
77
78- (void)_frameOrBoundsChanged;
79
80- (void)_handleAutoscrollForMouseDragged:(NSEvent *)event;
81- (WebPluginController *)_pluginController;
82
83// FIXME: _selectionRect is deprecated in favor of selectionRect, which is in protocol WebDocumentSelection.
84// We can't remove this yet because it's still in use by Mail.
85- (NSRect)_selectionRect;
86
87- (void)_startAutoscrollTimer:(NSEvent *)event;
88- (void)_stopAutoscrollTimer;
89
90- (BOOL)_canEdit;
91- (BOOL)_canEditRichly;
92- (BOOL)_canAlterCurrentSelection;
93- (BOOL)_hasSelection;
94- (BOOL)_hasSelectionOrInsertionPoint;
95- (BOOL)_isEditable;
96
97- (BOOL)_transparentBackground;
98- (void)_setTransparentBackground:(BOOL)isBackgroundTransparent;
99
100- (void)_setToolTip:(NSString *)string;
101
102// SPI used by Mail.
103// FIXME: These should all be moved to WebView; we won't always have a WebHTMLView.
104- (NSImage *)_selectionDraggingImage;
105- (NSRect)_selectionDraggingRect;
106- (DOMNode *)_insertOrderedList;
107- (DOMNode *)_insertUnorderedList;
108- (BOOL)_canIncreaseSelectionListLevel;
109- (BOOL)_canDecreaseSelectionListLevel;
110- (DOMNode *)_increaseSelectionListLevel;
111- (DOMNode *)_increaseSelectionListLevelOrdered;
112- (DOMNode *)_increaseSelectionListLevelUnordered;
113- (void)_decreaseSelectionListLevel;
114- (void)_setHighlighter:(id <WebHTMLHighlighter>)highlighter ofType:(NSString *)type;
115- (void)_removeHighlighterOfType:(NSString *)type;
116- (DOMDocumentFragment *)_documentFragmentFromPasteboard:(NSPasteboard *)pasteboard forType:(NSString *)pboardType inContext:(DOMRange *)context subresources:(NSArray **)subresources;
117
118#if ENABLE_NETSCAPE_PLUGIN_API
119- (void)_resumeNullEventsForAllNetscapePlugins;
120- (void)_pauseNullEventsForAllNetscapePlugins;
121#endif
122
123- (BOOL)_isUsingAcceleratedCompositing;
124- (NSView *)_compositingLayersHostingView;
125
126// SPI for printing (should be converted to API someday). When the WebHTMLView isn't being printed
127// directly, this method must be called before paginating, or the computed height might be incorrect.
128// Typically this would be called from inside an override of -[NSView knowsPageRange:].
129- (void)_layoutForPrinting;
130- (WebCGFloat)_adjustedBottomOfPageWithTop:(WebCGFloat)top bottom:(WebCGFloat)bottom limit:(WebCGFloat)bottomLimit;
131- (BOOL)_isInPrintMode;
132- (BOOL)_beginPrintModeWithPageWidth:(float)pageWidth height:(float)pageHeight shrinkToFit:(BOOL)shrinkToFit;
133// Lays out to pages of the given minimum width and height or more (increasing both dimensions proportionally)
134// as needed for the content to fit, but no more than the given maximum width.
135- (BOOL)_beginPrintModeWithMinimumPageWidth:(WebCGFloat)minimumPageWidth height:(WebCGFloat)minimumPageHeight maximumPageWidth:(WebCGFloat)maximumPageWidth;
136- (void)_endPrintMode;
137
138- (BOOL)_isInScreenPaginationMode;
139- (BOOL)_beginScreenPaginationModeWithPageSize:(CGSize)pageSize shrinkToFit:(BOOL)shrinkToFit;
140- (void)_endScreenPaginationMode;
141
142- (BOOL)_canSmartReplaceWithPasteboard:(NSPasteboard *)pasteboard;
143
144@end
145
146#undef WebCGFloat
147