summaryrefslogtreecommitdiffstats
path: root/layout/inspector/nsFontFaceList.cpp
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /layout/inspector/nsFontFaceList.cpp
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz
UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip
Add m-esr52 at 52.6.0
Diffstat (limited to 'layout/inspector/nsFontFaceList.cpp')
-rw-r--r--layout/inspector/nsFontFaceList.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/layout/inspector/nsFontFaceList.cpp b/layout/inspector/nsFontFaceList.cpp
new file mode 100644
index 000000000..5f9b0ecb4
--- /dev/null
+++ b/layout/inspector/nsFontFaceList.cpp
@@ -0,0 +1,83 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* 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 "nsFontFaceList.h"
+#include "nsFontFace.h"
+#include "nsFontFaceLoader.h"
+#include "nsIFrame.h"
+#include "gfxTextRun.h"
+#include "mozilla/gfx/2D.h"
+
+nsFontFaceList::nsFontFaceList()
+{
+}
+
+nsFontFaceList::~nsFontFaceList()
+{
+}
+
+////////////////////////////////////////////////////////////////////////
+// nsISupports
+
+NS_IMPL_ISUPPORTS(nsFontFaceList, nsIDOMFontFaceList)
+
+////////////////////////////////////////////////////////////////////////
+// nsIDOMFontFaceList
+
+NS_IMETHODIMP
+nsFontFaceList::Item(uint32_t index, nsIDOMFontFace **_retval)
+{
+ NS_ENSURE_TRUE(index < mFontFaces.Count(), NS_ERROR_INVALID_ARG);
+
+ uint32_t current = 0;
+ nsIDOMFontFace* result = nullptr;
+ for (auto iter = mFontFaces.Iter(); !iter.Done(); iter.Next()) {
+ if (current == index) {
+ result = iter.UserData();
+ break;
+ }
+ current++;
+ }
+ NS_ASSERTION(result != nullptr, "null entry in nsFontFaceList?");
+ NS_IF_ADDREF(*_retval = result);
+ return NS_OK;
+}
+
+NS_IMETHODIMP
+nsFontFaceList::GetLength(uint32_t *aLength)
+{
+ *aLength = mFontFaces.Count();
+ return NS_OK;
+}
+
+////////////////////////////////////////////////////////////////////////
+// nsFontFaceList
+
+nsresult
+nsFontFaceList::AddFontsFromTextRun(gfxTextRun* aTextRun,
+ uint32_t aOffset, uint32_t aLength)
+{
+ gfxTextRun::Range range(aOffset, aOffset + aLength);
+ gfxTextRun::GlyphRunIterator iter(aTextRun, range);
+ while (iter.NextRun()) {
+ gfxFontEntry *fe = iter.GetGlyphRun()->mFont->GetFontEntry();
+ // if we have already listed this face, just make sure the match type is
+ // recorded
+ nsFontFace* existingFace =
+ static_cast<nsFontFace*>(mFontFaces.GetWeak(fe));
+ if (existingFace) {
+ existingFace->AddMatchType(iter.GetGlyphRun()->mMatchType);
+ } else {
+ // A new font entry we haven't seen before
+ RefPtr<nsFontFace> ff =
+ new nsFontFace(fe, aTextRun->GetFontGroup(),
+ iter.GetGlyphRun()->mMatchType);
+ mFontFaces.Put(fe, ff);
+ }
+ }
+
+ return NS_OK;
+}