Added copyright lines for files I've edited this year.
[synfig.git] / synfig-studio / trunk / src / gtkmm / workarea.h
index 8e1da79..872d5fd 100644 (file)
@@ -1,28 +1,30 @@
-/* === S I N F G =========================================================== */
+/* === S Y N F I G ========================================================= */
 /*!    \file workarea.h
 **     \brief Template Header
 **
-**     $Id: workarea.h,v 1.1.1.1 2005/01/07 03:34:37 darco Exp $
+**     $Id$
 **
 **     \legal
-**     Copyright (c) 2002 Robert B. Quattlebaum Jr.
+**     Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
+**     Copyright (c) 2007, 2008 Chris Moore
 **
-**     This software and associated documentation
-**     are CONFIDENTIAL and PROPRIETARY property of
-**     the above-mentioned copyright holder.
+**     This package 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.
 **
-**     You may not copy, print, publish, or in any
-**     other way distribute this software without
-**     a prior written agreement with
-**     the copyright holder.
+**     This package 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.
 **     \endlegal
 */
 /* ========================================================================= */
 
 /* === S T A R T =========================================================== */
 
-#ifndef __SINFG_GTKMM_WORKAREA_H
-#define __SINFG_GTKMM_WORKAREA_H
+#ifndef __SYNFIG_GTKMM_WORKAREA_H
+#define __SYNFIG_GTKMM_WORKAREA_H
 
 /* === H E A D E R S ======================================================= */
 
 #include <gdkmm/cursor.h>
 #include <gdkmm/device.h>
 
-#include <sinfg/time.h>
-#include <sinfg/vector.h>
-#include <sinfg/general.h>
-#include <sinfg/renddesc.h>
-#include <sinfg/canvas.h>
+#include <synfig/time.h>
+#include <synfig/vector.h>
+#include <synfig/general.h>
+#include <synfig/renddesc.h>
+#include <synfig/canvas.h>
 
 #include "zoomdial.h"
 #include "duckmatic.h"
@@ -68,20 +70,21 @@ public:
        typedef etl::loose_handle<T_> first_argument_type;
        typedef etl::loose_handle<T_> second_argument_type;
        typedef bool result_type;
-       
+
 }
 };
 */
 
-class WorkAreaTarget;
-class WorkAreaTarget_Full;
-namespace sinfgapp { class CanvasInterface; };
+namespace synfigapp { class CanvasInterface; };
 
-namespace sinfg { class Layer; };
+namespace synfig { class Layer; };
 namespace Gtk { class Frame; };
 
 namespace studio
 {
+class WorkAreaTarget;
+class WorkAreaTarget_Full;
+
 class Instance;
 class CanvasView;
 class WorkArea;
@@ -103,11 +106,12 @@ class WorkArea : public Gtk::Table, public Duckmatic
        friend class WorkAreaTarget_Full;
        friend class DirtyTrap;
        friend class WorkAreaRenderer;
-               
+       friend class WorkAreaProgress;
+
        /*
  -- ** -- P U B L I C   T Y P E S ---------------------------------------------
        */
-       
+
 public:
 
        void insert_renderer(const etl::handle<WorkAreaRenderer> &x);
@@ -135,8 +139,8 @@ private:
        etl::handle<studio::AsyncRenderer> async_renderer;
 
 
-       etl::loose_handle<sinfgapp::CanvasInterface> canvas_interface;
-       etl::handle<sinfg::Canvas> canvas;
+       etl::loose_handle<synfigapp::CanvasInterface> canvas_interface;
+       etl::handle<synfig::Canvas> canvas;
        etl::loose_handle<studio::Instance> instance;
        etl::loose_handle<studio::CanvasView> canvas_view;
 
@@ -150,44 +154,44 @@ private:
        Gtk::Frame *drawing_frame;
 
        GdkDevice* curr_input_device;
-       
+
        // Bleh!
        int     w;                                              //!< Width of the image (in pixels)
        int     h;                                              //!< Height of the image (in pixels)
-       sinfg::Real     canvaswidth;    //!< Width of the canvas
-       sinfg::Real     canvasheight;   //!< Height of the canvas
-       sinfg::Real     pw;                             //!< The width of a pixel
-       sinfg::Real     ph;                             //!< The height of a pixel
+       synfig::Real    canvaswidth;    //!< Width of the canvas
+       synfig::Real    canvasheight;   //!< Height of the canvas
+       synfig::Real    pw;                             //!< The width of a pixel
+       synfig::Real    ph;                             //!< The height of a pixel
        float zoom;                                     //!< Zoom factor
        float prev_zoom;                        //!< Previous Zoom factor
-       sinfg::Point window_tl;         //!< The (theoretical) top-left corner of the view window
-       sinfg::Point window_br;         //!< The (theoretical) bottom-right corner of the view window
+       synfig::Point window_tl;                //!< The (theoretical) top-left corner of the view window
+       synfig::Point window_br;                //!< The (theoretical) bottom-right corner of the view window
 
        guint32 last_event_time;
 
        int bpp;
        //unsigned char *buffer;
-       
+
        //! ???
-       sinfg::ProgressCallback *progresscallback;
+       synfig::ProgressCallback *progresscallback;
 
        //! ???
-       sinfg::RendDesc desc;
-       
+       synfig::RendDesc desc;
+
        //! This flag is set if the user is dragging the video window
        /*! \see drag_point */
        DragMode dragging;
-               
+
        etl::handle<Duckmatic::Duck> clicked_duck;
        etl::handle<Duckmatic::Duck> hover_duck;
 
        //! When dragging the viewport, this is set to the origin of the drag
-       sinfg::Point drag_point;
+       synfig::Point drag_point;
 
-       sinfg::Point curr_point;
+       synfig::Point curr_point;
 
        //! ???
-       sinfg::Point previous_focus;
+       synfig::Point previous_focus;
 
        //! This flag is set if the grid should be drawn
        bool show_grid;
@@ -196,43 +200,51 @@ private:
        bool show_guides;
 
        bool low_resolution;
-       
+
        bool meta_data_lock;
 
-       //! This flag is set if the entire frame is rendered rather than using tiles    
+       //! This flag is set if the entire frame is rendered rather than using tiles
        bool full_frame;
-       
+
        //Glib::RefPtr<Gdk::Pixbuf> pix_buf;
-       
+
        //! This vector holds all of the tiles for this image
        std::vector< std::pair<Glib::RefPtr<Gdk::Pixbuf>,int> > tile_book;
 
        //! This integer describes the total times that the work are has been refreshed
        int refreshes;
-       
+
        //! This list holds the queue of tiles that need to be rendered
        //std::list<int> tile_queue;
-       
+
        int tile_w, tile_h;
 
        gint render_idle_func_id;
 
        //! The coordinates of the focus the last time a part of the screen was refreshed
-       sinfg::Point last_focus_point;
+       synfig::Point last_focus_point;
 
        bool canceled_;
-       
+
        int quality;
+       int low_res_pixel_size;
 
        bool dirty_trap_enabled;
-       
+
        int dirty_trap_queued;
-       
-       
+
+
        bool onion_skin;
-               
-       etl::loose_handle<sinfg::ValueNode> selected_value_node_;
 
+       etl::loose_handle<synfig::ValueNode> selected_value_node_;
+
+       bool allow_duck_clicks;
+       bool allow_layer_clicks;
+       bool cancel;
+       bool curr_guide_is_x;
+       bool dirty;
+       bool queued;
+       bool rendering;
 
        /*
  -- ** -- P U B L I C   D A T A -----------------------------------------------
@@ -240,30 +252,36 @@ private:
 
 public:
 
-       const etl::loose_handle<sinfg::ValueNode>& get_selected_value_node() { return  selected_value_node_; }
-       const sinfg::Point& get_drag_point()const { return drag_point; }
+       const etl::loose_handle<synfig::ValueNode>& get_selected_value_node() { return  selected_value_node_; }
+       const synfig::Point& get_drag_point()const { return drag_point; }
        std::vector< std::pair<Glib::RefPtr<Gdk::Pixbuf>,int> >& get_tile_book(){ return tile_book; }
        int get_refreshes()const { return refreshes; }
        bool get_canceled()const { return canceled_; }
        bool get_queued()const { return queued; }
        bool get_rendering()const { return rendering; }
+       bool get_updating()const;
+       void stop_updating(bool cancel = false);
        bool get_full_frame()const { return full_frame; }
        //int get_w()const { return w; }
        //int get_h()const { return h; }
 
        int get_tile_w()const { return tile_w; }
        int get_tile_h()const { return tile_h; }
-       
+
+       bool get_allow_layer_clicks() { return allow_layer_clicks; }
+       void set_allow_layer_clicks(bool value) { allow_layer_clicks=value; }
+
+       bool get_allow_duck_clicks() { return allow_duck_clicks; }
+       void set_allow_duck_clicks(bool value) { allow_duck_clicks=value; }
+
+       // used in renderer_ducks.cpp
        bool solid_lines;
-       bool rendering;
-       bool dirty;
-       bool queued;
-       bool cancel;
-       bool allow_layer_clicks;
-       bool allow_duck_clicks;
 
+       // used in renderer_guides.cpp
        GuideList::iterator curr_guide;
-       bool curr_guide_is_x;
+
+       // used in renderer_timecode.cpp
+       int timecode_width, timecode_height;
 
        /*
  -- ** -- P R I V A T E   M E T H O D S ---------------------------------------
@@ -286,7 +304,7 @@ private:
        sigc::signal<void,GdkDevice* > signal_input_device_changed_;
 
        //! One signal per button
-       sigc::signal<void,sinfg::Point> signal_user_click_[5];
+       sigc::signal<void,synfig::Point> signal_user_click_[5];
 
        sigc::signal<void> signal_popup_menu_;
 
@@ -296,7 +314,7 @@ private:
        sigc::signal<void> signal_onion_skin_changed_;
 
        //! Signal for when the user clicks on a layer
-       sigc::signal<void, etl::handle<sinfg::Layer> > signal_layer_selected_;
+       sigc::signal<void, etl::handle<synfig::Layer> > signal_layer_selected_;
 
        sigc::signal<void> signal_view_window_changed_;
 
@@ -316,9 +334,9 @@ public:
        sigc::signal<void> &signal_popup_menu() { return signal_popup_menu_; }
 
        //! One signal per button (5 buttons)
-       sigc::signal<void,sinfg::Point> &signal_user_click(int button=0){ return signal_user_click_[button]; }
+       sigc::signal<void,synfig::Point> &signal_user_click(int button=0){ return signal_user_click_[button]; }
 
-       sigc::signal<void, etl::handle<sinfg::Layer> >& signal_layer_selected() { return signal_layer_selected_; }
+       sigc::signal<void, etl::handle<synfig::Layer> >& signal_layer_selected() { return signal_layer_selected_; }
 
        /*
  -- ** -- P U B L I C   M E T H O D S -----------------------------------------
@@ -329,19 +347,19 @@ public:
        bool get_onion_skin()const;
        void toggle_onion_skin() { set_onion_skin(!get_onion_skin()); }
 
-       void set_selected_value_node(etl::loose_handle<sinfg::ValueNode> x);
+       void set_selected_value_node(etl::loose_handle<synfig::ValueNode> x);
 
        bool is_dragging() { return dragging!=DRAG_NONE; }
 
        DragMode get_dragging_mode() { return dragging; }
 
-       WorkArea(etl::loose_handle<sinfgapp::CanvasInterface> canvas_interface);
+       WorkArea(etl::loose_handle<synfigapp::CanvasInterface> canvas_interface);
        virtual ~WorkArea();
 
        void set_cursor(const Gdk::Cursor& x);
        void set_cursor(Gdk::CursorType x);
 
-       const sinfg::Point& get_cursor_pos()const { return curr_point; }
+       const synfig::Point& get_cursor_pos()const { return curr_point; }
 
        Gtk::Adjustment *get_scrollx_adjustment() { return &scrollx_adjustment; }
        Gtk::Adjustment *get_scrolly_adjustment() { return &scrolly_adjustment; }
@@ -349,23 +367,23 @@ public:
        const Gtk::Adjustment *get_scrolly_adjustment()const { return &scrolly_adjustment; }
 
        void set_instance(etl::loose_handle<studio::Instance> x) { instance=x; }
-       void set_canvas(etl::handle<sinfg::Canvas> x) { canvas=x; }
+       void set_canvas(etl::handle<synfig::Canvas> x) { canvas=x; }
        void set_canvas_view(etl::loose_handle<studio::CanvasView> x) { canvas_view=x; }
-       etl::handle<sinfg::Canvas> get_canvas()const { return canvas; }
+       etl::handle<synfig::Canvas> get_canvas()const { return canvas; }
        etl::handle<studio::Instance> get_instance()const { return instance; }
        etl::loose_handle<studio::CanvasView> get_canvas_view()const { return canvas_view; }
 
        void refresh_dimension_info();
-       
+
        //! Enables showing of the grid
        void enable_grid();
-       
+
        //! Disables showing of the grid
        void disable_grid();
-       
+
        //! Toggles the showing of the grid
        void toggle_grid();
-       
+
        //! Returns the state of the show_grid flag
        bool grid_status()const { return show_grid; }
 
@@ -374,89 +392,91 @@ public:
        bool get_show_guides()const { return show_guides; }
        void set_show_guides(bool x);
        void toggle_show_guides() { set_show_guides(!get_show_guides()); }
-               
+
        bool get_low_resolution_flag()const { return low_resolution; }
        void set_low_resolution_flag(bool x);
        void toggle_low_resolution_flag();
-       
+
        //! ???
        void queue_scroll();
-       
+
        //! Sets the size of the grid
-       void set_grid_size(const sinfg::Vector &s);
-               
+       void set_grid_size(const synfig::Vector &s);
+
        //! ??
        void popup_menu();
-       
+
        int get_quality()const { return quality; }
+       int get_low_res_pixel_size()const { return low_res_pixel_size; }
 
        void set_quality(int x);
-       
+       void set_low_res_pixel_size(int x);
+
 
        int get_w()const { return w; }
        int get_h()const { return h; }
        int get_bpp()const { return bpp; }
 
        //! ??
-       const sinfg::RendDesc &get_rend_desc()const { return desc; }
-       
+       const synfig::RendDesc &get_rend_desc()const { return desc; }
+
        //! ??
-       void set_rend_desc(const sinfg::RendDesc &x) { desc=x; }
-       
+       void set_rend_desc(const synfig::RendDesc &x) { desc=x; }
+
        //! Converts screen coords (ie: pixels) to composition coordinates
-       sinfg::Point screen_to_comp_coords(sinfg::Point pos)const;
+       synfig::Point screen_to_comp_coords(synfig::Point pos)const;
 
        //! Converts composition coordinates to screen coords (ie: pixels)
-       sinfg::Point comp_to_screen_coords(sinfg::Point pos)const;
+       synfig::Point comp_to_screen_coords(synfig::Point pos)const;
 
        float get_pw()const { return pw; }
        float get_ph()const { return ph; }
-       
-       const sinfg::Point &get_window_tl()const { return window_tl; }
-       const sinfg::Point &get_window_br()const { return window_br; }
+
+       const synfig::Point &get_window_tl()const { return window_tl; }
+       const synfig::Point &get_window_br()const { return window_br; }
 
 
        bool async_update_preview();
        void async_update_finished();
-       void async_render_preview(sinfg::Time time);
+       void async_render_preview(synfig::Time time);
        void async_render_preview();
-       
+
        bool sync_update_preview();
-       bool sync_render_preview(sinfg::Time time);
+       bool sync_render_preview(synfig::Time time);
        bool sync_render_preview();
        void sync_render_preview_hook();
 
        void queue_render_preview();
-       
-       
+
+
        void queue_draw_preview();
-       
+
        void zoom_in();
        void zoom_out();
        void zoom_fit();
        void zoom_norm();
        float get_zoom()const { return zoom; }
-       
+
        void set_zoom(float z);
 
 
-       void set_progress_callback(sinfg::ProgressCallback *x)  { progresscallback=x; }
-       sinfg::ProgressCallback *get_progress_callback() { return progresscallback; }
+       void set_progress_callback(synfig::ProgressCallback *x) { progresscallback=x; }
+       synfig::ProgressCallback *get_progress_callback() { return progresscallback; }
 
-       void set_focus_point(const sinfg::Point &x);
+       void set_focus_point(const synfig::Point &x);
 
-       sinfg::Point get_focus_point()const;
+       synfig::Point get_focus_point()const;
 
        void done_rendering();
-       
+
        bool refresh(GdkEventExpose*bleh=NULL);
-       
+
        void reset_cursor();
        void refresh_cursor();
 
        void save_meta_data();
        void load_meta_data();
-       
+
        /*
  -- ** -- S I G N A L   T E R M I N A L S -------------------------------------
        */