fixed stuttering labelslider
This commit is contained in:
+1
-1
@@ -10,7 +10,7 @@ extern "C" {
|
||||
|
||||
#include "project/clip.h"
|
||||
|
||||
Media::Media() : ready(false), preview_gen(NULL) {
|
||||
Media::Media() : ready(false), preview_gen(NULL), invalid(false) {
|
||||
ready_lock.lock();
|
||||
}
|
||||
|
||||
|
||||
@@ -52,6 +52,7 @@ struct Media {
|
||||
QVector<MediaStream*> audio_tracks;
|
||||
int save_id;
|
||||
bool ready;
|
||||
bool invalid;
|
||||
|
||||
PreviewGenerator* preview_gen;
|
||||
QMutex ready_lock;
|
||||
|
||||
@@ -400,7 +400,7 @@ QString PreviewGenerator::get_waveform_path(const QString& hash, MediaStream* ms
|
||||
|
||||
void PreviewGenerator::run() {
|
||||
Q_ASSERT(media != NULL);
|
||||
Q_ASSERT(item != NULL);
|
||||
Q_ASSERT(item != NULL);
|
||||
|
||||
QByteArray ba = media->url.toLatin1();
|
||||
char* filename = new char[ba.size()+1];
|
||||
@@ -457,6 +457,7 @@ void PreviewGenerator::run() {
|
||||
if (error) {
|
||||
update_footage_tooltip(item, media, errorStr);
|
||||
emit set_icon(ICON_TYPE_ERROR, replace);
|
||||
media->invalid = true;
|
||||
media->ready_lock.unlock();
|
||||
} else {
|
||||
update_footage_tooltip(item, media);
|
||||
|
||||
+13
-13
@@ -482,7 +482,7 @@ int Effect::gizmo_count(){
|
||||
void Effect::refresh() {}
|
||||
|
||||
void Effect::field_changed() {
|
||||
panel_sequence_viewer->viewer_widget->update();
|
||||
panel_sequence_viewer->viewer_widget->update();
|
||||
}
|
||||
|
||||
void Effect::show_context_menu(const QPoint& pos) {
|
||||
@@ -557,24 +557,24 @@ void Effect::set_enabled(bool b) {
|
||||
|
||||
QVariant load_data_from_string(int type, const QString& string) {
|
||||
switch (type) {
|
||||
case EFFECT_FIELD_DOUBLE: return string.toDouble(); break;
|
||||
case EFFECT_FIELD_COLOR: return QColor(string); break;
|
||||
case EFFECT_FIELD_STRING: return string; break;
|
||||
case EFFECT_FIELD_BOOL: return (string == "1"); break;
|
||||
case EFFECT_FIELD_COMBO: return string.toInt(); break;
|
||||
case EFFECT_FIELD_FONT: return string; break;
|
||||
case EFFECT_FIELD_DOUBLE: return string.toDouble();
|
||||
case EFFECT_FIELD_COLOR: return QColor(string);
|
||||
case EFFECT_FIELD_STRING: return string;
|
||||
case EFFECT_FIELD_BOOL: return (string == "1");
|
||||
case EFFECT_FIELD_COMBO: return string.toInt();
|
||||
case EFFECT_FIELD_FONT: return string;
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
QString save_data_to_string(int type, const QVariant& data) {
|
||||
switch (type) {
|
||||
case EFFECT_FIELD_DOUBLE: return QString::number(data.toDouble()); break;
|
||||
case EFFECT_FIELD_COLOR: return data.value<QColor>().name(); break;
|
||||
case EFFECT_FIELD_STRING: return data.toString(); break;
|
||||
case EFFECT_FIELD_BOOL: return QString::number(data.toBool()); break;
|
||||
case EFFECT_FIELD_COMBO: return QString::number(data.toInt()); break;
|
||||
case EFFECT_FIELD_FONT: return data.toString(); break;
|
||||
case EFFECT_FIELD_DOUBLE: return QString::number(data.toDouble());
|
||||
case EFFECT_FIELD_COLOR: return data.value<QColor>().name();
|
||||
case EFFECT_FIELD_STRING: return data.toString();
|
||||
case EFFECT_FIELD_BOOL: return QString::number(data.toBool());
|
||||
case EFFECT_FIELD_COMBO: return QString::number(data.toInt());
|
||||
case EFFECT_FIELD_FONT: return data.toString();
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
+8
-10
@@ -72,12 +72,12 @@ EffectField::EffectField(EffectRow *parent, int t, const QString &i) :
|
||||
|
||||
QVariant EffectField::get_previous_data() {
|
||||
switch (type) {
|
||||
case EFFECT_FIELD_DOUBLE: return static_cast<LabelSlider*>(ui_element)->getPreviousValue(); break;
|
||||
case EFFECT_FIELD_COLOR: return static_cast<ColorButton*>(ui_element)->getPreviousValue(); break;
|
||||
case EFFECT_FIELD_STRING: return static_cast<TextEditEx*>(ui_element)->getPreviousValue(); break;
|
||||
case EFFECT_FIELD_BOOL: return !static_cast<QCheckBox*>(ui_element)->isChecked(); break;
|
||||
case EFFECT_FIELD_COMBO: return static_cast<ComboBoxEx*>(ui_element)->getPreviousIndex(); break;
|
||||
case EFFECT_FIELD_FONT: return static_cast<FontCombobox*>(ui_element)->getPreviousValue(); break;
|
||||
case EFFECT_FIELD_DOUBLE: return static_cast<LabelSlider*>(ui_element)->getPreviousValue();
|
||||
case EFFECT_FIELD_COLOR: return static_cast<ColorButton*>(ui_element)->getPreviousValue();
|
||||
case EFFECT_FIELD_STRING: return static_cast<TextEditEx*>(ui_element)->getPreviousValue();
|
||||
case EFFECT_FIELD_BOOL: return !static_cast<QCheckBox*>(ui_element)->isChecked();
|
||||
case EFFECT_FIELD_COMBO: return static_cast<ComboBoxEx*>(ui_element)->getPreviousIndex();
|
||||
case EFFECT_FIELD_FONT: return static_cast<FontCombobox*>(ui_element)->getPreviousValue();
|
||||
}
|
||||
return QVariant();
|
||||
}
|
||||
@@ -141,8 +141,6 @@ void EffectField::get_keyframe_data(double timecode, int &before, int &after, do
|
||||
after = after_keyframe_index;
|
||||
|
||||
progress = (timecode-frameToTimecode(before_keyframe_time))/(frameToTimecode(after_keyframe_time)-frameToTimecode(before_keyframe_time));
|
||||
|
||||
// TODO routines for bezier - currently this is purely linear
|
||||
} else if (before_keyframe_index > -1) {
|
||||
before = before_keyframe_index;
|
||||
after = before_keyframe_index;
|
||||
@@ -165,8 +163,7 @@ QVariant EffectField::validate_keyframe_data(double timecode, bool async) {
|
||||
|
||||
int kf_type = (progress < 0.5) ? parent_row->keyframe_types.at(before_keyframe) : parent_row->keyframe_types.at(after_keyframe);
|
||||
if (kf_type == KEYFRAME_TYPE_SMOOTH) {
|
||||
double steepness = 8.0;
|
||||
double x = (steepness * progress) - (steepness * 0.5);
|
||||
double x = (8.0 * progress) - 4.0;
|
||||
progress = 1.0 / (1.0 + qPow(M_E, -x));
|
||||
progress *= 1.0373;
|
||||
progress -= 0.01865;
|
||||
@@ -241,6 +238,7 @@ void EffectField::ui_element_change() {
|
||||
if (!dragging_double) ca = new ComboAction();
|
||||
make_key_from_change(ca);
|
||||
if (!dragging_double) undo_stack.push(ca);
|
||||
emit changed();
|
||||
}
|
||||
|
||||
void EffectField::make_key_from_change(ComboAction* ca) {
|
||||
|
||||
+1
-1
@@ -135,7 +135,7 @@ void LabelSlider::mouseReleaseEvent(QMouseEvent*) {
|
||||
if (drag_proc) {
|
||||
drag_proc = false;
|
||||
previous_value = drag_start_value;
|
||||
emit valueChanged();
|
||||
emit valueChanged();
|
||||
} else {
|
||||
double d = internal_value;
|
||||
if (display_type == LABELSLIDER_FRAMENUMBER) {
|
||||
|
||||
+21
-17
@@ -1,4 +1,4 @@
|
||||
#include "viewerwidget.h"
|
||||
#include "viewerwidget.h"
|
||||
|
||||
#include "panels/panels.h"
|
||||
#include "panels/viewer.h"
|
||||
@@ -351,6 +351,7 @@ void ViewerWidget::process_effect(Clip* c, Effect* e, double timecode, GLTexture
|
||||
if (e->enable_superimpose) {
|
||||
GLuint superimpose_texture = e->process_superimpose(timecode);
|
||||
if (superimpose_texture == 0) {
|
||||
dout << "[WARNING] Superimpose texture was NULL, retrying...";
|
||||
texture_failed = true;
|
||||
} else {
|
||||
composite_texture = draw_clip(c->fbo[!fbo_switcher], superimpose_texture, false);
|
||||
@@ -398,22 +399,25 @@ GLuint ViewerWidget::compose_sequence(QVector<Clip*>& nests, bool render_audio)
|
||||
case MEDIA_TYPE_FOOTAGE:
|
||||
{
|
||||
Media* m = static_cast<Media*>(c->media);
|
||||
if (m->ready) {
|
||||
MediaStream* ms = m->get_stream_from_file_index(c->track < 0, c->media_stream);
|
||||
if (ms != NULL && is_clip_active(c, playhead)) {
|
||||
// if thread is already working, we don't want to touch this,
|
||||
// but we also don't want to hang the UI thread
|
||||
if (!c->open) {
|
||||
open_clip(c, !rendering);
|
||||
}
|
||||
clip_is_active = true;
|
||||
if (c->track >= 0) audio_track_count++;
|
||||
} else if (c->open) {
|
||||
close_clip(c);
|
||||
}
|
||||
} else {
|
||||
texture_failed = true;
|
||||
}
|
||||
if (!m->invalid) {
|
||||
if (m->ready) {
|
||||
MediaStream* ms = m->get_stream_from_file_index(c->track < 0, c->media_stream);
|
||||
if (ms != NULL && is_clip_active(c, playhead)) {
|
||||
// if thread is already working, we don't want to touch this,
|
||||
// but we also don't want to hang the UI thread
|
||||
if (!c->open) {
|
||||
open_clip(c, !rendering);
|
||||
}
|
||||
clip_is_active = true;
|
||||
if (c->track >= 0) audio_track_count++;
|
||||
} else if (c->open) {
|
||||
close_clip(c);
|
||||
}
|
||||
} else {
|
||||
dout << "[WARNING] Media was not ready, retrying...";
|
||||
texture_failed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case MEDIA_TYPE_SEQUENCE:
|
||||
|
||||
Reference in New Issue
Block a user