Exemplo n.º 1
0
osg::Image* textImage()
{
#ifdef OSGAGG_USE_FREETYPE
    unsigned char* buffer = new unsigned char[640 * 480 * 4];
    agg::rendering_buffer renderingBuf( buffer, 640, 480, 640*4 );
    agg::pixfmt_rgba32 pixelFormat( renderingBuf );
    agg::renderer_base<agg::pixfmt_rgba32> renderer( pixelFormat );
    renderer.clear( agg::rgba8(0, 0, 0, 0) );
    
    agg::renderer_scanline_bin_solid< agg::renderer_base<agg::pixfmt_rgba32> > solidBin( renderer );
    solidBin.color( agg::rgba8(255, 255, 255, 255) );
    
    agg::font_engine_freetype_int32 font;
    agg::font_cache_manager<agg::font_engine_freetype_int32> fontManager(font);
    if ( font.load_font("arial.ttf", 0, agg::glyph_ren_native_mono) )
    {
        font.hinting( true );
        font.height( 64 );
        font.width( 64 );
        font.flip_y( true );
        
        agg::trans_affine transformation;
        transformation *= agg::trans_affine_rotation( agg::deg2rad(-4.0) );
        font.transform( transformation );
        
        double x = 30.0, y = 450.0;
        const char* text = "Hello World!";
        const char* ptr = text;
        while ( *ptr )
        {
            const agg::glyph_cache* glyph = fontManager.glyph( *ptr );
            if ( glyph )
            {
                fontManager.add_kerning( &x, &y );
                fontManager.init_embedded_adaptors( glyph, x, y );
                
                switch ( glyph->data_type )
                {
                case agg::glyph_data_mono:
                    agg::render_scanlines(
                        fontManager.mono_adaptor(), fontManager.mono_scanline(), solidBin );
                    break;
                default: break;
                }
                
                x += glyph->advance_x;
                y += glyph->advance_y;
            }
            ptr++;
        }
    }
    
    osg::ref_ptr<osg::Image> image = new osg::Image;
    image->setImage( 640, 480, 1, GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, buffer, osg::Image::USE_NEW_DELETE );
    return image.release();
#else
    OSG_NOTICE << "[osgagg] FreeType support not built" << std::endl;
    return new osg::Image;
#endif
}
Exemplo n.º 2
0
void MSLayout::positionLabel(void)
{
  if (label()->columns()>0)
   {
     int xpos,ypos;
     int indent;
     if (titleAlignment()&MSLeft) 
      {
	indent=XTextWidth(fontManager()->fontStruct(label()->font()),"M",1);
	xpos=highlightThickness()+shadowThickness()+margin()+indent;
      }
     else if (titleAlignment()&MSRight) 
      {
	indent=XTextWidth(fontManager()->fontStruct(label()->font()),"M",1);
	xpos=width()-(highlightThickness()+shadowThickness()+margin())-indent-label()->width();
      }
     else xpos=width()/2-label()->width()/2;

     if (titleAlignment()&MSTop) 
      {
	topShadowOffset(label()->height());
	ypos=0;
      }
     else if (titleAlignment()&MSBottom) 
      {
	topShadowOffset(0);
	ypos=highlightThickness()+shadowThickness()+margin();
      }
     else
      { 
	topShadowOffset(label()->height()/2);
	ypos=0;
      }
     label()->moveTo(xpos,ypos);
     if (mapped()==MSFalse) label()->map();
   }
  else
   { 
     label()->unmap();
     topShadowOffset(0);
   }
}
Exemplo n.º 3
0
int FontConverter::exec() {
    /* Font converter dependencies */
    PluginManager::Manager<Trade::AbstractImageConverter> imageConverterManager(Utility::Directory::join(args.value("plugin-dir"), "imageconverters/"));

    /* Load font */
    PluginManager::Manager<Text::AbstractFont> fontManager(Utility::Directory::join(args.value("plugin-dir"), "fonts/"));
    if(!(fontManager.load(args.value("font")) & PluginManager::LoadState::Loaded))
        std::exit(1);
    std::unique_ptr<Text::AbstractFont> font = fontManager.instance(args.value("font"));

    /* Load font converter */
    PluginManager::Manager<Text::AbstractFontConverter> converterManager(Utility::Directory::join(args.value("plugin-dir"), "fontconverters/"));
    if(!(converterManager.load(args.value("converter")) & PluginManager::LoadState::Loaded))
        std::exit(1);
    std::unique_ptr<Text::AbstractFontConverter> converter = converterManager.instance(args.value("converter"));

    /* Open font */
    if(!font->openFile(args.value("input"), args.value<Float>("font-size"))) {
        Error() << "Cannot open font" << args.value("input");
        std::exit(1);
    }

    /* Create distance field glyph cache if radius is specified */
    std::unique_ptr<Text::GlyphCache> cache;
    if(!args.value<Vector2i>("output-size").isZero()) {
        Debug() << "Populating distance field glyph cache...";

        cache.reset(new Text::DistanceFieldGlyphCache(
            args.value<Vector2i>("atlas-size"),
            args.value<Vector2i>("output-size"),
            args.value<Int>("radius")));

    /* Otherwise use normal cache */
    } else {
        Debug() << "Zero-size distance field output specified, populating normal glyph cache...";

        cache.reset(new Text::GlyphCache(args.value<Vector2i>("atlas-size")));
    }

    /* Fill the cache */
    font->fillGlyphCache(*cache, args.value("characters"));

    Debug() << "Converting font...";

    /* Convert the font */
    if(!converter->exportFontToFile(*font, *cache, args.value("output"), args.value("characters"))) {
        Error() << "Cannot export font to" << args.value("output");
        std::exit(1);
    }

    Debug() << "Done.";

    return 0;
}
Exemplo n.º 4
0
int MSLayout::idealWidth(void) const
{
  int offset=highlightThickness()+shadowThickness()+margin();
  int w=(vectorWidth()+2*innerWidth()+(columns()-1)*columnSpacing()+2*offset);
  if (label()->mapped()==MSTrue)
   {
     int lw=label()->width()+2*offset;
     if ((titleAlignment()&MSLeft)||(titleAlignment()&MSRight))
     lw+=(2*XTextWidth(fontManager()->fontStruct(label()->font()),"M",1));
     return (w>lw)?w:lw;
   }
  else return w;
}
Exemplo n.º 5
0
				View *CreateView(client::IRenderer *renderer, client::IAudioDevice *dev) override {
					Handle<client::FontManager> fontManager(new client::FontManager(renderer),
					                                        false);
					view.Set(new StartupScreen(renderer, dev, helper, fontManager), true);
					return view;
				}