/* 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); };