| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 #include "SkAdvancedTypefaceMetrics.h" | 9 #include "SkAdvancedTypefaceMetrics.h" |
| 10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
| (...skipping 1652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1663 return 0; | 1663 return 0; |
| 1664 } | 1664 } |
| 1665 } | 1665 } |
| 1666 | 1666 |
| 1667 return size; | 1667 return size; |
| 1668 } | 1668 } |
| 1669 | 1669 |
| 1670 /////////////////////////////////////////////////////////////////////////////// | 1670 /////////////////////////////////////////////////////////////////////////////// |
| 1671 /////////////////////////////////////////////////////////////////////////////// | 1671 /////////////////////////////////////////////////////////////////////////////// |
| 1672 | 1672 |
| 1673 /* Export this so that other parts of our FonttHost port can make use of our | 1673 /*static*/ bool SkTypeface_FreeType::ScanFont( |
| 1674 ability to extract the name+style from a stream, using FreeType's api. | 1674 SkStream* stream, int ttcIndex, SkString* name, SkTypeface::Style* style, bo
ol* isFixedPitch) |
| 1675 */ | 1675 { |
| 1676 bool find_name_and_attributes(SkStream* stream, SkString* name, | |
| 1677 SkTypeface::Style* style, bool* isFixedPitch) { | |
| 1678 FT_Library library; | 1676 FT_Library library; |
| 1679 if (FT_Init_FreeType(&library)) { | 1677 if (FT_Init_FreeType(&library)) { |
| 1680 return false; | 1678 return false; |
| 1681 } | 1679 } |
| 1682 | 1680 |
| 1683 FT_Open_Args args; | 1681 FT_Open_Args args; |
| 1684 memset(&args, 0, sizeof(args)); | 1682 memset(&args, 0, sizeof(args)); |
| 1685 | 1683 |
| 1686 const void* memoryBase = stream->getMemoryBase(); | 1684 const void* memoryBase = stream->getMemoryBase(); |
| 1687 FT_StreamRec streamRec; | 1685 FT_StreamRec streamRec; |
| 1688 | 1686 |
| 1689 if (NULL != memoryBase) { | 1687 if (NULL != memoryBase) { |
| 1690 args.flags = FT_OPEN_MEMORY; | 1688 args.flags = FT_OPEN_MEMORY; |
| 1691 args.memory_base = (const FT_Byte*)memoryBase; | 1689 args.memory_base = (const FT_Byte*)memoryBase; |
| 1692 args.memory_size = stream->getLength(); | 1690 args.memory_size = stream->getLength(); |
| 1693 } else { | 1691 } else { |
| 1694 memset(&streamRec, 0, sizeof(streamRec)); | 1692 memset(&streamRec, 0, sizeof(streamRec)); |
| 1695 streamRec.size = stream->getLength(); | 1693 streamRec.size = stream->getLength(); |
| 1696 streamRec.descriptor.pointer = stream; | 1694 streamRec.descriptor.pointer = stream; |
| 1697 streamRec.read = sk_stream_read; | 1695 streamRec.read = sk_stream_read; |
| 1698 streamRec.close = sk_stream_close; | 1696 streamRec.close = sk_stream_close; |
| 1699 | 1697 |
| 1700 args.flags = FT_OPEN_STREAM; | 1698 args.flags = FT_OPEN_STREAM; |
| 1701 args.stream = &streamRec; | 1699 args.stream = &streamRec; |
| 1702 } | 1700 } |
| 1703 | 1701 |
| 1704 FT_Face face; | 1702 FT_Face face; |
| 1705 if (FT_Open_Face(library, &args, 0, &face)) { | 1703 if (FT_Open_Face(library, &args, ttcIndex, &face)) { |
| 1706 FT_Done_FreeType(library); | 1704 FT_Done_FreeType(library); |
| 1707 return false; | 1705 return false; |
| 1708 } | 1706 } |
| 1709 | 1707 |
| 1710 int tempStyle = SkTypeface::kNormal; | 1708 int tempStyle = SkTypeface::kNormal; |
| 1711 if (face->style_flags & FT_STYLE_FLAG_BOLD) { | 1709 if (face->style_flags & FT_STYLE_FLAG_BOLD) { |
| 1712 tempStyle |= SkTypeface::kBold; | 1710 tempStyle |= SkTypeface::kBold; |
| 1713 } | 1711 } |
| 1714 if (face->style_flags & FT_STYLE_FLAG_ITALIC) { | 1712 if (face->style_flags & FT_STYLE_FLAG_ITALIC) { |
| 1715 tempStyle |= SkTypeface::kItalic; | 1713 tempStyle |= SkTypeface::kItalic; |
| 1716 } | 1714 } |
| 1717 | 1715 |
| 1718 if (name) { | 1716 if (name) { |
| 1719 name->set(face->family_name); | 1717 name->set(face->family_name); |
| 1720 } | 1718 } |
| 1721 if (style) { | 1719 if (style) { |
| 1722 *style = (SkTypeface::Style) tempStyle; | 1720 *style = (SkTypeface::Style) tempStyle; |
| 1723 } | 1721 } |
| 1724 if (isFixedPitch) { | 1722 if (isFixedPitch) { |
| 1725 *isFixedPitch = FT_IS_FIXED_WIDTH(face); | 1723 *isFixedPitch = FT_IS_FIXED_WIDTH(face); |
| 1726 } | 1724 } |
| 1727 | 1725 |
| 1728 FT_Done_Face(face); | 1726 FT_Done_Face(face); |
| 1729 FT_Done_FreeType(library); | 1727 FT_Done_FreeType(library); |
| 1730 return true; | 1728 return true; |
| 1731 } | 1729 } |
| OLD | NEW |