mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:18:48 +00:00
a51002fbca
- Bug 1202386: Add logging macros for HAL IPC, r=shuang (246eb96f38)
- Bug 1202386: Output clear HAL IPC errors, r=shuang (eaba0dc9a8)
- Bug 1202704: Move Bluetooth IPC pack functions to generic HAL IPC, r=shuang (4c745de79c)
- Bug 1202704: Move Bluetooth IPC unpack functions to generic HAL IPC, r=shuang (4f8600030b)
- Bug 1202704: Move Bluetooth's |UnpackPDUInitOp| to generic HAL IPC code, r=shuang (345f21c637)
- Bug 1209085: Add 6-argument operator () to |UnpackPDUInitOp|, r=joliu (f5f8cf2dd9)
- Bug 1123760 - make autocomplete dropmarker in the urlbar actually work when activated through a11y APIs, r=surkov (eee42195f4)
- Bug 1123760 - bustage follow-up: remove unused variable, rs=bustage on a CLOSED TREE (6de8519b23)
- Bug 1152836 - QR Decoder: Let everywhere, style nits: 580ms -> 400ms r=past (92a7fd6a15)
- Bug 1212430 - Remove CrashAtUnhandlableOOM() and replace with AutoEnterOOMUnsafeRegion r=jandem (f595b87951)
- Bug 1175755 - Only clear GC statistics aborted flag at the end of the outermost nested GC r=bbouvier (ca73f34c69)
- reapply Bug 1221385 - Handle OOM during JitRuntime (e7def65b78)
- No bug: Clarify documentation for js::NewObjectMetadataState. DONTBUILD r=fitzgen (41022b4137)
- Bug 1211164 - Collect JS deprecated language extension telemetry for Add-ons. r=till,bsmedberg (eacd40ad66)
- Bug 1212296 - undo a state change on OOM. r=till (6e272353d0)
- Bug 1214006 - Take account of the fact that JSScript::atoms may be null while tracing r=terrence (19f61d7494)
- missing bits of Bug 1208665 (c31173b0d4)
- Bug 1221891 - "Fix a typo in TraceLoggingGraph.h". r=hv1989 (e1fc11f8df)
- Bug 1221460 - "TraceLogger: Enable several new optimizations in 'TLLOG=IonCompiler'". r=hv1989 (ab3398646e)
- Bug 1204365 - Repair external view source file name and extension. r=mconley (f033e55a0e)
- Bug 1163693 - Fix View Source external editor fallback. r=jryans. (9c8becc93b)
- Bug 1207629 - Don't assume that viewSourceUtils.js has Services in scope. r=jryans (07977953c0)
- add back some telemetry (1e3b5bde5b)
- Bug 1186785 - Replace nsBaseHashtable::EnumerateRead() calls in toolkit/ with iterators. r=froydnj. (e93e098dd8)
- add back some crashreporter (80e325b3be)
- Bug 1220035 - Fix -Wimplicit-fallthrough warnings in xpcom. r=mccr8 (2ef9ecad5f)
- Bug 1215629 - Remove nsDebug logger. r=froydnj (46784f05fd)
- Bug 1137963 - Use a spin lock for TraceRefCnt. r=waldo, r=froydnj (b2420c97c0)
- Bug 1196430 - part 1 - rename serialNumberRecord to SerialNumberRecord; r=mccr8 (933670070d)
- Bug 1196430 - part 2 - give SerialNumberRecord a proper constructor; r=mccr8 (3ddf3d5e69)
- Bug 1196430 - part 3 - remove unnecessary nsString.h include from nsTraceRefcnt.cpp; r=mccr8 (034954e692)
- Bug 1196430 - part 4 - record allocation stacks for classes in XPCOM_MEM_LOG_CLASSES; r=mccr8 (366b612807)
- Bug 1196430 - part 5 - dump allocation stacks for leaked objects in XPCOM_MEM_LOG_CLASSES; r=mccr8 (dce7b9cca2)
- Bug 1180745 - Fix logging test screenshotting errors. r=jgriffin (a589f0d322)
- Bug 1091285 - move dumpScreen in a new mozscreenshot package. r=jgriffin This also completely remove build/automationutils.py. (6e633359ef)
- some crashreporter stuff (2d0bc9c95d)
- Bug 1196430 - part 6 - move cut-and-paste stack fixer code into mozrunner; r=wlach (ffc7ccd521)
- Bug 1196430 - part 7 - teach process_leak_log how to symbolicate leaked object stacks; r=mccr8 (0b5a4ace7c)
- Bug 1196430 - part 8 - use less reinterpret_cast in nsTraceRefcnt.cpp; r=mccr8 (758cfca0aa)
- Bug 1196430 follow-up: Hide the usage of gCodeAddressService behind #ifdef MOZ_STACKWALKING (e8d62dd73e)
- Bug 487494 - Add an xpcshell selftest for readable stacks from assertions.;r=ted (ea15cf3cbb)
- Bug 1156977 - Assert when aClassName is empty in BloatEntry. r=froydnj Bug 1116550 - Part 1: Turn HaveLeaks and Clear into methods. r=froydnj (8d7f88f498)
- Bug 1116550 - Part 2: Print out negative values for leaks when there are more dtors than ctors. r=froydnj (7c9e3e7848)
- Bug 1190483 - Add a way to record a DMD log late in shutdown. r=erahm (df7c22e64d)
- Bug 1174344 - make error message for mismatched leak log entries more helpful; r=mccr8 (7f969e72c0)
- Bug 1190483 - Followup to address review comment. (d3873f76fd)
- Bug 1186025. Optimize the usage of regions. r=mstange (263080a66e)
- Bug 1211841 - Style off the main thread markers differently, r=jsantell (1a183c5d3e)
- Bug 1211839 - Don't allow off the main thread markers to nest under main thread markers, r=smaug, jsantell (f4d4b7ccf1)
- Bug 1207161 - fix run-by-dir leak in test_bug846906.xul; r=mccr8 (5511752103)
- Bug 1205348 - Always do shutdown CCs when NS_FREE_PERMANENT_DATA is defined. r=smaug (7fd7a7455c)
- Bug 1208157, part 1 - Add and use nsCycleCollector::IsIdle() predicate. r=smaug (a06c2bd1db)
- Bug 1208157, part 2 - Make the fields of nsCycleCollector private. r=smaug (494637fbef)
- Bug 1207368 - Use swap() instead of forget() to remove MessageElement::mMessage. r=froydnj (8c58d38a55)
- Bug 1181520 - Remove support for passing in reftest arguments via the command line, r=jmaher (75e9440e40)
- Bug 1196814 - Fail Android mochitest, robocop, reftests when Fennec is not installed; r=jmaher (6ec15636eb)
- Bug 1183717 - Increase default timeout for Android Debug reftests; r=jmaher (1b07fc1c9b)
- Bug 1181516 - Allow reftests to take paths to multiple directories containing tests on the command line, r=jmaher (1e27ef0d69)
- Bug 1198944 - remove vmware recording support from mochitest; r=khuey (06e79556fb)
- Bug 1162003 - Enable run-by-dir mode on Fx desktop opt builds. r=jmaher (0ef288a33c)
- Bug 1087629 - Add two new test cases for ICE connection states. r=ekr (374112f2d0)
- Bug 1186551 - [mozlog] add structured action process_start/process_exit. r=jgraham (13ce88dbf7)
- Bug 1154111 - Colorize SKIP in test logs. r=jgraham (85910e0f8b)
- Bug 1191267 - Fix mozlog log buffering command line option, r=chmanchester (2bd6592f9b)
- Bug 1185244 - Improve mach support for running mochitests on Valgrind. r=jgraham, njn. (7f5a830fa0)
- Bug 1219870 - [mozlog] ensure correct suite state when logging suite_start/suite_end via StructuredLogger.log_raw, r=chmanchester (21710387a4)
- Bug 1198257 - Better support for providing a directory name and discovering reftests under that directory, r=jmaher (f6255fc44c)
- Bug 1208220 - Remove test of manifest filename that breaks my workflow. r=jgraham (ae4e45946d)
- Bug 1186888 - [mozlog] Ability to use a pre-existing logger with commandline.setup_logging(), r=jgraham (80dfa2a8a8)
- Bug 1042998 - Use StructuredLog.jsm for mochitest logging, r=chmanchester (8851b1b6f9)
- Bug 1218010 - Shorten the polling interval when waiting for httpd.js startup in mochitest. r=ahal (a1f2c81a8e)
- Bug 1224305 - Add an option to the mochitest harness to provide a copy of the extra chrome manifest it writes. r=ahal (e617971f41)
- Bug 1170342 - Don't disable XInput2 for mochitests on GTK3, off by default now. r=karlt (05d53439da)
- Bug 1145375 - Don't kill the debugger if the user Ctrl-C's as running a mochitest; r=ted (6c310500b8)
- Bug 1199241 - Average runtime data across platforms instead of keeping it distinct, r=jgriffin (cd497f509c)
- Bug 1157852 - Mochitest DevTools test directories run multiple times. r=ahal (415ab41a3a)
- Bug 1186791 (part 1) - Replace nsBaseHashtable::EnumerateRead() calls in storage/ with iterators. r=mak. (84f6f1f566)
- Bug 1186791 (part 2) - Replace nsBaseHashtable::EnumerateRead() calls in storage/ with iterators. r=mak. (9c67504d0c)
- Bug 1186791 (part 3) - Replace nsBaseHashtable::EnumerateRead() calls in storage/ with iterators. r=mak. (02f472c197)
- Bug 1219238 - remove AutoArray from mozStorageSQLFunctions.cpp; r=mak (45e751d2b7)
- Bug 1166931 - JS Warning in MobileIdentityManager.jsm r=ferjm (2022d4cccd)
- var-const (b7800ec532)
- Trivial, no bug: add missing semicolon to nsBlocklistService.js to avoid a strict warning. (ee6b8a7593)
- Bug 1208242 - Part 1: hook up the blocklist service to b2g web extensions r=mossop,ferjm (d0ad653af4)
- Bug 1208242 - Part 3: don't ship things that should not ship r=me (cd75e88080)
- Bug 1009795 - Use toLocalString to format download size instead of the decimalSymbol hook; r=mak (a4b4442d2c)
- Bug 1009795 - Part 2: Revert to the old gDecimalSymbol hack if the Internationalization API is not available; r=mak (465e23f2c3)
- Bug 1116385. r=Mossop (f0a7b7d450)
- let-var (cb5d9d1d07)
- Bug 1210459: Add originAttributes for tests that implement nsILoadContext. r=bholley (ea6be1490a)
- var-let (d7d4533b53)
- Bug 1034724 - Fixed Unicode values of prefs in about:support. r=adw (1c8253ac5b)
- Bug 1153381. Add a D3D11 ANGLE blacklist. r=mstange (9008483ca5)
- add back some WIn XP and 2k3 stuff (896a4a7e9b)
- Bug 1141783 - Correct user message for mismatched drivers. Don't mismatch if the DLLs are missing. r=jrmuizelaar (872d0c3aff)
- missing members version (4771ff5f24)
- bug 1170987 - Fix gfx/2d to build on iOS. r=jrmuizel (1e555cb6b3)
- Bug 1201937 - push transform onto cairo context when evaluating path bounds. r=eihrul (6a4d8d98ec)
- Bug 1165900 - Make MaybeSnapToDevicePixels return a boolean to indicate whether snapping occurred. r=Bas (8f33f6cf7d)
- Bug 1190705 - Add crashtest for canvas 2d. r=Bas (bf3afb2acc)
- Bug 1161277 - verify SkPath is finite before doing ContainsPoint queries. r=jmuizelaar (c56f9ef322)
- Bug 1218900 - Make shell function startTimingMutator() fail with an error rather than asserting when called at the wrong time r=sfink (856e8678ce)
- small type fix (b36cfdf416)
- Bug 1214846 - Make SPSProfiler::enter() report OOM to the context r=terrence (6086f60d17)
- Bug 1218637 - IonMonkey: MIPS64: Add support into vm. r=arai (ae22538418)
- gfx: add back `AddCrashReportAnnotations()` prototype (c13f61cd8a)
289 lines
9.0 KiB
C++
289 lines
9.0 KiB
C++
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#include "ScaledFontMac.h"
|
|
#ifdef USE_SKIA
|
|
#include "PathSkia.h"
|
|
#include "skia/include/core/SkPaint.h"
|
|
#include "skia/include/core/SkPath.h"
|
|
#include "skia/include/ports/SkTypeface_mac.h"
|
|
#endif
|
|
#include "DrawTargetCG.h"
|
|
#include <vector>
|
|
#include <dlfcn.h>
|
|
#ifdef MOZ_WIDGET_UIKIT
|
|
#include <CoreFoundation/CoreFoundation.h>
|
|
#endif
|
|
|
|
#ifdef MOZ_WIDGET_COCOA
|
|
// prototype for private API
|
|
extern "C" {
|
|
CGPathRef CGFontGetGlyphPath(CGFontRef fontRef, CGAffineTransform *textTransform, int unknown, CGGlyph glyph);
|
|
};
|
|
#endif
|
|
|
|
|
|
namespace mozilla {
|
|
namespace gfx {
|
|
|
|
ScaledFontMac::CTFontDrawGlyphsFuncT* ScaledFontMac::CTFontDrawGlyphsPtr = nullptr;
|
|
bool ScaledFontMac::sSymbolLookupDone = false;
|
|
|
|
ScaledFontMac::ScaledFontMac(CGFontRef aFont, Float aSize)
|
|
: ScaledFontBase(aSize)
|
|
{
|
|
if (!sSymbolLookupDone) {
|
|
CTFontDrawGlyphsPtr =
|
|
(CTFontDrawGlyphsFuncT*)dlsym(RTLD_DEFAULT, "CTFontDrawGlyphs");
|
|
sSymbolLookupDone = true;
|
|
}
|
|
|
|
// XXX: should we be taking a reference
|
|
mFont = CGFontRetain(aFont);
|
|
if (CTFontDrawGlyphsPtr != nullptr) {
|
|
// only create mCTFont if we're going to be using the CTFontDrawGlyphs API
|
|
mCTFont = CTFontCreateWithGraphicsFont(aFont, aSize, nullptr, nullptr);
|
|
} else {
|
|
mCTFont = nullptr;
|
|
}
|
|
}
|
|
|
|
ScaledFontMac::~ScaledFontMac()
|
|
{
|
|
if (mCTFont) {
|
|
CFRelease(mCTFont);
|
|
}
|
|
CGFontRelease(mFont);
|
|
}
|
|
|
|
#ifdef USE_SKIA
|
|
SkTypeface* ScaledFontMac::GetSkTypeface()
|
|
{
|
|
if (!mTypeface) {
|
|
if (mCTFont) {
|
|
mTypeface = SkCreateTypefaceFromCTFont(mCTFont);
|
|
} else {
|
|
CTFontRef fontFace = CTFontCreateWithGraphicsFont(mFont, mSize, nullptr, nullptr);
|
|
mTypeface = SkCreateTypefaceFromCTFont(fontFace);
|
|
CFRelease(fontFace);
|
|
}
|
|
}
|
|
return mTypeface;
|
|
}
|
|
#endif
|
|
|
|
// private API here are the public options on OS X
|
|
// CTFontCreatePathForGlyph
|
|
// ATSUGlyphGetCubicPaths
|
|
// we've used this in cairo sucessfully for some time.
|
|
// Note: cairo dlsyms it. We could do that but maybe it's
|
|
// safe just to use?
|
|
|
|
already_AddRefed<Path>
|
|
ScaledFontMac::GetPathForGlyphs(const GlyphBuffer &aBuffer, const DrawTarget *aTarget)
|
|
{
|
|
if (aTarget->GetBackendType() == BackendType::COREGRAPHICS ||
|
|
aTarget->GetBackendType() == BackendType::COREGRAPHICS_ACCELERATED) {
|
|
#ifdef MOZ_WIDGET_COCOA
|
|
CGMutablePathRef path = CGPathCreateMutable();
|
|
for (unsigned int i = 0; i < aBuffer.mNumGlyphs; i++) {
|
|
// XXX: we could probably fold both of these transforms together to avoid extra work
|
|
CGAffineTransform flip = CGAffineTransformMakeScale(1, -1);
|
|
|
|
CGPathRef glyphPath = ::CGFontGetGlyphPath(mFont, &flip, 0, aBuffer.mGlyphs[i].mIndex);
|
|
|
|
CGAffineTransform matrix = CGAffineTransformMake(mSize, 0, 0, mSize,
|
|
aBuffer.mGlyphs[i].mPosition.x,
|
|
aBuffer.mGlyphs[i].mPosition.y);
|
|
CGPathAddPath(path, &matrix, glyphPath);
|
|
CGPathRelease(glyphPath);
|
|
}
|
|
RefPtr<Path> ret = new PathCG(path, FillRule::FILL_WINDING);
|
|
CGPathRelease(path);
|
|
return ret.forget();
|
|
#else
|
|
//TODO: probably want CTFontCreatePathForGlyph
|
|
MOZ_CRASH("This needs implemented");
|
|
#endif
|
|
}
|
|
return ScaledFontBase::GetPathForGlyphs(aBuffer, aTarget);
|
|
}
|
|
|
|
void
|
|
ScaledFontMac::CopyGlyphsToBuilder(const GlyphBuffer &aBuffer, PathBuilder *aBuilder, BackendType aBackendType, const Matrix *aTransformHint)
|
|
{
|
|
if (!(aBackendType == BackendType::COREGRAPHICS || aBackendType == BackendType::COREGRAPHICS_ACCELERATED)) {
|
|
ScaledFontBase::CopyGlyphsToBuilder(aBuffer, aBuilder, aBackendType, aTransformHint);
|
|
return;
|
|
}
|
|
#ifdef MOZ_WIDGET_COCOA
|
|
PathBuilderCG *pathBuilderCG =
|
|
static_cast<PathBuilderCG*>(aBuilder);
|
|
// XXX: check builder type
|
|
for (unsigned int i = 0; i < aBuffer.mNumGlyphs; i++) {
|
|
// XXX: we could probably fold both of these transforms together to avoid extra work
|
|
CGAffineTransform flip = CGAffineTransformMakeScale(1, -1);
|
|
CGPathRef glyphPath = ::CGFontGetGlyphPath(mFont, &flip, 0, aBuffer.mGlyphs[i].mIndex);
|
|
|
|
CGAffineTransform matrix = CGAffineTransformMake(mSize, 0, 0, mSize,
|
|
aBuffer.mGlyphs[i].mPosition.x,
|
|
aBuffer.mGlyphs[i].mPosition.y);
|
|
CGPathAddPath(pathBuilderCG->mCGPath, &matrix, glyphPath);
|
|
CGPathRelease(glyphPath);
|
|
}
|
|
#else
|
|
//TODO: probably want CTFontCreatePathForGlyph
|
|
MOZ_CRASH("This needs implemented");
|
|
#endif
|
|
}
|
|
|
|
uint32_t
|
|
CalcTableChecksum(const uint32_t *tableStart, uint32_t length, bool skipChecksumAdjust = false)
|
|
{
|
|
uint32_t sum = 0L;
|
|
const uint32_t *table = tableStart;
|
|
const uint32_t *end = table+((length+3) & ~3) / sizeof(uint32_t);
|
|
while (table < end) {
|
|
if (skipChecksumAdjust && (table - tableStart) == 2) {
|
|
table++;
|
|
} else {
|
|
sum += CFSwapInt32BigToHost(*table++);
|
|
}
|
|
}
|
|
return sum;
|
|
}
|
|
|
|
struct TableRecord {
|
|
uint32_t tag;
|
|
uint32_t checkSum;
|
|
uint32_t offset;
|
|
uint32_t length;
|
|
CFDataRef data;
|
|
};
|
|
|
|
int maxPow2LessThan(int a)
|
|
{
|
|
int x = 1;
|
|
int shift = 0;
|
|
while ((x<<(shift+1)) < a) {
|
|
shift++;
|
|
}
|
|
return shift;
|
|
}
|
|
|
|
struct writeBuf
|
|
{
|
|
explicit writeBuf(int size)
|
|
{
|
|
this->data = new unsigned char [size];
|
|
this->offset = 0;
|
|
}
|
|
~writeBuf() {
|
|
delete this->data;
|
|
}
|
|
|
|
template <class T>
|
|
void writeElement(T a)
|
|
{
|
|
*reinterpret_cast<T*>(&this->data[this->offset]) = a;
|
|
this->offset += sizeof(T);
|
|
}
|
|
|
|
void writeMem(const void *data, unsigned long length)
|
|
{
|
|
memcpy(&this->data[this->offset], data, length);
|
|
this->offset += length;
|
|
}
|
|
|
|
void align()
|
|
{
|
|
while (this->offset & 3) {
|
|
this->data[this->offset] = 0;
|
|
this->offset++;
|
|
}
|
|
}
|
|
|
|
unsigned char *data;
|
|
int offset;
|
|
};
|
|
|
|
bool
|
|
ScaledFontMac::GetFontFileData(FontFileDataOutput aDataCallback, void *aBaton)
|
|
{
|
|
// We'll reconstruct a TTF font from the tables we can get from the CGFont
|
|
CFArrayRef tags = CGFontCopyTableTags(mFont);
|
|
CFIndex count = CFArrayGetCount(tags);
|
|
|
|
TableRecord *records = new TableRecord[count];
|
|
uint32_t offset = 0;
|
|
offset += sizeof(uint32_t)*3;
|
|
offset += sizeof(uint32_t)*4*count;
|
|
bool CFF = false;
|
|
for (CFIndex i = 0; i<count; i++) {
|
|
uint32_t tag = (uint32_t)(uintptr_t)CFArrayGetValueAtIndex(tags, i);
|
|
if (tag == 0x43464620) // 'CFF '
|
|
CFF = true;
|
|
CFDataRef data = CGFontCopyTableForTag(mFont, tag);
|
|
records[i].tag = tag;
|
|
records[i].offset = offset;
|
|
records[i].data = data;
|
|
records[i].length = CFDataGetLength(data);
|
|
bool skipChecksumAdjust = (tag == 0x68656164); // 'head'
|
|
records[i].checkSum = CalcTableChecksum(reinterpret_cast<const uint32_t*>(CFDataGetBytePtr(data)),
|
|
records[i].length, skipChecksumAdjust);
|
|
offset += records[i].length;
|
|
// 32 bit align the tables
|
|
offset = (offset + 3) & ~3;
|
|
}
|
|
CFRelease(tags);
|
|
|
|
struct writeBuf buf(offset);
|
|
// write header/offset table
|
|
if (CFF) {
|
|
buf.writeElement(CFSwapInt32HostToBig(0x4f54544f));
|
|
} else {
|
|
buf.writeElement(CFSwapInt32HostToBig(0x00010000));
|
|
}
|
|
buf.writeElement(CFSwapInt16HostToBig(count));
|
|
buf.writeElement(CFSwapInt16HostToBig((1<<maxPow2LessThan(count))*16));
|
|
buf.writeElement(CFSwapInt16HostToBig(maxPow2LessThan(count)));
|
|
buf.writeElement(CFSwapInt16HostToBig(count*16-((1<<maxPow2LessThan(count))*16)));
|
|
|
|
// write table record entries
|
|
for (CFIndex i = 0; i<count; i++) {
|
|
buf.writeElement(CFSwapInt32HostToBig(records[i].tag));
|
|
buf.writeElement(CFSwapInt32HostToBig(records[i].checkSum));
|
|
buf.writeElement(CFSwapInt32HostToBig(records[i].offset));
|
|
buf.writeElement(CFSwapInt32HostToBig(records[i].length));
|
|
}
|
|
|
|
// write tables
|
|
int checkSumAdjustmentOffset = 0;
|
|
for (CFIndex i = 0; i<count; i++) {
|
|
if (records[i].tag == 0x68656164) {
|
|
checkSumAdjustmentOffset = buf.offset + 2*4;
|
|
}
|
|
buf.writeMem(CFDataGetBytePtr(records[i].data), CFDataGetLength(records[i].data));
|
|
buf.align();
|
|
CFRelease(records[i].data);
|
|
}
|
|
delete[] records;
|
|
|
|
// clear the checksumAdjust field before checksumming the whole font
|
|
memset(&buf.data[checkSumAdjustmentOffset], 0, sizeof(uint32_t));
|
|
uint32_t fontChecksum = CFSwapInt32HostToBig(0xb1b0afba - CalcTableChecksum(reinterpret_cast<const uint32_t*>(buf.data), offset));
|
|
// set checkSumAdjust to the computed checksum
|
|
memcpy(&buf.data[checkSumAdjustmentOffset], &fontChecksum, sizeof(fontChecksum));
|
|
|
|
// we always use an index of 0
|
|
aDataCallback(buf.data, buf.offset, 0, mSize, aBaton);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
} // namespace gfx
|
|
} // namespace mozilla
|