diff options
author | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-14 17:08:00 +0000 |
---|---|---|
committer | brettw@chromium.org <brettw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-11-14 17:08:00 +0000 |
commit | fb35dcfafd929772b185516173a92c619aa97421 (patch) | |
tree | cc7260344ab7f028274c312d646685adcebd95b5 /ppapi/proxy/ppb_flash_proxy.cc | |
parent | da441db001417a34e7378a95481d237a637488a7 (diff) | |
download | chromium_src-fb35dcfafd929772b185516173a92c619aa97421.zip chromium_src-fb35dcfafd929772b185516173a92c619aa97421.tar.gz chromium_src-fb35dcfafd929772b185516173a92c619aa97421.tar.bz2 |
Implement DrawGlyphs and refactor the FontDescription serialization such
that it can be reused for this code.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@66081 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/proxy/ppb_flash_proxy.cc')
-rw-r--r-- | ppapi/proxy/ppb_flash_proxy.cc | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/ppapi/proxy/ppb_flash_proxy.cc b/ppapi/proxy/ppb_flash_proxy.cc index 2a6e237..1f9b297 100644 --- a/ppapi/proxy/ppb_flash_proxy.cc +++ b/ppapi/proxy/ppb_flash_proxy.cc @@ -7,6 +7,7 @@ #include "base/logging.h" #include "build/build_config.h" #include "ppapi/c/dev/pp_file_info_dev.h" +#include "ppapi/c/dev/ppb_font_dev.h" #include "ppapi/c/pp_completion_callback.h" #include "ppapi/c/pp_errors.h" #include "ppapi/c/pp_resource.h" @@ -62,13 +63,35 @@ bool DrawGlyphs(PP_Resource pp_image_data, uint32_t glyph_count, uint16_t glyph_indices[], PP_Point glyph_advances[]) { - return false; // TODO(brettw): implement this. + Dispatcher* dispatcher = PluginDispatcher::Get(); + + PPBFlash_DrawGlyphs_Params params; + params.pp_image_data = pp_image_data; + params.font_desc.SetFromPPFontDescription(dispatcher, *font_desc, true); + params.color = color; + params.position = position; + params.clip = clip; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) + params.transformation[i][j] = transformation[i][j]; + } + + params.glyph_indices.insert(params.glyph_indices.begin(), + &glyph_indices[0], + &glyph_indices[glyph_count]); + params.glyph_advances.insert(params.glyph_advances.begin(), + &glyph_advances[0], + &glyph_advances[glyph_count]); + + dispatcher->Send(new PpapiHostMsg_PPBFlash_DrawGlyphs( + INTERFACE_ID_PPB_FLASH, params)); + return true; } PP_Var GetProxyForURL(PP_Module pp_module, const char* url) { ReceiveSerializedVarReturnValue result; PluginDispatcher::Get()->Send(new PpapiHostMsg_PPBFlash_GetProxyForURL( - INTERFACE_ID_PPB_FLASH, pp_module, url, &result)); + INTERFACE_ID_PPB_FLASH, pp_module, url, &result)); return result.Return(PluginDispatcher::Get()); } @@ -214,7 +237,20 @@ void PPB_Flash_Proxy::OnMsgSetInstanceAlwaysOnTop( void PPB_Flash_Proxy::OnMsgDrawGlyphs( const pp::proxy::PPBFlash_DrawGlyphs_Params& params) { - // TODO(brettw) implement this. + PP_FontDescription_Dev font_desc; + params.font_desc.SetToPPFontDescription(dispatcher(), &font_desc, false); + + if (params.glyph_indices.size() != params.glyph_advances.size() || + params.glyph_indices.empty()) + return; + + ppb_flash_target()->DrawGlyphs( + params.pp_image_data, &font_desc, params.color, + params.position, params.clip, + const_cast<float(*)[3]>(params.transformation), + static_cast<uint32_t>(params.glyph_indices.size()), + const_cast<uint16_t*>(¶ms.glyph_indices[0]), + const_cast<PP_Point*>(¶ms.glyph_advances[0])); } void PPB_Flash_Proxy::OnMsgGetProxyForURL(PP_Module module, |