Home | History | Annotate | Download | only in mac
      1 // Copyright (c) 2012 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.
      4 
      5 #ifndef CONTENT_COMMON_MAC_FONT_LOADER_H_
      6 #define CONTENT_COMMON_MAC_FONT_LOADER_H_
      7 
      8 #include <ApplicationServices/ApplicationServices.h>
      9 
     10 #include "base/memory/shared_memory.h"
     11 #include "content/common/content_export.h"
     12 
     13 #ifdef __OBJC__
     14 @class NSFont;
     15 #else
     16 class NSFont;
     17 #endif
     18 
     19 struct FontDescriptor;
     20 
     21 // Provides functionality to transmit fonts over IPC.
     22 //
     23 // Note about font formats: .dfont (datafork suitcase) fonts are currently not
     24 // supported by this code since CGFontCreateWithDataProvider() can't handle them
     25 // directly.
     26 
     27 class FontLoader {
     28  public:
     29   // This structure holds the result of LoadFont(). This structure is passed to
     30   // LoadFont(), which should run on the file thread, then it is passed to a
     31   // task which sends the result to the originating renderer.
     32   struct Result {
     33     uint32 font_data_size;
     34     base::SharedMemory font_data;
     35     uint32 font_id;
     36   };
     37   // Load a font specified by |font| into a shared memory buffer suitable for
     38   // sending over IPC.
     39   //
     40   // On return:
     41   //  |result->font_data| - shared memory buffer containing the raw data for
     42   // the font file. The buffer is only valid when both |result->font_data_size|
     43   // and |result->font_id| are not zero.
     44   //  |result->font_data_size| - size of data contained in |result->font_data|.
     45   // This value is zero on failure.
     46   //  |result->font_id| - unique identifier for the on-disk file we load for
     47   // the font. This value is zero on failure.
     48   CONTENT_EXPORT
     49   static void LoadFont(const FontDescriptor& font, FontLoader::Result* result);
     50 
     51   // Given a shared memory buffer containing the raw data for a font file, load
     52   // the font and return a CGFontRef.
     53   //
     54   // |data| - A shared memory handle pointing to the raw data from a font file.
     55   // |data_size| - Size of |data|.
     56   //
     57   // On return:
     58   //  returns true on success, false on failure.
     59   //  |out| - A CGFontRef corresponding to the designated font.
     60   //  The caller is responsible for releasing this value via CGFontRelease()
     61   //  when done.
     62   CONTENT_EXPORT
     63   static bool CGFontRefFromBuffer(base::SharedMemoryHandle font_data,
     64                                   uint32 font_data_size,
     65                                   CGFontRef* out);
     66 };
     67 
     68 #endif // CONTENT_COMMON_MAC_FONT_LOADER_H_
     69