comparison layer/ImageLayer.cpp @ 944:78c152e4db95

Merge from branch tonioni
author Chris Cannam
date Mon, 20 Apr 2015 09:12:17 +0100
parents b66fb15de477
children 94e4952a6774
comparison
equal deleted inserted replaced
896:78e041e45ff0 944:78c152e4db95
108 { 108 {
109 Layer::setProperty(name, value); 109 Layer::setProperty(name, value);
110 } 110 }
111 111
112 bool 112 bool
113 ImageLayer::getValueExtents(float &, float &, bool &, QString &) const 113 ImageLayer::getValueExtents(double &, double &, bool &, QString &) const
114 { 114 {
115 return false; 115 return false;
116 } 116 }
117 117
118 bool 118 bool
206 206
207 207
208 //!!! too much overlap with TimeValueLayer/TimeInstantLayer/TextLayer 208 //!!! too much overlap with TimeValueLayer/TimeInstantLayer/TextLayer
209 209
210 bool 210 bool
211 ImageLayer::snapToFeatureFrame(View *v, int &frame, 211 ImageLayer::snapToFeatureFrame(View *v, sv_frame_t &frame,
212 int &resolution, 212 int &resolution,
213 SnapType snap) const 213 SnapType snap) const
214 { 214 {
215 if (!m_model) { 215 if (!m_model) {
216 return Layer::snapToFeatureFrame(v, frame, resolution, snap); 216 return Layer::snapToFeatureFrame(v, frame, resolution, snap);
226 frame = points.begin()->frame; 226 frame = points.begin()->frame;
227 return true; 227 return true;
228 } 228 }
229 229
230 points = m_model->getPoints(frame, frame); 230 points = m_model->getPoints(frame, frame);
231 int snapped = frame; 231 sv_frame_t snapped = frame;
232 bool found = false; 232 bool found = false;
233 233
234 for (ImageModel::PointList::const_iterator i = points.begin(); 234 for (ImageModel::PointList::const_iterator i = points.begin();
235 i != points.end(); ++i) { 235 i != points.end(); ++i) {
236 236
282 void 282 void
283 ImageLayer::paint(View *v, QPainter &paint, QRect rect) const 283 ImageLayer::paint(View *v, QPainter &paint, QRect rect) const
284 { 284 {
285 if (!m_model || !m_model->isOK()) return; 285 if (!m_model || !m_model->isOK()) return;
286 286
287 int sampleRate = m_model->getSampleRate(); 287 sv_samplerate_t sampleRate = m_model->getSampleRate();
288 if (!sampleRate) return; 288 if (!sampleRate) return;
289 289
290 // Profiler profiler("ImageLayer::paint", true); 290 // Profiler profiler("ImageLayer::paint", true);
291 291
292 // int x0 = rect.left(), x1 = rect.right(); 292 // int x0 = rect.left(), x1 = rect.right();
293 int x0 = 0, x1 = v->width(); 293 int x0 = 0, x1 = v->width();
294 294
295 int frame0 = v->getFrameForX(x0); 295 sv_frame_t frame0 = v->getFrameForX(x0);
296 int frame1 = v->getFrameForX(x1); 296 sv_frame_t frame1 = v->getFrameForX(x1);
297 297
298 ImageModel::PointList points(m_model->getPoints(frame0, frame1)); 298 ImageModel::PointList points(m_model->getPoints(frame0, frame1));
299 if (points.empty()) return; 299 if (points.empty()) return;
300 300
301 paint.save(); 301 paint.save();
561 if (!m_model) { 561 if (!m_model) {
562 SVDEBUG << "ImageLayer::drawStart: no model" << endl; 562 SVDEBUG << "ImageLayer::drawStart: no model" << endl;
563 return; 563 return;
564 } 564 }
565 565
566 int frame = v->getFrameForX(e->x()); 566 sv_frame_t frame = v->getFrameForX(e->x());
567 if (frame < 0) frame = 0; 567 if (frame < 0) frame = 0;
568 frame = frame / m_model->getResolution() * m_model->getResolution(); 568 frame = frame / m_model->getResolution() * m_model->getResolution();
569 569
570 m_editingPoint = ImageModel::Point(frame, "", ""); 570 m_editingPoint = ImageModel::Point(frame, "", "");
571 m_originalPoint = m_editingPoint; 571 m_originalPoint = m_editingPoint;
582 { 582 {
583 // SVDEBUG << "ImageLayer::drawDrag(" << e->x() << "," << e->y() << ")" << endl; 583 // SVDEBUG << "ImageLayer::drawDrag(" << e->x() << "," << e->y() << ")" << endl;
584 584
585 if (!m_model || !m_editing) return; 585 if (!m_model || !m_editing) return;
586 586
587 int frame = v->getFrameForX(e->x()); 587 sv_frame_t frame = v->getFrameForX(e->x());
588 if (frame < 0) frame = 0; 588 if (frame < 0) frame = 0;
589 frame = frame / m_model->getResolution() * m_model->getResolution(); 589 frame = frame / m_model->getResolution() * m_model->getResolution();
590 590
591 m_editingCommand->deletePoint(m_editingPoint); 591 m_editingCommand->deletePoint(m_editingPoint);
592 m_editingPoint.frame = frame; 592 m_editingPoint.frame = frame;
617 m_editingCommand = 0; 617 m_editingCommand = 0;
618 m_editing = false; 618 m_editing = false;
619 } 619 }
620 620
621 bool 621 bool
622 ImageLayer::addImage(int frame, QString url) 622 ImageLayer::addImage(sv_frame_t frame, QString url)
623 { 623 {
624 QImage image(getLocalFilename(url)); 624 QImage image(getLocalFilename(url));
625 if (image.isNull()) { 625 if (image.isNull()) {
626 cerr << "Failed to open image from url \"" << url << "\" (local filename \"" << getLocalFilename(url) << "\"" << endl; 626 cerr << "Failed to open image from url \"" << url << "\" (local filename \"" << getLocalFilename(url) << "\"" << endl;
627 delete m_fileSources[url]; 627 delete m_fileSources[url];
662 void 662 void
663 ImageLayer::editDrag(View *v, QMouseEvent *e) 663 ImageLayer::editDrag(View *v, QMouseEvent *e)
664 { 664 {
665 if (!m_model || !m_editing) return; 665 if (!m_model || !m_editing) return;
666 666
667 int frameDiff = v->getFrameForX(e->x()) - v->getFrameForX(m_editOrigin.x()); 667 sv_frame_t frameDiff = v->getFrameForX(e->x()) - v->getFrameForX(m_editOrigin.x());
668 int frame = m_originalPoint.frame + frameDiff; 668 sv_frame_t frame = m_originalPoint.frame + frameDiff;
669 669
670 if (frame < 0) frame = 0; 670 if (frame < 0) frame = 0;
671 frame = (frame / m_model->getResolution()) * m_model->getResolution(); 671 frame = (frame / m_model->getResolution()) * m_model->getResolution();
672 672
673 if (!m_editingCommand) { 673 if (!m_editingCommand) {
721 721
722 return true; 722 return true;
723 } 723 }
724 724
725 void 725 void
726 ImageLayer::moveSelection(Selection s, int newStartFrame) 726 ImageLayer::moveSelection(Selection s, sv_frame_t newStartFrame)
727 { 727 {
728 if (!m_model) return; 728 if (!m_model) return;
729 729
730 ImageModel::EditCommand *command = 730 ImageModel::EditCommand *command =
731 new ImageModel::EditCommand(m_model, tr("Drag Selection")); 731 new ImageModel::EditCommand(m_model, tr("Drag Selection"));
765 for (ImageModel::PointList::iterator i = points.begin(); 765 for (ImageModel::PointList::iterator i = points.begin();
766 i != points.end(); ++i) { 766 i != points.end(); ++i) {
767 767
768 if (s.contains(i->frame)) { 768 if (s.contains(i->frame)) {
769 769
770 double target = i->frame; 770 double target = double(i->frame);
771 target = newSize.getStartFrame() + 771 target = double(newSize.getStartFrame()) +
772 double(target - s.getStartFrame()) * ratio; 772 target - double(s.getStartFrame()) * ratio;
773 773
774 ImageModel::Point newPoint(*i); 774 ImageModel::Point newPoint(*i);
775 newPoint.frame = lrint(target); 775 newPoint.frame = lrint(target);
776 command->deletePoint(*i); 776 command->deletePoint(*i);
777 command->addPoint(newPoint); 777 command->addPoint(newPoint);
817 } 817 }
818 } 818 }
819 } 819 }
820 820
821 bool 821 bool
822 ImageLayer::paste(View *v, const Clipboard &from, int /* frameOffset */, bool /* interactive */) 822 ImageLayer::paste(View *v, const Clipboard &from, sv_frame_t /* frameOffset */, bool /* interactive */)
823 { 823 {
824 if (!m_model) return false; 824 if (!m_model) return false;
825 825
826 const Clipboard::PointList &points = from.getPoints(); 826 const Clipboard::PointList &points = from.getPoints();
827 827
850 for (Clipboard::PointList::const_iterator i = points.begin(); 850 for (Clipboard::PointList::const_iterator i = points.begin();
851 i != points.end(); ++i) { 851 i != points.end(); ++i) {
852 852
853 if (!i->haveFrame()) continue; 853 if (!i->haveFrame()) continue;
854 854
855 int frame = 0; 855 sv_frame_t frame = 0;
856 856
857 if (!realign) { 857 if (!realign) {
858 858
859 frame = i->getFrame(); 859 frame = i->getFrame();
860 860