summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--freetype/.cvsignore5
-rw-r--r--freetype/fontfactoryttf_qws.cpp4
-rw-r--r--freetype/fontfactoryttf_qws.h4
-rw-r--r--freetype/freetype.pro19
-rw-r--r--freetype/freetypefactoryimpl.cpp4
-rw-r--r--freetype/freetypefactoryimpl.h6
-rw-r--r--freetype/opie-freetype.control8
-rw-r--r--freetype/qfontdata_p.h6
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