00001 #ifndef CANVAS_H
00002 #define CANVAS_H
00003
00004 #include "edl.inc"
00005 #include "guicast.h"
00006 #include "mwindow.inc"
00007
00008
00009
00010 class CanvasOutput;
00011 class CanvasFullScreen;
00012 class CanvasXScroll;
00013 class CanvasYScroll;
00014 class CanvasPopup;
00015 class CanvasFullScreenPopup;
00016 class CanvasToggleControls;
00017
00018
00019 class Canvas
00020 {
00021 public:
00022 Canvas(MWindow *mwindow,
00023 BC_WindowBase *subwindow,
00024 int x,
00025 int y,
00026 int w,
00027 int h,
00028 int output_w,
00029 int output_h,
00030 int use_scrollbars,
00031 int use_cwindow = 0,
00032 int use_rwindow = 0,
00033 int use_vwindow = 0);
00034 virtual ~Canvas();
00035
00036 void reset();
00037
00038 void calculate_sizes(float aspect_ratio,
00039 int output_w,
00040 int output_h,
00041 float zoom,
00042 int &w,
00043 int &h);
00044
00045
00046 void lock_canvas(char *location);
00047 void unlock_canvas();
00048 int is_locked();
00049
00050 int create_objects(EDL *edl);
00051 void set_cursor(int cursor);
00052
00053 void start_video();
00054 void stop_video();
00055
00056
00057 void start_single();
00058 void stop_single();
00059
00060 void start_fullscreen();
00061 void stop_fullscreen();
00062
00063
00064 void create_canvas();
00065
00066
00067
00068
00069 virtual void status_event() {};
00070
00071
00072 virtual void reset_camera() {};
00073 virtual void reset_projector() {};
00074 virtual void zoom_resize_window(float percentage) {};
00075 virtual void zoom_auto() {};
00076 virtual int cursor_leave_event() { return 0; };
00077 virtual int cursor_enter_event() { return 0; };
00078 virtual int button_release_event() { return 0; };
00079 virtual int button_press_event();
00080 virtual int cursor_motion_event() { return 0; };
00081 virtual void draw_overlays() { };
00082 virtual void toggle_controls() { } ;
00083 virtual int get_cwindow_controls() { return 0; };
00084 virtual int get_fullscreen() { return 0; }
00085 virtual void set_fullscreen(int value) { };
00086
00087 int cursor_leave_event_base(BC_WindowBase *caller);
00088 int cursor_enter_event_base(BC_WindowBase *caller);
00089 int button_press_event_base(BC_WindowBase *caller);
00090 int keypress_event(BC_WindowBase *caller);
00091
00092
00093
00094
00095
00096
00097
00098
00099 void get_transfers(EDL *edl,
00100 float &output_x1,
00101 float &output_y1,
00102 float &output_x2,
00103 float &output_y2,
00104 float &canvas_x1,
00105 float &canvas_y1,
00106 float &canvas_x2,
00107 float &canvas_y2,
00108
00109 int canvas_w = -1,
00110 int canvas_h = -1);
00111 void reposition_window(EDL *edl, int x, int y, int w, int h);
00112 virtual void reset_translation() {};
00113 virtual void close_source() {};
00114
00115 virtual void update_zoom(int x, int y, float zoom) {};
00116 void check_boundaries(EDL *edl, int &x, int &y, float &zoom);
00117 void update_scrollbars();
00118
00119
00120 virtual int get_xscroll() { return 0; };
00121 virtual int get_yscroll() { return 0; };
00122 virtual float get_zoom() { return 0; };
00123
00124 virtual void draw_refresh() {};
00125
00126
00127
00128 float get_x_offset(EDL *edl,
00129 int single_channel,
00130 float zoom_x,
00131 float conformed_w,
00132 float conformed_h);
00133 float get_y_offset(EDL *edl,
00134 int single_channel,
00135 float zoom_y,
00136 float conformed_w,
00137 float conformed_h);
00138 void get_zooms(EDL *edl,
00139 int single_channel,
00140 float &zoom_x,
00141 float &zoom_y,
00142 float &conformed_w,
00143 float &conformed_h);
00144
00145
00146
00147
00148 void output_to_canvas(EDL *edl, int single_channel, float &x, float &y);
00149
00150 void canvas_to_output(EDL *edl, int single_channel, float &x, float &y);
00151
00152
00153 virtual int get_output_w(EDL *edl);
00154 virtual int get_output_h(EDL *edl);
00155
00156 int scrollbars_exist();
00157
00158 int get_cursor_x();
00159 int get_cursor_y();
00160 int get_buttonpress();
00161
00162 BC_WindowBase* get_canvas();
00163
00164
00165 BC_WindowBase *subwindow;
00166
00167 CanvasOutput *canvas_subwindow;
00168
00169 CanvasFullScreen *canvas_fullscreen;
00170 CanvasXScroll *xscroll;
00171 CanvasYScroll *yscroll;
00172 CanvasPopup *canvas_menu;
00173 CanvasFullScreenPopup *fullscreen_menu;
00174 int x, y, w, h;
00175 int use_scrollbars;
00176 int use_cwindow;
00177 int use_rwindow;
00178 int use_vwindow;
00179
00180 int output_w, output_h;
00181
00182
00183 VFrame *refresh_frame;
00184
00185 int w_needed;
00186 int h_needed;
00187 int w_visible;
00188 int h_visible;
00189
00190
00191 int is_processing;
00192
00193 int cursor_inside;
00194 int view_x;
00195 int view_y;
00196 int view_w;
00197 int view_h;
00198 int root_w;
00199 int root_h;
00200
00201 MWindow *mwindow;
00202
00203 private:
00204 void get_scrollbars(EDL *edl,
00205 int &canvas_x,
00206 int &canvas_y,
00207 int &canvas_w,
00208 int &canvas_h);
00209 Mutex *canvas_lock;
00210 };
00211
00212
00213 class CanvasOutput : public BC_SubWindow
00214 {
00215 public:
00216 CanvasOutput(Canvas *canvas,
00217 int x,
00218 int y,
00219 int w,
00220 int h);
00221 ~CanvasOutput();
00222
00223 int cursor_leave_event();
00224 int cursor_enter_event();
00225 int button_press_event();
00226 int button_release_event();
00227 int cursor_motion_event();
00228 int keypress_event();
00229
00230 Canvas *canvas;
00231 };
00232
00233
00234
00235
00236 class CanvasFullScreen : public BC_FullScreen
00237 {
00238 public:
00239 CanvasFullScreen(Canvas *canvas,
00240 int w,
00241 int h);
00242 ~CanvasFullScreen();
00243
00244 Canvas *canvas;
00245 };
00246
00247
00248
00249
00250 class CanvasXScroll : public BC_ScrollBar
00251 {
00252 public:
00253 CanvasXScroll(EDL *edl,
00254 Canvas *canvas,
00255 int x,
00256 int y,
00257 int length,
00258 int position,
00259 int handle_length,
00260 int pixels);
00261 ~CanvasXScroll();
00262
00263 int handle_event();
00264 Canvas *canvas;
00265 EDL *edl;
00266 };
00267
00268 class CanvasYScroll : public BC_ScrollBar
00269 {
00270 public:
00271 CanvasYScroll(EDL *edl,
00272 Canvas *canvas,
00273 int x,
00274 int y,
00275 int length,
00276 int position,
00277 int handle_length,
00278 int pixels);
00279 ~CanvasYScroll();
00280
00281 int handle_event();
00282
00283 Canvas *canvas;
00284 EDL *edl;
00285 };
00286
00287 class CanvasFullScreenPopup : public BC_PopupMenu
00288 {
00289 public:
00290 CanvasFullScreenPopup(Canvas *canvas);
00291
00292 void create_objects();
00293
00294 Canvas *canvas;
00295 };
00296
00297 class CanvasSubWindowItem : public BC_MenuItem
00298 {
00299 public:
00300 CanvasSubWindowItem(Canvas *canvas);
00301 int handle_event();
00302 Canvas *canvas;
00303 };
00304
00305 class CanvasPopup : public BC_PopupMenu
00306 {
00307 public:
00308 CanvasPopup(Canvas *canvas);
00309 ~CanvasPopup();
00310
00311 void create_objects();
00312
00313 Canvas *canvas;
00314 CanvasToggleControls *toggle_controls;
00315 };
00316
00317 class CanvasPopupSize : public BC_MenuItem
00318 {
00319 public:
00320 CanvasPopupSize(Canvas *canvas, char *text, float percentage);
00321 ~CanvasPopupSize();
00322 int handle_event();
00323 Canvas *canvas;
00324 float percentage;
00325 };
00326
00327 class CanvasPopupAuto : public BC_MenuItem
00328 {
00329 public:
00330 CanvasPopupAuto(Canvas *canvas);
00331 int handle_event();
00332 Canvas *canvas;
00333 };
00334
00335 class CanvasPopupResetCamera : public BC_MenuItem
00336 {
00337 public:
00338 CanvasPopupResetCamera(Canvas *canvas);
00339 int handle_event();
00340 Canvas *canvas;
00341 };
00342
00343 class CanvasPopupResetProjector : public BC_MenuItem
00344 {
00345 public:
00346 CanvasPopupResetProjector(Canvas *canvas);
00347 int handle_event();
00348 Canvas *canvas;
00349 };
00350
00351 class CanvasToggleControls : public BC_MenuItem
00352 {
00353 public:
00354 CanvasToggleControls(Canvas *canvas);
00355 int handle_event();
00356 static char* calculate_text(int cwindow_controls);
00357 Canvas *canvas;
00358 };
00359
00360 class CanvasFullScreenItem : public BC_MenuItem
00361 {
00362 public:
00363 CanvasFullScreenItem(Canvas *canvas);
00364 int handle_event();
00365 Canvas *canvas;
00366 };
00367
00368 class CanvasPopupResetTranslation : public BC_MenuItem
00369 {
00370 public:
00371 CanvasPopupResetTranslation(Canvas *canvas);
00372 int handle_event();
00373 Canvas *canvas;
00374 };
00375
00376
00377 class CanvasPopupRemoveSource : public BC_MenuItem
00378 {
00379 public:
00380 CanvasPopupRemoveSource(Canvas *canvas);
00381 int handle_event();
00382 Canvas *canvas;
00383 };
00384
00385
00386
00387
00388
00389 #endif