summaryrefslogtreecommitdiff
path: root/include/class_draw_panel_gal.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/class_draw_panel_gal.h')
-rw-r--r--include/class_draw_panel_gal.h219
1 files changed, 219 insertions, 0 deletions
diff --git a/include/class_draw_panel_gal.h b/include/class_draw_panel_gal.h
new file mode 100644
index 0000000..cc52294
--- /dev/null
+++ b/include/class_draw_panel_gal.h
@@ -0,0 +1,219 @@
+/*
+ * This program source code file is part of KiCad, a free EDA CAD application.
+ *
+ * Copyright (C) 2013-2014 CERN
+ * @author Tomasz Wlostowski <tomasz.wlostowski@cern.ch>
+ *
+ * This program 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.
+ *
+ * This program 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, you may find one here:
+ * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+ * or you may search the http://www.gnu.org website for the version 2 license,
+ * or you may write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/**
+ * @file class_draw_panel_gal.h:
+ * @brief EDA_DRAW_PANEL_GAL class definition.
+ */
+
+#ifndef PANELGAL_WXSTRUCT_H
+#define PANELGAL_WXSTRUCT_H
+
+#include <wx/window.h>
+#include <wx/timer.h>
+#include <layers_id_colors_and_visibility.h>
+#include <math/vector2d.h>
+#include <msgpanel.h>
+
+class BOARD;
+class TOOL_DISPATCHER;
+
+namespace KIGFX
+{
+class GAL;
+class VIEW;
+class WX_VIEW_CONTROLS;
+class VIEW_CONTROLS;
+class PAINTER;
+};
+
+
+class EDA_DRAW_PANEL_GAL : public wxScrolledCanvas
+{
+public:
+ enum GAL_TYPE {
+ GAL_TYPE_NONE, ///< Not used
+ GAL_TYPE_OPENGL, ///< OpenGL implementation
+ GAL_TYPE_CAIRO, ///< Cairo implementation
+ GAL_TYPE_LAST ///< Sentinel, do not use as a parameter
+ };
+
+ EDA_DRAW_PANEL_GAL( wxWindow* aParentWindow, wxWindowID aWindowId, const wxPoint& aPosition,
+ const wxSize& aSize, GAL_TYPE aGalType = GAL_TYPE_OPENGL );
+ ~EDA_DRAW_PANEL_GAL();
+
+ virtual void SetFocus();
+
+ /**
+ * Function SwitchBackend
+ * Switches method of rendering graphics.
+ * @param aGalType is a type of rendering engine that you want to use.
+ */
+ bool SwitchBackend( GAL_TYPE aGalType );
+
+ /**
+ * Function GetBackend
+ * Returns the type of backend currently used by GAL canvas.
+ */
+ inline GAL_TYPE GetBackend() const
+ {
+ return m_backend;
+ }
+
+ /**
+ * Function GetGAL()
+ * Returns a pointer to the GAL instance used in the panel.
+ * @return The instance of GAL.
+ */
+ KIGFX::GAL* GetGAL() const
+ {
+ return m_gal;
+ }
+
+ /**
+ * Function GetView()
+ * Returns a pointer to the VIEW instance used in the panel.
+ * @return The instance of VIEW.
+ */
+ KIGFX::VIEW* GetView() const
+ {
+ return m_view;
+ }
+
+ /**
+ * Function GetViewControls()
+ * Returns a pointer to the VIEW_CONTROLS instance used in the panel.
+ * @return The instance of VIEW_CONTROLS.
+ */
+ KIGFX::VIEW_CONTROLS* GetViewControls() const
+ {
+ return (KIGFX::VIEW_CONTROLS*)( m_viewControls );
+ }
+
+ /// @copydoc wxWindow::Refresh()
+ void Refresh( bool aEraseBackground = true, const wxRect* aRect = NULL );
+
+ /**
+ * Function ForceRefresh()
+ * Forces a redraw.
+ */
+ void ForceRefresh();
+
+ /**
+ * Function SetEventDispatcher()
+ * Sets a dispatcher that processes events and forwards them to tools.
+ * @param aEventDispatcher is the object that will be used for dispatching events.
+ * DRAW_PANEL_GAL does not take over the ownership. Passing NULL disconnects all event
+ * handlers from the DRAW_PANEL_GAL and parent frame.
+ */
+ void SetEventDispatcher( TOOL_DISPATCHER* aEventDispatcher );
+
+ /**
+ * Function StartDrawing()
+ * Begins drawing if it was stopped previously.
+ */
+ void StartDrawing();
+
+ /**
+ * Function StopDrawing()
+ * Prevents the GAL canvas from further drawing till it is recreated
+ * or StartDrawing() is called.
+ */
+ void StopDrawing();
+
+ /**
+ * Function SetHighContrastLayer
+ * Takes care of display settings for the given layer to be displayed in high contrast mode.
+ */
+ virtual void SetHighContrastLayer( LAYER_ID aLayer );
+
+ /**
+ * Function SetTopLayer
+ * Moves the selected layer to the top, so it is displayed above all others.
+ */
+ virtual void SetTopLayer( LAYER_ID aLayer );
+
+ virtual void GetMsgPanelInfo( std::vector<MSG_PANEL_ITEM>& aList )
+ {
+ assert( false );
+ }
+
+ /**
+ * Function GetLegacyZoom()
+ * Returns current view scale converted to zoom value used by the legacy canvas.
+ */
+ double GetLegacyZoom() const;
+
+protected:
+ void onPaint( wxPaintEvent& WXUNUSED( aEvent ) );
+ void onSize( wxSizeEvent& aEvent );
+ void onEvent( wxEvent& aEvent );
+ void onEnter( wxEvent& aEvent );
+ void onLostFocus( wxFocusEvent& aEvent );
+ void onRefreshTimer( wxTimerEvent& aEvent );
+
+ static const int MinRefreshPeriod = 17; ///< 60 FPS.
+
+ /// Pointer to the parent window
+ wxWindow* m_parent;
+
+ /// Last timestamp when the panel was refreshed
+ wxLongLong m_lastRefresh;
+
+ /// Is there a redraw event requested?
+ bool m_pendingRefresh;
+
+ /// True if GAL is currently redrawing the view
+ bool m_drawing;
+
+ /// Flag that determines if VIEW may use GAL for redrawing the screen.
+ bool m_drawingEnabled;
+
+ /// Timer responsible for preventing too frequent refresh
+ wxTimer m_refreshTimer;
+
+ /// Interface for drawing objects on a 2D-surface
+ KIGFX::GAL* m_gal;
+
+ /// Stores view settings (scale, center, etc.) and items to be drawn
+ KIGFX::VIEW* m_view;
+
+ /// Contains information about how to draw items using GAL
+ KIGFX::PAINTER* m_painter;
+
+ /// Control for VIEW (moving, zooming, etc.)
+ KIGFX::WX_VIEW_CONTROLS* m_viewControls;
+
+ /// Currently used GAL
+ GAL_TYPE m_backend;
+
+ /// Processes and forwards events to tools
+ TOOL_DISPATCHER* m_eventDispatcher;
+
+ /// Flag to indicate that focus should be regained on the next mouse event. It is a workaround
+ /// for cases when the panel loses keyboard focus, so it does not react to hotkeys anymore.
+ bool m_lostFocus;
+};
+
+#endif