LRESULT CEditGradientDlg::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { // Create default gradient if (m_viewGroup) { CComPtr<IEXMLDocument> eXMLDocument; m_viewGroup->get_eXMLDocument(&eXMLDocument); CComQIPtr<IEDocument> eDocument = eXMLDocument; CComPtr<ILDOMDocument> document; eXMLDocument->get_DOMDocument(&document); // CSVGFilterOptionsDlg dlg; // dlg.m_document = document; // if (dlg.DoModal(GetMainHwnd()) == IDOK) { CComPtr<IOleUndoManager> undoManager; eDocument->get_undoManager(&undoManager); CComObject<CUndoParent>* pParentUndo; CComObject<CUndoParent>::CreateInstance(&pParentUndo); if (pParentUndo) { pParentUndo->AddRef(); // ??? undoManager->Open(pParentUndo); CComPtr<ILSVGElement> svgDefsElement; eXMLDocument->FindOrCreateSVGDefs(&svgDefsElement); if (svgDefsElement) { CComPtr<ILSVGElement> svgElement; document->createElementNS(L"http://www.w3.org/2000/svg", L"linearGradient", (ILDOMElement**)&svgElement); if (svgElement) { // TODO, create unique ID CComBSTR id = L"gradient"; svgElement->setAttribute(L"id", id); svgElement->setAttribute(L"gradientUnits", L"userSpaceOnUse"); svgElement->setAttribute(L"x1", L"0%"); svgElement->setAttribute(L"y1", L"0%"); svgElement->setAttribute(L"x2", L"100%"); svgElement->setAttribute(L"y2", L"0%"); // black { CComPtr<ILDOMElement> stop; document->createElementNS(L"http://www.w3.org/2000/svg", L"stop", &stop); stop->setAttribute(L"offset", L"0"); stop->setAttribute(L"style", L"stop-color:#000000"); svgElement->appendChild(stop, NULL); } // white { CComPtr<ILDOMElement> stop; document->createElementNS(L"http://www.w3.org/2000/svg", L"stop", &stop); stop->setAttribute(L"offset", L"1"); stop->setAttribute(L"style", L"stop-color:#ffffff"); svgElement->appendChild(stop, NULL); } CComObject<CWEUndoNewElement>* pUndo; CComObject<CWEUndoNewElement>::CreateInstance(&pUndo); if (pUndo) { // pUndo->AddRef(); pUndo->m_pDocument = static_cast<CEXMLDocument*>(eXMLDocument.p); pUndo->DoInitial(undoManager, svgElement, svgDefsElement, NULL); // TODO: do this here? CComPtr<IEXMLViewGroup> viewGroup; eXMLDocument->GetActiveViewGroup(&viewGroup); if (viewGroup) { //CWebXMLViewGroup* pViewGroup = static_cast<CWebXMLViewGroup*>(viewGroup.p); CComPtr<IEElement> pElement; eXMLDocument->GetEElementFromDOMElement(svgElement, &pElement); CComBSTR gradient; gradient = L"url(#"; gradient += id; gradient += L")"; if (SelectionCanHavePaint(viewGroup)) { #if 0 CComPtr<ILCSSStyleDeclaration> style; viewGroup->GetCurrentSelectionCSSStyle(&style); #endif ATLASSERT(0); #if 0 style->setProperty(gApp->m_strokeOrFill == 0? L"stroke": L"fill", gradient, NULL); #endif #if 0 viewGroup->ApplyCurrentSelectionCSSStyle(); #endif } // static_cast<CEXMLDocument*>(eXMLDocument.p)->m_lastGradient = gradient; // viewGroup->ActivateElement(pElement, 0, NULL); } } } } undoManager->Close(pParentUndo, TRUE/*commit*/); } } } return 0; }