diff options
Diffstat (limited to 'gfx/src/nsThebesFontEnumerator.cpp')
-rw-r--r-- | gfx/src/nsThebesFontEnumerator.cpp | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/gfx/src/nsThebesFontEnumerator.cpp b/gfx/src/nsThebesFontEnumerator.cpp new file mode 100644 index 000000000..3ef3f443b --- /dev/null +++ b/gfx/src/nsThebesFontEnumerator.cpp @@ -0,0 +1,129 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* 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 "nsThebesFontEnumerator.h" +#include <stdint.h> // for uint32_t +#include "gfxPlatform.h" // for gfxPlatform +#include "mozilla/Assertions.h" // for MOZ_ASSERT_HELPER2 +#include "nsCOMPtr.h" // for nsCOMPtr +#include "nsDebug.h" // for NS_ENSURE_ARG_POINTER +#include "nsError.h" // for NS_OK, NS_FAILED, nsresult +#include "nsIAtom.h" // for nsIAtom, NS_Atomize +#include "nsID.h" +#include "nsMemory.h" // for nsMemory +#include "nsString.h" // for nsAutoCString, nsAutoString, etc +#include "nsTArray.h" // for nsTArray, nsTArray_Impl, etc +#include "nscore.h" // for char16_t, NS_IMETHODIMP + +NS_IMPL_ISUPPORTS(nsThebesFontEnumerator, nsIFontEnumerator) + +nsThebesFontEnumerator::nsThebesFontEnumerator() +{ +} + +NS_IMETHODIMP +nsThebesFontEnumerator::EnumerateAllFonts(uint32_t *aCount, + char16_t ***aResult) +{ + return EnumerateFonts (nullptr, nullptr, aCount, aResult); +} + +NS_IMETHODIMP +nsThebesFontEnumerator::EnumerateFonts(const char *aLangGroup, + const char *aGeneric, + uint32_t *aCount, + char16_t ***aResult) +{ + NS_ENSURE_ARG_POINTER(aCount); + NS_ENSURE_ARG_POINTER(aResult); + + nsTArray<nsString> fontList; + + nsAutoCString generic; + if (aGeneric) + generic.Assign(aGeneric); + else + generic.SetIsVoid(true); + + nsCOMPtr<nsIAtom> langGroupAtom; + if (aLangGroup) { + nsAutoCString lowered; + lowered.Assign(aLangGroup); + ToLowerCase(lowered); + langGroupAtom = NS_Atomize(lowered); + } + + nsresult rv = gfxPlatform::GetPlatform()->GetFontList(langGroupAtom, generic, fontList); + + if (NS_FAILED(rv)) { + *aCount = 0; + *aResult = nullptr; + /* XXX in this case, do we want to return the CSS generics? */ + return NS_OK; + } + + char16_t **fs = static_cast<char16_t **> + (moz_xmalloc(fontList.Length() * sizeof(char16_t*))); + for (uint32_t i = 0; i < fontList.Length(); i++) { + fs[i] = ToNewUnicode(fontList[i]); + } + + *aResult = fs; + *aCount = fontList.Length(); + + return NS_OK; +} + +NS_IMETHODIMP +nsThebesFontEnumerator::HaveFontFor(const char *aLangGroup, + bool *aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + + *aResult = true; + return NS_OK; +} + +NS_IMETHODIMP +nsThebesFontEnumerator::GetDefaultFont(const char *aLangGroup, + const char *aGeneric, + char16_t **aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + *aResult = nullptr; + return NS_OK; +} + +NS_IMETHODIMP +nsThebesFontEnumerator::UpdateFontList(bool *_retval) +{ + gfxPlatform::GetPlatform()->UpdateFontList(); + *_retval = false; // always return false for now + return NS_OK; +} + +NS_IMETHODIMP +nsThebesFontEnumerator::GetStandardFamilyName(const char16_t *aName, + char16_t **aResult) +{ + NS_ENSURE_ARG_POINTER(aResult); + NS_ENSURE_ARG_POINTER(aName); + + nsAutoString name(aName); + if (name.IsEmpty()) { + *aResult = nullptr; + return NS_OK; + } + + nsAutoString family; + nsresult rv = gfxPlatform::GetPlatform()-> + GetStandardFamilyName(nsDependentString(aName), family); + if (NS_FAILED(rv) || family.IsEmpty()) { + *aResult = nullptr; + return NS_OK; + } + *aResult = ToNewUnicode(family); + return NS_OK; +} |