Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(258)

Side by Side Diff: src/core/SkFont.cpp

Issue 185293018: WIP -- SkFont (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« include/core/SkFont.h ('K') | « include/core/SkFont.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 * Copyright 2014 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include "SkFont.h"
9 #include "SkTypeface.h"
10 #include "SkUtils.h"
11
12 static SkTypeface* ref_or_default(SkTypeface* face) {
13 return face ? SkRef(face) : SkTypeface::RefDefault();
14 }
15
16 SkFont::SkFont(SkTypeface* face, SkScalar size, SkScalar scaleX, SkScalar skewX, uint32_t flags)
17 : fTypeface(ref_or_default(face))
18 , fSize(size)
19 , fScaleX(scaleX)
20 , fSkewX(skewX)
21 , fFlags(flags)
22 {
23 SkASSERT(size > 0);
24 SkASSERT(scaleX > 0);
25 SkASSERT(SkScalarIsFinite(skewX));
26 SkASSERT(0 == (flags & ~kAllFlags));
27 }
28
29 SkFont* SkFont::Create(SkTypeface* face, SkScalar size, SkScalar scaleX, SkScala r skewX,
30 uint32_t flags) {
31 if (!(size > 0)) {
32 size = 12;
33 }
34 if (!(scaleX > 0)) {
35 scaleX = 1;
36 }
37 if (!SkScalarIsFinite(skewX)) {
38 skewX = 0;
39 }
40 flags &= kAllFlags;
41 return SkNEW_ARGS(SkFont, (face, size, scaleX, skewX, flags));
42 }
43
44 SkFont* SkFont::Create(SkTypeface* face, SkScalar size, uint32_t flags) {
45 return SkFont::Create(face, size, 1, 0, flags);
46 }
47
48 SkFont* SkFont::Create(const SkFont& src, SkScalar newSize) {
49 return SkFont::Create(src.getTypeface(), newSize, src.getScaleX(), src.getSk ewX(),
50 src.getFlags());
51 }
52
53 //////////////////////////////////////////////////////////////////////////////// ///////////////////
54
55 SkFont::~SkFont() {
56 SkSafeUnref(fTypeface);
57 }
58
59 int SkFont::textToGlyphs(const void* text, size_t byteLength, SkTextEncoding enc oding,
60 uint16_t glyphs[], int maxGlyphCount) const {
61 if (0 == byteLength) {
62 return 0;
63 }
64
65 SkASSERT(text);
66
67 int count;
68 switch (encoding) {
69 case kUTF8_SkTextEncoding:
70 count = SkUTF8_CountUnichars((const char*)text, byteLength);
71 case kUTF16_SkTextEncoding:
72 count = SkUTF16_CountUnichars((const uint16_t*)text, SkToInt(byteLen gth >> 1));
73 case kUTF32_SkTextEncoding:
74 count = SkToInt(byteLength >> 2);
75 case kGlyphID_SkTextEncoding:
76 count = SkToInt(byteLength >> 1);
77 }
78 if (NULL == glyphs) {
79 return count;
80 }
81
82 if (kGlyphID_SkTextEncoding == encoding) {
83 memcpy(glyphs, text, count << 1);
84 return count;
85 }
86
87 // TODO: unify/eliminate SkTypeface::Encoding with SkTextEncoding
88 SkTypeface::Encoding typeface_encoding;
89 switch (encoding) {
90 case kUTF8_SkTextEncoding:
91 typeface_encoding = SkTypeface::kUTF8_Encoding;
92 break;
93 case kUTF16_SkTextEncoding:
94 typeface_encoding = SkTypeface::kUTF16_Encoding;
95 break;
96 case kUTF32_SkTextEncoding:
97 typeface_encoding = SkTypeface::kUTF32_Encoding;
98 break;
99 case kGlyphID_SkTextEncoding:
100 SkASSERT(0); // can't get here
101 }
102
103 (void)fTypeface->charsToGlyphs(text, typeface_encoding, glyphs, count);
104 return count;
105 }
106
107 SkScalar SkFont::measureText(const void* text, size_t byteLength, SkTextEncoding encoding) const {
108 // TODO: need access to the cache
109 return -1;
110 }
111
OLDNEW
« include/core/SkFont.h ('K') | « include/core/SkFont.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698