From d7e745a1483be122b3f74e8ac8daac0bd35e7e09 Mon Sep 17 00:00:00 2001 From: "alex.fritze%crocodile-clips.com" Date: Sat, 7 Feb 2004 14:23:04 +0000 Subject: [PATCH] Forgot this file first time round... Landing of SVG_20020806_BRANCH, Bug 182533. Refactoring of SVG backend, new GDI+ and Libart rendering backends, text support on Windows (GDI+), rudimentary text support on Linux (libart/freetype2), presentation attributes, lots of bug fixes (see bug 182533 for dependency list). Not part of default build; code is #ifdef'ed out. r=sicking, sr=jst for dom and htmlparser changes r=bsmedberg, sr=tor for config changes r=dbaron, sr=bzbarsky for content and layout changes r=tor, sr=bzbarsky for gfx changes --- .../src/libart/nsSVGLibartFreetype.cpp | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 layout/svg/renderer/src/libart/nsSVGLibartFreetype.cpp diff --git a/layout/svg/renderer/src/libart/nsSVGLibartFreetype.cpp b/layout/svg/renderer/src/libart/nsSVGLibartFreetype.cpp new file mode 100644 index 000000000000..6deb56f67404 --- /dev/null +++ b/layout/svg/renderer/src/libart/nsSVGLibartFreetype.cpp @@ -0,0 +1,98 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ----- BEGIN LICENSE BLOCK ----- + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is the Mozilla SVG project. + * + * The Initial Developer of the Original Code is + * Crocodile Clips Ltd.. + * Portions created by the Initial Developer are Copyright (C) 2003 + * the Initial Developer. All Rights Reserved. + * + * Contributor(s): + * Alex Fritze (original author) + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the NPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ----- END LICENSE BLOCK ----- */ + +#include "nsSVGLibartFreetype.h" +#include "nsIServiceManager.h" +#include "nsArray.h" +#include "nsString.h" + +nsCOMPtr nsSVGLibartFreetype::ft2; +nsCOMPtr nsSVGLibartFreetype::fontCatalog; + +PRBool nsSVGLibartFreetype::Init() +{ + NS_ASSERTION(!ft2, "ft2 already initialized"); + ft2 = do_GetService(NS_FREETYPE2_CONTRACTID); + if (!ft2) return PR_FALSE; + + fontCatalog = do_GetService("@mozilla.org/gfx/xfontcatalogservice;1"); + if (!fontCatalog) { + NS_ERROR("Font catalog initialization failure"); + ft2 = nsnull; + return PR_FALSE; + } + + return PR_TRUE; +} + +void nsSVGLibartFreetype::Shutdown() +{ + NS_ASSERTION(ft2, "ft2 never initialized"); + ft2 = nsnull; + fontCatalog = nsnull; +} + +PRBool nsSVGLibartFreetype::HasSuitableFonts() +{ + NS_ASSERTION(fontCatalog, "freetype not initialized"); + + nsCOMPtr arr; + nsCAutoString empty; + fontCatalog->GetFontCatalogEntries(empty, empty, + nsIFontCatalogService::kFCWeightAny, + nsIFontCatalogService::kFCWidthAny, + nsIFontCatalogService::kFCSlantAny, + nsIFontCatalogService::kFCSpacingAny, + getter_AddRefs(arr)); + PRUint32 count; + arr->GetLength(&count); +#ifdef DEBUG + { + printf("Freetype Families available:\n"); + for (PRUint32 i=0;i font = do_QueryElementAt(arr, i); + nsCAutoString family, style, vendor; + font->GetFamilyName(family); + font->GetStyleName(style); + font->GetVendorID(vendor); + printf("* %s, %s, %s\n", family.get(), style.get(), vendor.get()); + } + } +#endif + return (count!=0); +}