1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
/* Copyright (c) 2011 The Chromium Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/**
* Defines the <code>PPB_View</code> struct representing the state of the
* view of an instance.
*/
label Chrome {
M18 = 1.0
};
/**
* <code>PPB_View</code> represents the state of the view of an instance.
* You can get a View object with the <code>PPB_Instance.GetView()</code>
* function. Additionally, all </code>PPB_ViewChanged</code> objects are also
* <code>PPB_View</code> objects so you will receive new view information via
* <code>PPP_Instance.DidChangeView</code>.
*/
[macro="PPB_VIEW_INTERFACE"]
interface PPB_View {
/**
* <code>IsView()</code> determines if the given resource is a valid
* <code>PPB_View</code> resource. Note that <code>PPB_ViewChanged</code>
* resources derive from <code>PPB_View</code> and will return true here
* as well.
*
* @return <code>PP_TRUE</code> if the given resource supports
* <code>PPB_View</code> or <code>PP_FALSE</code> if it is an invalid
* resource or is a resource of another type.
*/
PP_Bool IsView([in] PP_Resource resource);
/**
* <code>GetRect()</code> retrieves the rectangle of the instance
* associated with the view changed notification relative to the upper left
* of the browser viewport. This position changes when the page is scrolled.
*
* The returned rectangle may not be inside the visible portion of the
* viewport if the instance is scrolled off the page. Therefore, the position
* may be negative or larger than the size of the page. The size will always
* reflect the size of the plugin were it to be scrolled entirely into view.
*
* In general, most plugins will not need to worry about the position of the
* instance in the viewport, and only need to use the size.
*
* @param rect Output argument receiving the rectangle on success.
*
* @return Returns <code>PP_TRUE</code> if the resource was valid and the
* viewport rect was filled in, <code>PP_FALSE</code> if not.
*/
PP_Bool GetRect([in] PP_Resource resource,
[out] PP_Rect rect);
/**
* <code>IsFullscreen()</code> returns whether the instance is currently
* displaying in fullscreen mode.
*
* @return <code>PP_TRUE</code> if the instance is in full screen mode,
* or <code>PP_FALSE</code> if it's not or the resource is invalid.
*/
PP_Bool IsFullscreen([in] PP_Resource resource);
/**
* <code>IsVisible()</code> returns whether the instance is plausibly
* visible to the user. You should use this flag to throttle or stop updates
* for invisible plugins.
*
* Thie measure incorporates both whether the instance is scrolled into
* view (whether the clip rect is nonempty) and whether the page is plausibly
* visible to the user (<code>IsPageVisible()</code>).
*
* @return <code>PP_TRUE</code> if the instance is plausibly visible to the
* user, <code>PP_FALSE</code> if it is definitely not visible.
*/
PP_Bool IsVisible([in] PP_Resource resource);
/**
* <code>IsPageVisible()</code> determines if the page that contains the
* instance is visible. The most common cause of invisible pages is that
* the page is in a background tab in the browser.
*
* Most applications should use <code>IsVisible()</code> rather than
* this function since the instance could be scrolled off of a visible
* page, and this function will still return true. However, depending on
* how your plugin interacts with the page, there may be certain updates
* that you may want to perform when the page is visible even if your
* specific instance isn't.
*
* @return <code>PP_TRUE</code> if the instance is plausibly visible to the
* user, <code>PP_FALSE</code> if it is definitely not visible.
*/
PP_Bool IsPageVisible([in] PP_Resource resource);
/**
* <code>GetClipRect()</code> returns the clip rectangle relative to the
* upper left corner of the instance. This rectangle indicates which parts of
* the instance are scrolled into view.
*
* If the instance is scrolled off the view, the return value will be
* (0, 0, 0, 0). this state. This clip rect does <i>not</i> take into account
* page visibility. This means if the instance is scrolled into view but the
* page itself is in an invisible tab, the return rect will contain the
* visible rect assuming the page was visible. See
* <code>IsPageVisible()</code> and <code>IsVisible()</code> if you want to
* handle this case.
*
* Most applications will not need to worry about the clip. The recommended
* behavior is to do full updates if the instance is visible as determined by
* <code>IsVisible()</code> and do no updates if not.
*
* However, if the cost for computing pixels is very high for your
* application or the pages you're targeting frequently have very large
* instances with small visible portions, you may wish to optimize further.
* In this case, the clip rect will tell you which parts of the plugin to
* update.
*
* Note that painting of the page and sending of view changed updates
* happens asynchronously. This means when the user scrolls, for example,
* it is likely that the previous backing store of the instance will be used
* for the first paint, and will be updated later when your application
* generates new content with the new clip. This may cause flickering at the
* boundaries when scrolling. If you do choose to do partial updates, you may
* want to think about what color the invisible portions of your backing
* store contain (be it transparent or some background color) or to paint
* a certain region outside the clip to reduce the visual distraction when
* this happens.
*
* @param clip Output argument receiving the clip rect on success.
*
* @return Returns <code>PP_TRUE</code> if the resource was valid and the
* clip rect was filled in, <code>PP_FALSE</code> if not.
*/
PP_Bool GetClipRect([in] PP_Resource resource,
[out] PP_Rect clip);
};
|