コード例 #1
0
void CL_FontProvider_Freetype::load_font(const CL_StringRef &resource_id, CL_ResourceManager *resources)
{
	CL_Resource resource = resources->get_resource(resource_id);
	if (resource.get_type() != "font")
		throw CL_Exception(cl_format("Resource '%1' is not of type 'font'", resource.get_name()));

	CL_DomElement freetype_element = resource.get_element().named_item("freetype").to_element();
	if (freetype_element.is_null())
		throw CL_Exception(cl_format("Font resource '%1' has no 'freetype' child element", resource.get_name()));

	CL_FontDescription desc;

	if (freetype_element.has_attribute("file"))
		desc.set_typeface_name(freetype_element.get_attribute("file"));
	else
		throw CL_Exception(cl_format("Font resource '%1' has no 'file' attribute", resource.get_name()));

	if (freetype_element.has_attribute("height"))
		desc.set_height(freetype_element.get_attribute_int("height", 0));
	else
		throw CL_Exception(cl_format("Font resource '%1' has no 'height' attribute", resource.get_name()));

	if (freetype_element.has_attribute("average_width"))
		desc.set_average_width(freetype_element.get_attribute_int("average_width", 0));

	if (freetype_element.has_attribute("anti_alias"))
		desc.set_anti_alias(freetype_element.get_attribute_bool("anti_alias", true));

	if (freetype_element.has_attribute("subpixel"))
		desc.set_subpixel(freetype_element.get_attribute_bool("subpixel", true));

	load_font(desc, resources->get_directory(resource));
}
コード例 #2
0
void TestApp::test_resources(void)
{
	CL_Console::write_line(" Header: resource.h");
	CL_Console::write_line("  Class: CL_Resource");

	// Construct resource manager. This will cause sig_resource_added() to be signalled for each
	// resource object located in the resource file. This means ResourceApp::on_resource_added will
	// get called for each resource.
	CL_ResourceManager resources("resources.xml");

	// Lets try to access some of the clanlib objects in the resource file:
	CL_String config_name = resources.get_string_resource("Configuration/name", "");
	int config_width = resources.get_integer_resource("Configuration/width", 0 );
	int config_height = resources.get_integer_resource("Configuration/height", 0 );

	CL_Console::write_line(CL_String("name = ") + config_name );
	CL_Console::write_line(CL_String("width = ") + CL_StringHelp::int_to_text(config_width));
	CL_Console::write_line(CL_String("height = ") + CL_StringHelp::int_to_text(config_height));

	// Get a list over all classes
	std::vector<CL_String> v = resources.get_resource_names_of_type("uclass", "Classes");
	std::vector<CL_String>::iterator it;
	for(it = v.begin(); it != v.end(); ++it)
	{
		// Get one of our custom resources:
		CL_Resource resource = resources.get_resource(*it);

		// Its possible to access the dom element object in the resource:
		CL_DomElement element = resource.get_element();
		int strength = CL_StringHelp::text_to_int(element.get_attribute("strength"));
		int magic = CL_StringHelp::text_to_int(element.get_attribute("magic"));

		CL_Console::write_line(CL_String("\n") + "name = " + resource.get_name());
		CL_Console::write_line(CL_String("strength = ") + CL_StringHelp::int_to_text(strength));
		CL_Console::write_line(CL_String("magic = ") + CL_StringHelp::int_to_text(magic) );
	}

}
コード例 #3
0
void CL_ResourceData_Font::on_load()
{
    CL_Resource resource = get_resource();
    CL_ResourceManager manager = resource.get_manager();

    CL_DomElement system_element = resource.get_element().named_item("system").to_element();
    CL_DomElement bitmap_element = resource.get_element().named_item("bitmap").to_element();

    // First check if it's a system font
    if (!system_element.is_null())
    {
        if (!system_element.has_attribute("height"))
            throw CL_Error("System font resource " + resource.get_name() + " has no 'height' attribute.");

        const std::string font_name = system_element.get_attribute("font_name");
        const int height = CL_String::to_int(system_element.get_attribute("height"));
        int width = 0;

        bool bold = false;
        bool italic = false;
        bool underline = false;
        bool strikeout = false;

        if (system_element.has_attribute("width"))
            width = CL_String::to_int(system_element.get_attribute("width"));

        if (system_element.has_attribute("bold"))
            bold = (CL_String::to_int(system_element.get_attribute("bold")) != 0);

        if (system_element.has_attribute("italic"))
            italic = (CL_String::to_int(system_element.get_attribute("italic")) != 0);

        if (system_element.has_attribute("underline"))
            underline = (CL_String::to_int(system_element.get_attribute("underline")) != 0);

        if (system_element.has_attribute("strikeout"))
            strikeout = (CL_String::to_int(system_element.get_attribute("strikeout")) != 0);

        if (system_element.has_attribute("letters"))
        {
            font = CL_Font(
                       font_name,
                       system_element.get_attribute("letters"),
                       height,
                       width,
                       bold,
                       italic,
                       underline,
                       strikeout);
        }
        else
        {
            font = CL_Font(
                       font_name,
                       height,
                       width,
                       bold,
                       italic,
                       underline,
                       strikeout);
        }
    }
    else if (!bitmap_element.is_null())
    {
        if (!bitmap_element.has_attribute("glyphs"))
            throw CL_Error("Font resource " + resource.get_name() + " has no 'glyphs' attribute.");

        if (!bitmap_element.has_attribute("letters"))
            throw CL_Error("Font resource " + resource.get_name() + " has no 'letters' attribute.");

        //Set most values to CL_Font defaults, then we can override them with options if they exist
        const CL_Sprite spr_glyphs(bitmap_element.get_attribute("glyphs"), &manager);
        const std::string letters = bitmap_element.get_attribute("letters");
        int spacelen = -1;
        bool monospace = false;

        if (bitmap_element.has_attribute("spacelen"))
            spacelen = CL_String::to_int(bitmap_element.get_attribute("spacelen"));

        if (bitmap_element.has_attribute("monospace"))
            monospace = (CL_String::to_int(bitmap_element.get_attribute("monospace")) != 0);

        font = CL_Font(
                   spr_glyphs,
                   letters,
                   spacelen,
                   monospace);
    }
    else
    {
        throw CL_Error(CL_String::format("Font resource %1 did not have a <system> or <bitmap> child element!", resource.get_name()));
    }

    if (resource.get_element().has_attribute("width_offset"))
        font.set_width_offset(CL_String::to_int(resource.get_element().get_attribute("width_offset")));

    if (resource.get_element().has_attribute("height_offset"))
        font.set_height_offset(CL_String::to_int(resource.get_element().get_attribute("height_offset")));

    if (resource.get_element().has_attribute("delims"))
        font.set_delims(resource.get_element().get_attribute("delims"));
}