예제 #1
0
static void optimizeNode(fz_node *node) {
	if (!node) {
		return;
	}

	switch (node->kind) {
		case FZ_NIMAGE: optimizeImage((fz_imagenode*)node); break;
		case FZ_NMETA: optimizeMeta((fz_metanode*)node); break;
		case FZ_NOVER: optimizeOver((fz_overnode*)node); break;
		case FZ_NMASK: optimizeMask((fz_masknode*)node); break;
		case FZ_NBLEND: optimizeBlend((fz_blendnode*)node); break;
		case FZ_NTRANSFORM: optimizeTransform((fz_transformnode*)node); break;
		case FZ_NCOLOR: optimizeSolid((fz_solidnode*)node); break;
		case FZ_NPATH: optimizePath((fz_pathnode*)node); break;
		case FZ_NTEXT: optimizeText((fz_textnode*)node); break;
		case FZ_NSHADE: optimizeShade((fz_shadenode*)node); break;
		case FZ_NLINK: optimizeLink((fz_linknode*)node); break;
	}
}
예제 #2
0
PGE_Size FontManager::textSize(QString &text, int fontID, int max_line_lenght, bool cut, int ttfFontPixelSize)
{
    if(!isInit) return PGE_Size(text.length() * 20, text.split(QChar(QChar::LineFeed)).size() * 20);

    if(text.isEmpty()) return PGE_Size(0, 0);

    if(max_line_lenght <= 0)
        max_line_lenght = 1000;

    if(cut)
    {
        for(int i = 0; i < text.size(); i++)
        {
            if(text[i] == QChar(QChar::LineFeed))
            {
                text.remove(i, text.size() - i);
                break;
            }
        }
    }

    //Use Raster font
    if((fontID >= 0) && (fontID < rasterFonts.size()))
    {
        if(rasterFonts[fontID].isLoaded())
            return rasterFonts[fontID].textSize(text, max_line_lenght);
    }

    //Use TTF font
    QFont fnt = font();

    if(ttfFontPixelSize > 0)
        fnt.setPixelSize(ttfFontPixelSize);

    QFontMetrics meter(fnt);
    optimizeText(text, max_line_lenght);
    QSize meterSize = meter.boundingRect(text).size();
    return PGE_Size(meterSize.width(), meterSize.height());
}