Index: content/common/font_config_ipc_linux.cc |
=================================================================== |
--- content/common/font_config_ipc_linux.cc (revision 187566) |
+++ content/common/font_config_ipc_linux.cc (working copy) |
@@ -12,6 +12,8 @@ |
#include "base/pickle.h" |
#include "base/posix/unix_domain_socket_linux.h" |
+#include "skia/ext/skia_utils_base.h" |
+#include "third_party/skia/include/core/SkStream.h" |
namespace content { |
@@ -23,31 +25,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) { |
- if (family.length() > kMaxFontFamilyLength) |
+bool FontConfigIPC::matchFamilyName(const char familyName[], |
+ SkTypeface::Style requestedStyle, |
+ FontIdentity* outFontIdentity, |
+ SkString* outFamilyName, |
+ SkTypeface::Style* outStyle) { |
+ size_t familyNameLen = familyName ? strlen(familyName) : 0; |
+ if (familyNameLen > kMaxFontFamilyLength) |
return false; |
Pickle request; |
request.WriteInt(METHOD_MATCH); |
- request.WriteBool(filefaceid_valid); |
- if (filefaceid_valid) |
- request.WriteUInt32(filefaceid); |
+ request.WriteData(familyName, familyNameLen); |
+ request.WriteUInt32(requestedStyle); |
- 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); |
- |
- 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 +54,29 @@ |
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)) { |
+ SkString reply_family; |
+ FontIdentity reply_identity; |
+ uint32_t reply_style; |
+ if (!skia::ReadSkString(reply, &iter, &reply_family) || |
+ !skia::ReadSkFontIdentity(reply, &iter, &reply_identity) || |
+ !reply.ReadUInt32(&iter, &reply_style)) { |
return false; |
} |
- if (result_filefaceid) |
- *result_filefaceid = reply_filefaceid; |
- if (result_family) |
- *result_family = reply_family; |
+ if (outFontIdentity) |
+ *outFontIdentity = reply_identity; |
+ if (outFamilyName) |
+ *outFamilyName = reply_family; |
+ if (outStyle) |
+ *outStyle = static_cast<SkTypeface::Style>(reply_style); |
- 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) { |
Pickle request; |
request.WriteInt(METHOD_OPEN); |
- request.WriteUInt32(filefaceid); |
+ request.WriteUInt32(identity.fID); |
int result_fd = -1; |
uint8_t reply_buf[256]; |
@@ -97,7 +85,7 @@ |
&result_fd, request); |
if (r == -1) |
- return -1; |
+ return NULL; |
Pickle reply(reinterpret_cast<char*>(reply_buf), r); |
bool result; |
@@ -106,10 +94,10 @@ |
!result) { |
if (result_fd) |
close(result_fd); |
- return -1; |
+ return NULL; |
} |
- return result_fd; |
+ return new SkFDStream(result_fd, true); |
} |
} // namespace content |