Exemple #1
0
void CheckBox::PaintBox(Canvas& canvas, const Rect& box_rect) const {

	//Paint the box.
    canvas.SetBrushWithColor(GetBoxBackgroundColor());
    canvas.DrawRectangle(box_rect);

	canvas.SetBrushWithColor(GetBoxBorderColor());
	canvas.DrawRectangleFrame(box_rect, 1);

	//Paint the check state mark.
	auto check_state = GetCheckState();

	if (check_state == CheckState::Indeterminate) {
		Rect mark_rect = box_rect;
		mark_rect.Inflate(-3);
		canvas.DrawRectangle(mark_rect);
	}
	else if (check_state == CheckState::Checked) {

		auto path = GetResourceFactory()->CreatePathGeometry();
		if (path == nullptr) {
			return;
		}

		auto sink = path->Open();
		if (sink == nullptr) {
			return;
		}

		Rect mark_rect = box_rect;
		mark_rect.Inflate(-2);

		Point start_point(mark_rect.position.x + mark_rect.size.width, mark_rect.position.y);
		Point middle_point(mark_rect.position.x + mark_rect.size.width * 0.4f, mark_rect.position.y + mark_rect.size.height - 1);
		Point end_point(mark_rect.position.x, mark_rect.position.y + mark_rect.size.height * 0.4f);

		sink->BeginFigure(start_point, GeometrySink::BeginFigureOption::Hollow);
		sink->AddLine(middle_point);
		sink->AddLine(end_point);
		sink->EndFigure(GeometrySink::EndFigureOption::Open);
		sink->Close();

		canvas.DrawGeometryFrame(path, 1.5);
	}
}
/* for force loading form packages */
CResourcePtr CResourceManager::LoadResourceFromXml(const nstring &filename, const CFilesPackage &package)
{
	CResourcePtr res;
	nstring rname, rgroup;
	CResourceManager *manager = NULL;

	if(!package.IsOpened())
		return res;

	nova::CMemoryBuffer xmlfile = package.GetFile(filename);
	if(xmlfile.GetBegin() && ( package.GetFileExt(filename) == "xml"))
	{
		xmlDocPtr doc = NULL;
		doc = xmlParseMemory((char *)xmlfile.GetBegin(), xmlfile.GetBufferSize());

		if(doc == NULL)
			throw NOVA_EXP("CResourceManager::LoadResourceFromXml - Parse error of xml file from memory", BAD_OPERATION);

		xmlNodePtr cur = xmlDocGetRootElement(doc);
		if(cur == NULL)
		{
			xmlFreeDoc(doc);
			throw NOVA_EXP("CResourceManager::LoadResourceFromXml - Parse error xml root element.", BAD_OPERATION);
		}

		const xmlChar * caption = cur->name;
		if(xmlStrcmp(caption, (xmlChar *)"NovaResource"))
		{
			xmlFreeDoc(doc);
			throw NOVA_EXP("CResourceManager::LoadResourceFromXml - this xml file is not a nova resource file.", BAD_OPERATION);
		}

		cur = cur->children;
		xmlNodePtr dataNode = NULL;
		while(cur != NULL)
		{
			if(xmlIsBlankNode(cur))
			{
				cur = cur->next;
				continue;
			}

			if(!xmlStrcmp(cur->name, (xmlChar *)"ResourceHeader"))
			{
				cur = cur->children;
				continue;
			}

			if(!xmlStrcmp(cur->name, (xmlChar *) "ResourceName"))
				rname.append(reinterpret_cast<char *>(cur->children->content));
			if(!xmlStrcmp(cur->name, (xmlChar *) "ResourceGroup"))
				rgroup.append(reinterpret_cast<char *>(cur->children->content));

			if(!xmlStrcmp(cur->name, (xmlChar *) "ResourceData"))
			{
				xmlChar * managerName = xmlGetProp(cur, (xmlChar *) "ResourceFactory");
				dataNode = cur->children;

				if(!managerName)
				{
					xmlFreeDoc(doc);
					throw NOVA_EXP("CResourceManager::LoadResourceFromXml - \
						Resource manager is not set..", BAD_OPERATION);
				}

				manager = GetResourceFactory(nstring(reinterpret_cast<char *>(managerName)));
				if(!manager)
				{
					xmlFreeDoc(doc);
					throw NOVA_EXP(nstring("CResourceManager::LoadResourceFromXml - \
						Resource manager ") + reinterpret_cast<char *>(managerName)
						+ " is not found..", BAD_OPERATION);
				}