Blob Blame Raw
#ifndef MAINWINDOW_H
#define MAINWINDOW_H


#include <vector>

#include <gtkmm/window.h>

#include "view.h"
#include "surface.h"
#include "generator.h"


class MainWindow: public Gtk::Window {
public:
	class Layer {
	public:
		IntVector2 src_size;
		Pair2 src_bounds;
		RefPtr<Surface> src_surface;

		IntPair2 dst_bounds;
		Matrix back_transform;
		RefPtr<Surface> dst_surface;
		Cairo::RefPtr<Cairo::ImageSurface> cairo_surface;

		void process(const RefPtr<Surface> &dst_surface) const;
	};

	typedef std::vector<Layer> LayerList;

	Generator generator;

	View src_view;
	View dst_view;
	
	View::PointPtr
		src_rect_p0, src_rect_p1,
		dst_rect_p0, dst_rect_px, dst_rect_py, dst_rect_p1,
		dst_bounds_p0, dst_bounds_p1;
	
	Pair2 view_surface_rect;
	Cairo::RefPtr<Cairo::ImageSurface> view_surface;

	Cairo::RefPtr<Cairo::ImageSurface> target_surface;

	MainWindow();
	
	Gtk::Widget* generator_demo();
	
	void update_layers();
	void update_view_surface();
	
	void on_point_motion(const View::PointPtr &point);
	void on_point_changed(const View::PointPtr &point);
	void on_view_transform_changed(View *view);
	void on_draw_src_view(const Cairo::RefPtr<Cairo::Context> &context);
	void on_draw_dst_view(const Cairo::RefPtr<Cairo::Context> &context);
};


#endif