| 32 | */ |
| 33 | |
| 34 | int main(int argc, char **argv) |
| 35 | { |
| 36 | // NOTE: The last sample is duplicated to simplify interpolation logic |
| 37 | const int n_samples = 64; |
| 38 | const int max_curve_index = 40; |
| 39 | |
| 40 | QMetaEnum en = QEasingCurve::staticMetaObject.enumerator(0); |
| 41 | |
| 42 | QFile json_file("easing.json"); |
| 43 | json_file.open(QIODevice::WriteOnly); |
| 44 | QTextStream json_stream(&json_file); |
| 45 | |
| 46 | QFile lookup_file("src/dlib/easing_lookup.h"); |
| 47 | lookup_file.open(QIODevice::WriteOnly); |
| 48 | QTextStream lookup_stream(&lookup_file); |
| 49 | lookup_stream.setRealNumberPrecision(8); |
| 50 | lookup_stream.setRealNumberNotation(QTextStream::FixedNotation); |
| 51 | |
| 52 | lookup_stream << "// NOTE: GENERATED FILE. DO NOT EDIT\n\n"; |
| 53 | lookup_stream << "/*\n"; |
| 54 | lookup_stream << "enum Type\n"; |
| 55 | lookup_stream << "{\n"; |
| 56 | for (int ct = 0; ct <= max_curve_index; ++ct) { |
| 57 | lookup_stream << " TYPE_" << QString(en.key(ct)).toUpper() << " = " << ct << ",\n"; |
| 58 | } |
| 59 | lookup_stream << " TYPE_COUNT" << " = " << max_curve_index+1 << ",\n"; |
| 60 | lookup_stream << "};\n"; |
| 61 | lookup_stream << "*/\n"; |
| 62 | |
| 63 | lookup_stream << "const int EASING_SAMPLES = " << n_samples << ";\n"; |
| 64 | |
| 65 | lookup_stream << "float EASING_LOOKUP[] = { \n"; |
| 66 | |
| 67 | QJsonArray curves; |
| 68 | for (int ct = 0; ct <= max_curve_index; ++ct) { |
| 69 | QEasingCurve c((QEasingCurve::Type) ct); |
| 70 | QJsonArray values; |
| 71 | lookup_stream << " // " << QString(en.key(ct)) << "\n"; |
| 72 | // NOTE: +1 to duplicate last sample |
| 73 | for (int i = 0; i < n_samples+1; ++i) { |
| 74 | qreal t = i / qreal(n_samples-1); |
| 75 | if (t > 1) |
| 76 | t = 1; |
| 77 | qreal val = c.valueForProgress(t); |
| 78 | values.append(val); |
| 79 | lookup_stream << " " << val << "f,\n"; |
| 80 | } |
| 81 | QJsonObject o; |
| 82 | o["type"] = QString(en.key(ct)); |
| 83 | o["values"] = values; |
| 84 | curves.append(o); |
| 85 | } |
| 86 | lookup_stream << "};\n"; |
| 87 | |
| 88 | QJsonDocument d(curves); |
| 89 | json_stream << d.toJson(); |
| 90 | json_stream.flush(); |
| 91 | } |