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); }