/* Copyright (c) 2012 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 PPB_View
struct representing the state of the
* view of an instance.
*/
label Chrome {
M18 = 1.0
};
/**
* PPB_View
represents the state of the view of an instance.
* You can get a View object with the PPB_Instance.GetView()
* function. Additionally, all PPB_ViewChanged objects are also
* PPB_View
objects so you will receive new view information via
* PPP_Instance.DidChangeView
.
*/
[macro="PPB_VIEW_INTERFACE"]
interface PPB_View {
/**
* IsView()
determines if the given resource is a valid
* PPB_View
resource. Note that PPB_ViewChanged
* resources derive from PPB_View
and will return true here
* as well.
*
* @return PP_TRUE
if the given resource supports
* PPB_View
or PP_FALSE
if it is an invalid
* resource or is a resource of another type.
*/
PP_Bool IsView([in] PP_Resource resource);
/**
* GetRect()
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 PP_TRUE
if the resource was valid and the
* viewport rect was filled in, PP_FALSE
if not.
*/
PP_Bool GetRect([in] PP_Resource resource,
[out] PP_Rect rect);
/**
* IsFullscreen()
returns whether the instance is currently
* displaying in fullscreen mode.
*
* @return PP_TRUE
if the instance is in full screen mode,
* or PP_FALSE
if it's not or the resource is invalid.
*/
PP_Bool IsFullscreen([in] PP_Resource resource);
/**
* IsVisible()
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 (IsPageVisible()
).
*
* @return PP_TRUE
if the instance is plausibly visible to the
* user, PP_FALSE
if it is definitely not visible.
*/
PP_Bool IsVisible([in] PP_Resource resource);
/**
* IsPageVisible()
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 IsVisible()
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 PP_TRUE
if the instance is plausibly visible to the
* user, PP_FALSE
if it is definitely not visible.
*/
PP_Bool IsPageVisible([in] PP_Resource resource);
/**
* GetClipRect()
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 not 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
* IsPageVisible()
and IsVisible()
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
* IsVisible()
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 PP_TRUE
if the resource was valid and the
* clip rect was filled in, PP_FALSE
if not.
*/
PP_Bool GetClipRect([in] PP_Resource resource,
[out] PP_Rect clip);
};