Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(242)

Side by Side Diff: ppapi/c/ppb_graphics_2d.h

Issue 7282015: Misc. changes. Mostly formatting. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 /* Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 * Use of this source code is governed by a BSD-style license that can be 2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file. 3 * found in the LICENSE file.
4 */ 4 */
5 #ifndef PPAPI_C_PPB_GRAPHICS_2D_H_ 5 #ifndef PPAPI_C_PPB_GRAPHICS_2D_H_
6 #define PPAPI_C_PPB_GRAPHICS_2D_H_ 6 #define PPAPI_C_PPB_GRAPHICS_2D_H_
7 7
8 #include "ppapi/c/pp_bool.h" 8 #include "ppapi/c/pp_bool.h"
9 #include "ppapi/c/pp_instance.h" 9 #include "ppapi/c/pp_instance.h"
10 #include "ppapi/c/pp_module.h" 10 #include "ppapi/c/pp_module.h"
11 #include "ppapi/c/pp_resource.h" 11 #include "ppapi/c/pp_resource.h"
12 #include "ppapi/c/pp_stdint.h" 12 #include "ppapi/c/pp_stdint.h"
13 13
14 struct PP_CompletionCallback; 14 struct PP_CompletionCallback;
15 struct PP_Point; 15 struct PP_Point;
16 struct PP_Rect; 16 struct PP_Rect;
17 struct PP_Size; 17 struct PP_Size;
18 18
19 #define PPB_GRAPHICS_2D_INTERFACE_0_3 "PPB_Graphics2D;0.3" 19 #define PPB_GRAPHICS_2D_INTERFACE_0_3 "PPB_Graphics2D;0.3"
20 #define PPB_GRAPHICS_2D_INTERFACE PPB_GRAPHICS_2D_INTERFACE_0_3 20 #define PPB_GRAPHICS_2D_INTERFACE PPB_GRAPHICS_2D_INTERFACE_0_3
21 21
22 /** 22 /**
23 * @file 23 * @file
24 * Defines the PPB_Graphics2D struct. 24 * Defines the <code>PPB_Graphics2D</code> struct representing a 2D graphics
25 * context within the browser.
25 * 26 *
26 * @addtogroup Interfaces 27 * @addtogroup Interfaces
27 * @{ 28 * @{
28 */ 29 */
29 30
30 /** {PENDING: describe PPB_Graphics2D. */ 31 /**
32 * The <code>PPB_Graphics2D</code> structure represents a 2D graphics context.
dmichael (off chromium) 2011/07/01 16:45:00 I think it might be better to say something along
jond 2011/07/01 20:31:23 Done.
jond 2011/07/01 20:31:23 Done.
33 */
31 struct PPB_Graphics2D { 34 struct PPB_Graphics2D {
32 /** 35 /**
33 * The returned graphics context will not be bound to the plugin instance on 36 * Create() creates a 2D graphics context. The
dmichael (off chromium) 2011/07/01 16:45:00 This line looks a bit short; you could pull some w
jond 2011/07/01 20:31:23 Done.
34 * creation (call BindGraphics on the plugin instance to do that). 37 * returned graphics context will not be bound to the module instance on
38 * creation (call BindGraphics() on the module instance bind the returned
dmichael (off chromium) 2011/07/01 16:45:00 I don't know, this rewording doesn't seem clearer
jond 2011/07/01 20:31:23 Done.
39 * graphics context to the module instance).
35 * 40 *
36 * Set the is_always_opaque flag if you know that you will be painting only 41 * @param[in] instance The module instance.
37 * opaque data to this context. This will disable blending when compositing 42 * @param[in] size The size of the graphic context.
38 * the plugin with the web page, which will give slightly higher performance. 43 * @param[in] is_always_opaque Set the <code>is_always_opaque</code> flag to
44 * true you know that you will be painting only opaque data to this context.
dmichael (off chromium) 2011/07/01 16:45:00 'true you' -> 'PP_TRUE if you'
jond 2011/07/01 20:31:23 Done.
45 * This option will disable blending when compositing the module with the web
46 * page, which will give slightly higher performance.
dmichael (off chromium) 2011/07/01 16:45:00 You might ping dspringer about this documentation,
jond 2011/07/01 20:31:23 Done.
39 * 47 *
40 * If you set is_always_opaque, your alpha channel should always be set to 48 * If you set <code>is_always_opaque</code>, your alpha channel should always
41 * 0xFF or there may be painting artifacts. Being opaque will allow the 49 * be set to 0xFF or there may be painting artifacts. Setting this option to
42 * browser to do a memcpy rather than a blend to paint the plugin, and this 50 * true will allow the browser to do a memcpy rather than a blend to paint
43 * means your alpha values will get set on the page backing store. If these 51 * the module, and this means your alpha values will get set on the page
44 * values are incorrect, it could mess up future blending. 52 * backing store. Incorrect values could negitively affect future
dmichael (off chromium) 2011/07/01 16:45:00 negitively->negatively
jond 2011/07/01 20:31:23 Done.
53 * blending.
45 * 54 *
46 * If you aren't sure, it is always correct to specify that it it not opaque. 55 * If you are not sure if the data is opaque, set this flag to false (not
56 * opaque).
57 *
58 * @return A <code>PP_Resource</code> containing the 2D graphics context if
59 * successful or 0 if unsuccessful.
47 */ 60 */
48 PP_Resource (*Create)(PP_Instance instance, 61 PP_Resource (*Create)(PP_Instance instance,
49 const struct PP_Size* size, 62 const struct PP_Size* size,
50 PP_Bool is_always_opaque); 63 PP_Bool is_always_opaque);
51 64
52 /** 65 /**
53 * Returns PP_TRUE if the given resource is a valid Graphics2D, PP_FALSE if it 66 * IsGraphics2D() determines if the given resource is a valid
54 * is an invalid resource or is a resource of another type. 67 * <code>Graphics2D</code>.
68 *
69 * @param[in] resource A <code>Graphics2D</code> context resource.
70 *
71 * @return PP_TRUE if the given resource is a valid <code>Graphics2D</code>,
72 * <code>PP_FALSE</code> if it is an invalid resource or is a resource of
73 * another type.
55 */ 74 */
56 PP_Bool (*IsGraphics2D)(PP_Resource resource); 75 PP_Bool (*IsGraphics2D)(PP_Resource resource);
57 76
58 /** 77 /**
59 * Retrieves the configuration for the given graphics context, filling the 78 * Describe() retrieves the configuration for the given graphics context,
60 * given values (which must not be NULL). On success, returns PP_TRUE. If the 79 * filling the given values (which must not be <code>NULL</code>).
61 * resource is invalid, the output parameters will be set to 0 and it will 80 *
62 * return PP_FALSE. 81 * @param[in,out] resource The 2D Graphics resource.
dmichael (off chromium) 2011/07/01 16:45:00 [in,out]->[in]
jond 2011/07/01 20:31:23 Done.
82 * @param[in,out] size The size of the 2D graphics context in the browser.
83 * @param[in,out] is_always_opaque Identifies whether only opaque data
84 * will be painted.
85 *
86 * @return Returns <code>PP_TRUE</code> on succes or <code>PP_FALSE</code> if
87 * the resource is invalid. The output parameters will be set to 0 on a
88 * <code>PP_FALSE</code>.
63 */ 89 */
64 PP_Bool (*Describe)(PP_Resource graphics_2d, 90 PP_Bool (*Describe)(PP_Resource graphics_2d,
65 struct PP_Size* size, 91 struct PP_Size* size,
66 PP_Bool* is_always_opqaue); 92 PP_Bool* is_always_opqaue);
67 93
68 /** 94 /**
69 * Enqueues a paint of the given image into the context. THIS HAS NO EFFECT 95 * PaintImageData() enqueues a paint of the given image into the context.
70 * UNTIL YOU CALL Flush(). As a result, what counts is the contents of the 96 * This function has no effect until you call Flush() As a result, what
71 * bitmap when you call Flush, not when you call this function. 97 * counts is the contents of the bitmap when you call Flush(), not when
98 * you call this function.
72 * 99 *
73 * The given image will be placed at |top_left| from the top left of the 100 * The given image will be placed at <code>top_left</code> from the top left
74 * context's internal backing store. Then the src_rect will be copied into the 101 * of the context's internal backing store. Then the <code>src_rect</code>
75 * backing store. This parameter may not be NULL. This means that the 102 * will be copied into the backing store. This parameter may not be
76 * rectangle being painted will be at src_rect offset by top_left. 103 * <code>NULL</code>. This means that the rectangle being painted will be at
104 * <code>src_rect</code> offset by <code>top_left</code>.
77 * 105 *
78 * The src_rect is specified in the coordinate system of the image being 106 * The <code>src_rect</code> is specified in the coordinate system of the
79 * painted, not the context. For the common case of copying the entire image, 107 * image being painted, not the context. For the common case of copying the
80 * you may specify a NULL |src_rect| pointer. If you are frequently updating 108 * entire image, you may specify a <code>NULL</code> <code>src_rect</code>
81 * the entire image, consider using ReplaceContents which will give slightly 109 * pointer. If you are frequently updating the entire image, consider using
82 * higher performance. 110 * <code>ReplaceContents</code> which will give slightly higher performance.
dmichael (off chromium) 2011/07/01 16:45:00 Here's another one you should ask dspringer about,
jond 2011/07/01 20:31:23 I stole the text from the C++ graphics_2d.h file t
83 * 111 *
84 * The painted area of the source bitmap must fall entirely within the 112 * The painted area of the source bitmap must fall entirely within the
85 * context. Attempting to paint outside of the context will result in an 113 * context. Attempting to paint outside of the context will result in an
86 * error. However, the source bitmap may fall outside the context, as long 114 * error. However, the source bitmap may fall outside the context, as long
87 * as the src_rect subset of it falls entirely within the context. 115 * as the <code>src_rect</code> subset of it falls entirely within the
116 * context.
88 * 117 *
89 * There are two modes most plugins may use for painting. The first is 118 * There are two modes most plugins may use for painting. The first is
90 * that you will generate a new ImageData (possibly representing a subset of 119 * that you will generate a new <code>ImageData</code> (possibly representing
91 * your plugin) and then paint it. In this case, you'll set the location of 120 * a subset of your module) and then paint it. In this case, you'll set the
dmichael (off chromium) 2011/07/01 16:45:00 module->module instance
jond 2011/07/01 20:31:23 Done.
92 * your painting to top_left and set src_rect to NULL. The second is that 121 * location of your painting to <code>top_left</code> and set
93 * you're generating small invalid regions out of a larger bitmap 122 * <code>src_rect</code> to <code>NULL</code>. The second is that you're
94 * representing your entire plugin. In this case, you would set the location 123 * generating small invalid regions out of a larger bitmap representing your
95 * of your image to (0,0) and then set src_rect to the pixels you changed. 124 * entire module. In this case, you would set the location of your image to
dmichael (off chromium) 2011/07/01 16:45:00 module->module instance
jond 2011/07/01 20:31:23 Done.
125 * (0,0) and then set <code>src_rect</code> to the pixels you changed.
126 *
127 * @param[in] resource The 2D Graphics resource.
128 * @param[in] image The <code>ImageData</code> to be painted.
129 * @param[in] top_left A <code>Point</code> representing the
130 * <code>top_left</code> location where the <code>ImageData</code> will be
131 * painted.
132 * @param[in] src_rect The rectangular area where the <code>ImageData</code>
133 * will be painted.
96 */ 134 */
97 void (*PaintImageData)(PP_Resource graphics_2d, 135 void (*PaintImageData)(PP_Resource graphics_2d,
98 PP_Resource image_data, 136 PP_Resource image_data,
99 const struct PP_Point* top_left, 137 const struct PP_Point* top_left,
100 const struct PP_Rect* src_rect); 138 const struct PP_Rect* src_rect);
101 139
102 /** 140 /**
103 * Enqueues a scroll of the context's backing store. THIS HAS NO EFFECT UNTIL 141 * Scroll() enqueues a scroll of the context's backing store. This function
104 * YOU CALL Flush(). The data within the given clip rect (you may specify 142 * has no effect until you call Flush(). The data within the provided
105 * NULL to scroll the entire region) will be shifted by (dx, dy) pixels. 143 * clipping rectangle (you may specify <code>NULL</code> to scroll the entire
144 * region) will be shifted by (dx, dy) pixels.
106 * 145 *
107 * This will result in some exposed region which will have undefined 146 * This function will result in some exposed region which will have undefined
108 * contents. The plugin should call PaintImageData on these exposed regions 147 * contents. The module should call PaintImageData() on these exposed regions
109 * to give the correct contents. 148 * to give the correct contents.
110 * 149 *
111 * The scroll can be larger than the area of the clip rect, which means the 150 * The scroll can be larger than the area of the clipping rectangle, which
112 * current image will be scrolled out of the rect. This is not an error but 151 * means the current image will be scrolled out of the rectangle. This
113 * will be a no-op. 152 * scenario is not an error but will result in a no-op.
153 *
154 * @param[in] graphics_2d The 2D Graphics resource.
155 * @param[in] clip The clipping rectangle.
156 * @param[in] amount The amount the area in the clipping rectangle will
157 * shifted.
114 */ 158 */
115 void (*Scroll)(PP_Resource graphics_2d, 159 void (*Scroll)(PP_Resource graphics_2d,
116 const struct PP_Rect* clip_rect, 160 const struct PP_Rect* clip_rect,
117 const struct PP_Point* amount); 161 const struct PP_Point* amount);
118 162
119 /** 163 /**
120 * This function provides a slightly more efficient way to paint the entire 164 * ReplaceContents() provides a slightly more efficient way to paint the
121 * plugin's image. Normally, calling PaintImageData requires that the browser 165 * entire module's image. Normally, calling PaintImageData() requires that
122 * copy the pixels out of the image and into the graphics context's backing 166 * the browser copy the pixels out of the image and into the graphics
123 * store. This function replaces the graphics context's backing store with the 167 * context's backing store. This function replaces the graphics context's
124 * given image, avoiding the copy. 168 * backing store with the given image, avoiding the copy.
125 * 169 *
126 * The new image must be the exact same size as this graphics context. If the 170 * The new image must be the exact same size as this graphics context. If the
127 * new image uses a different image format than the browser's native bitmap 171 * new image uses a different image format than the browser's native bitmap
128 * format (use PPB_ImageData.GetNativeImageDataFormat to retrieve this), then 172 * format (use <code>PPB_ImageData.GetNativeImageDataFormat()</code> to
129 * a conversion will be done inside the browser which may slow the performance 173 * retrieve the format), then a conversion will be done inside the browser
130 * a little bit. 174 * which may slow the performance a little bit.
131 * 175 *
132 * THE NEW IMAGE WILL NOT BE PAINTED UNTIL YOU CALL FLUSH. 176 * The new image will not be painted until you call Flush().
dmichael (off chromium) 2011/07/01 16:45:00 Maybe put <strong>Note:</strong> here like you hav
jond 2011/07/01 20:31:23 Done.
133 * 177 *
134 * After this call, you should take care to release your references to the 178 * Release your references to the image after a call to this function.
dmichael (off chromium) 2011/07/01 16:45:00 I liked the previous wording better here.
jond 2011/07/01 20:31:23 Done On 2011/07/01 16:45:00, dmichael1 wrote:
135 * image. If you paint to the image after ReplaceContents, there is the 179 * image. If you paint to the image after ReplaceContents(), there is the
136 * possibility of significant painting artifacts because the page might use 180 * possibility of significant painting artifacts because the page might use
137 * partially-rendered data when copying out of the backing store. 181 * partially-rendered data when copying out of the backing store.
138 * 182 *
139 * In the case of an animation, you will want to allocate a new image for the 183 * In the case of an animation, you will want to allocate a new image for the
140 * next frame. It is best if you wait until the flush callback has executed 184 * next frame. It is best if you wait until the flush callback has executed
141 * before allocating this bitmap. This gives the browser the option of 185 * before allocating this bitmap. This gives the browser the option of
142 * caching the previous backing store and handing it back to you (assuming 186 * caching the previous backing store and handing it back to you (assuming
143 * the sizes match). In the optimal case, this means no bitmaps are allocated 187 * the sizes match). In the optimal case, this means no bitmaps are allocated
144 * during the animation, and the backing store and "front buffer" (which the 188 * during the animation, and the backing store and "front buffer" (which the
145 * plugin is painting into) are just being swapped back and forth. 189 * plugin is painting into) are just being swapped back and forth.
190 *
191 * @param[in] graphics_2d The 2D Graphics resource.
192 * @param[in] image The <code>ImageData</code> to be painted.
146 */ 193 */
147 void (*ReplaceContents)(PP_Resource graphics_2d, PP_Resource image_data); 194 void (*ReplaceContents)(PP_Resource graphics_2d, PP_Resource image_data);
148 195
149 /** 196 /**
150 * Flushes any enqueued paint, scroll, and replace commands for the backing 197 * Flush() flushes any enqueued paint, scroll, and replace commands for the
dmichael (off chromium) 2011/07/01 16:45:00 for->to
jond 2011/07/01 20:31:23 Done.
151 * store. This actually executes the updates, and causes a repaint of the 198 * backing store. This function actually executes the updates, and causes a
152 * webpage, assuming this graphics context is bound to a plugin instance. This 199 * repaint of the webpage, assuming this graphics context is bound to a module
153 * can run in two modes: 200 * instance.
154 * 201 *
155 * - In synchronous mode, you specify NULL for the callback and the callback 202 * Flush() runs in asynchronous mode. Specify a callback function and the
156 * data. This function will block the calling thread until the image has 203 * argument for that callback function. The callback function will be
157 * been painted to the screen. It is not legal to block the main thread of 204 * executed on the calling thread when the image has been painted to the
158 * the plugin, you can use synchronous mode only from background threads. 205 * screen. While you are waiting for a flush callback, additional calls to
159 * 206 * Flush() will fail.
dmichael (off chromium) 2011/07/01 16:45:00 Could you maybe leave a TODO (outside the doxygen
jond 2011/07/01 20:31:23 Done.
jond 2011/07/01 20:31:23 Done.
160 * - In asynchronous mode, you specify a callback function and the argument
161 * for that callback function. The callback function will be executed on
162 * the calling thread when the image has been painted to the screen. While
163 * you are waiting for a Flush callback, additional calls to Flush will
164 * fail.
165 * 207 *
166 * Because the callback is executed (or thread unblocked) only when the 208 * Because the callback is executed (or thread unblocked) only when the
167 * plugin's current state is actually on the screen, this function provides a 209 * module's current state is actually on the screen, this function provides a
dmichael (off chromium) 2011/07/01 16:45:00 module->module instance
jond 2011/07/01 20:31:23 Done.
168 * way to rate limit animations. By waiting until the image is on the screen 210 * way to rate limit animations. By waiting until the image is on the screen
169 * before painting the next frame, you can ensure you're not generating 211 * before painting the next frame, you can ensure you're not generating
170 * updates faster than the screen can be updated. 212 * updates faster than the screen can be updated.
171 * 213 *
172 * <dl> 214 * <strong>Unbound contexts</strong>
173 * <dt>Unbound contexts</dt> 215 * If the context is not bound to a module instance, you will
174 * <dd> 216 * still get a callback. The callback will execute after Flush() returns
175 * If the context is not bound to a plugin instance, you will 217 * to avoid reentrancy. The callback will not wait until anything is
176 * still get a callback. It will execute after the Flush function returns 218 * painted to the screen because there will be nothing on the screen. The
177 * to avoid reentrancy. Of course, it will not wait until anything is 219 * timing of this callback is not guaranteed and may be deprioritized by
178 * painted to the screen because there will be nothing on the screen. The 220 * the browser because it is not affecting the user experience.
179 * timing of this callback is not guaranteed and may be deprioritized by
180 * the browser because it is not affecting the user experience.
181 * </dd>
182 * 221 *
183 * <dt>Off-screen instances</dt> 222 * <strong>Off-screen instances</strong>
184 * <dd> 223 * If the context is bound to an instance that is currently not visible (for
185 * If the context is bound to an instance that is 224 * example, scrolled out of view) it will behave like the "unbound context"
186 * currently not visible (for example, scrolled out of view) it will behave 225 * case.
187 * like the "unbound context" case.
188 * </dd>
189 * 226 *
190 * <dt>Detaching a context</dt> 227 * <strong>Detaching a context</strong>
191 * <dd> 228 * If you detach a context from a module instance, any pending flush
192 * If you detach a context from a plugin instance, any 229 * callbacks will be converted into the "unbound context" case.
193 * pending flush callbacks will be converted into the "unbound context"
194 * case.
195 * </dd>
196 * 230 *
197 * <dt>Released contexts</dt> 231 * <strong>Released contexts</strong>
198 * <dd> 232 * A callback may or may not get called even if you have released all
199 * A callback may or may not still get called even if you have released all 233 * of your references to the context. This scenario can occur if there are
200 * of your references to the context. This can occur if there are internal 234 * internal references to the context suggesting it has not been internally
201 * references to the context that means it has not been internally 235 * destroyed (for example, if it is still bound to an instance) or due to
202 * destroyed (for example, if it is still bound to an instance) or due to 236 * other implementation details. As a result, you should be careful to
203 * other implementation details. As a result, you should be careful to 237 * check that flush callbacks are for the context you expect and that
204 * check that flush callbacks are for the context you expect and that 238 * you're capable of handling callbacks for unreferenced contexts.
205 * you're capable of handling callbacks for context that you may have
206 * released your reference to.
207 * </dd>
208 * 239 *
209 * <dt>Shutdown</dt> 240 * <strong>Shutdown</strong>
210 * <dd> 241 * If a module instance is removed when a flush is pending, the
211 * If a plugin instance is removed when a Flush is pending, the 242 * callback will not be executed.
212 * callback will not be executed.
213 * </dd>
214 * </dl>
215 * 243 *
216 * Returns PP_OK on success, PP_Error_BadResource if the graphics context is 244 * @param[in] graphics_2d The 2D Graphics resource.
217 * invalid, PP_Error_BadArgument if the callback is null and Flush is being 245 * @param[in] callback A <code>CompletionCallback</code> to be called when
218 * called from the main thread of the plugin, or PP_Error_InProgress if a 246 * the image has been painted on the screen.
219 * Flush is already pending that has not issued its callback yet. In the 247 *
220 * failure case, nothing will be updated and no callback will be scheduled. 248 * @return Returns <code>PP_OK</code> on succes or
249 * <code>PP_Error_BadResource</code> the graphics context is invalid,
dmichael (off chromium) 2011/07/01 16:45:00 missing 'if' between '</code>' and 'the'
jond 2011/07/01 20:31:23 Done.
250 * <code>PP_Error_BadArgument</code> if the callback is null and flush is
251 * being called from the main thread of the module, or
252 * <code>PP_Error_InProgress</code> if a flush is already pending that has
253 * not issued its callback yet. In the failure case, nothing will be updated
254 * and no callback will be scheduled.
221 */ 255 */
222 /* TODO(darin): We should ensure that the completion callback always runs, so 256
257 /*
258 * TODO(darin): We should ensure that the completion callback always runs, so
223 * that it is easier for consumers to manage memory referenced by a callback. 259 * that it is easier for consumers to manage memory referenced by a callback.
224 */ 260 */
225 int32_t (*Flush)(PP_Resource graphics_2d, 261 int32_t (*Flush)(PP_Resource graphics_2d,
226 struct PP_CompletionCallback callback); 262 struct PP_CompletionCallback callback);
227 263
228 }; 264 };
229 265
230 /** 266 /**
231 * @} 267 * @}
232 */ 268 */
233 #endif /* PPAPI_C_PPB_GRAPHICS_2D_H_ */ 269 #endif /* PPAPI_C_PPB_GRAPHICS_2D_H_ */
234 270
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698