update ffmpeg to 4.1, add sketcher plugin, crikey tweaks, titler colorpicker, keyfram...
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / sketcher / sketcherwindow.h
diff --git a/cinelerra-5.1/plugins/sketcher/sketcherwindow.h b/cinelerra-5.1/plugins/sketcher/sketcherwindow.h
new file mode 100644 (file)
index 0000000..a0cc4ae
--- /dev/null
@@ -0,0 +1,401 @@
+/*
+ * CINELERRA
+ * Copyright (C) 2008-2015 Adam Williams <broadcast at earthling dot net>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ */
+
+#ifndef __CRIKEYWINDOW_H__
+#define __CRIKEYWINDOW_H__
+
+#include "guicast.h"
+#include "colorpicker.h"
+
+class Sketcher;
+class SketcherNum;
+class SketcherCurveTypeItem;
+class SketcherCurveType;
+class SketcherCurvePenItem;
+class SketcherCurvePen;
+class SketcherCurveColor;
+class SketcherCurveColorPicker;
+class SketcherCurveColorThread;
+class SketcherNewCurve;
+class SketcherDelCurve;
+class SketcherCurveUp;
+class SketcherCurveDn;
+class SketcherCurveRadius;
+class SketcherCurveList;
+class SketcherPointX;
+class SketcherPointY;
+class SketcherDrag;
+class SketcherPointList;
+class SketcherNewPoint;
+class SketcherDelPoint;
+class SketcherPointUp;
+class SketcherPointDn;
+class SketcherResetCurves;
+class SketcherResetPoints;
+class SketcherWindow;
+
+class SketcherNum : public BC_TumbleTextBox
+{
+public:
+       SketcherWindow *gui;
+
+       SketcherNum(SketcherWindow *gui, int x, int y, int output,
+               int mn=-32767, int mx=32767);
+       ~SketcherNum();
+       int update(int v) { return BC_TumbleTextBox::update((int64_t)v); }
+};
+
+class SketcherCurveTypeItem : public BC_MenuItem
+{
+public:
+       SketcherCurveTypeItem(int ty);
+       int handle_event();
+       int ty;
+};
+
+class SketcherCurveType : public BC_PopupMenu
+{
+public:
+       SketcherCurveType(SketcherWindow *gui, int x, int y, int ty);
+       void create_objects();
+       void update(int ty);
+
+       SketcherWindow *gui;
+};
+
+class SketcherCurvePenItem : public BC_MenuItem
+{
+public:
+       SketcherCurvePenItem(int pen);
+       int handle_event();
+       int pen;
+};
+
+class SketcherCurvePen : public BC_PopupMenu
+{
+public:
+       SketcherCurvePen(SketcherWindow *gui, int x, int y, int pen);
+       void create_objects();
+       void update(int ty);
+
+       SketcherWindow *gui;
+};
+
+class SketcherCurveColor : public BC_Button
+{
+public:
+       SketcherCurveColor(SketcherWindow *gui, int x, int y, int w);
+       ~SketcherCurveColor();
+
+       void set_color(int color);
+       void update_gui(int color);
+       int handle_event();
+
+       int color;
+       VFrame *vframes[3];
+       SketcherWindow *gui;
+};
+
+class SketcherCurveColorPicker : public ColorPicker
+{
+public:
+       SketcherCurveColorPicker(SketcherWindow *gui, SketcherCurveColor *curve_color);
+       ~SketcherCurveColorPicker();
+       void start(int color);
+       int handle_new_color(int color, int alpha);
+       void update_gui();
+       void handle_done_event(int result);
+
+       SketcherWindow *gui;
+       int color;
+       SketcherCurveColor *color_button;
+       SketcherCurveColorThread *color_update;
+};
+
+class SketcherCurveColorThread : public Thread
+{
+public:
+       SketcherCurveColorThread(SketcherCurveColorPicker *color_picker);
+       ~SketcherCurveColorThread();
+
+       void start();
+       void stop();
+       void run();
+
+       SketcherCurveColorPicker *color_picker;
+       int done;
+       Condition *update_lock;
+};
+
+class SketcherNewCurve : public BC_GenericButton
+{
+public:
+       SketcherNewCurve(SketcherWindow *gui, Sketcher *plugin, int x, int y);
+       ~SketcherNewCurve();
+
+       int handle_event();
+
+       SketcherWindow *gui;
+       Sketcher *plugin;
+};
+
+class SketcherDelCurve : public BC_GenericButton
+{
+public:
+       SketcherDelCurve(SketcherWindow *gui, Sketcher *plugin, int x, int y);
+       ~SketcherDelCurve();
+
+       int handle_event();
+
+       Sketcher *plugin;
+       SketcherWindow *gui;
+};
+
+class SketcherCurveUp : public BC_GenericButton
+{
+public:
+       SketcherCurveUp(SketcherWindow *gui, int x, int y);
+       ~SketcherCurveUp();
+
+       int handle_event();
+
+       SketcherWindow *gui;
+};
+
+class SketcherCurveDn : public BC_GenericButton
+{
+public:
+       SketcherCurveDn(SketcherWindow *gui, int x, int y);
+       ~SketcherCurveDn();
+
+       int handle_event();
+
+       SketcherWindow *gui;
+};
+
+class SketcherCurveRadius : public SketcherNum
+{
+public:
+       SketcherCurveRadius(SketcherWindow *gui, int x, int y, float output)
+        : SketcherNum(gui, x, y, output, 0, 255) {}
+       ~SketcherCurveRadius() {}
+
+       int handle_event();
+};
+
+class SketcherCurveList : public BC_ListBox
+{
+public:
+       SketcherCurveList(SketcherWindow *gui, Sketcher *plugin, int x, int y);
+       ~SketcherCurveList();
+
+       int handle_event();
+       int selection_changed();
+       int column_resize_event();
+       ArrayList<BC_ListBoxItem*> cols[CV_SZ];
+       void clear();
+       void add_curve(const char *id, const char *type,
+               const char *radius, const char *pen, const char *color);
+       void del_curve(int i);
+       void set_selected(int k);
+       void update(int k);
+       void update_list(int k);
+
+       SketcherWindow *gui;
+       Sketcher *plugin;
+       const char *titles[CV_SZ];
+       int widths[CV_SZ];
+};
+
+
+class SketcherPointX : public SketcherNum
+{
+public:
+       SketcherPointX(SketcherWindow *gui, int x, int y, float output)
+        : SketcherNum(gui, x, y, output) {}
+       ~SketcherPointX() {}
+
+       int handle_event();
+};
+class SketcherPointY : public SketcherNum
+{
+public:
+       SketcherPointY(SketcherWindow *gui, int x, int y, float output)
+        : SketcherNum(gui, x, y, output) {}
+       ~SketcherPointY() {}
+
+       int handle_event();
+};
+
+
+class SketcherDrag : public BC_CheckBox
+{
+public:
+       SketcherDrag(SketcherWindow *gui, int x, int y);
+
+       int handle_event();
+       SketcherWindow *gui;
+};
+
+
+class SketcherPointList : public BC_ListBox
+{
+public:
+       SketcherPointList(SketcherWindow *gui, Sketcher *plugin, int x, int y);
+       ~SketcherPointList();
+
+       int handle_event();
+       int selection_changed();
+       int column_resize_event();
+       ArrayList<BC_ListBoxItem*> cols[PT_SZ];
+       void clear();
+       void add_point(const char *id, const char *xp, const char *yp);
+       void set_point(int i, int c, int v);
+       void set_point(int i, int c, const char *cp);
+       void set_selected(int k);
+       void update(int k);
+       void update_list(int k);
+
+
+       SketcherWindow *gui;
+       Sketcher *plugin;
+       const char *titles[PT_SZ];
+       int widths[PT_SZ];
+};
+
+class SketcherNewPoint : public BC_GenericButton
+{
+public:
+       SketcherNewPoint(SketcherWindow *gui, Sketcher *plugin, int x, int y);
+       ~SketcherNewPoint();
+
+       int handle_event();
+
+       SketcherWindow *gui;
+       Sketcher *plugin;
+};
+
+class SketcherDelPoint : public BC_GenericButton
+{
+public:
+       SketcherDelPoint(SketcherWindow *gui, Sketcher *plugin, int x, int y);
+       ~SketcherDelPoint();
+
+       int handle_event();
+
+       Sketcher *plugin;
+       SketcherWindow *gui;
+};
+
+class SketcherPointUp : public BC_GenericButton
+{
+public:
+       SketcherPointUp(SketcherWindow *gui, int x, int y);
+       ~SketcherPointUp();
+
+       int handle_event();
+
+       SketcherWindow *gui;
+};
+
+class SketcherPointDn : public BC_GenericButton
+{
+public:
+       SketcherPointDn(SketcherWindow *gui, int x, int y);
+       ~SketcherPointDn();
+
+       int handle_event();
+
+       SketcherWindow *gui;
+};
+
+class SketcherResetCurves : public BC_GenericButton
+{
+public:
+       SketcherResetCurves(SketcherWindow *gui, Sketcher *plugin, int x, int y);
+       ~SketcherResetCurves();
+
+       int handle_event();
+
+       Sketcher *plugin;
+       SketcherWindow *gui;
+};
+
+class SketcherResetPoints : public BC_GenericButton
+{
+public:
+       SketcherResetPoints(SketcherWindow *gui, Sketcher *plugin, int x, int y);
+       ~SketcherResetPoints();
+
+       int handle_event();
+
+       Sketcher *plugin;
+       SketcherWindow *gui;
+};
+
+
+class SketcherWindow : public PluginClientWindow
+{
+public:
+       SketcherWindow(Sketcher *plugin);
+       ~SketcherWindow();
+
+       void create_objects();
+       void update_gui();
+       void start_color_thread(SketcherCurveColor *curve_color);
+       int grab_event(XEvent *event);
+       int do_grab_event(XEvent *event);
+       void done_event(int result);
+       void send_configure_change();
+       int keypress_event();
+
+       Sketcher *plugin;
+
+       BC_Title *title_type, *title_pen;
+       BC_Title *title_color, *title_radius;
+       SketcherCurveType *curve_type;
+       SketcherCurvePen *curve_pen;
+       SketcherCurveColor *curve_color;
+       SketcherCurveColorPicker *color_picker;
+       SketcherNewCurve *new_curve;
+       SketcherDelCurve *del_curve;
+       SketcherCurveUp *curve_up;
+       SketcherCurveDn *curve_dn;
+       SketcherCurveRadius *curve_radius;
+       SketcherCurveList *curve_list;
+       SketcherResetCurves *reset_curves;
+
+       BC_Title *title_x, *title_y;
+       SketcherPointX *point_x;
+       SketcherPointY *point_y;
+       SketcherNewPoint *new_point;
+       SketcherDelPoint *del_point;
+       SketcherPointUp *point_up;
+       SketcherPointDn *point_dn;
+       int dragging, pending_config;
+       int new_points;
+       float last_x, last_y;
+       SketcherDrag *drag;
+       SketcherPointList *point_list;
+       SketcherResetPoints *reset_points;
+       BC_Title *notes0, *notes1, *notes2;
+};
+#endif
+