15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef PPAPI_CPP_DEV_FONT_DEV_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define PPAPI_CPP_DEV_FONT_DEV_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/dev/ppb_font_dev.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/resource.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/cpp/var.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PP_FontDescription_Dev;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace pp {
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageData;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class InstanceHandle;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Point;
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Rect;
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// FontDescription_Dev ---------------------------------------------------------
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FontDescription_Dev {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FontDescription_Dev();
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FontDescription_Dev(const FontDescription_Dev& other);
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~FontDescription_Dev();
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  FontDescription_Dev& operator=(const FontDescription_Dev& other);
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PP_FontDescription_Dev& pp_font_description() const {
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return pp_font_description_;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Var face() const { return face_; }
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_face(const Var& face) {
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    face_ = face;
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pp_font_description_.face = face_.pp_var();
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_FontFamily_Dev family() const { return pp_font_description_.family; }
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_family(PP_FontFamily_Dev f) { pp_font_description_.family = f; }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t size() const { return pp_font_description_.size; }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_size(uint32_t s) { pp_font_description_.size = s; }
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_FontWeight_Dev weight() const { return pp_font_description_.weight; }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_weight(PP_FontWeight_Dev w) { pp_font_description_.weight = w; }
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool italic() const { return PP_ToBool(pp_font_description_.italic); }
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_italic(bool i) { pp_font_description_.italic = PP_FromBool(i); }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool small_caps() const {
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return PP_ToBool(pp_font_description_.small_caps);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_small_caps(bool s) {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    pp_font_description_.small_caps = PP_FromBool(s);
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int letter_spacing() const { return pp_font_description_.letter_spacing; }
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_letter_spacing(int s) { pp_font_description_.letter_spacing = s; }
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int word_spacing() const { return pp_font_description_.word_spacing; }
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  void set_word_spacing(int w) { pp_font_description_.word_spacing = w; }
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  friend class Font_Dev;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Var face_;  // Manages memory for pp_font_description_.face
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_FontDescription_Dev pp_font_description_;
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TextRun_Dev -----------------------------------------------------------------
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TextRun_Dev {
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TextRun_Dev();
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TextRun_Dev(const std::string& text,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              bool rtl = false,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)              bool override_direction = false);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TextRun_Dev(const TextRun_Dev& other);
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ~TextRun_Dev();
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TextRun_Dev& operator=(const TextRun_Dev& other);
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const PP_TextRun_Dev& pp_text_run() const {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return pp_text_run_;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Var text_;  // Manages memory for the reference in pp_text_run_.
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PP_TextRun_Dev pp_text_run_;
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Font ------------------------------------------------------------------------
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Provides access to system fonts.
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Font_Dev : public Resource {
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Creates an is_null() Font object.
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Font_Dev();
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  explicit Font_Dev(PP_Resource resource);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Font_Dev(const InstanceHandle& instance,
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)           const FontDescription_Dev& description);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Font_Dev(const Font_Dev& other);
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Font_Dev& operator=(const Font_Dev& other);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // PPB_Font methods:
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static Var GetFontFamilies(const InstanceHandle& instance);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool Describe(FontDescription_Dev* description,
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                PP_FontMetrics_Dev* metrics) const;
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DrawTextAt(ImageData* dest,
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  const TextRun_Dev& text,
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  const Point& position,
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  uint32_t color,
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  const Rect& clip,
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                  bool image_data_is_opaque) const;
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t MeasureText(const TextRun_Dev& text) const;
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  uint32_t CharacterOffsetForPixel(const TextRun_Dev& text,
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   int32_t pixel_position) const;
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t PixelOffsetForCharacter(const TextRun_Dev& text,
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  uint32_t char_offset) const;
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Convenience function that assumes a left-to-right string with no clipping.
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool DrawSimpleText(ImageData* dest,
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const std::string& text,
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      const Point& position,
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      uint32_t color,
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                      bool image_data_is_opaque = false) const;
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Convenience function that assumes a left-to-right string.
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int32_t MeasureSimpleText(const std::string& text) const;
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace pp
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // PPAPI_CPP_DEV_FONT_DEV_H_
142