Chromium Code Reviews| Index: ppapi/shared_impl/font_impl.h |
| =================================================================== |
| --- ppapi/shared_impl/font_impl.h (revision 0) |
| +++ ppapi/shared_impl/font_impl.h (revision 0) |
| @@ -0,0 +1,123 @@ |
| +// Copyright (c) 2011 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_SHARED_IMPL_FONT_IMPL_H_ |
| +#define PPAPI_SHARED_IMPL_FONT_IMPL_H_ |
| +#pragma once |
| + |
| +#include <string> |
| + |
| +#include "base/basictypes.h" |
| +#include "base/scoped_ptr.h" |
| +#include "ppapi/c/pp_bool.h" |
| +#include "ppapi/c/pp_stdint.h" |
| + |
| +struct PP_FontDescription_Dev; |
| +struct PP_FontMetrics_Dev; |
| +struct PP_Point; |
| +struct PP_Rect; |
| + |
| +namespace base { |
| +class WaitableEvent; |
| +} |
| + |
| +namespace skia { |
| +class PlatformCanvas; |
| +} // namespace skia |
| + |
| +namespace WebKit { |
| +class WebFont; |
| +} // namespace WebKit |
| + |
| +namespace pp { |
| +namespace shared_impl { |
| + |
| +// This class is a bit subtle. It's designed to be used in two contexts: |
| +// - In the renderer in the same thread as WebKit. |
| +// - On a special WebKit thread in the plugin process. |
| +// As a result, the actual implementation is provided in terms of functions |
| +// prefixed by "Do" that don't depend on any global Pepper state, and that |
| +// supply the return values via output parameters (for the other-thread case). |
| +// Each implementation is then in charge of setting up the call appropriately. |
| +// |
| +// The Do* functions take an optional waitable event. If provided, this |
| +// event will be signaled when the function completes. This allows the |
| +// cross-thread implementation to know when the function completes. |
| +class FontImpl { |
| + public: |
| + // C++ version of PP_TextRun_Dev. Since the Do* functions will be called on |
| + // an alternate thread in the proxy, and since there are different methods |
| + // of converting PP_Var -> strings in the plugin and the proxy, we can't |
| + // use PP_Vars in the Do* funcitons below. |
|
piman
2011/05/09 20:13:44
funcitons->functions
|
| + struct TextRun { |
| + std::string text; |
| + bool rtl; |
| + bool override_direction; |
| + }; |
| + |
| + FontImpl(); |
| + virtual ~FontImpl(); |
| + |
| + // Validates the parameters in thee description. Can be called on any thread. |
| + static bool IsPPFontDescriptionValid(const PP_FontDescription_Dev& desc); |
| + |
| + protected: |
| + // DoDrawText takes too many arguments to be used with base::Bind, so we |
| + // use this struct to hold them. |
| + struct DrawTextParams { |
| + DrawTextParams(skia::PlatformCanvas* destination_arg, |
| + const TextRun& text_arg, |
| + const PP_Point* position_arg, |
|
piman
2011/05/09 20:13:44
Can we make position a const & as well, for consis
brettw
2011/05/09 21:00:35
My internal functions match the PPAPI functions, w
|
| + uint32_t color_arg, |
| + const PP_Rect* clip_arg, |
| + bool image_data_is_opaque_arg); |
| + ~DrawTextParams(); |
| + |
| + skia::PlatformCanvas* destination; |
| + const TextRun& text; |
| + const PP_Point* position; |
| + uint32_t color; |
| + const PP_Rect* clip; |
| + bool image_data_is_opaque; |
| + }; |
| + |
| + // The face name from the description is given in desc_face so we can avoid |
| + // a dependency on var conversion. See class description for waitable_event |
| + // documentation. |
| + void DoCreate(base::WaitableEvent* event, |
| + const PP_FontDescription_Dev& desc, |
| + const std::string& desc_face); |
| + |
| + // The face name in the description is not filled in to avoid a dependency |
| + // on creating vars. Instead, the face name is placed into the given string. |
| + // See class description for waitable_event documentation. |
| + void DoDescribe(base::WaitableEvent* event, |
| + PP_FontDescription_Dev* description, |
| + std::string* face, |
| + PP_FontMetrics_Dev* metrics, |
| + PP_Bool* result); |
| + void DoDrawTextAt(base::WaitableEvent* event, |
| + const DrawTextParams& params); |
| + void DoMeasureText(base::WaitableEvent* event, |
| + const TextRun& text, int32_t* result); |
| + void DoCharacterOffsetForPixel(base::WaitableEvent* event, |
| + const TextRun& text, |
| + int32_t pixel_position, |
| + uint32_t* result); |
| + void DoPixelOffsetForCharacter(base::WaitableEvent* event, |
| + const TextRun& text, |
| + uint32_t char_offset, |
| + int32_t* result); |
| + |
| + // Access only on the WebKit thread. |
| + scoped_ptr<WebKit::WebFont> font_; |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(FontImpl); |
| +}; |
| + |
| +} // namespace shared_impl |
| +} // namespace pp |
| + |
| +#endif // PPAPI_SHARED_IMPL_FONT_IMPL_H_ |
| Property changes on: ppapi/shared_impl/font_impl.h |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |