1/* 2 * Copyright (C) 2007, 2008, 2009, 2010 Apple, Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25#include "config.h" 26 27#include "QTTrack.h" 28 29#include <Movies.h> 30#include <QTML.h> 31 32using namespace std; 33 34class QTTrackPrivate { 35 WTF_MAKE_NONCOPYABLE(QTTrackPrivate); 36public: 37 QTTrackPrivate(); 38 ~QTTrackPrivate(); 39 40 QTTrack* m_track; 41 Track m_trackHandle; 42}; 43 44QTTrackPrivate::QTTrackPrivate() 45 : m_track(0) 46 , m_trackHandle(0) 47{ 48} 49 50QTTrackPrivate::~QTTrackPrivate() 51{ 52 m_trackHandle = 0; 53} 54 55PassRefPtr<QTTrack> QTTrack::create(Track trackHandle) 56{ 57 return adoptRef(new QTTrack(trackHandle)); 58} 59 60QTTrack::QTTrack(Track trackHandle) 61 : m_private(new QTTrackPrivate()) 62{ 63 m_private->m_track = this; 64 m_private->m_trackHandle = trackHandle; 65} 66 67QTTrack::~QTTrack() 68{ 69 delete m_private; 70} 71 72bool QTTrack::isEnabled() const 73{ 74 ASSERT(m_private->m_track); 75 return GetTrackEnabled(m_private->m_trackHandle); 76} 77 78void QTTrack::setEnabled(bool enabled) 79{ 80 ASSERT(m_private->m_trackHandle); 81 SetTrackEnabled(m_private->m_trackHandle, enabled); 82} 83 84CGAffineTransform QTTrack::getTransform() const 85{ 86 ASSERT(m_private->m_trackHandle); 87 MatrixRecord m = {0}; 88 GetTrackMatrix(m_private->m_trackHandle, &m); 89 90 ASSERT(!m.matrix[0][2]); 91 ASSERT(!m.matrix[1][2]); 92 CGAffineTransform transform = CGAffineTransformMake( 93 Fix2X(m.matrix[0][0]), 94 Fix2X(m.matrix[0][1]), 95 Fix2X(m.matrix[1][0]), 96 Fix2X(m.matrix[1][1]), 97 Fix2X(m.matrix[2][0]), 98 Fix2X(m.matrix[2][1])); 99 100 return transform; 101} 102 103void QTTrack::setTransform(CGAffineTransform t) 104{ 105 ASSERT(m_private->m_trackHandle); 106 MatrixRecord m = {{ 107 {X2Fix(t.a), X2Fix(t.b), 0}, 108 {X2Fix(t.c), X2Fix(t.d), 0}, 109 {X2Fix(t.tx), X2Fix(t.ty), fract1}, 110 }}; 111 112 SetTrackMatrix(m_private->m_trackHandle, &m); 113} 114 115void QTTrack::resetTransform() 116{ 117 ASSERT(m_private->m_trackHandle); 118 SetTrackMatrix(m_private->m_trackHandle, 0); 119} 120 121