--- /dev/null
+/*
+ * CINELERRA
+ * Copyright (C) 1997-2011 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 SCOPEWINDOW_H
+#define SCOPEWINDOW_H
+
+
+#include "guicast.h"
+#include "loadbalance.h"
+#include "mwindow.h"
+#include "pluginclient.h"
+#include "recordmonitor.inc"
+#include "scopewindow.inc"
+#include "theme.inc"
+
+
+// Number of divisions in histogram.
+// 65536 + min and max range to speed up the tabulation
+#define TOTAL_BINS 0x13333
+#define HIST_SECTIONS 4
+#define FLOAT_RANGE 1.2
+// Minimum value in percentage
+#define HISTOGRAM_MIN -10
+#define FLOAT_MIN -0.1
+// Maximum value in percentage
+#define HISTOGRAM_MAX 110
+#define FLOAT_MAX 1.1
+
+#define MIN_SCOPE_W 320
+#define MIN_SCOPE_H 320
+
+
+
+#define WAVEFORM_DIVISIONS 12
+#define VECTORSCOPE_DIVISIONS 11
+
+class ScopePackage : public LoadPackage
+{
+public:
+ ScopePackage();
+ int row1, row2;
+};
+
+
+class ScopeUnit : public LoadClient
+{
+public:
+ ScopeUnit(ScopeGUI *gui, ScopeEngine *server);
+ void draw_point(unsigned char **rows,
+ int x,
+ int y,
+ int r,
+ int g,
+ int b);
+ void process_package(LoadPackage *package);
+ int bins[HIST_SECTIONS][TOTAL_BINS];
+ ScopeGUI *gui;
+};
+
+class ScopeEngine : public LoadServer
+{
+public:
+ ScopeEngine(ScopeGUI *gui, int cpus);
+ virtual ~ScopeEngine();
+ void init_packages();
+ LoadClient* new_client();
+ LoadPackage* new_package();
+ void process();
+ ScopeGUI *gui;
+};
+
+class ScopePanel : public BC_SubWindow
+{
+public:
+ ScopePanel(ScopeGUI *gui,
+ int x,
+ int y,
+ int w,
+ int h);
+ void create_objects();
+ virtual void update_point(int x, int y);
+ virtual void draw_point();
+ virtual void clear_point();
+ int button_press_event();
+ int cursor_motion_event();
+ int button_release_event();
+ int is_dragging;
+ ScopeGUI *gui;
+};
+
+class ScopeWaveform : public ScopePanel
+{
+public:
+ ScopeWaveform(ScopeGUI *gui,
+ int x,
+ int y,
+ int w,
+ int h);
+ virtual void update_point(int x, int y);
+ virtual void draw_point();
+ virtual void clear_point();
+ int drag_x;
+ int drag_y;
+};
+
+
+class ScopeVectorscope : public ScopePanel
+{
+public:
+ ScopeVectorscope(ScopeGUI *gui,
+ int x,
+ int y,
+ int w,
+ int h);
+ virtual void update_point(int x, int y);
+ virtual void draw_point();
+ virtual void clear_point();
+ int drag_radius;
+ float drag_angle;
+};
+
+class ScopeHistogram : public ScopePanel
+{
+public:
+ ScopeHistogram(ScopeGUI *gui,
+ int x,
+ int y,
+ int w,
+ int h);
+ void clear_point();
+ void update_point(int x, int y);
+ void draw_point();
+ void draw(int flash, int flush);
+ void draw_mode(int mode, int color, int y, int h);
+ int drag_x;
+};
+
+class ScopeToggle : public BC_Toggle
+{
+public:
+ ScopeToggle(ScopeGUI *gui,
+ int x,
+ int y,
+ int *value);
+ static VFrame** get_image_set(ScopeGUI *gui, int *value);
+ int handle_event();
+ ScopeGUI *gui;
+ int *value;
+};
+
+
+class ScopeGUI : public PluginClientWindow
+{
+public:
+ ScopeGUI(Theme *theme,
+ int x,
+ int y,
+ int w,
+ int h,
+ int cpus);
+ ScopeGUI(PluginClient *plugin,
+ int w,
+ int h);
+ virtual ~ScopeGUI();
+
+ void reset();
+ virtual void create_objects();
+ void create_panels();
+ virtual int resize_event(int w, int h);
+ virtual int translation_event();
+
+// Called for user storage when toggles change
+ virtual void toggle_event();
+
+// update toggles
+ void update_toggles();
+ void calculate_sizes(int w, int h);
+ void allocate_bitmaps();
+ void draw_overlays(int overlays, int borders, int flush);
+ void process(VFrame *output_frame);
+ void draw(int flash, int flush);
+ void clear_points(int flash);
+
+
+ Theme *theme;
+ VFrame *output_frame;
+ ScopeEngine *engine;
+ BC_Bitmap *waveform_bitmap;
+ BC_Bitmap *vector_bitmap;
+ ScopeHistogram *histogram;
+ ScopeWaveform *waveform;
+ ScopeVectorscope *vectorscope;
+ ScopeToggle *hist_parade_on;
+ ScopeToggle *hist_on;
+ ScopeToggle *waveform_parade_on;
+ ScopeToggle *waveform_on;
+ ScopeToggle *vector_on;
+ BC_Title *value_text;
+
+ int x, y, w, h;
+ int vector_x, vector_y, vector_w, vector_h;
+ int wave_x, wave_y, wave_w, wave_h;
+ int hist_x, hist_y, hist_w, hist_h;
+
+ int cpus;
+ int use_hist, use_wave, use_vector;
+ int use_hist_parade, use_wave_parade;
+
+ int bins[HIST_SECTIONS][TOTAL_BINS];
+ int frame_w;
+};
+
+
+
+
+#endif
+
+
+