Ejemplo n.º 1
0
void ScrollBar::paintEvent(QPaintEvent *)
{
	QPainter painter(this);
	painter.fillRect(rect(), QBrush(QColor(200,200,255), Qt::BDiagPattern));

	if (!drawScrollBar()) {
		return;
	}

	// bar width(height)
	const int bar_size = base_size_ / 2;

	const int draw_bar_size = drawBarSize();
	const int pos = sliderPositionFromValue(value_, draw_bar_size);

	if (orientation_ == Qt::Horizontal) {
		// absolute bar(down side)

		// relative bar(upper side)
	
	}

	if (orientation_ == Qt::Vertical) {
		//qDebug() << "paint pos:" << pos << " size:" << draw_bar_size;
		// absolute bar(right side)
		painter.fillRect(bar_size, pos, bar_size, draw_bar_size, QBrush(QColor(255, 255, 0, 160)));
		
		// relative bar(left side)
	}
}
Ejemplo n.º 2
0
void ScrollBar::mousePressEvent(QMouseEvent *ev)
{
	if (isScrollBarArea(ev->pos())) {
		// drag
		const int pos = (orientation_ == Qt::Horizontal ? ev->pos().x() : ev->pos().y());
		bar_grabed_position_ = pos - sliderPositionFromValue(value_, drawBarSize());
		mouse_grabed_ = true;
		emit sliderPressed();
		grabMouse();
	} else {
		// pageup/pagedown
	}
}
Ejemplo n.º 3
0
bool ScrollBar::isScrollBarArea(const QPoint &mouse_pos) const
{
	if (!drawScrollBar()) {
		return false;
	}

	const int bar_size = base_size_ / 2;
	const int draw_bar_size = drawBarSize();
	const int pos = sliderPositionFromValue(value_, draw_bar_size);

	if (orientation_ == Qt::Horizontal) {
		//return QRect(bar_size, pos, bar_size, draw_bar_size).contains.contains(pos);
	}

	if (orientation_ == Qt::Vertical) {
		return QRect(bar_size, pos, bar_size, draw_bar_size).contains(mouse_pos);
	}

	return false;
}
Ejemplo n.º 4
0
QRect GtkProxyStyle::subControlRect(ComplexControl control, const QStyleOptionComplex *option, SubControl subControl, const QWidget *widget) const
{
    if (SB_Standard!=sbarType && CC_ScrollBar==control) {
        if (const QStyleOptionSlider *sb = qstyleoption_cast<const QStyleOptionSlider *>(option))  {
            QRect ret;
            bool  horizontal(Qt::Horizontal==sb->orientation);
            int   sbextent(pixelMetric(PM_ScrollBarExtent, sb, widget)),
                  sliderMaxLength(horizontal ? sb->rect.width() : sb->rect.height()),
                  sliderMinLength(pixelMetric(PM_ScrollBarSliderMin, sb, widget)),
                  sliderLength;

            if (sb->maximum != sb->minimum) {
                uint valueRange = sb->maximum - sb->minimum;
                sliderLength = (sb->pageStep * sliderMaxLength) / (valueRange + sb->pageStep);

                if (sliderLength < sliderMinLength) {
                    sliderLength = sliderMinLength;
                }
                if (sliderLength > sliderMaxLength) {
                    sliderLength = sliderMaxLength;
                }
            } else {
                sliderLength = sliderMaxLength;
            }

            int sliderstart(sliderPositionFromValue(sb->minimum, sb->maximum, sb->sliderPosition, sliderMaxLength - sliderLength, sb->upsideDown));

            // Subcontrols
            switch(subControl)
            {
            case SC_ScrollBarSubLine:
            case SC_ScrollBarAddLine:
                return QRect();
            case SC_ScrollBarSubPage:
                if (horizontal) {
                    ret.setRect(0, 0, sliderstart, sbextent);
                } else {
                    ret.setRect(0, 0, sbextent, sliderstart);
                }
                break;
            case SC_ScrollBarAddPage:
                if (horizontal) {
                    ret.setRect(sliderstart + sliderLength, 0, sliderMaxLength - sliderstart - sliderLength, sbextent);
                } else {
                    ret.setRect(0, sliderstart + sliderLength, sbextent, sliderMaxLength - sliderstart - sliderLength);
                }
                break;
            case SC_ScrollBarGroove:
                if (horizontal) {
                    ret=QRect(0, 0, sb->rect.width(), sb->rect.height());
                } else {
                    ret=QRect(0, 0, sb->rect.width(), sb->rect.height());
                }
                break;
            case SC_ScrollBarSlider:
                if (horizontal) {
                    ret=QRect(sliderstart, 0, sliderLength, sbextent);
                } else {
                    ret=QRect(0, sliderstart, sbextent, sliderLength);
                }
                break;
            default:
                ret = baseStyle()->subControlRect(control, option, subControl, widget);
                break;
            }
            return visualRect(sb->direction/*Qt::LeftToRight*/, sb->rect, ret);
        }
    }
    return baseStyle()->subControlRect(control, option, subControl, widget);
}
Ejemplo n.º 5
0
QRect KScrollBar::subControlRect(QStyle::SubControl sc)
{
	QRect ret;
	const QRect scrollBarRect = QRect(QPoint(0, 0), size().toSize());
	int sbextent = m_buttonHeight;
	switch (sc)
	{
	case QStyle::SC_ScrollBarSubLine:            // top/left button
		if (m_orientation == Qt::Horizontal) 
		{
			int buttonWidth = qMin(scrollBarRect.width() / 2, sbextent);
			ret.setRect(0, 0, buttonWidth, scrollBarRect.height());
		} 
		else 
		{
			int buttonHeight = qMin(scrollBarRect.height() / 2, sbextent);
			ret.setRect(0, 0, scrollBarRect.width(), buttonHeight);
		}
		return ret;
	case QStyle::SC_ScrollBarAddLine:            // bottom/right button
		if (m_orientation == Qt::Horizontal) 
		{
			int buttonWidth = qMin(scrollBarRect.width()/2, sbextent);
			ret.setRect(scrollBarRect.width() - buttonWidth, 0, buttonWidth, scrollBarRect.height());
		} 
		else 
		{
			int buttonHeight = qMin(scrollBarRect.height()/2, sbextent);
			ret.setRect(0, scrollBarRect.height() - buttonHeight, scrollBarRect.width(), buttonHeight);
		}
		return ret;
	}
	int maxlen = ((m_orientation == Qt::Horizontal) ? width() : height()) - (sbextent * 2);
	int sliderlen = sliderPixels();
	int sliderstart = sbextent + sliderPositionFromValue(m_minimum, m_maximum, m_value, maxlen - sliderlen, false);
	switch (sc)
	{
	case QStyle::SC_ScrollBarSubPage:            // between top/left button and slider
		if (m_orientation == Qt::Horizontal)
			ret.setRect(sbextent, 0, sliderstart - sbextent, scrollBarRect.height());
		else
			ret.setRect(0, sbextent, scrollBarRect.width(), sliderstart - sbextent);
		break;
	case QStyle::SC_ScrollBarAddPage:            // between bottom/right button and slider
		if (m_orientation == Qt::Horizontal)
			ret.setRect(sliderstart + sliderlen, 0, maxlen - sliderstart - sliderlen + sbextent, scrollBarRect.height());
		else
			ret.setRect(0, sliderstart + sliderlen, scrollBarRect.width(), maxlen - sliderstart - sliderlen + sbextent);
		break;
	case QStyle::SC_ScrollBarGroove:
		if (m_orientation == Qt::Horizontal)
			ret.setRect(sbextent, 0, scrollBarRect.width() - sbextent * 2, scrollBarRect.height());
		else
			ret.setRect(0, sbextent, scrollBarRect.width(), scrollBarRect.height() - sbextent * 2);
		break;
	case QStyle::SC_ScrollBarSlider:
		if (m_orientation == Qt::Horizontal)
			ret.setRect(sliderstart, 0, sliderlen, scrollBarRect.height());
		else
			ret.setRect(0, sliderstart, scrollBarRect.width(), sliderlen);
		break;
	default:
		break;
	}
	return ret;
}