コード例 #1
0
ファイル: GraphEditor.cpp プロジェクト: WhoIsLudwig/nesicide
void CGraphEditor::OnMouseMove(UINT nFlags, CPoint point)
{
	if (!m_pSequence || !m_pSequence->GetItemCount())
		return;

	if (nFlags & MK_LBUTTON) {
		switch (m_iEditing) {
			case EDIT_POINT:
				ModifyItem(point, true);
				break;
			case EDIT_LOOP:
				ModifyLoopPoint(point, true);
				break;
		}
	}
	else if (nFlags & MK_RBUTTON) {
		switch (m_iEditing) {
			case EDIT_LINE:	{
				int PosX = point.x;
				int PosY = point.y;

				if (m_iEditing == EDIT_LINE) {
					m_ptLineEnd = CPoint(PosX, PosY);

					int StartX = (m_ptLineStart.x < m_ptLineEnd.x ? m_ptLineStart.x : m_ptLineEnd.x);
					int StartY = (m_ptLineStart.x < m_ptLineEnd.x ? m_ptLineStart.y : m_ptLineEnd.y);
					int EndX = (m_ptLineStart.x > m_ptLineEnd.x ? m_ptLineStart.x : m_ptLineEnd.x);
					int EndY = (m_ptLineStart.x > m_ptLineEnd.x ? m_ptLineStart.y : m_ptLineEnd.y);

					float DeltaY = float(EndY - StartY) / float((EndX - StartX) + 1);
					float fY = float(StartY);

					for (int x = StartX; x < EndX; x++) {
						ModifyItem(CPoint(x, (int)fY), false);
						fY += DeltaY;
					}

					RedrawWindow();
					m_pParentWnd->PostMessage(WM_SEQUENCE_CHANGED, 1);
				}
				}
				break;
			case EDIT_RELEASE:
				ModifyReleasePoint(point, true);
				break;
		}
	}
	else {
		// No button
		HighlightItem(point);
	}

	// Notify parent
	if (m_pSequence->GetItemCount() > 0 && point.x > GRAPH_LEFT) {
		CursorChanged(point.x - GRAPH_LEFT);
	}
	else
		m_pParentWnd->PostMessage(WM_CURSOR_CHANGE, 0, 0);
}
コード例 #2
0
ファイル: ReRulerWidget.cpp プロジェクト: Abyss116/libguiex
void ReRulerWidget::mouseMoveEvent( QMouseEvent* _event )
{
	if( m_cursorDragInfo.IsMoving() )
	{
		int cursorBackup = m_cursor;
		int cursor = 0;
		int delta = 0;
		int newCursor = 0;

		if( IsHorizontal() )
		{
			cursor = _event->pos().x();
			if( cursor < 0 )
				cursor = 0;
			else if( cursor >= width() )
				cursor = width() - 1;

			delta = cursor - m_cursorDragInfo.GetCursorPosBackup().x();
			newCursor = m_cursorDragInfo.GetCursorPosBackup().x() + delta / m_snap * m_snap;
		}
		else
		{
			cursor = _event->pos().y();
			if( cursor < 0 )
				cursor = 0;
			else if( cursor >= height() )
				cursor = height() - 1;

			delta = cursor - m_cursorDragInfo.GetCursorPosBackup().y();
			newCursor = m_cursorDragInfo.GetCursorPosBackup().y() + delta / m_snap * m_snap;
		}
		
		if( newCursor != m_cursor )
		{
			OnCursorChanged( newCursor );
			emit CursorChanged( newCursor );
		}
	}
	else if( m_viewportDragInfo.IsMoving() )
	{
		int viewPortBackup = m_viewport;

		QPoint delta = _event->pos() - m_viewportDragInfo.GetCursorPosBackup();
		int newViewportPos = IsHorizontal()
			? m_viewportDragInfo.GetItemPosBackup().x() - delta.x()
			: m_viewportDragInfo.GetItemPosBackup().y() - delta.y();

		newViewportPos = newViewportPos / m_snap * m_snap;
		if( newViewportPos != viewPortBackup )
		{
			OnViewportChanged( newViewportPos );
			emit ViewportChanged( newViewportPos );
		}
	}
}
コード例 #3
0
ファイル: ReRulerWidget.cpp プロジェクト: Abyss116/libguiex
void ReRulerWidget::SetValue( qreal _value, bool _scrollViewport )
{
	int newCursor = qRound( _value / m_unitValue * m_unit ) - m_viewport;

	OnCursorChanged( newCursor );
	emit CursorChanged( newCursor );

	if( m_cursor < 0 && _scrollViewport )
	{
		OnViewportChanged( newCursor );
		emit ViewportChanged( newCursor );
	}
}
コード例 #4
0
int RE::ReRulerWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
    _id = ReBaseWidget<QLabel>::qt_metacall(_c, _id, _a);
    if (_id < 0)
        return _id;
    if (_c == QMetaObject::InvokeMetaMethod) {
        switch (_id) {
        case 0: CursorChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 1: ViewportChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 2: OnCursorChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        case 3: OnViewportChanged((*reinterpret_cast< int(*)>(_a[1]))); break;
        default: ;
        }
        _id -= 4;
    }
    return _id;
}
コード例 #5
0
ファイル: GraphEditor.cpp プロジェクト: WhoIsLudwig/nesicide
void CGraphEditor::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_bButtonState = true;

	SetCapture();
	SetFocus();

	if (!m_pSequence || !m_pSequence->GetItemCount())
		return;

	if (point.y < m_GraphRect.bottom) {
		m_iEditing = EDIT_POINT;
		ModifyItem(point, true);
		if (point.x > GRAPH_LEFT)
			CursorChanged(point.x - GRAPH_LEFT);
	}
	else if (point.y > m_GraphRect.bottom) {
		m_iEditing = EDIT_LOOP;
		ModifyLoopPoint(point, true);
	}
}