< prev index next >

src/java.desktop/share/native/libfontmanager/harfbuzz/hb-fallback-shape.cc

Print this page




  11  *
  12  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  13  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  14  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  15  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  16  * DAMAGE.
  17  *
  18  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  19  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  20  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  21  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  22  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  23  *
  24  * Google Author(s): Behdad Esfahbod
  25  */
  26 
  27 #define HB_SHAPER fallback
  28 #include "hb-shaper-impl-private.hh"
  29 
  30 




  31 /*
  32  * shaper face data
  33  */
  34 
  35 struct hb_fallback_shaper_face_data_t {};
  36 
  37 hb_fallback_shaper_face_data_t *
  38 _hb_fallback_shaper_face_data_create (hb_face_t *face HB_UNUSED)
  39 {
  40   return (hb_fallback_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED;
  41 }
  42 
  43 void
  44 _hb_fallback_shaper_face_data_destroy (hb_fallback_shaper_face_data_t *data HB_UNUSED)
  45 {
  46 }
  47 
  48 
  49 /*
  50  * shaper font data


 108    */
 109 
 110   hb_codepoint_t space;
 111   bool has_space = (bool) font->get_nominal_glyph (' ', &space);
 112 
 113   buffer->clear_positions ();
 114 
 115   hb_direction_t direction = buffer->props.direction;
 116   hb_unicode_funcs_t *unicode = buffer->unicode;
 117   unsigned int count = buffer->len;
 118   hb_glyph_info_t *info = buffer->info;
 119   hb_glyph_position_t *pos = buffer->pos;
 120   for (unsigned int i = 0; i < count; i++)
 121   {
 122     if (has_space && unicode->is_default_ignorable (info[i].codepoint)) {
 123       info[i].codepoint = space;
 124       pos[i].x_advance = 0;
 125       pos[i].y_advance = 0;
 126       continue;
 127     }
 128     font->get_nominal_glyph (info[i].codepoint, &info[i].codepoint);
 129     font->get_glyph_advance_for_direction (info[i].codepoint,
 130                                            direction,
 131                                            &pos[i].x_advance,
 132                                            &pos[i].y_advance);
 133     font->subtract_glyph_origin_for_direction (info[i].codepoint,
 134                                                direction,
 135                                                &pos[i].x_offset,
 136                                                &pos[i].y_offset);
 137   }
 138 
 139   if (HB_DIRECTION_IS_BACKWARD (direction))
 140     hb_buffer_reverse (buffer);


 141 
 142   return true;
 143 }


  11  *
  12  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
  13  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
  14  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
  15  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
  16  * DAMAGE.
  17  *
  18  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
  19  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
  20  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  21  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
  22  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  23  *
  24  * Google Author(s): Behdad Esfahbod
  25  */
  26 
  27 #define HB_SHAPER fallback
  28 #include "hb-shaper-impl-private.hh"
  29 
  30 
  31 HB_SHAPER_DATA_ENSURE_DEFINE(fallback, face)
  32 HB_SHAPER_DATA_ENSURE_DEFINE(fallback, font)
  33 
  34 
  35 /*
  36  * shaper face data
  37  */
  38 
  39 struct hb_fallback_shaper_face_data_t {};
  40 
  41 hb_fallback_shaper_face_data_t *
  42 _hb_fallback_shaper_face_data_create (hb_face_t *face HB_UNUSED)
  43 {
  44   return (hb_fallback_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED;
  45 }
  46 
  47 void
  48 _hb_fallback_shaper_face_data_destroy (hb_fallback_shaper_face_data_t *data HB_UNUSED)
  49 {
  50 }
  51 
  52 
  53 /*
  54  * shaper font data


 112    */
 113 
 114   hb_codepoint_t space;
 115   bool has_space = (bool) font->get_nominal_glyph (' ', &space);
 116 
 117   buffer->clear_positions ();
 118 
 119   hb_direction_t direction = buffer->props.direction;
 120   hb_unicode_funcs_t *unicode = buffer->unicode;
 121   unsigned int count = buffer->len;
 122   hb_glyph_info_t *info = buffer->info;
 123   hb_glyph_position_t *pos = buffer->pos;
 124   for (unsigned int i = 0; i < count; i++)
 125   {
 126     if (has_space && unicode->is_default_ignorable (info[i].codepoint)) {
 127       info[i].codepoint = space;
 128       pos[i].x_advance = 0;
 129       pos[i].y_advance = 0;
 130       continue;
 131     }
 132     (void) font->get_nominal_glyph (info[i].codepoint, &info[i].codepoint);
 133     font->get_glyph_advance_for_direction (info[i].codepoint,
 134                                            direction,
 135                                            &pos[i].x_advance,
 136                                            &pos[i].y_advance);
 137     font->subtract_glyph_origin_for_direction (info[i].codepoint,
 138                                                direction,
 139                                                &pos[i].x_offset,
 140                                                &pos[i].y_offset);
 141   }
 142 
 143   if (HB_DIRECTION_IS_BACKWARD (direction))
 144     hb_buffer_reverse (buffer);
 145 
 146   buffer->safe_to_break_all ();
 147 
 148   return true;
 149 }
< prev index next >