OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/font_service/public/cpp/font_service_thread.h" | 5 #include "components/font_service/public/cpp/font_service_thread.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/files/file.h" | 10 #include "base/files/file.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 : base::Thread(kFontThreadName), | 24 : base::Thread(kFontThreadName), |
25 font_service_info_(font_service.PassInterface()) { | 25 font_service_info_(font_service.PassInterface()) { |
26 base::Thread::Options options; | 26 base::Thread::Options options; |
27 options.message_pump_factory = | 27 options.message_pump_factory = |
28 base::Bind(&mojo::common::MessagePumpMojo::Create); | 28 base::Bind(&mojo::common::MessagePumpMojo::Create); |
29 StartWithOptions(options); | 29 StartWithOptions(options); |
30 } | 30 } |
31 | 31 |
32 bool FontServiceThread::MatchFamilyName( | 32 bool FontServiceThread::MatchFamilyName( |
33 const char family_name[], | 33 const char family_name[], |
34 SkTypeface::Style requested_style, | 34 SkFontStyle requested_style, |
35 SkFontConfigInterface::FontIdentity* out_font_identity, | 35 SkFontConfigInterface::FontIdentity* out_font_identity, |
36 SkString* out_family_name, | 36 SkString* out_family_name, |
37 SkTypeface::Style* out_style) { | 37 SkFontStyle* out_style) { |
38 DCHECK_NE(GetThreadId(), base::PlatformThread::CurrentId()); | 38 DCHECK_NE(GetThreadId(), base::PlatformThread::CurrentId()); |
39 | 39 |
40 bool out_valid = false; | 40 bool out_valid = false; |
41 // This proxies to the other thread, which proxies to mojo. Only on the reply | 41 // This proxies to the other thread, which proxies to mojo. Only on the reply |
42 // from mojo do we return from this. | 42 // from mojo do we return from this. |
43 base::WaitableEvent done_event(false, false); | 43 base::WaitableEvent done_event(false, false); |
44 task_runner()->PostTask( | 44 task_runner()->PostTask( |
45 FROM_HERE, | 45 FROM_HERE, |
46 base::Bind(&FontServiceThread::MatchFamilyNameImpl, this, &done_event, | 46 base::Bind(&FontServiceThread::MatchFamilyNameImpl, this, &done_event, |
47 family_name, requested_style, &out_valid, out_font_identity, | 47 family_name, requested_style, &out_valid, out_font_identity, |
(...skipping 30 matching lines...) Expand all Loading... |
78 return mapped_font_file; | 78 return mapped_font_file; |
79 } | 79 } |
80 | 80 |
81 FontServiceThread::~FontServiceThread() { | 81 FontServiceThread::~FontServiceThread() { |
82 Stop(); | 82 Stop(); |
83 } | 83 } |
84 | 84 |
85 void FontServiceThread::MatchFamilyNameImpl( | 85 void FontServiceThread::MatchFamilyNameImpl( |
86 base::WaitableEvent* done_event, | 86 base::WaitableEvent* done_event, |
87 const char family_name[], | 87 const char family_name[], |
88 SkTypeface::Style requested_style, | 88 SkFontStyle requested_style, |
89 bool* out_valid, | 89 bool* out_valid, |
90 SkFontConfigInterface::FontIdentity* out_font_identity, | 90 SkFontConfigInterface::FontIdentity* out_font_identity, |
91 SkString* out_family_name, | 91 SkString* out_family_name, |
92 SkTypeface::Style* out_style) { | 92 SkFontStyle* out_style) { |
93 DCHECK_EQ(GetThreadId(), base::PlatformThread::CurrentId()); | 93 DCHECK_EQ(GetThreadId(), base::PlatformThread::CurrentId()); |
94 | 94 |
| 95 TypefaceStylePtr style(TypefaceStyle::New()); |
| 96 style->weight = requested_style.weight(); |
| 97 style->width = requested_style.width(); |
| 98 style->slant = static_cast<TypefaceSlant>(requested_style.slant()); |
| 99 |
95 font_service_->MatchFamilyName( | 100 font_service_->MatchFamilyName( |
96 mojo::String(family_name), static_cast<TypefaceStyle>(requested_style), | 101 mojo::String(family_name), std::move(style), |
97 base::Bind(&FontServiceThread::OnMatchFamilyNameComplete, this, | 102 base::Bind(&FontServiceThread::OnMatchFamilyNameComplete, this, |
98 done_event, out_valid, out_font_identity, out_family_name, | 103 done_event, out_valid, out_font_identity, out_family_name, |
99 out_style)); | 104 out_style)); |
100 } | 105 } |
101 | 106 |
102 void FontServiceThread::OnMatchFamilyNameComplete( | 107 void FontServiceThread::OnMatchFamilyNameComplete( |
103 base::WaitableEvent* done_event, | 108 base::WaitableEvent* done_event, |
104 bool* out_valid, | 109 bool* out_valid, |
105 SkFontConfigInterface::FontIdentity* out_font_identity, | 110 SkFontConfigInterface::FontIdentity* out_font_identity, |
106 SkString* out_family_name, | 111 SkString* out_family_name, |
107 SkTypeface::Style* out_style, | 112 SkFontStyle* out_style, |
108 FontIdentityPtr font_identity, | 113 FontIdentityPtr font_identity, |
109 mojo::String family_name, | 114 mojo::String family_name, |
110 TypefaceStyle style) { | 115 TypefaceStylePtr style) { |
111 DCHECK_EQ(GetThreadId(), base::PlatformThread::CurrentId()); | 116 DCHECK_EQ(GetThreadId(), base::PlatformThread::CurrentId()); |
112 | 117 |
113 *out_valid = font_identity; | 118 *out_valid = font_identity; |
114 if (font_identity) { | 119 if (font_identity) { |
115 out_font_identity->fID = font_identity->id; | 120 out_font_identity->fID = font_identity->id; |
116 out_font_identity->fTTCIndex = font_identity->ttc_index; | 121 out_font_identity->fTTCIndex = font_identity->ttc_index; |
117 out_font_identity->fString = font_identity->str_representation.data(); | 122 out_font_identity->fString = font_identity->str_representation.data(); |
118 // TODO(erg): fStyle isn't set. This is rather odd, however it matches the | 123 // TODO(erg): fStyle isn't set. This is rather odd, however it matches the |
119 // behaviour of the current Linux IPC version. | 124 // behaviour of the current Linux IPC version. |
120 | 125 |
121 *out_family_name = family_name.data(); | 126 *out_family_name = family_name.data(); |
122 *out_style = static_cast<SkTypeface::Style>(style); | 127 *out_style = SkFontStyle(style->weight, |
| 128 style->width, |
| 129 static_cast<SkFontStyle::Slant>(style->slant)); |
123 } | 130 } |
124 | 131 |
125 done_event->Signal(); | 132 done_event->Signal(); |
126 } | 133 } |
127 | 134 |
128 void FontServiceThread::OpenStreamImpl(base::WaitableEvent* done_event, | 135 void FontServiceThread::OpenStreamImpl(base::WaitableEvent* done_event, |
129 base::File* output_file, | 136 base::File* output_file, |
130 const uint32_t id_number) { | 137 const uint32_t id_number) { |
131 DCHECK_EQ(GetThreadId(), base::PlatformThread::CurrentId()); | 138 DCHECK_EQ(GetThreadId(), base::PlatformThread::CurrentId()); |
132 | 139 |
(...skipping 18 matching lines...) Expand all Loading... |
151 void FontServiceThread::Init() { | 158 void FontServiceThread::Init() { |
152 font_service_.Bind(std::move(font_service_info_)); | 159 font_service_.Bind(std::move(font_service_info_)); |
153 } | 160 } |
154 | 161 |
155 void FontServiceThread::CleanUp() { | 162 void FontServiceThread::CleanUp() { |
156 font_service_.reset(); | 163 font_service_.reset(); |
157 } | 164 } |
158 | 165 |
159 } // namespace internal | 166 } // namespace internal |
160 } // namespace font_service | 167 } // namespace font_service |
OLD | NEW |