--- /dev/null
+
+/*
+ * CINELERRA
+ * Copyright (C) 2008 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 SCALE_H
+#define SCALE_H
+
+#include "guicast.h"
+#include "mwindow.inc"
+#include "scale.inc"
+
+class Scale : public BC_MenuItem
+{
+public:
+ Scale(MWindow *mwindow);
+ ~Scale();
+
+ int handle_event();
+
+ ScaleThread *thread;
+ MWindow *mwindow;
+};
+
+class ScaleWindow;
+
+class ScaleThread : public Thread
+{
+public:
+ ScaleThread(MWindow *mwindow);
+ ~ScaleThread();
+
+ void run();
+
+ int update_window(int offset_updated = 0);
+ int update_aspect(ScaleWindow *window);
+
+// change a value to negative to signal it was the value changed
+ int dimension[4]; // new dimensions to apply
+ int orig_dimension[4]; // dimensions for getting scale
+ int offsets[4]; // Offsets of new images in old images
+ float ratio[4];
+ float aspect_w, aspect_h;
+ int constrain_ratio;
+ int scale_data;
+ int auto_aspect;
+ int already_running;
+
+ MWindow *mwindow;
+ ScaleWindow *window;
+};
+
+class ScaleSizeText;
+class ScaleRatioText;
+class ScalePosition;
+class ScaleOffsetText;
+class ScaleAspectW;
+class ScaleAspectH;
+
+class ScaleWindow : public BC_Window
+{
+public:
+ ScaleWindow(ScaleThread *thread);
+ ~ScaleWindow();
+
+ void create_objects();
+ ScaleThread *thread;
+ ScaleSizeText *dimension[4];
+ ScaleRatioText *ratio[4];
+// ScaleOffsetText *offsets[4];
+ ScaleAspectW *aspect_w;
+ ScaleAspectH *aspect_h;
+// ScalePosition *position1, *position2;
+};
+
+class ScaleSizeText : public BC_TextBox
+{
+public:
+ ScaleSizeText(int x, int y, ScaleThread *thread, int *output);
+ ~ScaleSizeText();
+ int handle_event();
+ ScaleThread *thread;
+ int *output;
+};
+
+
+class ScaleOffsetText : public BC_TextBox
+{
+public:
+ ScaleOffsetText(int x, int y, ScaleThread *thread, int *output);
+ ~ScaleOffsetText();
+ int handle_event();
+ ScaleThread *thread;
+ int *output;
+};
+
+class ScaleRatioText : public BC_TextBox
+{
+public:
+ ScaleRatioText(int x, int y, ScaleThread *thread, float *output);
+ ~ScaleRatioText();
+ int handle_event();
+ ScaleThread *thread;
+ float *output;
+};
+
+class ScaleAspectAuto : public BC_CheckBox
+{
+public:
+ ScaleAspectAuto(int x, int y, ScaleThread *thread);
+ ~ScaleAspectAuto();
+ int handle_event();
+ ScaleThread *thread;
+};
+
+class ScaleAspectW : public BC_TextBox
+{
+public:
+ ScaleAspectW(int x, int y, ScaleThread *thread, float *output, char *string);
+ ~ScaleAspectW();
+ int handle_event();
+ ScaleThread *thread;
+ float *output;
+};
+
+class ScaleAspectH : public BC_TextBox
+{
+public:
+ ScaleAspectH(int x, int y, ScaleThread *thread, float *output, char *string);
+ ~ScaleAspectH();
+ int handle_event();
+ ScaleThread *thread;
+ float *output;
+};
+
+
+class ScaleData : public BC_CheckBox
+{
+public:
+ ScaleData(int x, int y, ScaleThread *thread);
+ ~ScaleData();
+ int handle_event();
+ ScaleThread *thread;
+};
+
+class ScaleConstrain : public BC_CheckBox
+{
+public:
+ ScaleConstrain(int x, int y, ScaleThread *thread);
+ ~ScaleConstrain();
+ int handle_event();
+ ScaleThread *thread;
+};
+
+class ScalePosition : public BC_SubWindow
+{
+public:
+ ScalePosition(int x, int y, ScaleThread *thread, ScaleWindow *window,
+ int *orig_dimension, int *scale_dimension, int *offsets);
+
+ ~ScalePosition();
+
+ int draw();
+ int button_press();
+ int cursor_motion();
+ int button_release();
+ int get_scale();
+
+ int *orig_dimension;
+ int *scale_dimension;
+ int *offsets;
+ ScaleThread *thread;
+ ScaleWindow *window;
+ int button_down;
+ int center_x, center_y, offset_x, offset_y;
+ float hscale, vscale;
+};
+
+
+
+#endif