summaryrefslogtreecommitdiff
path: root/chromium/ppapi/c/dev/ppb_graphics_2d_dev.h
blob: 245ae588ff7ad6c8533b674da809404bb5b60455 (plain)
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
/* 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.
 */

/* From dev/ppb_graphics_2d_dev.idl modified Tue Nov 12 11:22:26 2013. */

#ifndef PPAPI_C_DEV_PPB_GRAPHICS_2D_DEV_H_
#define PPAPI_C_DEV_PPB_GRAPHICS_2D_DEV_H_

#include "ppapi/c/pp_bool.h"
#include "ppapi/c/pp_macros.h"
#include "ppapi/c/pp_point.h"
#include "ppapi/c/pp_resource.h"
#include "ppapi/c/pp_stdint.h"

#define PPB_GRAPHICS2D_DEV_INTERFACE_0_1 "PPB_Graphics2D(Dev);0.1"
#define PPB_GRAPHICS2D_DEV_INTERFACE_0_2 "PPB_Graphics2D(Dev);0.2"
#define PPB_GRAPHICS2D_DEV_INTERFACE PPB_GRAPHICS2D_DEV_INTERFACE_0_2

/**
 * @file
 * This file contains the <code>PPB_Graphics2D_Dev</code> interface. */


/**
 * @addtogroup Enums
 * @{
 */
/**
 * These options affect how the existing graphics context is displayed when a
 * plugin is resized.
 */
typedef enum {
  /**
   * In this mode, the context does not change size or offset. If the backing
   * store is the same size as the plugin element, this will result in the
   * pixels on the right side of the plugin element being unavailable, revealing
   * the contents underneath it.
   */
  PP_GRAPHICS2D_DEV_RESIZEMODE_DEFAULT,
  /**
   * In this mode, the context and its offset are scaled relative to how much
   * the plugin element has been resized.
   */
  PP_GRAPHICS2D_DEV_RESIZEMODE_STRETCH
} PP_Graphics2D_Dev_ResizeMode;
PP_COMPILE_ASSERT_SIZE_IN_BYTES(PP_Graphics2D_Dev_ResizeMode, 4);
/**
 * @}
 */

/**
 * @addtogroup Interfaces
 * @{
 */
/* PPB_Graphics2D_Dev interface */
struct PPB_Graphics2D_Dev_0_2 {
  /**
   * SetScale() sets the scale factor that will be applied when painting the
   * graphics context onto the output device. Typically, if rendering at device
   * resolution is desired, the context would be created with the width and
   * height scaled up by the view's GetDeviceScale and SetScale called with a
   * scale of 1.0 / GetDeviceScale(). For example, if the view resource passed
   * to DidChangeView has a rectangle of (w=200, h=100) and a device scale of
   * 2.0, one would call Create with a size of (w=400, h=200) and then call
   * SetScale with 0.5. One would then treat each pixel in the context as a
   * single device pixel.
   *
   * @param[in] resource A <code>Graphics2D</code> context resource.
   * @param[in] scale The scale to apply when painting.
   *
   * @return Returns <code>PP_TRUE</code> on success or <code>PP_FALSE</code> if
   * the resource is invalid or the scale factor is 0 or less.
   */
  PP_Bool (*SetScale)(PP_Resource resource, float scale);
  /***
   * GetScale() gets the scale factor that will be applied when painting the
   * graphics context onto the output device.
   *
   * @param[in] resource A <code>Graphics2D</code> context resource.
   *
   * @return Returns the scale factor for the graphics context. If the resource
   * is not a valid <code>Graphics2D</code> context, this will return 0.0.
   */
  float (*GetScale)(PP_Resource resource);
  /***
   * Sets the offset into the plugin element at which the graphics context is
   * painted. This allows a portion of the plugin element to be painted to.
   * The new offset will only be applied after Flush() has been called.
   *
   * @param[in] resource A <code>Graphics2D</code> context resource.
   * @param[in] offset The offset at which the context should be painted.
   */
  void (*SetOffset)(PP_Resource resource, const struct PP_Point* offset);
  /***
   * Sets the resize mode for the graphics context. When a plugin element is
   * resized in the DOM, it takes time for the plugin to update the graphics
   * context in the renderer. These options affect how the existing context is
   * displayed until the backing store is updated by the plugin.
   *
   * @param[in] resource A <code>Graphics2D</code> context resource.
   * @param[in] resize_mode The resize mode to change this context to.
   */
  void (*SetResizeMode)(PP_Resource resource,
                        PP_Graphics2D_Dev_ResizeMode resize_mode);
};

typedef struct PPB_Graphics2D_Dev_0_2 PPB_Graphics2D_Dev;

struct PPB_Graphics2D_Dev_0_1 {
  PP_Bool (*SetScale)(PP_Resource resource, float scale);
  float (*GetScale)(PP_Resource resource);
  void (*SetResizeMode)(PP_Resource resource,
                        PP_Graphics2D_Dev_ResizeMode resize_mode);
};
/**
 * @}
 */

#endif  /* PPAPI_C_DEV_PPB_GRAPHICS_2D_DEV_H_ */