Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(471)

Unified Diff: content/common/font_config_ipc_linux.cc

Issue 12391070: Call Skia's version of SkFontHost_fontconfig (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698