/******************************Public*Routine******************************\ * PlayMovie * \**************************************************************************/ BOOL CMovie::PlayMovie( ) { REFTIME rt, rtAbs, rtDur; HRESULT hr=S_OK; rt = GetCurrentPosition(); rtDur = GetDuration(); // // If we are near the end of the movie seek to the start, otherwise // stay where we are. // rtAbs = rt - rtDur; if(rtAbs < (REFTIME)0) { rtAbs = -rtAbs; } if(rtAbs < (REFTIME)1) { SeekToPosition((REFTIME)0,FALSE); } // // Change mode after setting m_Mode but before starting the graph // m_Mode = MOVIE_PLAYING; hr = m_Mc->Run(); return TRUE; }
static void MouseMotion(AG_Event *event) { AG_Slider *sl = AG_SELF(); if (!sl->ctlPressed) { return; } SeekToPosition(sl, ((sl->type == AG_SLIDER_HORIZ) ? AG_INT(1):AG_INT(2)) - sl->xOffs); }
static void MouseButtonDown(AG_Event *event) { AG_Slider *sl = AG_SELF(); int button = AG_INT(1); int x = ((sl->type == AG_SLIDER_HORIZ) ? AG_INT(2) : AG_INT(3)); int pos; if (button != AG_MOUSE_LEFT) { return; } if (GetPosition(sl, &pos) == -1) return; if (!AG_WidgetIsFocused(sl)) { AG_WidgetFocus(sl); } if (x >= pos && x <= (pos + sl->wControl)) { /* * Click on the slider itself. We don't do anything except * saving the cursor position which we will use in future * mousemotion events. */ sl->ctlPressed = 1; sl->xOffs = x - pos; AG_PostEvent(NULL, sl, "slider-drag-begin", NULL); } else { /* * Click outside of control. We seek to the absolute position * described by the cursor. */ sl->ctlPressed = 1; sl->xOffs = sl->wControl/2; SeekToPosition(sl, x - sl->xOffs); AG_PostEvent(NULL, sl, "slider-drag-begin", NULL); } AG_Redraw(sl); }