1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef PPAPI_CPP_DEV_GRAPHICS_2D_DEV_H_
6#define PPAPI_CPP_DEV_GRAPHICS_2D_DEV_H_
7
8#include "ppapi/cpp/graphics_2d.h"
9
10#include "ppapi/c/dev/ppb_graphics_2d_dev.h"
11
12namespace pp {
13
14class Point;
15
16// Graphics2DDev is a version of Graphics2D that exposes under-development  APIs
17// for HiDPI
18class Graphics2D_Dev : public Graphics2D {
19 public:
20  /// Default constructor for creating an is_null()
21  /// <code>Graphics2D_Dev</code> object.
22  Graphics2D_Dev() : Graphics2D() {}
23
24  // Constructor for creating a <code>Graphics2DDev</code> object from an
25  // existing <code>Graphics2D</code> object.
26  Graphics2D_Dev(const Graphics2D& other) : Graphics2D(other) {}
27
28  virtual ~Graphics2D_Dev() {}
29
30  /// Returns true if SetScale and GetScale are supported. False if not.
31  static bool SupportsScale();
32
33  /// SetScale() sets the scale factor that will be applied when painting the
34  /// graphics context onto the output device. Typically, if rendering at device
35  /// resolution is desired, the context would be created with the width and
36  /// height scaled up by the view's GetDeviceScale and SetScale called with a
37  /// scale of 1.0 / GetDeviceScale(). For example, if the view resource passed
38  /// to DidChangeView has a rectangle of (w=200, h=100) and a device scale of
39  /// 2.0, one would call Create with a size of (w=400, h=200) and then call
40  /// SetScale with 0.5. One would then treat each pixel in the context as a
41  /// single device pixel.
42  ///
43  /// @param[in] scale The scale to apply when painting.
44  ///
45  /// @return Returns <code>true</code> on success or <code>false</code>
46  /// if the resource is invalid or the scale factor is 0 or less.
47  bool SetScale(float scale);
48
49  /// GetScale() gets the scale factor that will be applied when painting the
50  /// graphics context onto the output device.
51  ///
52  /// @return Returns the scale factor for the graphics context. If the resource
53  /// is invalid, 0.0 will be returned.
54  float GetScale();
55
56  /// Set the offset into the plugin element at which the graphics context is
57  /// painted. This allows a portion of the plugin element to be painted to.
58  /// The new offset will only be applied after Flush() has been called.
59  ///
60  /// @param[in] resource A <code>Graphics2D</code> context resource.
61  /// @param[in] offset The offset at which the context should be painted.
62  void SetOffset(const pp::Point& offset);
63
64  /// Sets the resize mode for the graphics context. When a plugin element is
65  /// resized in the DOM, it takes time for the plugin to update the graphics
66  /// context in the renderer. These options affect how the existing context is
67  /// displayed until the backing store is updated by the plugin.
68  ///
69  ///@param[in] resource A <code>Graphics2D</code> context resource.
70  ///@param[in] resize_mode The resize mode to change this context to.
71  void SetResizeMode(PP_Graphics2D_Dev_ResizeMode resize_mode);
72};
73
74}  // namespace pp
75
76#endif  // PPAPI_CPP_DEV_GRAPHICS_2D_DEV_H_
77