
Review URL: http://codereview.chromium.org/9355003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@122637 0039d316-1c4b-4281-b951-d872f2087c98
126 lines
5.7 KiB
C++
126 lines
5.7 KiB
C++
// 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.
|
|
|
|
#ifndef PPAPI_CPP_VIEW_H_
|
|
#define PPAPI_CPP_VIEW_H_
|
|
|
|
#include "ppapi/cpp/resource.h"
|
|
#include "ppapi/cpp/rect.h"
|
|
#include "ppapi/cpp/size.h"
|
|
|
|
/// @file
|
|
/// This file defines the API for getting the state of a the view for an
|
|
/// instance.
|
|
|
|
namespace pp {
|
|
|
|
/// This class represents the state of the view for an instance and contains
|
|
/// functions for retrieving the current state of that view.
|
|
class View : public Resource {
|
|
public:
|
|
/// Default constructor for creating an is_null() <code>View</code> object.
|
|
View();
|
|
|
|
/// Creates a View resource, taking and holding an additional reference to
|
|
/// the given resource handle.
|
|
View(PP_Resource view_resource);
|
|
|
|
/// GetRect() retrieves the rectangle of the module instance associated
|
|
/// with a 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 module 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 module were it to be scrolled
|
|
/// entirely into view.
|
|
///
|
|
/// In general, most modules will not need to worry about the position of the
|
|
///module instance in the viewport, and only need to use the size.
|
|
///
|
|
/// @return The rectangle of the instance. The default return value for
|
|
/// an invalid View is the empty rectangle.
|
|
Rect GetRect() const;
|
|
|
|
/// IsFullscreen() returns whether the instance is currently
|
|
/// displaying in fullscreen mode.
|
|
///
|
|
/// @return <code>true</code> if the instance is in full screen mode,
|
|
/// or <code>false</code> if it's not or the resource is invalid.
|
|
bool IsFullscreen() const;
|
|
|
|
/// IsVisible() determines whether the module instance might be visible to
|
|
/// the user. For example, the Chrome window could be minimized or another
|
|
/// window could be over it. In both of these cases, the module instance
|
|
/// would not be visible to the user, but IsVisible() will return true.
|
|
///
|
|
/// Use the result to speed up or stop updates for invisible module
|
|
/// instances.
|
|
///
|
|
/// This function performs the duties of GetRect() (determining whether the
|
|
/// module instance is scrolled into view and the clip rectangle is nonempty)
|
|
/// and IsPageVisible() (whether the page is visible to the user).
|
|
///
|
|
/// @return <code>true</code> if the instance might be visible to the
|
|
/// user, <code>false</code> if it is definitely not visible.
|
|
bool IsVisible() const;
|
|
|
|
/// IsPageVisible() determines if the page that contains the module 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() instead of this function since
|
|
/// the module instance could be scrolled off of a visible page, and this
|
|
/// function will still return true. However, depending on how your module
|
|
/// interacts with the page, there may be certain updates that you may want
|
|
/// to perform when the page is visible even if your specific module instance
|
|
/// is not visible.
|
|
///
|
|
/// @return <code>true</code> if the instance might be visible to the
|
|
/// user, <code>false</code> if it is definitely not visible.
|
|
bool IsPageVisible() const;
|
|
|
|
/// GetClipRect() returns the clip rectangle relative to the upper-left corner
|
|
/// of the module instance. This rectangle indicates the portions of the
|
|
/// module instance that are scrolled into view.
|
|
///
|
|
/// If the module instance is scrolled off the view, the return value will be
|
|
/// (0, 0, 0, 0). This clip rectangle does <i>not</i> take into account page
|
|
/// visibility. Therefore, if the module instance is scrolled into view, but
|
|
/// the page itself is on a tab that is not visible, the return rectangle will
|
|
/// contain the visible rectangle as though the page were visible. Refer to
|
|
/// IsPageVisible() and IsVisible() if you want to account for page
|
|
/// visibility.
|
|
///
|
|
/// Most applications will not need to worry about the clip rectangle. The
|
|
/// recommended behavior is to do full updates if the module instance is
|
|
/// visible, as determined by IsVisible(), and do no updates if it is not
|
|
/// visible.
|
|
///
|
|
/// However, if the cost for computing pixels is very high for your
|
|
/// application, or the pages you're targeting frequently have very large
|
|
/// module instances with small visible portions, you may wish to optimize
|
|
/// further. In this case, the clip rectangle will tell you which parts of
|
|
/// the module 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 module 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.
|
|
///
|
|
/// @return The rectangle representing the visible part of the module
|
|
/// instance. If the resource is invalid, the empty rectangle is returned.
|
|
Rect GetClipRect() const;
|
|
};
|
|
|
|
} // namespace pp
|
|
|
|
#endif // PPAPI_CPP_VIEW_H_
|