Пример #1
0
bool CPoll::HidePoll(bool bHide, int nItemID, CPoll::ItemType nItemType)
{
	// Create with VOTING-PAGE element as root
	CTDVString sXML;
	sXML << "<" << GetRootElement() << "></" << GetRootElement() << ">";
	if(!CreateFromXMLText(sXML, 0, true))
	{
		TDVASSERT(false, "CPoll::HidePoll() CreateFromXMLText failed");
		return false;
	}

	// Call our stored proc to hide poll
	CStoredProcedure SP;
	m_InputContext.InitialiseStoredProcedureObject(&SP);
	if(!SP.HidePoll(bHide, m_nPollID, nItemID, nItemType))
	{
		TDVASSERT(false, "CPoll::HidePoll() SP.HidePoll failed");
		if(!AddErrorElement(GetRootElement(), CPoll::ERRORCODE_UNSPECIFIED, "CPoll::HidePoll() SP.HidePoll failed"))
		{
			TDVASSERT(false, "CPoll::HidePoll() AddErrorElement failed");
			return false;
		}

		return false;
	}

	return true;
}
Пример #2
0
bool CPollContentRating::HidePoll(bool bHide, int nItemID,  ItemType nItemType)
{
	// Create with VOTING-PAGE element as root
	CTDVString sXML;
	sXML << "<" << GetRootElement() << "></" << GetRootElement() << ">";
	if(!CreateFromXMLText(sXML, 0, true))
	{
		TDVASSERT(false, "CPollContentRating::HidePoll() CreateFromXMLText failed");
		return false;
	}

	// Get redirect URL
	CTDVString sRedirectURL;
	if(!m_InputContext.GetParamString("s_redirectto",sRedirectURL) 
		|| sRedirectURL.IsEmpty())
	{
		// Skin must set s_redirectto for content rating polls
		TDVASSERT(false, "CPollContentRating::HidePoll() 's_redirectto' parameter not found.");
		
		if(!AddErrorElement(GetRootElement(), ERRORCODE_BADPARAMS, "'s_redirectto' not set by skin"))
		{
			TDVASSERT(false, "CPollContentRating::HidePoll() AddErrorElement failed");
			return false;
		}

		return true;
	}

	// Check access
	CUser* pViewer = m_InputContext.GetCurrentUser();
	if (pViewer == NULL || !pViewer->GetIsEditor())
	{
		// Redirect with error
		AddPollErrorCodeToURL(sRedirectURL, ERRORCODE_ACCESSDENIED, "Must be editor");
		SetRedirectURL(sRedirectURL);
		return true;
	}

	// Let base class do the work
	if(!CPoll::HidePoll(bHide, nItemID, nItemType))
	{
		// Redirect with error
		AddPollErrorCodeToURL(sRedirectURL, ERRORCODE_UNSPECIFIED, "CPollContentRating::HidePoll() CPoll::HidePoll failed");
		SetRedirectURL(sRedirectURL);
		return false;
	}

    // Redirect
	SetRedirectURL(sRedirectURL);
	return true;
}
Пример #3
0
Bool CXMLDocument::AddDTD(char *data, unsigned long tlength)
{
	if (!isinited()) return False;
	xmlParserInputBufferPtr dtdInputBufferPtr; 
	xmlDtdPtr dtd; 
	dtdInputBufferPtr = xmlParserInputBufferCreateMem(data, tlength, XML_CHAR_ENCODING_UTF8); 
	dtd = xmlIOParseDTD(NULL, dtdInputBufferPtr, XML_CHAR_ENCODING_UTF8); 
	if (!dtd) return False;
	if (dtd->name != NULL)
		xmlFree((char*)dtd->name);
	CXMLElement telement;
	GetRootElement(&telement);
	dtd->name = xmlStrdup((xmlChar *)telement.GetName());
	doc->intSubset = dtd;
    if (dtd->ExternalID != NULL) { 
           xmlFree((xmlChar *) dtd->ExternalID); 
           dtd->ExternalID = NULL; 
       } 
       if (dtd->SystemID != NULL) { 
           xmlFree((xmlChar *) dtd->SystemID); 
           dtd->SystemID = NULL; 
       } 
	dtd->doc = doc;
	dtd->parent = doc;
	if (doc->children == NULL) xmlAddChild((xmlNodePtr)doc, (xmlNodePtr)dtd);
	else xmlAddPrevSibling(doc->children, (xmlNodePtr)dtd);
	return Validate();
}
Пример #4
0
void PlatformWindowSite::OnKeyDown(UINT wParam, UINT lParam)
{
//	POINT screenMousePos;
//	::GetCursorPos(&screenMousePos);

	IInputElement* hitElement = nullptr;

	if (m_FocusElement)
	{
		hitElement = m_FocusElement;
	}
	else
	{
//		Visual* child = get_Child();
		UIElement* child = GetRootElement();
		if (child)
		{
		//	hitElement = child->HitTest(clientMousePos);
		}
		hitElement = child;
	}

	if (hitElement)
	{
		KeyEventArgs* args = new KeyEventArgs(nullptr, nullptr, 0, wParam);

		args->set_RoutedEvent(UIElement::get_KeyEvent());

		hitElement->RaiseEvent(args);
	}
}
Пример #5
0
void PlatformWindowSite::OnMouseButtonDblClk(gm::PointF clientMousePos, int button)
{
	POINT screenMousePos;
	::GetCursorPos(&screenMousePos);

	UIElement* hitElement = nullptr;

	UIElement* child = GetRootElement();
//	Visual* child = get_Child();
	if (child)
	{
		hitElement = child->HitTest_(clientMousePos);
	}
//	hitElement = child;

	if (hitElement)
	{
		MouseButtonEventArgs* args = new MouseButtonEventArgs(nullptr, 0);

		if (button == 0)			args->set_RoutedEvent(UIElement::get_MouseLeftButtonDoubleClickEvent());
		else if (button == 1)	args->set_RoutedEvent(UIElement::get_MouseMiddleButtonDoubleClickEvent());
		else						args->set_RoutedEvent(UIElement::get_MouseRightButtonDoubleClickEvent());

		args->m_screenpos = Point(float(screenMousePos.x), float(screenMousePos.y));
		args->m_clientpos = clientMousePos;

		hitElement->RaiseEvent(args);
	}
}
Пример #6
0
/*GetElementByPath
tpath - path of element in xml tree (ie. /rootelement/parentelement[1]/childelement)
telement - on success, output is set to point to element specified by tpath
return True if element found
*/
Bool CXMLDocument::GetElementByPath(CXMLElement *telement, char *tpath)
{
	if (!isinited()) return False;
	char *sptr = tpath;
	Bool isroot = False;

	if (!GetRootElement(telement))
		return False;

	if (*sptr == '/') sptr++;
	char *nameend;
	char *nextname = strchr(sptr, '/');
	if (!nextname) 
	{
		if (!*sptr)
			return True;
		nextname = sptr+strlen(sptr);
		isroot = True;
		
	}
	char *numpointer = util_strchr(sptr,'[',nextname-sptr);
	if (numpointer)
			nameend = numpointer;
	else
			nameend = nextname;
	if (!util_strnicmp(telement->GetName(),sptr,nameend-sptr))
		if (isroot)
			return True;
		else
			return telement->GoChildByPath(nextname+1);
	return False;
}
Пример #7
0
void PlatformWindowSite::OnSize(gm::RectI r)
{
	UIElement* uielement = dynamic_cast<UIElement*>(this);
	// Done in OnSizing
#if 0
	m_ownerVisual->OnWindowSizeChanged(windowWidth, windowHeight);
#endif

	int clientWidth = r.Width;
	int clientHeight = r.Height;

#if 0	// Event
	m_ownerVisual->OnSize(m_ownerVisual);
#endif

	// TODO, not here, like this ??
	UIElement* child = GetRootElement();
	if (child)
	{
		/*
		m_ownerVisual->set_ActualWidth(windowWidth);
		m_ownerVisual->set_ActualHeight(windowHeight);

		child->DoLayoutSize(gm::SizeF(clientWidth, clientHeight));
		*/
			
		uielement->m_desiredSize =  gm::SizeF(clientWidth, clientHeight);
		uielement->m_availSize = gm::SizeF(clientWidth, clientHeight);

		uielement->InvalidateMeasure();
		uielement->InvalidateArrange();
	}
}
Пример #8
0
void
VideoDocument::SetScriptGlobalObject(nsIScriptGlobalObject* aScriptGlobalObject)
{
  // Set the script global object on the superclass before doing
  // anything that might require it....
  MediaDocument::SetScriptGlobalObject(aScriptGlobalObject);

  if (aScriptGlobalObject) {
    if (!GetRootElement()) {
      // Create synthetic document
#ifdef DEBUG
      nsresult rv =
#endif
        CreateSyntheticVideoDocument();
      NS_ASSERTION(NS_SUCCEEDED(rv), "failed to create synthetic video document");
    }

    if (!nsContentUtils::IsChildOfSameType(this) &&
        GetReadyStateEnum() != nsIDocument::READYSTATE_COMPLETE) {
      LinkStylesheet(NS_LITERAL_STRING("resource://gre/res/TopLevelVideoDocument.css"));
      LinkStylesheet(NS_LITERAL_STRING("chrome://global/skin/media/TopLevelVideoDocument.css"));
      LinkScript(NS_LITERAL_STRING("chrome://global/content/TopLevelVideoDocument.js"));
    }
    BecomeInteractive();
  }
}
Пример #9
0
void wxSVGDocument::SetTitle(const wxString& title) {
	wxSVGTitleElement* titleElem = NULL;
	wxSVGElement* elem = (wxSVGElement*) GetRootElement()->GetChildren();
	while (elem) {
		if (elem->GetType() == wxSVGXML_ELEMENT_NODE && elem->GetDtd() == wxSVG_TITLE_ELEMENT) {
			titleElem = (wxSVGTitleElement*) elem;
		}
		elem = (wxSVGElement*) elem->GetNext();
	}
	if (titleElem == NULL) {
		titleElem = new wxSVGTitleElement;
		GetRootElement()->AppendChild(titleElem);
	}
	if (titleElem->GetChildren() && elem->GetFirstChild()->GetType() == wxSVGXML_TEXT_NODE)
		elem->GetFirstChild()->SetContent(title);
	else
		elem->AddChild(new wxSvgXmlNode(wxSVGXML_TEXT_NODE, wxEmptyString, title));
}
Пример #10
0
ES_PutState
DOM_HTMLDocument::SetTitle(ES_Value *value, ES_Runtime *origining_runtime)
{
	HTML_Element *title_element = GetElement(HE_TITLE);
	DOM_EnvironmentImpl *environment = GetEnvironment();

	if (!title_element)
	{
		/* Invent <title> on the spot... */
		HTML_Element *head_element = GetElement(HE_HEAD);
		if (!head_element)
		{
			/* ..and its <head> parent, if not there. */

			if (!GetRootElement())
				/* nowhere to add, quietly ignore title update. */
				return PUT_SUCCESS;

			PUT_FAILED_IF_ERROR(HTML_Element::DOMCreateElement(head_element, environment, UNI_L("head"), NS_IDX_HTML));
			PUT_FAILED_IF_ERROR(GetRootElement()->GetThisElement()->DOMInsertChild(environment, head_element, NULL));
			/* the element has been added to the tree, hence no leak - error stems from signalling the insertion. */
		}

		if (head_element)
		{
			PUT_FAILED_IF_ERROR(HTML_Element::DOMCreateElement(title_element, environment, UNI_L("title"), NS_IDX_HTML));
			PUT_FAILED_IF_ERROR(head_element->DOMInsertChild(environment, title_element, NULL));
		}

		/* Note/FIXME: the insertion of a <title> element, and possibly <head>, is synchronous and does not issue any mutation events, like
		   would be done when using e.g., DOM_Node::insertBefore(). Doing so would be preferable, but would turn SetTitle() into an async operation
		   to handle the invocation of mutation event listeners. Leave as is for now, but may (have to) revisit. */
	}

	if (title_element)
	{
		DOM_Node *title_node;
		PUT_FAILED_IF_ERROR(environment->ConstructNode(title_node, title_element, this));
		return title_node->PutName(OP_ATOM_text, value, origining_runtime);
	}

	return PUT_SUCCESS;
}
Пример #11
0
bool CPoll::UnhandledCommand(const CTDVString & sCmd)
{
	// Add error xml
	CTDVString sXML;
	sXML << "<" << GetRootElement() << "></" << GetRootElement() << ">";
	
	if(!CreateFromXMLText(sXML, 0, true))
	{
		TDVASSERT(false, "CPoll::UnhandledCommand() CreateFromXMLText failed");
		return false;
	}
	
	if(!AddErrorElement(GetRootElement(), ERRORCODE_UNKNOWNCMD, "Unknown cmd parameter"))
	{
		TDVASSERT(false, "CPoll::UnhandledCommand() AddErrorElement failed");
		return false;
	}
	return true;
}
Пример #12
0
    string XMLDocument::GetFileVersion()
    {
        TiXmlElement* item=GetRootElement();

        string version;
        if(item)
            version = item->Attribute("version");

        return version;
    }
Пример #13
0
    bool XMLDocument::SetFileVersion(const std::string& version)
    {
        TiXmlElement* item=GetRootElement();

        if(item)
        {
            item->SetAttribute("version", version.c_str());
            return true;
        }
        return false;
    }
Пример #14
0
wxString wxSVGDocument::GetTitle() {
	wxSVGElement* elem = (wxSVGElement*) GetRootElement()->GetChildren();
	while (elem) {
		if (elem->GetType() == wxSVGXML_ELEMENT_NODE && elem->GetDtd() == wxSVG_TITLE_ELEMENT) {
			if (elem->GetChildren() && elem->GetFirstChild()->GetType() == wxSVGXML_TEXT_NODE) {
				return elem->GetFirstChild()->GetContent();
			}
		}
		elem = (wxSVGElement*) elem->GetNext();
	}
	return wxT("");
}
Пример #15
0
void CSceneManager::DestroyScene(void)
{
	for(nova::nUInt32 i = 0; i < GetListenersCount(); i++)
	{
		CSceneManagerListener * lis = 
			dynamic_cast<CSceneManagerListener *>(GetListener(i));
		lis->DestroySceneListener(this);
	}

	
	DestroySceneNode(GetRootElement());
	mSceneTree.FreeAll();
}
Пример #16
0
bool CPoll::ProcessParamsFromBuilder(CTDVString & sRedirectURL)
{
	// Get command
	CTDVString sCmd = "";
	m_InputContext.GetParamString("cmd",sCmd);

	// Dispatch it
	if(!DispatchCommand(sCmd))
	{
		TDVASSERT(false, "CPoll::ProcessParamsFromBuilder() DispatchCommand failed");

		// Add error xml
		CTDVString sXML;
		sXML << "<" << GetRootElement() << "></" << GetRootElement() << ">";
		
		if(!CreateFromXMLText(sXML, 0, true))
		{
			TDVASSERT(false, "CPoll::ProcessParamsFromBuilder() CreateFromXMLText failed");
			return false;
		}

		if(!AddErrorElement(GetRootElement(), ERRORCODE_UNSPECIFIED, "CPoll::ProcessParamsFromBuilder() DispatchCommand failed"))
		{
			TDVASSERT(false, "CPoll::ProcessParamsFromBuilder() AddErrorElement failed");
			return false;
		}

		// Set redirect url
		sRedirectURL = m_sRedirectURL;

		return false;
	}

    // Set redirect url
	sRedirectURL = m_sRedirectURL;

	return true;
}
Пример #17
0
bool CPollContentRating::RemoveVote()
{
	TDVASSERT(false, "CPollContentRating::RemoveVote() function not supported for content rating polls");

	// Create with VOTING-PAGE element as root
	CTDVString sXML;
	sXML << "<" << GetRootElement() << "></" << GetRootElement() << ">";
	if(!CreateFromXMLText(sXML, 0, true))
	{
		TDVASSERT(false, "CPollContentRating::RemoveVote() CreateFromXMLText failed");
		return false;
	}

	// Get redirect URL
	CTDVString sRedirectURL;
	if(!m_InputContext.GetParamString("s_redirectto",sRedirectURL) 
		|| sRedirectURL.IsEmpty())
	{
		// Skin must set s_redirectto for content rating polls
		TDVASSERT(false, "CPollContentRating::RemoveVote() 's_redirectto' parameter not found.");
		
		if(!AddErrorElement(GetRootElement(), ERRORCODE_BADPARAMS, "'s_redirectto' not set by skin"))
		{
			TDVASSERT(false, "CPollContentRating::RemoveVote() AddErrorElement failed");
			return false;
		}

		return true;
	}
	
	// Add error
	AddPollErrorCodeToURL(sRedirectURL, ERRORCODE_BADPARAMS, "remove vote not supported in content rating polls");
	SetRedirectURL(sRedirectURL);

	return true;
}
Пример #18
0
void CElement::ClearChildren ( void )
{
    // Sanity check
    assert ( m_pParent != this );

    // Process our children - Move up to our parent
    if ( !m_Children.empty  () )    // This check reduces cpu usage when unloading large maps (due to recursion)
    {
        while ( !m_Children.empty () )
            (*m_Children.begin())->SetParentObject ( m_pParent, false );

        // Do this at the end for speed
        if ( CElement* pRoot = GetRootElement () )
            pRoot->UpdatePerPlayerEntities ();
    }
}
Пример #19
0
HRESULT PlatformWindowSite::DragOver(
    /* [in] */ DWORD grfKeyState,
    /* [in] */ POINTL pt,
    /* [out][in] */ __RPC__inout DWORD *pdwEffect)
{

	Point screenMousePos(pt.x, pt.y);

	ScreenToClient(m_platformWindow->get_Handle(), (POINT*)&pt);
	Point clientMousePos(pt.x, pt.y);

	if (m_DragOverElement)
	{
		DragEventArgs* args = new DragEventArgs(m_pDataObject);
		args->set_RoutedEvent(UIElement::get_DragLeaveEvent());
	//	args->m_screenpos = Point(float(screenMousePos.x), float(screenMousePos.y));
	//	args->m_clientpos = clientMousePos;

		m_DragOverElement->RaiseEvent(args);
	}

	UIElement* child = GetRootElement();
	if (child)
	{
		m_DragOverElement = child->HitTest_(clientMousePos);
	}

	if (m_DragOverElement == nullptr)
	{
		m_DragOverElement = GetRootWindow();
	}

	if (m_DragOverElement)
	{
		DragEventArgs* args = new DragEventArgs(m_pDataObject);
		args->set_RoutedEvent(UIElement::get_DragEnterEvent());
	//	args->m_screenpos = Point(float(screenMousePos.x), float(screenMousePos.y));
	//	args->m_clientpos = clientMousePos;

		m_DragOverElement->RaiseEvent(args);
	}

// Call IDragImages::DragEnter last
	m_dropTargetHelper->DragOver((POINT*)&pt, *pdwEffect);
	return S_OK;
}
Пример #20
0
void
ImageDocument::SetScriptGlobalObject(nsIScriptGlobalObject* aScriptGlobalObject)
{
  // If the script global object is changing, we need to unhook our event
  // listeners on the window.
  nsCOMPtr<EventTarget> target;
  if (mScriptGlobalObject &&
      aScriptGlobalObject != mScriptGlobalObject) {
    target = do_QueryInterface(mScriptGlobalObject);
    target->RemoveEventListener(NS_LITERAL_STRING("resize"), this, false);
    target->RemoveEventListener(NS_LITERAL_STRING("keypress"), this,
                                false);
  }

  // Set the script global object on the superclass before doing
  // anything that might require it....
  MediaDocument::SetScriptGlobalObject(aScriptGlobalObject);

  if (aScriptGlobalObject) {
    if (!GetRootElement()) {
      // Create synthetic document
#ifdef DEBUG
      nsresult rv =
#endif
        CreateSyntheticDocument();
      NS_ASSERTION(NS_SUCCEEDED(rv), "failed to create synthetic document");

      target = do_QueryInterface(mImageContent);
      target->AddEventListener(NS_LITERAL_STRING("load"), this, false);
      target->AddEventListener(NS_LITERAL_STRING("click"), this, false);
    }

    target = do_QueryInterface(aScriptGlobalObject);
    target->AddEventListener(NS_LITERAL_STRING("resize"), this, false);
    target->AddEventListener(NS_LITERAL_STRING("keypress"), this, false);

    if (GetReadyStateEnum() != nsIDocument::READYSTATE_COMPLETE) {
      LinkStylesheet(NS_LITERAL_STRING("resource://gre/res/ImageDocument.css"));
      if (!nsContentUtils::IsChildOfSameType(this)) {
        LinkStylesheet(NS_LITERAL_STRING("resource://gre/res/TopLevelImageDocument.css"));
        LinkStylesheet(NS_LITERAL_STRING("chrome://global/skin/media/TopLevelImageDocument.css"));
      }
    }
    BecomeInteractive();
  }
}
Пример #21
0
/** 
 * @brief Open given path-file and read data from it to member variables.
 * @param [in] path Path to project file.
 * @param [out] sError Error string if error happened.
 * @return TRUE if reading succeeded, FALSE if error happened.
 */
BOOL ProjectFile::Read(LPCTSTR path, String *sError)
{
	BOOL loaded = FALSE;
    scew_tree* tree = NULL;
    scew_parser* parser = NULL;

    parser = scew_parser_create();
    scew_parser_ignore_whitespaces(parser, 1);

	scew_reader *reader = NULL;
	FILE * fp = _tfopen(path, _T("r"));
	if (fp)
	{
		reader = scew_reader_fp_create(fp);
		if (reader)
		{
			tree = scew_parser_load (parser, reader);

			if (tree)
			{
				scew_element * root = GetRootElement(tree);
				if (root)
				{
					// Currently our content is paths, so expect
					// having paths in valid project file!
					if (GetPathsData(root))
						loaded = TRUE;
				};
			}
		}

		scew_tree_free(tree);
		scew_reader_free(reader);

		/* Frees the SCEW parser */
		scew_parser_free(parser);
		fclose(fp);
	}
	return loaded;
}
Пример #22
0
    std::string XMLDocument::GetValue(const std::string& path)
    {
        TiXmlElement* item = GetRootElement();
        stdstrings_t tokens = stdtokenize(path, "/");
        if(item && tokens.size())
        {
            if(item->Value() != tokens[0])
                tokens.clear();
            else
                tokens.erase(tokens.begin());
        }

        while(item && tokens.size())
        {
            item = item->FirstChildElement(tokens[0].c_str());
            tokens.erase(tokens.begin());
        }
        string value;
        if(tokens.empty() && item)
            GetElementText(*item, value);
        return value;
    }
Пример #23
0
bool CPollContentRating::UnhandledCommand(const CTDVString & sCmd)
{
	// Get redirect URL
	CTDVString sRedirectURL;
	if(!m_InputContext.GetParamString("s_redirectto",sRedirectURL) 
		|| sRedirectURL.IsEmpty())
	{
		// Skin must set s_redirectto for content rating polls
		TDVASSERT(false, "CPollContentRating::Vote() 's_redirectto' parameter not found.");
		
		if(!AddErrorElement(GetRootElement(), ERRORCODE_UNSPECIFIED, "'s_redirectto' not set by skin"))
		{
			TDVASSERT(false, "CPollContentRating::UnhandledCommand() AddErrorElement failed");
			return false;
		}

		return false;
	}

	AddPollErrorCodeToURL(sRedirectURL, ERRORCODE_UNKNOWNCMD);
	SetRedirectURL(sRedirectURL);

	return true;
}
Пример #24
0
void PlatformWindowSite::OnChar(UINT wParam, UINT lParam)
{
	if (wParam == 8) return;	// ignore backspace

//	POINT screenMousePos;
//	::GetCursorPos(&screenMousePos);

	IInputElement* hitElement = nullptr;

	if (m_FocusElement)
	{
		hitElement = m_FocusElement;
	}
	else
	{
//		Visual* child = get_Child();
		UIElement* child = GetRootElement();
		if (child)
		{
		//	hitElement = child->HitTest(clientMousePos);
		}
		hitElement = child;
	}

	if (hitElement)
	{
		TextCompositionEventArgs* args = new TextCompositionEventArgs(nullptr, 0);

		WCHAR str[2] = {wParam, 0};
		args->m_text = String(str);

		args->set_RoutedEvent(UIElement::get_TextCompositionEvent());

		hitElement->RaiseEvent(args);
	}
}
Пример #25
0
	void CXML::Save(const char* filename,const char* encoding)
	{ 
		Save(filename,GetRootElement(),encoding);
	}
Пример #26
0
wxSVGElement* wxSVGDocument::GetElementById(const wxString& id) {
	return GetRootElement() ? (wxSVGElement*) GetRootElement()->GetElementById(id) : NULL;
}
Пример #27
0
/** Renders SVG to bitmap image */
wxImage wxSVGDocument::Render(int width, int height, const wxSVGRect* rect, bool preserveAspectRatio, bool alpha,
		wxProgressDialog* progressDlg) {
	if (!GetRootElement())
		return wxImage();
	
	m_screenCTM = wxSVGMatrix();
	
	if (GetRootElement()->GetWidth().GetBaseVal().GetUnitType() == wxSVG_LENGTHTYPE_UNKNOWN)
		GetRootElement()->SetWidth(wxSVGLength(wxSVG_LENGTHTYPE_PERCENTAGE, 100));
	if (GetRootElement()->GetHeight().GetBaseVal().GetUnitType() == wxSVG_LENGTHTYPE_UNKNOWN)
		GetRootElement()->SetHeight(wxSVGLength(wxSVG_LENGTHTYPE_PERCENTAGE, 100));
	
	if (width == -1 || height == -1) {
		width = (int) GetRootElement()->GetWidth().GetAnimVal();
		height = (int) GetRootElement()->GetHeight().GetAnimVal();
		if (width <= 0 || height <= 0) {
			width = (int) GetRootElement()->GetViewBox().GetAnimVal().GetWidth();
			height = (int) GetRootElement()->GetViewBox().GetAnimVal().GetHeight();
		}
	}
	
	if (GetRootElement()->GetWidth().GetAnimVal().GetUnitType() == wxSVG_LENGTHTYPE_PERCENTAGE) {
		wxSVGAnimatedLength l = GetRootElement()->GetWidth();
		l.GetBaseVal().ToViewportWidth(width);
		if (l.GetBaseVal() != ((const wxSVGAnimatedLength&) l).GetAnimVal())
			l.GetAnimVal().ToViewportWidth(width);
		GetRootElement()->SetWidth(l);
	}
	if (GetRootElement()->GetHeight().GetAnimVal().GetUnitType() == wxSVG_LENGTHTYPE_PERCENTAGE) {
		wxSVGAnimatedLength l = GetRootElement()->GetHeight();
		l.GetBaseVal().ToViewportHeight(height);
		if (l.GetBaseVal() != ((const wxSVGAnimatedLength&) l).GetAnimVal())
			l.GetAnimVal().ToViewportHeight(height);
		GetRootElement()->SetHeight(l);
	}
	
	// scale it to fit in
	m_scale = 1;
	m_scaleY = -1; // == m_scale
	if (GetRootElement()->GetWidth().GetAnimVal() > 0 && GetRootElement()->GetHeight().GetAnimVal() > 0) {
		if (preserveAspectRatio) {
			m_scale = width / GetRootElement()->GetWidth().GetAnimVal();
			if (m_scale > height / GetRootElement()->GetHeight().GetAnimVal())
				m_scale = height / GetRootElement()->GetHeight().GetAnimVal();
			m_screenCTM = m_screenCTM.Scale(m_scale);

			width = (int) (m_scale * GetRootElement()->GetWidth().GetAnimVal());
			height = (int) (m_scale * GetRootElement()->GetHeight().GetAnimVal());
		} else {
			m_scale = width / GetRootElement()->GetWidth().GetAnimVal();
			m_scaleY = height / GetRootElement()->GetHeight().GetAnimVal();
			m_screenCTM = m_screenCTM.ScaleNonUniform(m_scale, m_scaleY);
		}
	}
	
	// render only rect if specified
	if (rect && !rect->IsEmpty()) {
		m_screenCTM = m_screenCTM.Translate(-rect->GetX(), -rect->GetY());
		if (rect->GetWidth() * GetScaleX() < width)
			width = (int) (rect->GetWidth() * GetScaleX());
		if (rect->GetHeight() * GetScaleY() < height)
			height = (int) (rect->GetHeight() * GetScaleY());
	}
	
	// render
	m_canvas->Init(width, height, alpha);
	if (!alpha)
		m_canvas->Clear(*wxWHITE);
	GetCanvas()->RenderElement(GetRootElement(), rect, &m_screenCTM, &GetRootElement()->GetStyle(), NULL, NULL,
			progressDlg);

	return m_canvas->GetImage();
}
Пример #28
0
void wxSVGDocument::SetCurrentTime(double seconds) {
	m_time = seconds;
	// animation
	if (GetRootElement())
		ApplyAnimation(GetRootElement());
}
Пример #29
0
double wxSVGDocument::GetDuration() {
	return GetDuration(GetRootElement());
}
Пример #30
0
	void CXML::SaveBinary( std::ostream& stream )
	{
		SaveBinary(stream,GetRootElement(),m_head.GetAttribute("encoding"),0);
	}