Skip to content
OE_display.h 5.06 KiB
Newer Older
/*
 * Copyright (c) 2015 Tricoire Sebastien 3dsman@free.fr
 *
 * This software is provided 'as-is', without any express or implied
 * warranty.  In no event will the authors be held liable for any damages
 * arising from the use of this software.
 *
 * Permission is granted to anyone to use this software for any purpose,
 * including commercial applications, and to alter it and redistribute it
 * freely, subject to the following restrictions:
 *
 * 1. The origin of this software must not be misrepresented; you must not
 * claim that you wrote the original software. If you use this software
 * in a product, an acknowledgment in the product documentation would be
 * appreciated but is not required.
 * 2. Altered source versions must be plainly marked as such, and must not be
 * misrepresented as being the original software.
 * 3. This notice may not be removed or altered from any source distribution.
 *
 */

#ifndef OE_DISPLAY_H
#define OE_DISPLAY_H

#include "OE_utils.h"
#include <stdint.h>
#include <vector>
//#include "OE_controller.h"
#include "OE_document.h"
#include <GLFW/glfw3.h>
#include "curves/OE_joincurve.h"
#include "curves/OE_subcurve.h"
class OE_controller;

		public:
			//OE_Color hoopColor = OE_Color(0.0, 0.0, 0.0, .5);
			OE_Color hoopColor = OE_Color(1.0, 0.0, 0.0, .5);
			OE_Color gridColor = OE_Color(0.0, 0.0, 0.0, 0.1);
			OE_Color zeroColor = OE_Color(0.0, 0.0, 0.0, 1.0);
			float zeroSize = 3;
			OE_Color curveColor = OE_Color(0,.63,.75,1.0);
			OE_Color curveTangeantColor = OE_Color(.39,.235,.36,1.0);
			OE_Color curvePointColor = OE_Color(.39,.235,.36,1.0);
			OE_Color curveStartPointColor = OE_Color(.78,0,0,1.0);
			float curveWidth = 1.5;
			float curveTangeantWidth = 1.5;
			float curvePointSize = 3.0;
			float curveStartPointSize = 5.0;

			OE_Color stitchLineBeforeCurrentColor = OE_Color(.08,.08,.08,1.0);
			OE_Color stitchLineAfterCurrentColor = OE_Color(.08,.08,.08,1.0);
			OE_Color stitchPointBeforeCurrentColor = OE_Color(.08,.08,.08,1.0);
			OE_Color stitchPointAfterCurrentColor = OE_Color(.08,.08,.08,1.0);
			OE_Color stitchStartPointColor = OE_Color(.39,.235,.36,1.0);
			OE_Color instLineBeforeCurrentColor = OE_Color(.08,.08,.08,1.0);
			OE_Color instLineAfterCurrentColor = OE_Color(.08,.08,.08,1.0);
			OE_Color instStartPointColor = OE_Color(.39,.235,.36,1.0);
			OE_Color instCurPointColor = OE_Color(.39,.235,.36,1.0);
			float instPointSize = 3.0;
			float instLineWidth = 1.5;
			float instStartPointSize = 5.0;
			float instCurPointSize = 5.0;



			OE_Color machineStartPointColor;
			OE_Color machineCurPointColor;

			OE_Color transformGizmoColor = OE_Color(1,0,0,1);
			OE_Color selectionBoundColor = OE_Color(1,0,0,1);

			bool drawHoop = true;
			bool drawGrid = true;
			bool drawZero = true;
			bool drawCurvePoints = true;
			bool drawCurveControls = true;

			bool drawCommands = false;
			bool selectCurves = true;
			bool selectStitches = true;

			float moveCrossSize = 30;

			OE_displayStyle(){};
		
        /** Default constructor */
        OE_display();
		OE_display(OE_document* document,OE_controller* controller);
        /** Default destructor */
        virtual ~OE_display();
		
        virtual bool setDocument(OE_document * document);
        virtual bool setController(OE_controller* controller);
		virtual void mouse_Pos(double x, double y);
		virtual void mouse_Button(int button, int action, int mods);
		virtual void scroll(double xoffset, double yoffset);
		virtual void resize(int width, int height);
		virtual void key(int key, int scancode, int action, int mods);

		vector_2d screenToDocument(vector_2d pos);

		bool select(std::list<OE_pointcurve*> selectedCurves, std::list<OE_stitchs*> selectedStitches);
		//void drawframe();
		bool refresh();

		void drawTriangle(vector_2d point1, vector_2d point2, float size);
		bool drawSelectionTools(bool select = false);

		bool drawCurve(OE_curve * curve);
		bool drawStitch(OE_stitchs * stitch, int curpoint);
		bool drawCurveControl(OE_curve * curve, bool select = false);
		bool drawStitchControl(OE_stitchs * stitch, bool select = false);
		bool drawJoincurveControl(OE_joincurve * curve, bool select);

		bool drawCommands();

		virtual bool draw();
		virtual void showAll();

        static vector_2d viewPos;
        vector_2d absMouse;
		static float zoom;
        vector_2d mouse;
        vector_2d mouseInit;
		static bool pan;
		static int width, height;

		static const float moveCrossSize;

		bool changeDpi = true;

		/** \brief is displaying controls.	 */
		bool controls = false;

		BoundingBox selectionBounds;

		OE_curve* selectedCurve = nullptr;
		OE_stitchs* selectedStitch = nullptr;
		OE_document * document = NULL;
		OE_controller* controller = NULL;