Exemple #1
0
int GridWidget::cellHitTest(const QPoint &point)
{
    qreal wantedHeight = CELL_HEIGHT * (ROW_COUNT + 1);
    qreal wantedWidth = FIRST_COL_WIDTH + CELL_WIDTH * COL_COUNT;

    qreal scaleWidth = width()/wantedWidth;
    qreal scaleHeight = height()/ wantedHeight;
    qreal minScale = qMin(scaleWidth, scaleHeight);

    QRectF drawnRect(0, 0, wantedWidth*minScale, wantedHeight*minScale);
    drawnRect.moveCenter(this->rect().center());
    drawnRect.moveTop(0);

    if(!drawnRect.contains(point))
        return -1;


    qreal cellWidth = (drawnRect.width() - FIRST_COL_WIDTH * minScale) / COL_COUNT;
    qreal firstColWidth = drawnRect.width() - (COL_COUNT * cellWidth);
    qreal cellHeight = drawnRect.height() / (ROW_COUNT + 1);

    int col = (point.x() - drawnRect.left() - firstColWidth) / cellWidth;
    int row = (point.y() - drawnRect.top() - cellHeight) / cellHeight;

    if(col<0)  return -1;
    if(row<0)  return -1;

    int address = (row * 32) + col;
    if(address>511 || address<0) return -1;
    return address;

}
/************************************************************************
drawListCtrlProgressBar 리스트 컨트롤에 사용되는 진행바를 그린다.
@PARAM  : 
@RETURN : 
@REMARK : 
    그림을 그리는 영역의 높이 너비가 4픽셀 이하인 경우에는 그리지 않는다.
@AUTHOR : youngchang ([email protected])
@HISTORY :
    2006/01/03:CREATED
************************************************************************/
void CFishBMPManager::drawListCtrlProgressBar(CDC* pDC, CRect rect, int percentage)
{
    assert(percentage>=0 && percentage <= 100);
    enum { PADDING = 1, };
    CBitmap leftProgress, middleProgress, rightElapse, middleElapse;
    GetBMPfromList(pDC, getListCtrlProgressBar(), 0, &leftProgress);
    GetBMPfromList(pDC, getListCtrlProgressBar(), 1, &middleProgress);
    GetBMPfromList(pDC, getListCtrlProgressBar(), 2, &middleElapse);
    GetBMPfromList(pDC, getListCtrlProgressBar(), 3, &rightElapse);

    BITMAP bm;
    leftProgress.GetBitmap(&bm);

    if (rect.Height() < bm.bmHeight && rect.Width() < 4 ) return;

    // 받아온 영역중 실제로 그림이 그려지는 부분
    CRect drawnRect( 
        rect.left + 1 , 
        rect.CenterPoint().y - (int)(bm.bmHeight / 2),
        rect.right - 1, 
        rect.CenterPoint().y + (bm.bmHeight - (int)(bm.bmHeight / 2))
        );

    CRect outlineRect   =   drawnRect;
    outlineRect.InflateRect(1, 1, 1, 1);

    // DRAWING ACTION
    // 와괵 사각형 그리기
    CPen pen;
    pen.CreatePen(PS_SOLID, 1, RGB(0x8C, 0X8C, 0X8C));
    CPen* oldPen = pDC->SelectObject(&pen);
    pDC->Rectangle(outlineRect);
    pDC->SelectObject(oldPen);

    int nProgressWidth = (drawnRect.Width() * percentage / 100)<0 ? (-1) : (drawnRect.Width() * percentage / 100);
    for (int it = drawnRect.left; it<=drawnRect.right; it++)
    {
        
        if ( it < drawnRect.left + nProgressWidth || percentage >= 100 ) {
            // 진행바의 가장 왼쪽과 가장 오른쪽 처리
            if (it == drawnRect.left)   
                m_bmplistListCtrlProgressBar.Draw(pDC, 0, CPoint(it, drawnRect.top), SRCCOPY);
            else if (it == drawnRect.right)
                m_bmplistListCtrlProgressBar.Draw(pDC, 0, CPoint(it-1, drawnRect.top), SRCCOPY);        // 1을 빼줘야하는 것은 IMAGELIST 버그로 보임
            else 
                m_bmplistListCtrlProgressBar.Draw(pDC, 1, CPoint(it, drawnRect.top), SRCCOPY);
        } else {
            // 남은 상태의 가장 왼쪽과 가장 오른쪽 처리
            if (it == drawnRect.left)   
                m_bmplistListCtrlProgressBar.Draw(pDC, 3, CPoint(it, drawnRect.top), SRCCOPY);
            else if (it == drawnRect.right)
                m_bmplistListCtrlProgressBar.Draw(pDC, 3, CPoint(it-1, drawnRect.top), SRCCOPY);
            else
                m_bmplistListCtrlProgressBar.Draw(pDC, 2, CPoint(it, drawnRect.top), SRCCOPY);
        }
    }
}
QRect RatingStarDrawer::drawStarPolygons(QPainter* painter, int numberOfStars) const
{
    QRect    drawnRect(0, 0, 0, 0);
    QPolygon polygon(m_starPolygon);

    if (numberOfStars)
    {
        drawnRect.adjust(0, 0, 0, m_starPolygonSize.height());
    }

    for (int i = 0; i < numberOfStars; ++i)
    {
        painter->drawPolygon(polygon, Qt::WindingFill);
        polygon.translate(m_starPolygonSize.width(), 0);
        drawnRect.adjust(0, 0, m_starPolygonSize.width(), 0);
    }

    return drawnRect;
}
Exemple #4
0
void PieceManager::drawBox(sf::Vector2f start, sf::Vector2f end, bool black, bool rightClick)
{
	sf::Vector2i startSquare, endSquare;
	startSquare.x = (int)std::min(start.x,end.x);
	startSquare.y = (int)std::min(start.y,end.y);
	endSquare.x = (int)std::max(start.x,end.x)+1;
	endSquare.y = (int)std::max(start.y,end.y)+1;
	sf::Vector2i size = endSquare - startSquare;
	sf::IntRect drawnRect(startSquare,size);
	if(rightClick)
	{

		for(auto it = pieces.begin(); it != pieces.end(); ++it)
			{
				if((*it).selected && !(*it).dead && black == (*it).isBlack)
					(*it).destination = drawnRect;
			}
	}
	else
		for(auto it = pieces.begin(); it != pieces.end(); ++it)
		{
			(*it).selected = (!(*it).dead && black == (*it).isBlack && drawnRect.contains((*it).position));
		}
}