1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* ***** BEGIN LICENSE BLOCK *****
3 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
15 * The Original Code is mozilla.org code.
17 * The Initial Developer of the Original Code is
18 * Netscape Communications Corporation.
19 * Portions created by the Initial Developer are Copyright (C) 1998
20 * the Initial Developer. All Rights Reserved.
24 * Alternatively, the contents of this file may be used under the terms of
25 * either of the GNU General Public License Version 2 or later (the "GPL"),
26 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 * in which case the provisions of the GPL or the LGPL are applicable instead
28 * of those above. If you wish to allow use of your version of this file only
29 * under the terms of either the GPL or the LGPL, and not to allow others to
30 * use your version of this file under the terms of the MPL, indicate your
31 * decision by deleting the provisions above and replace them with the notice
32 * and other provisions required by the GPL or the LGPL. If you do not delete
33 * the provisions above, a recipient may use your version of this file under
34 * the terms of any one of the MPL, the GPL or the LGPL.
36 * ***** END LICENSE BLOCK ***** */
38 #ifndef nsIViewObserver_h___
39 #define nsIViewObserver_h___
41 #include "nsISupports.h"
46 class nsIRenderingContext
;
49 #define NS_IVIEWOBSERVER_IID \
50 { 0x63ae23ee, 0xe251, 0x4005, \
51 { 0xaf, 0xe4, 0x5b, 0x0f, 0xa1, 0x5a, 0xb4, 0x99 } }
53 class nsIViewObserver
: public nsISupports
57 NS_DECLARE_STATIC_IID_ACCESSOR(NS_IVIEWOBSERVER_IID
)
59 /* called when the observer needs to paint. This paints the entire
60 * frame subtree rooted at the view, including frame subtrees from
62 * @param aRenderingContext rendering context to paint to; the origin
63 * of the view is painted at (0,0) in the rendering context's current
64 * transform. For best results this should transform to pixel-aligned
66 * @param aDirtyRegion the region to be painted, in the coordinates of aRootView
67 * @return error status
69 NS_IMETHOD
Paint(nsIView
* aRootView
,
70 nsIRenderingContext
* aRenderingContext
,
71 const nsRegion
& aDirtyRegion
) = 0;
74 * @see nsLayoutUtils::ComputeRepaintRegionForCopy
76 NS_IMETHOD
ComputeRepaintRegionForCopy(nsIView
* aRootView
,
79 const nsRect
& aCopyRect
,
80 nsRegion
* aRepaintRegion
) = 0;
82 /* called when the observer needs to handle an event
83 * @param aView - where to start processing the event; the root view,
84 * or the view that's currently capturing this sort of event; must be a view
86 * @param aEvent - event notification
87 * @param aEventStatus - out parameter for event handling
89 * @param aHandled - whether the correct frame was found to
91 * @return error status
93 NS_IMETHOD
HandleEvent(nsIView
* aView
,
95 nsEventStatus
* aEventStatus
) = 0;
97 /* called when the view has been resized and the
98 * content within the view needs to be reflowed.
99 * @param aWidth - new width of view
100 * @param aHeight - new height of view
101 * @return error status
103 NS_IMETHOD
ResizeReflow(nsIView
* aView
, nscoord aWidth
, nscoord aHeight
) = 0;
106 * Hack to find out if the view observer is itself visible, in lieu
107 * of having the view trees linked.
109 NS_IMETHOD_(PRBool
) IsVisible() = 0;
112 * Notify the observer that we're about to start painting. This
113 * gives the observer a chance to make some last-minute invalidates
114 * and geometry changes if it wants to.
116 NS_IMETHOD_(void) WillPaint() = 0;
119 * Notify the observer that it should invalidate the frame bounds for
120 * the frame associated with this view.
122 NS_IMETHOD_(void) InvalidateFrameForView(nsIView
*aView
) = 0;
125 NS_DEFINE_STATIC_IID_ACCESSOR(nsIViewObserver
, NS_IVIEWOBSERVER_IID
)