Пример #1
0
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();
}
Пример #2
0
// ---------------------------------------------------------------------
// 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
   	);
}
Пример #3
0
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;
}
Пример #4
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);
}