Chromium Code Reviews| 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 |