Index: content/common/font_config_ipc_linux.cc |
=================================================================== |
--- content/common/font_config_ipc_linux.cc (revision 186178) |
+++ content/common/font_config_ipc_linux.cc (working copy) |
@@ -12,6 +12,7 @@ |
#include "base/pickle.h" |
#include "base/posix/unix_domain_socket_linux.h" |
+#include "third_party/skia/include/core/SkStream.h" |
namespace content { |
@@ -23,31 +24,21 @@ |
close(fd_); |
} |
-bool FontConfigIPC::Match(std::string* result_family, |
- unsigned* result_filefaceid, |
- bool filefaceid_valid, unsigned filefaceid, |
- const std::string& family, |
- const void* characters, size_t characters_bytes, |
- bool* is_bold, bool* is_italic) { |
+bool FontConfigIPC::matchFamilyName(const char familyName[], |
+ SkTypeface::Style requestedStyle, |
+ FontIdentity* outFontIdentifier, |
+ SkString* outFamilyName, |
+ SkTypeface::Style* outStyle) { |
+ std::string family(familyName); |
if (family.length() > kMaxFontFamilyLength) |
return false; |
Pickle request; |
request.WriteInt(METHOD_MATCH); |
- request.WriteBool(filefaceid_valid); |
- if (filefaceid_valid) |
- request.WriteUInt32(filefaceid); |
- |
- request.WriteBool(is_bold && *is_bold); |
- request.WriteBool(is_bold && *is_italic); |
- |
- request.WriteUInt32(characters_bytes); |
- if (characters_bytes) |
- request.WriteBytes(characters, characters_bytes); |
- |
request.WriteString(family); |
+ request.WriteUInt32(requestedStyle); |
- uint8_t reply_buf[512]; |
+ uint8_t reply_buf[2048]; |
const ssize_t r = UnixDomainSocket::SendRecvMsg(fd_, reply_buf, |
sizeof(reply_buf), NULL, |
request); |
@@ -62,33 +53,35 @@ |
if (!result) |
return false; |
- uint32_t reply_filefaceid; |
std::string reply_family; |
- bool resulting_bold, resulting_italic; |
- if (!reply.ReadUInt32(&iter, &reply_filefaceid) || |
- !reply.ReadString(&iter, &reply_family) || |
- !reply.ReadBool(&iter, &resulting_bold) || |
- !reply.ReadBool(&iter, &resulting_italic)) { |
+ std::string reply_path; |
+ uint32_t reply_ttcIndex; |
+ uint32_t reply_style; |
+ if (!reply.ReadString(&iter, &reply_family) || |
+ !reply.ReadString(&iter, &reply_path) || |
+ !reply.ReadUInt32(&iter, &reply_ttcIndex) || |
+ !reply.ReadUInt32(&iter, &reply_style)) { |
return false; |
} |
- if (result_filefaceid) |
- *result_filefaceid = reply_filefaceid; |
- if (result_family) |
- *result_family = reply_family; |
+ if (outFontIdentifier) { |
+ outFontIdentifier->fIntPtr = reply_ttcIndex; |
+ outFontIdentifier->fString.set(reply_path.c_str()); |
+ } |
+ if (outFamilyName) |
+ outFamilyName->set(reply_family.c_str()); |
+ if (outStyle) |
+ *outStyle = (SkTypeface::Style)reply_style; |
palmer
2013/03/05 21:38:53
Use C++-style casts.
|
- if (is_bold) |
- *is_bold = resulting_bold; |
- if (is_italic) |
- *is_italic = resulting_italic; |
- |
return true; |
} |
-int FontConfigIPC::Open(unsigned filefaceid) { |
+SkStream* FontConfigIPC::openStream(const FontIdentity& identity) { |
+ std::string path(identity.fString.c_str()); |
+ |
Pickle request; |
request.WriteInt(METHOD_OPEN); |
- request.WriteUInt32(filefaceid); |
+ request.WriteString(path); |
int result_fd = -1; |
uint8_t reply_buf[256]; |
@@ -97,7 +90,7 @@ |
&result_fd, request); |
if (r == -1) |
- return -1; |
+ return NULL; |
Pickle reply(reinterpret_cast<char*>(reply_buf), r); |
bool result; |
@@ -106,10 +99,10 @@ |
!result) { |
if (result_fd) |
close(result_fd); |
- return -1; |
+ return NULL; |
} |
- return result_fd; |
+ return new SkFDStream(result_fd, true); |
} |
} // namespace content |