|
|
@ -61,15 +61,82 @@
|
|
|
|
#include "qpainter_p.h"
|
|
|
|
#include "qpainter_p.h"
|
|
|
|
#include "qtextengine_p.h"
|
|
|
|
#include "qtextengine_p.h"
|
|
|
|
|
|
|
|
|
|
|
|
// #define TQFONTCACHE_DEBUG
|
|
|
|
//#define TQFONTCACHE_DEBUG
|
|
|
|
#ifdef TQFONTCACHE_DEBUG
|
|
|
|
#ifdef TQFONTCACHE_DEBUG
|
|
|
|
# define FC_DEBUG tqDebug
|
|
|
|
# define FC_DEBUG tqDebug
|
|
|
|
#else
|
|
|
|
#else
|
|
|
|
# define FC_DEBUG if (FALSE) tqDebug
|
|
|
|
# define FC_DEBUG if (FALSE) tqDebug
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include <execinfo.h>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template<class T>
|
|
|
|
|
|
|
|
class CreationTracerNoop {
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
void newO(T* ) {}
|
|
|
|
|
|
|
|
void delO(T* ) {}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
template<class T>
|
|
|
|
|
|
|
|
class CreationTracer {
|
|
|
|
|
|
|
|
struct TracerData {
|
|
|
|
|
|
|
|
char **bt;
|
|
|
|
|
|
|
|
int bt_sz;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef TQMap<T*, TracerData> MapType;
|
|
|
|
|
|
|
|
MapType aliveObj;
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void newO(T* o) {
|
|
|
|
|
|
|
|
const size_t buf_sz = 128;
|
|
|
|
|
|
|
|
void *buf[buf_sz];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int bt_sz = backtrace (buf, buf_sz);
|
|
|
|
|
|
|
|
aliveObj.insert(o, TracerData{backtrace_symbols(buf, bt_sz), bt_sz} );
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void delO(T* o) {
|
|
|
|
|
|
|
|
auto it =aliveObj.find(o);
|
|
|
|
|
|
|
|
if(it!=aliveObj.end()) {
|
|
|
|
|
|
|
|
free(it.data().bt);
|
|
|
|
|
|
|
|
aliveObj.remove(it);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~CreationTracer() {
|
|
|
|
|
|
|
|
std::string fname = typeid(T).name();
|
|
|
|
|
|
|
|
fname.append("-undestroyed");
|
|
|
|
|
|
|
|
FILE *f = fopen(fname.c_str(), "w");
|
|
|
|
|
|
|
|
if(!f) {
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for(auto it = aliveObj.begin(), endIt = aliveObj.end(); it!=endIt; ++it) {
|
|
|
|
|
|
|
|
for(int i=0; i<it.data().bt_sz; ++i) {
|
|
|
|
|
|
|
|
fprintf(f, "%s\n", it.data().bt[i]);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
fprintf(f, "\n");
|
|
|
|
|
|
|
|
free(it.data().bt);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
fclose(f);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#define INIT_FIRST __attribute__ ((init_priority (101)))
|
|
|
|
|
|
|
|
//#define TQFONT_TRACE
|
|
|
|
|
|
|
|
//#define TQFONTMETRIC_TRACE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef TQFONT_TRACE
|
|
|
|
|
|
|
|
static CreationTracer<TQFont> INIT_FIRST TQFontTracer;
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
static CreationTracerNoop<TQFont> TQFontTracer;
|
|
|
|
|
|
|
|
#endif // TQFONT_TRACE
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#ifdef TQFONT_TRACE
|
|
|
|
|
|
|
|
static CreationTracer<TQFontMetrics> INIT_FIRST TQFontMetricsTracer;
|
|
|
|
|
|
|
|
#else
|
|
|
|
|
|
|
|
static CreationTracerNoop<TQFontMetrics> TQFontMetricsTracer;
|
|
|
|
|
|
|
|
#endif // TQFONT_TRACE
|
|
|
|
|
|
|
|
|
|
|
|
bool TQFontDef::operator==( const TQFontDef &other ) const
|
|
|
|
bool TQFontDef::operator==( const TQFontDef &other ) const
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -534,6 +601,7 @@ TQFontEngineData::~TQFontEngineData()
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
TQFont::TQFont( TQFontPrivate *data, TQPaintDevice *pd )
|
|
|
|
TQFont::TQFont( TQFontPrivate *data, TQPaintDevice *pd )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
TQFontTracer.newO(this);
|
|
|
|
d = new TQFontPrivate( *data );
|
|
|
|
d = new TQFontPrivate( *data );
|
|
|
|
TQ_CHECK_PTR( d );
|
|
|
|
TQ_CHECK_PTR( d );
|
|
|
|
d->paintdevice = pd;
|
|
|
|
d->paintdevice = pd;
|
|
|
@ -578,6 +646,7 @@ void TQFont::detach()
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
TQFont::TQFont()
|
|
|
|
TQFont::TQFont()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
TQFontTracer.newO(this);
|
|
|
|
const TQFont appfont = TQApplication::font();
|
|
|
|
const TQFont appfont = TQApplication::font();
|
|
|
|
d = appfont.d;
|
|
|
|
d = appfont.d;
|
|
|
|
d->ref();
|
|
|
|
d->ref();
|
|
|
@ -602,6 +671,7 @@ TQFont::TQFont()
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
TQFont::TQFont( const TQString &family, int pointSize, int weight, bool italic )
|
|
|
|
TQFont::TQFont( const TQString &family, int pointSize, int weight, bool italic )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
TQFontTracer.newO(this);
|
|
|
|
|
|
|
|
|
|
|
|
d = new TQFontPrivate;
|
|
|
|
d = new TQFontPrivate;
|
|
|
|
TQ_CHECK_PTR( d );
|
|
|
|
TQ_CHECK_PTR( d );
|
|
|
@ -632,6 +702,7 @@ TQFont::TQFont( const TQString &family, int pointSize, int weight, bool italic )
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
TQFont::TQFont( const TQFont &font )
|
|
|
|
TQFont::TQFont( const TQFont &font )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
TQFontTracer.newO(this);
|
|
|
|
d = font.d;
|
|
|
|
d = font.d;
|
|
|
|
d->ref();
|
|
|
|
d->ref();
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -641,6 +712,7 @@ TQFont::TQFont( const TQFont &font )
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
TQFont::~TQFont()
|
|
|
|
TQFont::~TQFont()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
TQFontTracer.delO(this);
|
|
|
|
if ( d->deref() )
|
|
|
|
if ( d->deref() )
|
|
|
|
delete d;
|
|
|
|
delete d;
|
|
|
|
d = 0;
|
|
|
|
d = 0;
|
|
|
@ -1893,6 +1965,7 @@ TQDataStream &operator>>( TQDataStream &s, TQFont &font )
|
|
|
|
TQFontMetrics::TQFontMetrics( const TQFont &font )
|
|
|
|
TQFontMetrics::TQFontMetrics( const TQFont &font )
|
|
|
|
: d( font.d ), painter( 0 ), fscript( TQFont::NoScript )
|
|
|
|
: d( font.d ), painter( 0 ), fscript( TQFont::NoScript )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
TQFontMetricsTracer.newO(this);
|
|
|
|
d->ref();
|
|
|
|
d->ref();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1905,6 +1978,7 @@ TQFontMetrics::TQFontMetrics( const TQFont &font )
|
|
|
|
TQFontMetrics::TQFontMetrics( const TQFont &font, TQFont::Script script )
|
|
|
|
TQFontMetrics::TQFontMetrics( const TQFont &font, TQFont::Script script )
|
|
|
|
: d( font.d ), painter( 0 ), fscript( script )
|
|
|
|
: d( font.d ), painter( 0 ), fscript( script )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
TQFontMetricsTracer.newO(this);
|
|
|
|
d->ref();
|
|
|
|
d->ref();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1915,6 +1989,7 @@ TQFontMetrics::TQFontMetrics( const TQFont &font, TQFont::Script script )
|
|
|
|
TQFontMetrics::TQFontMetrics( const TQPainter *p )
|
|
|
|
TQFontMetrics::TQFontMetrics( const TQPainter *p )
|
|
|
|
: painter ( (TQPainter *) p ), fscript( TQFont::NoScript )
|
|
|
|
: painter ( (TQPainter *) p ), fscript( TQFont::NoScript )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
TQFontMetricsTracer.newO(this);
|
|
|
|
#if defined(CHECK_STATE)
|
|
|
|
#if defined(CHECK_STATE)
|
|
|
|
if ( !painter->isActive() )
|
|
|
|
if ( !painter->isActive() )
|
|
|
|
tqWarning( "TQFontMetrics: Get font metrics between TQPainter::begin() "
|
|
|
|
tqWarning( "TQFontMetrics: Get font metrics between TQPainter::begin() "
|
|
|
@ -1944,6 +2019,7 @@ TQFontMetrics::TQFontMetrics( const TQPainter *p )
|
|
|
|
TQFontMetrics::TQFontMetrics( const TQFontMetrics &fm )
|
|
|
|
TQFontMetrics::TQFontMetrics( const TQFontMetrics &fm )
|
|
|
|
: d( fm.d ), painter( 0 ), fscript( fm.fscript )
|
|
|
|
: d( fm.d ), painter( 0 ), fscript( fm.fscript )
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
TQFontMetricsTracer.newO(this);
|
|
|
|
d->ref();
|
|
|
|
d->ref();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
@ -1953,6 +2029,7 @@ TQFontMetrics::TQFontMetrics( const TQFontMetrics &fm )
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
TQFontMetrics::~TQFontMetrics()
|
|
|
|
TQFontMetrics::~TQFontMetrics()
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
TQFontMetricsTracer.delO(this);
|
|
|
|
if ( d->deref() )
|
|
|
|
if ( d->deref() )
|
|
|
|
delete d;
|
|
|
|
delete d;
|
|
|
|
}
|
|
|
|
}
|
|
|
|