****/
#include <string>
-#include <map>
#include <thread>
+#include <vector>
+#include <utility>
+#include <mutex>
+#include <map>
+#include <gtkmm/application.h>
+#include <gtkmm/builder.h>
+#include <gtkmm/scale.h>
+#include <gtkmm/checkbutton.h>
+#include <gtkmm/button.h>
+#include <gtkmm/window.h>
+
extern "C"
{
#include <xdo.h>
class MouseCursorTracker
{
public:
- MouseCursorTracker(std::string cfgPath);
+ MouseCursorTracker(std::string cfgPath,
+ std::vector<std::pair<std::string, int> > motions = {},
+ std::vector<std::string> expressions = {});
~MouseCursorTracker();
+ enum class MotionPriority
+ {
+ // See LAppDefine.cpp in Demo
+ none,
+ idle,
+ normal,
+ force
+ };
+
struct Params
{
- double leftEyeOpenness;
- double rightEyeOpenness;
- double leftEyeSmile;
- double rightEyeSmile;
- double mouthOpenness;
- double mouthForm;
- double faceXAngle;
- double faceYAngle;
- double faceZAngle;
+ std::map<std::string, double> live2d;
+
bool autoBlink;
bool autoBreath;
- bool randomMotion;
+ bool randomIdleMotion;
bool useLipSync;
double lipSyncParam;
+
+ MotionPriority motionPriority;
+ std::string motionGroup;
+ int motionNumber;
+
+ std::string expression;
};
- Params getParams(void) const;
+ Params getParams(void);
void stop(void);
int sleepMs;
bool autoBlink;
bool autoBreath;
- bool randomMotion;
+ bool randomIdleMotion;
bool useLipSync;
double lipSyncGain;
double lipSyncCutOff;
int left;
int right;
int screen;
- Coord middle;
+ Coord origin;
} m_cfg;
+ std::map<std::string, double> m_overrideMap;
+
bool m_stop;
Coord m_curPos;
xdo_t *m_xdo;
std::thread m_getVolumeThread;
+ std::thread m_parseCommandThread;
+ std::thread m_guiThread;
void audioLoop(void);
+ void cliLoop(void);
+ void guiLoop(void);
+ void processCommand(std::string);
double m_currentVol;
pa_simple *m_pulse;
+ MotionPriority m_motionPriority;
+ std::string m_motionGroup;
+ int m_motionNumber;
+ std::mutex m_motionMutex;
+ std::string m_expression;
+
void populateDefaultConfig(void);
void parseConfig(std::string cfgPath);
+
+ Glib::RefPtr<Gtk::Application> m_gtkapp;
+ Glib::RefPtr<Gtk::Builder> m_builder;
+
+ std::vector<std::string> m_onClearResettingParams;
+
+ // GUI signal handlers
+ void onMotionStartButton(void);
+ void onExpressionStartButton(void);
+ void onParamUpdateButton(Gtk::Scale *scale, bool isInc);
+ void onParamValChanged(Glib::RefPtr<Gtk::Adjustment> adj, std::string paramName);
+ void onAutoToggle(Gtk::CheckButton *check, Gtk::Scale *scale,
+ Gtk::Button *buttonDec, Gtk::Button *buttonInc,
+ std::string paramName);
+ void onClearButton(Glib::RefPtr<Gtk::Button> button, std::string paramName, Glib::RefPtr<Gtk::Adjustment> adj);
+ void onExpanderChange(Gtk::Window *window);
};
#endif