1 /*
2  Copyright (C) 2010-2014 Kristian Duske
3 
4  This file is part of TrenchBroom.
5 
6  TrenchBroom is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  TrenchBroom is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with TrenchBroom. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef TrenchBroom_CreateBrushToolController2D
21 #define TrenchBroom_CreateBrushToolController2D
22 
23 #include "View/ToolController.h"
24 #include "View/ViewTypes.h"
25 
26 namespace TrenchBroom {
27     namespace View {
28         class CreateSimpleBrushTool;
29         class Grid;
30 
31         class CreateSimpleBrushToolController2D : public ToolControllerBase<NoPickingPolicy, NoKeyPolicy, NoMousePolicy, RestrictedDragPolicy, RenderPolicy, NoDropPolicy> {
32         private:
33             CreateSimpleBrushTool* m_tool;
34             MapDocumentWPtr m_document;
35             Vec3 m_initialPoint;
36             BBox3 m_bounds;
37         public:
38             CreateSimpleBrushToolController2D(CreateSimpleBrushTool* tool, MapDocumentWPtr document);
39         private:
40             Tool* doGetTool();
41 
42             DragInfo doStartDrag(const InputState& inputState);
43             DragResult doDrag(const InputState& inputState, const Vec3& lastPoint, const Vec3& curPoint);
44             void doEndDrag(const InputState& inputState);
45             void doCancelDrag();
46 
47             void doSetRenderOptions(const InputState& inputState, Renderer::RenderContext& renderContext) const;
48             void doRender(const InputState& inputState, Renderer::RenderContext& renderContext, Renderer::RenderBatch& renderBatch);
49 
50             bool doCancel();
51         private:
52             bool updateBounds(const InputState& inputState, const Vec3& currentPoint);
53             void snapBounds(const InputState& inputState, BBox3& bounds);
54         };
55     }
56 }
57 
58 #endif /* defined(TrenchBroom_CreateBrushToolController2D) */
59