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