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
3 // found in the LICENSE file.
7 #include "ppapi/cpp/completion_callback.h"
8 #include "ppapi/cpp/graphics_2d.h"
9 #include "ppapi/cpp/image_data.h"
10 #include "ppapi/cpp/instance.h"
11 #include "ppapi/cpp/module.h"
12 #include "ppapi/cpp/rect.h"
13 #include "ppapi/cpp/size.h"
14 #include "ppapi/cpp/trusted/browser_font_trusted.h"
16 static void DummyCompletionCallback(void* /*user_data*/, int32_t /*result*/) {
19 class MyInstance
: public pp::Instance
{
21 MyInstance(PP_Instance instance
)
22 : pp::Instance(instance
) {
25 virtual void DidChangeView(const pp::Rect
& position
, const pp::Rect
& clip
) {
26 if (position
.size() == last_size_
)
28 last_size_
= position
.size();
30 pp::ImageData
image(this, PP_IMAGEDATAFORMAT_BGRA_PREMUL
, last_size_
, true);
31 pp::Graphics2D
graphics(this, last_size_
, false);
32 BindGraphics(graphics
);
34 pp::BrowserFontDescription desc
;
35 desc
.set_family(PP_BROWSERFONT_TRUSTED_FAMILY_SANSSERIF
);
37 pp::BrowserFont_Trusted
font(this, desc
);
39 // Draw some large, alpha blended text, including Arabic shaping.
40 pp::Rect
text_clip(position
.size()); // Use entire bounds for clip.
41 font
.DrawTextAt(&image
,
42 pp::BrowserFontTextRun(
43 "\xD9\x85\xD8\xB1\xD8\xAD\xD8\xA8\xD8\xA7\xE2\x80\x8E", true, true),
44 pp::Point(20, 100), 0x80008000, clip
, false);
46 // Draw the default font names and sizes.
49 pp::BrowserFontDescription desc
;
50 pp::BrowserFont_Trusted
default_font(this, desc
);
51 default_font
.DrawSimpleText(
52 &image
, DescribeFont(default_font
, "Default font"),
53 pp::Point(10, y
), 0xFF000000);
57 pp::BrowserFontDescription desc
;
58 desc
.set_family(PP_BROWSERFONT_TRUSTED_FAMILY_SERIF
);
59 pp::BrowserFont_Trusted
serif_font(this, desc
);
60 serif_font
.DrawSimpleText(
61 &image
, DescribeFont(serif_font
, "Serif font"),
62 pp::Point(10, y
), 0xFF000000);
66 pp::BrowserFontDescription desc
;
67 desc
.set_family(PP_BROWSERFONT_TRUSTED_FAMILY_SANSSERIF
);
68 pp::BrowserFont_Trusted
sans_serif_font(this, desc
);
69 sans_serif_font
.DrawSimpleText(
70 &image
, DescribeFont(sans_serif_font
, "Sans serif font"),
71 pp::Point(10, y
), 0xFF000000);
75 pp::BrowserFontDescription desc
;
76 desc
.set_family(PP_BROWSERFONT_TRUSTED_FAMILY_MONOSPACE
);
77 pp::BrowserFont_Trusted
monospace_font(this, desc
);
78 monospace_font
.DrawSimpleText(
79 &image
, DescribeFont(monospace_font
, "Monospace font"),
80 pp::Point(10, y
), 0xFF000000);
84 graphics
.PaintImageData(image
, pp::Point(0, 0));
85 graphics
.Flush(pp::CompletionCallback(&DummyCompletionCallback
, NULL
));
89 // Returns a string describing the given font, using the given title.
90 std::string
DescribeFont(const pp::BrowserFont_Trusted
& font
,
92 pp::BrowserFontDescription desc
;
93 PP_BrowserFont_Trusted_Metrics metrics
;
94 font
.Describe(&desc
, &metrics
);
97 sprintf(buf
, "%s = %s %dpt",
98 title
, desc
.face().AsString().c_str(), desc
.size());
99 return std::string(buf
);
105 class MyModule
: public pp::Module
{
107 virtual pp::Instance
* CreateInstance(PP_Instance instance
) {
108 return new MyInstance(instance
);
114 // Factory function for your specialization of the Module object.
115 Module
* CreateModule() {
116 return new MyModule();