static void paintLinesToChildren( QGraphicsItem * qgi, QPainter * painter, QPen const & pen ) { typedef QList<QGraphicsItem*> QGIL; QGIL ch( qboard::childItems(qgi) ); if( ch.isEmpty() ) return; QRectF prect( qgi->boundingRect() ); QPointF mid( prect.left() + (prect.width() / 2), prect.top() + (prect.height() / 2) ); painter->save(); for( QGIL::iterator it = ch.begin(); ch.end() != it; ++it ) { QGraphicsItem * x = *it; QRectF xr( x->boundingRect() ); QPointF xmid( xr.center() ); //xmid = x->mapToParent( xmid ); xmid = qgi->mapFromItem( x, xmid ); painter->setPen( pen ); painter->drawLine( QLineF( mid, xmid ) ); } painter->restore(); }
// --------------------------------------------------------------------- // UnsyncedHeightMapUpdate event // void CRoamMeshDrawer::UnsyncedHeightMapUpdate(const SRectangle& rect) { const int margin = 2; const float INV_PATCH_SIZE = 1.0f / PATCH_SIZE; // hint: the -+1 are cause Patches share 1 pixel border (no vertex holes!) const int xstart = std::max(0, (int)math::floor((rect.x1 - margin) * INV_PATCH_SIZE)); const int xend = std::min(numPatchesX, (int)math::ceil( (rect.x2 + margin) * INV_PATCH_SIZE)); const int zstart = std::max(0, (int)math::floor((rect.z1 - margin) * INV_PATCH_SIZE)); const int zend = std::min(numPatchesY, (int)math::ceil( (rect.z2 + margin) * INV_PATCH_SIZE)); for (int z = zstart; z < zend; ++z) { for (int x = xstart; x < xend; ++x) { Patch& p = m_Patches[z * numPatchesX + x]; // clamp the update rect to the patch constraints SRectangle prect( std::max(rect.x1 - margin - p.m_WorldX, 0), std::max(rect.z1 - margin - p.m_WorldY, 0), std::min(rect.x2 + margin - p.m_WorldX, PATCH_SIZE), std::min(rect.z2 + margin - p.m_WorldY, PATCH_SIZE) ); p.UpdateHeightMap(prect); } } LOG_L(L_DEBUG, "UnsyncedHeightMapUpdate, fram=%i, numpatches=%i, xi1=%i xi2=%i zi1=%i zi2=%i, x1=%i x2=%i z1=%i z2=%i", globalRendering->drawFrame, (xend - xstart) * (zend - zstart), xstart, xend, zstart, zend, rect.x1, rect.x2, rect.z1, rect.z2 ); }
LRESULT CWENavigatorDlg::OnPaint(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { ATLASSERT(0); #if 0 CPaintDC dc(m_hWnd); // HDC hDC = dc.m_hDC; CRect client; GetClientRect(&client); if (m_layoutView) { /* CComQIPtr<IWebXMLDocument> esvgDocument; m_layoutView->get_ESvgDocument(&esvgDocument); */ CEXMLLayoutView* layoutView = static_cast<CEXMLLayoutView*>(m_layoutView.p); CComQIPtr<ILHTMLActiveView> htmlview = layoutView->m_pIOleDocView; if (htmlview) { CComPtr<ILHTMLWindow> window; htmlview->GetHTMLWindow(&window); CEXMLDocument* pDocument = static_cast<CEXMLDocument*>(layoutView->m_viewGroup->m_pDocument); CComPtr<ILDOMDocument> doc; pDocument->get_DOMDocument(&doc); LSVG::SVGDocument* svgdoc = doc; if (svgdoc) { CComQIPtr<ILSVGSVGElement> svg; svgdoc->get_documentElement((ILDOMElement**)&svg); if (svg) { int state = dc.SaveDC(); double docwidth; double docheight; window->get_contentWidth(&docwidth);//= pDocument->GetWidth(); window->get_contentHeight(&docheight);//= pDocument->GetHeight(); /* int fullwidth = docwidth+400; int fullheight = docheight+100; */ CRect rect; rect.left = 3 + (client.Width()-6-m_size.cx)/2; rect.top = 3 + (client.Height()-6-16-m_size.cy)/2; rect.right = rect.left + m_size.cx; rect.bottom = rect.top + m_size.cy; CRect brect = rect; //FillSolidRect(hDC, &rect, RGB(255, 255, 255)); brect.InflateRect(1, 1); dc.Draw3dRect(&brect, GetSysColor(COLOR_3DSHADOW), GetSysColor(COLOR_3DLIGHT)); brect.InflateRect(1, 1); dc.Draw3dRect(&brect, GetSysColor(COLOR_3DDKSHADOW), GetSysColor(COLOR_3DHILIGHT)); if (dc.IntersectClipRect(rect.left, rect.top, rect.right, rect.bottom) > NULLREGION) { if (m_offbm) { BITMAP bm; m_offbm.GetBitmap(&bm); if (bm.bmWidth != rect.Width() || bm.bmHeight != rect.Height()) { m_offbm.DeleteObject(); } } if (m_offbm == NULL) { m_offbm.CreateCompatibleBitmap(dc, rect.Width(), rect.Height()); m_bRedraw = true; } int x = 100 * m_magnify; int y = 100 * m_magnify; if (m_bRedraw) { CDC dc2; dc2.CreateCompatibleDC(dc); HBITMAP hOldBitmap = (HBITMAP)dc2.SelectBitmap(m_offbm); dc2.FillSolidRect(0, 0, rect.Width(), rect.Height(), RGB(255, 255, 255)); CPoint oldOrg = dc2.SetViewportOrg(x, y); CRect prect(0, 0, docwidth*m_magnify, docheight*m_magnify); HBRUSH hOldBrush = (HBRUSH)SelectObject(dc2.m_hDC, GetStockObject(NULL_BRUSH)); Rectangle(dc2.m_hDC, prect.left, prect.top, prect.right, prect.bottom); SelectObject(dc2.m_hDC, hOldBrush); window->DrawToHdc4(dc2.m_hDC, svg, m_magnify); dc2.SetViewportOrg(oldOrg.x, oldOrg.y); m_bRedraw = false; dc2.SelectBitmap(hOldBitmap); } if (m_offbm) { CDC dc2; dc2.CreateCompatibleDC(dc); HBITMAP hOldBitmap = (HBITMAP)dc2.SelectBitmap(m_offbm); dc.BitBlt(rect.left, rect.top, rect.Width(), rect.Height(), dc2, 0, 0, SRCCOPY); dc2.SelectBitmap(hOldBitmap); } dc.SetViewportOrg(rect.left+x, rect.top+y); // Draw visible viewRect { CRect viewBox = GetViewBox(); CRect viewRect = viewBox; viewRect.left *= m_magnify; viewRect.top *= m_magnify; viewRect.right *= m_magnify; viewRect.bottom *= m_magnify; viewRect.InflateRect(1, 1); HPEN hPen = CreatePen(PS_SOLID, 2, m_viewBoxColor); HPEN hOldPen = (HPEN)SelectObject(dc.m_hDC, hPen); HBRUSH hOldBrush = (HBRUSH)SelectObject(dc.m_hDC, GetStockObject(NULL_BRUSH)); Rectangle(dc.m_hDC, viewRect.left, viewRect.top, viewRect.right, viewRect.bottom); SelectObject(dc.m_hDC, hOldBrush); SelectObject(dc.m_hDC, hOldPen); DeleteObject(hPen); } } dc.RestoreDC(state); } } } } m_bUpdate = false; #endif return 0; }
void BackgroundItem::setBackground( QPixmap *pixmap, PlacementType _parentRelativeType, Meta *_meta, BackgroundMeta &_background, BorderMeta &_border, MarginsMeta &_margin, StringListMeta &_subModel, int _submodelLevel, QString &toolTip) { meta = _meta; background = _background; border = _border; margin = _margin; subModelColor = _subModel; submodelLevel = _submodelLevel; parentRelativeType = _parentRelativeType; BorderData borderData = _border.valuePixels(); BackgroundData backgroundData = _background.value(); int bt = int(borderData.thickness); QColor penColor,brushColor; QRectF prect(bt/2,bt/2,pixmap->width()-bt,pixmap->height()-bt); // was -1-bt pixmap->setAlphaChannel(*pixmap); pixmap->fill(Qt::transparent); QPainter painter(pixmap); switch(backgroundData.type) { case BackgroundData::BgImage: { QString image_name = backgroundData.string; QFile file(image_name); if ( ! file.exists()) { return; } QImage image(image_name); if (backgroundData.stretch) { QSize psize = pixmap->size(); QSize isize = image.size(); qreal sx = psize.width(); qreal sy = psize.height(); sx /= isize.width(); sy /= isize.height(); painter.scale(sx,sy); painter.drawImage(0,0,image); } else { for (int y = 0; y < pixmap->height(); y += image.height()) { for (int x = 0; x < pixmap->width(); x += image.width()) { painter.drawImage(x,y,image); } } } brushColor = Qt::transparent; } break; case BackgroundData::BgTransparent: brushColor = Qt::transparent; break; case BackgroundData::BgColor: case BackgroundData::BgSubmodelColor: if (backgroundData.type == BackgroundData::BgColor) { brushColor = LDrawColor::color(backgroundData.string); } else { brushColor = LDrawColor::color(_subModel.value(submodelLevel)); } break; } qreal rx = borderData.radius; qreal ry = borderData.radius; qreal dx = pixmap->width(); qreal dy = pixmap->height(); if (dx && dy) { if (dx > dy) { // the rx is going to appear larger that ry, so decrease rx based on ratio rx *= dy; rx /= dx; } else { ry *= dx; ry /= dy; } } if (borderData.type == BorderData::BdrNone) { penColor = Qt::transparent; } else { penColor = LDrawColor::color(borderData.color); } QPen pen; pen.setColor(penColor); pen.setWidth(bt); pen.setCapStyle(Qt::RoundCap); pen.setJoinStyle(Qt::RoundJoin); painter.setPen(pen); painter.setBrush(brushColor); painter.setRenderHints(QPainter::HighQualityAntialiasing,true); painter.setRenderHints(QPainter::Antialiasing,true); if (borderData.type == BorderData::BdrRound) { painter.drawRoundRect(prect,int(rx),int(ry)); } else { painter.drawRect(prect); } setToolTip(toolTip); setFlag(QGraphicsItem::ItemIsSelectable,true); setFlag(QGraphicsItem::ItemIsMovable,true); }