-rw-r--r-- | freetype/.cvsignore | 5 | ||||
-rw-r--r-- | freetype/fontfactoryttf_qws.cpp | 4 | ||||
-rw-r--r-- | freetype/fontfactoryttf_qws.h | 4 | ||||
-rw-r--r-- | freetype/freetype.pro | 19 | ||||
-rw-r--r-- | freetype/freetypefactoryimpl.cpp | 4 | ||||
-rw-r--r-- | freetype/freetypefactoryimpl.h | 6 | ||||
-rw-r--r-- | freetype/opie-freetype.control | 8 | ||||
-rw-r--r-- | freetype/qfontdata_p.h | 6 |
8 files changed, 26 insertions, 30 deletions
diff --git a/freetype/.cvsignore b/freetype/.cvsignore new file mode 100644 index 0000000..fccc477 --- a/dev/null +++ b/freetype/.cvsignore @@ -0,0 +1,5 @@ +moc_* +*.moc +Makefile* +qimpenprefbase.h +qimpenprefbase.cpp diff --git a/freetype/fontfactoryttf_qws.cpp b/freetype/fontfactoryttf_qws.cpp index 66fd96a..5aa53fb 100644 --- a/freetype/fontfactoryttf_qws.cpp +++ b/freetype/fontfactoryttf_qws.cpp @@ -1,238 +1,238 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "fontfactoryttf_qws.h" #ifdef QT_NO_FREETYPE #include "qfontdata_p.h" #include <string.h> #include <stdio.h> #define FLOOR(x) ((x) & -64) #define CEIL(x) (((x)+63) & -64) #define TRUNC(x) ((x) >> 6) extern "C" { #include <ft2build.h> #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_OUTLINE_H #include FT_BBOX_H } class QDiskFontFT : public QDiskFontPrivate { public: FT_Face face; }; class QRenderedFontFT : public QRenderedFont { public: QRenderedFontFT(QDiskFont* f, const QFontDef &d) : QRenderedFont(f,d) { QDiskFontFT *df = (QDiskFontFT*)(f->p); myface=df->face; selectThisSize(); // A 1-pixel baseline is excluded in Qt/Windows/X11 fontmetrics // (see QFontMetrics::height()) // fascent=CEIL(myface->size->metrics.ascender)/64; fdescent=-FLOOR(myface->size->metrics.descender)/64-1; fmaxwidth=CEIL(myface->size->metrics.max_advance)/64; fleading=CEIL(myface->size->metrics.height)/64 - fascent - fdescent + 1; // FT has these in font units funderlinepos = ptsize/200+1; funderlinewidth = ptsize/200+1; } ~QRenderedFontFT() { } bool unicode(int & i) const { int ret; FT_Face theface=myface; ret=FT_Get_Char_Index(theface,i); if (ret==0) { return FALSE; } else { i=ret; return TRUE; } } bool inFont(QChar ch) const { int index = ch.unicode(); return unicode(index); } QGlyph render(QChar ch) { selectThisSize(); int index = ch.unicode(); if ( !unicode(index) ) index = 0; QGlyph result; FT_Error err; err=FT_Load_Glyph(myface,index,FT_LOAD_DEFAULT); if(err) qFatal("Load glyph error %x",err); int width,height,pitch,size = 0; FT_Glyph glyph; err=FT_Get_Glyph( myface->glyph, &glyph ); if(err) qFatal("Get glyph error %x",err); FT_BBox bbox; FT_Glyph_Get_CBox(glyph, ft_glyph_bbox_gridfit, &bbox); FT_Vector origin; origin.x = -bbox.xMin; origin.y = -bbox.yMin; if ( FT_IS_SCALABLE(myface) ) { err=FT_Glyph_To_Bitmap(&glyph, smooth ? ft_render_mode_normal : ft_render_mode_mono, &origin, 1); // destroy original glyph if(err) qWarning("Get bitmap error %d",err); } if ( !err ) { FT_Bitmap bm = ((FT_BitmapGlyph)glyph)->bitmap; pitch = bm.pitch; size=pitch*bm.rows; result.data = new uchar[size]; // XXX memory manage me width=bm.width; height=bm.rows; if ( size ) { memcpy( result.data, bm.buffer, size ); } else { result.data = new uchar[0]; // XXX memory manage me } } else { result.data = new uchar[0]; // XXX memory manage me } result.metrics = new QGlyphMetrics; memset((char*)result.metrics, 0, sizeof(QGlyphMetrics)); result.metrics->bearingx=myface->glyph->metrics.horiBearingX/64; result.metrics->advance=myface->glyph->metrics.horiAdvance/64; result.metrics->bearingy=myface->glyph->metrics.horiBearingY/64; result.metrics->linestep=pitch; result.metrics->width=width; result.metrics->height=height; FT_Done_Glyph( glyph ); return result; } FT_Face myface; private: void selectThisSize() { int psize=(ptsize<<6)/10; // Assume 72 dpi for now const int dpi=72; FT_Error err; err=FT_Set_Char_Size(myface, psize,psize,dpi,dpi); if (err) { if (FT_IS_SCALABLE(myface) ) { qWarning("Set char size error %x for size %d",err,ptsize); } else { int best=-1; int bdh=99; for (int i=0; i<myface->num_fixed_sizes; i++) { FT_Bitmap_Size& sz=myface->available_sizes[i]; int dh = sz.height - ptsize*dpi/72/10; dh = QABS(dh); if ( dh < bdh ) { bdh=dh; best=i; } } if ( best >= 0 ) err=FT_Set_Pixel_Sizes(myface, myface->available_sizes[best].width, myface->available_sizes[best].height); if ( err ) qWarning("Set char size error %x for size %d",err,ptsize); } } } }; QFontFactoryFT::QFontFactoryFT() { FT_Error err; err=FT_Init_FreeType(&library); if(err) { qFatal("Couldn't initialise Freetype library"); } } QFontFactoryFT::~QFontFactoryFT() { } QString QFontFactoryFT::name() { return "FT"; } QRenderedFont * QFontFactoryFT::get(const QFontDef & f,QDiskFont * f2) { return new QRenderedFontFT(f2, f); } void QFontFactoryFT::load(QDiskFont * qdf) const { if(qdf->loaded) return; QDiskFontFT *f = new QDiskFontFT; qdf->p=f; FT_Error err; err=FT_New_Face(library,qdf->file.ascii(),0,&(f->face)); if(err) { qFatal("Error %d opening face",err); } qdf->loaded=true; } #endif // QT_NO_FREETYPE diff --git a/freetype/fontfactoryttf_qws.h b/freetype/fontfactoryttf_qws.h index 82b7e49..4ba8ce5 100644 --- a/freetype/fontfactoryttf_qws.h +++ b/freetype/fontfactoryttf_qws.h @@ -1,64 +1,64 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef FONTFACTORY_FT_H #define FONTFACTORY_FT_H #include <qfontmanager_qws.h> #if QT_VERSION >= 300 # include <private/qfontdata_p.h> #else # include "qfontdata_p.h" #endif #ifdef QT_NO_FREETYPE extern "C" { #include <ft2build.h> #include FT_FREETYPE_H } // ascent, descent, width(ch), width(string), maxwidth? // leftbearing, rightbearing, minleftbearing,minrightbearing // leading class QFontFactoryFT : public QFontFactory { public: QFontFactoryFT(); virtual ~QFontFactoryFT(); QRenderedFont * get(const QFontDef &,QDiskFont *); virtual void load(QDiskFont *) const; virtual QString name(); private: friend class QRenderedFontFT; FT_Library library; }; #endif // QT_NO_FREETYPE #endif // QFONTFACTORY_FT_H diff --git a/freetype/freetype.pro b/freetype/freetype.pro index 1196db9..5800b48 100644 --- a/freetype/freetype.pro +++ b/freetype/freetype.pro @@ -1,28 +1,11 @@ TEMPLATE = lib CONFIG += qt warn_on release HEADERS = fontfactoryttf_qws.h freetypefactoryimpl.h SOURCES = fontfactoryttf_qws.cpp freetypefactoryimpl.cpp qt2:HEADERS += qfontdata_p.h TARGET = freetypefactory -DESTDIR = ../plugins/fontfactories +DESTDIR = $(OPIEDIR)/plugins/fontfactories INCLUDEPATH += $(OPIEDIR)/include DEPENDPATH += $(OPIEDIR)/include -#INCLUDEPATH += $(OPIEDIR)/include -#DEPENDPATH += /usr/local/include/freetype2 LIBS += -lqpe -lfreetype VERSION = 1.0.0 - -TRANSLATIONS = ../i18n/de/libfreetypefactory.ts \ - ../i18n/en/libfreetypefactory.ts \ - ../i18n/es/libfreetypefactory.ts \ - ../i18n/fr/libfreetypefactory.ts \ - ../i18n/hu/libfreetypefactory.ts \ - ../i18n/ja/libfreetypefactory.ts \ - ../i18n/ko/libfreetypefactory.ts \ - ../i18n/no/libfreetypefactory.ts \ - ../i18n/pl/libfreetypefactory.ts \ - ../i18n/pt/libfreetypefactory.ts \ - ../i18n/pt_BR/libfreetypefactory.ts \ - ../i18n/sl/libfreetypefactory.ts \ - ../i18n/zh_CN/libfreetypefactory.ts \ - ../i18n/zh_TW/libfreetypefactory.ts diff --git a/freetype/freetypefactoryimpl.cpp b/freetype/freetypefactoryimpl.cpp index 8c1afab..71460b2 100644 --- a/freetype/freetypefactoryimpl.cpp +++ b/freetype/freetypefactoryimpl.cpp @@ -1,57 +1,57 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "fontfactoryttf_qws.h" #include "freetypefactoryimpl.h" FreeTypeFactoryImpl::FreeTypeFactoryImpl() : factory(0), ref(0) { } FreeTypeFactoryImpl::~FreeTypeFactoryImpl() { delete factory; } QFontFactory *FreeTypeFactoryImpl::fontFactory() { if ( !factory ) factory = new QFontFactoryFT(); return factory; } QRESULT FreeTypeFactoryImpl::queryInterface( const QUuid &uuid, QUnknownInterface **iface ) { *iface = 0; if ( uuid == IID_QUnknown ) *iface = this; else if ( uuid == IID_FontFactory ) *iface = this; if ( *iface ) (*iface)->addRef(); return QS_OK; } Q_EXPORT_INTERFACE() { Q_CREATE_INSTANCE( FreeTypeFactoryImpl ) } diff --git a/freetype/freetypefactoryimpl.h b/freetype/freetypefactoryimpl.h index d7c376e..4c0d5f5 100644 --- a/freetype/freetypefactoryimpl.h +++ b/freetype/freetypefactoryimpl.h @@ -1,40 +1,40 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ -#include <fontfactoryinterface.h> +#include <qpe/fontfactoryinterface.h> class QFontFactoryFT; class FreeTypeFactoryImpl : public FontFactoryInterface { public: FreeTypeFactoryImpl(); virtual ~FreeTypeFactoryImpl(); QRESULT queryInterface( const QUuid&, QUnknownInterface** ); Q_REFCOUNT virtual QFontFactory *fontFactory(); private: QFontFactoryFT *factory; ulong ref; }; diff --git a/freetype/opie-freetype.control b/freetype/opie-freetype.control new file mode 100644 index 0000000..f1ce408 --- a/dev/null +++ b/freetype/opie-freetype.control @@ -0,0 +1,8 @@ +Files: plugins/fontfactories/libfreetypefactory* +Priority: optional +Section: opie/plugins +Maintainer: Opie <opie@llornkcor.com> +Architecture: arm +Version: $QPE_VERSION-$SUB_VERSION +Depends: opie-base ($QPE_VERSION) +Description: Freetype fontfactory plugin diff --git a/freetype/qfontdata_p.h b/freetype/qfontdata_p.h index fc22c72..9da1d06 100644 --- a/freetype/qfontdata_p.h +++ b/freetype/qfontdata_p.h @@ -1,94 +1,94 @@ /********************************************************************** -** Copyright (C) 2000 Trolltech AS. All rights reserved. +** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ** -** This file is part of Qtopia Environment. +** This file is part of the Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #ifndef QFONTDATA_P_H #define QFONTDATA_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists for the convenience // of qmenudata.cpp, qmenubar.cpp, qmenubar.cpp, qpopupmenu.cpp, // qmotifstyle.cpp and qwindowssstyle.cpp. This header file may change // from version to version without notice, or even be removed. // // We mean it. -// +// oh, we're really scared. // #ifndef QT_H #endif // QT_H struct QFontDef { // font definition QString family; QString addStyle; int pointSize; uint styleHint : 8; uint styleStrategy : 8; uint charSet : 8; uint weight : 8; uint italic : 1; uint underline : 1; uint strikeOut : 1; uint fixedPitch : 1; uint hintSetByUser : 1; uint rawMode : 1; uint dirty : 1; short lbearing; short rbearing; }; class QFontInternal; class QTextCodec; struct QFontData : public QShared { QFontData() : exactMatch(FALSE), fin(0), printerHackFont( 0 ) {} QFontData( const QFontData &d ) : QShared(d), req(d.req), exactMatch(d.exactMatch), fin(d.fin), printerHackFont(0) // Copy the QShared count as well. The count may need to be // reset when using the QFontData class, see QFont::QFont(QFontData*) {} ~QFontData() {} QFontData &operator=( const QFontData &d ) { req = d.req; exactMatch = d.exactMatch; fin = d.fin; printerHackFont=d.printerHackFont; return *this; } QFontDef req; // requested font bool exactMatch; QFontInternal *fin; QFont *printerHackFont; const QTextCodec *mapper() const; void *fontSet() const; }; #endif // QFONTDATA_P_H |