Exemple #1
0
void QClipAnimator::setClip(QAbstractAnimationClip *clip)
{
    Q_D(QClipAnimator);
    if (d->m_clip == clip)
        return;

    if (d->m_clip)
        d->unregisterDestructionHelper(d->m_clip);

    if (clip && !clip->parent())
        clip->setParent(this);
    d->m_clip = clip;

    // Ensures proper bookkeeping
    if (d->m_clip)
        d->registerDestructionHelper(d->m_clip, &QClipAnimator::setClip, d->m_clip);
    emit clipChanged(clip);
}
Exemple #2
0
void CAnimMixer::processMove(sInt cursorX, sInt cursorY)
{
	updateThisClip();

  if (m_thisClip && m_moveElement != -1)
  {
    sInt nsFrame = fr::maximum(0.0f, m_baseRelStart + (cursorX - m_dragPoint.x) / m_frameStep);
    sInt nTrack = fr::clamp(m_baseTrack + sInt(cursorY - m_dragPoint.y) / 22, 0, m_maxTrack);

    frAnimationClip::element& elem = m_thisClip->m_elements[m_moveElement];
		nsFrame = performSnap(m_moveElement, nsFrame);

		if (nsFrame != elem.relStart || nTrack != elem.trackID)
		{
			elem.updateLen();

			CRect rc1, rc2;
			getElemRect(m_moveElement, rc1);

			elem.relStart = nsFrame;
			elem.trackID = nTrack;

			getElemRect(m_moveElement, rc2);

			CRgn rgn1, rgn2;
			rgn1.CreateRectRgnIndirect(&rc1);
			rgn2.CreateRectRgnIndirect(&rc2);

			rgn1.CombineRgn(rgn1, rgn2, RGN_DIFF);
			InvalidateRgn(rgn1, TRUE); 
			UpdateWindow(); // erasebackground is a per-region flag, so we need to paint twice
			InvalidateRect(&rc2, FALSE);
			UpdateWindow();

			clipChanged();
		}
  }
}
Exemple #3
0
LRESULT CAnimMixer::OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
{
	RECT rcElem;

	updateThisClip();

  switch (wParam)
  {
  case VK_SPACE:
    {
      CMenu dragMenu;
      dragMenu.CreatePopupMenu();

      typedef std::vector<fr::string> stringVec;
      typedef stringVec::iterator stringVecIt;
      typedef stringVec::const_iterator stringVecCIt;
      
      stringVec clipNames;
      for (frClipContainer::nameMapCIt nit = g_graph->m_clips->m_names.begin(); nit != g_graph->m_clips->m_names.end(); ++nit)
        clipNames.push_back(nit->first);

      std::sort(clipNames.begin(), clipNames.end());

      for (sInt i = 0; i < clipNames.size(); i++)
      {
        if (clipNames[i] != m_thisClip->getName() && clipNames[i] != fr::string("Timeline"))
          dragMenu.AppendMenu(MF_STRING, i + 1, clipNames[i]);
      }

      CPoint ptCursor;
      ::GetCursorPos(&ptCursor);
 
      sInt res = dragMenu.TrackPopupMenu(TPM_CENTERALIGN | TPM_RETURNCMD | TPM_VCENTERALIGN | TPM_NONOTIFY,
        ptCursor.x, ptCursor.y, m_hWnd);

      if (res) // clip selected
      {
        const fr::string selClipName = clipNames[res - 1];
				ScreenToClient(&ptCursor);

				const sInt startFrame = (m_startPixel + ptCursor.x) / m_frameStep; 
				const sInt trackNum = (ptCursor.y - 48) / 22;

        m_thisClip->addElement(startFrame,
					fr::minimum(trackNum, getMaxTrackNumber() + 1),	selClipName);

				const sInt lastElem = m_thisClip->m_elements.size() - 1;
				m_thisClip->m_elements.back().relStart = performSnap(lastElem, startFrame);
				getElemRect(lastElem, rcElem);

				clipChanged();

        InvalidateRect(&rcElem, FALSE);
        UpdateWindow();
      }
    }
    break;

  case VK_BACK:
  case VK_DELETE:
		getElemRect(m_curElem, rcElem);
    m_thisClip->deleteElement(m_curElem);

		if (m_moveElement == m_curElem)
			m_moveElement = -1;

    m_curElem = -1;
    clipChanged();

    InvalidateRect(&rcElem, TRUE);
    UpdateWindow();
    break;

  default:
    bHandled = FALSE;
  }

  return 0;
}
Exemple #4
0
void dummyClip::changed2() { clipChanged(QClipboard::Selection); }
Exemple #5
0
void dummyClip::changed1() { clipChanged(QClipboard::Clipboard); }