41
42
43 static void resolveStyle(TypefaceImpl* typeface) {
44 int weight = typeface->fBaseWeight / 100;
45 if (typeface->fSkiaStyle & SkTypeface::kBold) {
46 weight += 3;
47 }
48 if (weight > 9) {
49 weight = 9;
50 }
51 bool italic = (typeface->fSkiaStyle & SkTypeface::kItalic) != 0;
52 typeface->fStyle = FontStyle(weight, italic);
53 }
67 FontStyle(int weight = 4, bool italic = false) {
68 bits = (weight & kWeightMask) | (italic ? kItalicMask : 0);
69 }
137 TypefaceImpl* TypefaceImpl_createFromFamilies(const jlong* families, size_t size) {
138 std::vector<FontFamily *>familyVec;
139 for (size_t i = 0; i < size; i++) {
140 FontFamily* family = reinterpret_cast<FontFamily*>(families[i]);
141 familyVec.push_back(family);
142 }
143 TypefaceImpl* result = new TypefaceImpl;
144 result->fFontCollection = new FontCollection(familyVec);
145 if (size == 0) {
146 ALOGW("createFromFamilies creating empty collection");
147 result->fSkiaStyle = SkTypeface::kNormal;
148 } else {
149 const FontStyle defaultStyle;
150 FontFamily* firstFamily = reinterpret_cast<FontFamily*>(families[0]);
151 MinikinFont* mf = firstFamily->getClosestMatch(defaultStyle).font;
152 if (mf != NULL) {
153 SkTypeface* skTypeface = reinterpret_cast<MinikinFontSkia*>(mf)->GetSkTypeface();
154 TODO
155
156 result->fSkiaStyle = skTypeface->style();
157 } else {
158 result->fSkiaStyle = SkTypeface::kNormal;
159 }
160 }
161 result->fBaseWeight = 400;
162 resolveStyle(result);
163 return result;
164 }