44#include <unordered_map> 
   53#define SEG_PER_CIRCLE_COUNT  64 
   88                wxEvtHandler* aMouseListener = 
nullptr, wxEvtHandler* aPaintListener = 
nullptr,
 
   89                const wxString& aName = wxT( 
"GLCanvas" ) );
 
  107        return IsShownOnScreen() && !GetClientRect().IsEmpty();
 
  113        return IsShownOnScreen() && !GetClientRect().IsEmpty();
 
 
  116    void SetMinLineWidth( 
float aLineWidth ) 
override;
 
  123    void DrawLine( 
const VECTOR2D& aStartPoint, 
const VECTOR2D& aEndPoint ) 
override;
 
  127                              double aWidth ) 
override;
 
  130    void DrawSegmentChain( 
const std::vector<VECTOR2D>& aPointList, 
double aWidth ) 
override;
 
  131    void DrawSegmentChain( 
const SHAPE_LINE_CHAIN& aLineChain, 
double aWidth ) 
override;
 
  134    void DrawCircle( 
const VECTOR2D& aCenterPoint, 
double aRadius ) 
override;
 
  137    void DrawHoleWall( 
const VECTOR2D& aCenterPoint, 
double aHoleRadius,
 
  138                       double aWallWidth ) 
override;
 
  141    void DrawArc( 
const VECTOR2D& aCenterPoint, 
double aRadius, 
const EDA_ANGLE& aStartAngle,
 
  145    void DrawArcSegment( 
const VECTOR2D& aCenterPoint, 
double aRadius, 
const EDA_ANGLE& aStartAngle,
 
  146                         const EDA_ANGLE& aAngle, 
double aWidth, 
double aMaxError ) 
override;
 
  149    void DrawRectangle( 
const VECTOR2D& aStartPoint, 
const VECTOR2D& aEndPoint ) 
override;
 
  152    void DrawPolyline( 
const std::deque<VECTOR2D>& aPointList ) 
override;
 
  153    void DrawPolyline( 
const std::vector<VECTOR2D>& aPointList ) 
override;
 
  154    void DrawPolyline( 
const VECTOR2D aPointList[], 
int aListSize ) 
override;
 
  158    void DrawPolylines( 
const std::vector<std::vector<VECTOR2D>>& aPointLists ) 
override;
 
  161    void DrawPolygon( 
const std::deque<VECTOR2D>& aPointList ) 
override;
 
  162    void DrawPolygon( 
const VECTOR2D aPointList[], 
int aListSize ) 
override;
 
  163    void DrawPolygon( 
const SHAPE_POLY_SET& aPolySet, 
bool aStrokeTriangulation = 
false ) 
override;
 
  167    virtual void DrawGlyph( 
const KIFONT::GLYPH& aGlyph, 
int aNth, 
int aTotal ) 
override;
 
  170    virtual void DrawGlyphs( 
const std::vector<std::unique_ptr<KIFONT::GLYPH>>& aGlyphs ) 
override;
 
  175                            double aFilterValue = 0.0 ) 
override;
 
  178    void DrawBitmap( 
const BITMAP_BASE& aBitmap, 
double alphaBlend = 1.0 ) 
override;
 
  181    void BitmapText( 
const wxString& aText, 
const VECTOR2I& aPosition,
 
  185    void DrawGrid() 
override;
 
  192    void ResizeScreen( 
int aWidth, 
int aHeight ) 
override;
 
  195    bool Show( 
bool aShow ) 
override;
 
  201    void Flush() 
override;
 
  204    void ClearScreen( ) 
override;
 
  211    void Transform( 
const MATRIX3x3D& aTransformation ) 
override;
 
  214    void Rotate( 
double aAngle ) 
override;
 
  217    void Translate( 
const VECTOR2D& aTranslation ) 
override;
 
  220    void Scale( 
const VECTOR2D& aScale ) 
override;
 
  223    void Save() 
override;
 
  226    void Restore() 
override;
 
  233    int BeginGroup() 
override;
 
  236    void EndGroup() 
override;
 
  239    void DrawGroup( 
int aGroupNumber ) 
override;
 
  242    void ChangeGroupColor( 
int aGroupNumber, 
const COLOR4D& aNewColor ) 
override;
 
  245    void ChangeGroupDepth( 
int aGroupNumber, 
int aDepth ) 
override;
 
  248    void DeleteGroup( 
int aGroupNumber ) 
override;
 
  251    void ClearCache() 
override;
 
  273    void StartDiffLayer() 
override;
 
  276    void EndDiffLayer() 
override;
 
  278    void ComputeWorldScreenMatrix() 
override;
 
  285    bool SetNativeCursorStyle( 
KICURSOR aCursor, 
bool aHiDPI ) 
override;
 
  288    void DrawCursor( 
const VECTOR2D& aCursorPosition ) 
override;
 
  296    void PostPaint( wxPaintEvent& aEvent );
 
  308    void EnableDepthTest( 
bool aEnabled = 
false ) 
override;
 
  315    void LockContext( 
int aClientCookie ) 
override;
 
  317    void UnlockContext( 
int aClientCookie ) 
override;
 
  320    void BeginDrawing() 
override;
 
  323    void EndDrawing() 
override;
 
  349    typedef std::unordered_map< unsigned int, std::shared_ptr<VERTEX_ITEM> > 
GROUPS_MAP;
 
  417                       bool aReserve = 
true );
 
  459                                bool aReserve = 
true );
 
  466    void drawCircle( 
const VECTOR2D& aCenterPoint, 
double aRadius, 
bool aReserve = 
true );
 
  476                       bool aReserve = 
true );
 
  486                           double aWidth, 
bool aReserve = 
true );
 
  492                      bool aReserve = 
true );
 
  501    void drawPolygon( GLdouble* aPoints, 
int aPointCount );
 
  550    void onPaint( wxPaintEvent& aEvent );
 
  594    double getWorldPixelSize() 
const;
 
  596    VECTOR2D getScreenPixelSize() 
const;
 
  603    void setupShaderParameters();
 
 
This class handle bitmap images in KiCad.
 
HIDPI_GL_CANVAS(const KIGFX::VC_SETTINGS &aSettings, wxWindow *aParent, const wxGLAttributes &aGLAttribs, wxWindowID aId=wxID_ANY, const wxPoint &aPos=wxDefaultPosition, const wxSize &aSize=wxDefaultSize, long aStyle=0, const wxString &aName=wxGLCanvasName, const wxPalette &aPalette=wxNullPalette)
 
A color representation with 4 components: red, green, blue, alpha.
 
GAL(GAL_DISPLAY_OPTIONS &aOptions)
 
void drawPolygon(GLdouble *aPoints, int aPointCount)
Draw a filled polygon.
 
void skipMouseEvent(wxMouseEvent &aEvent)
Skip the mouse event to the parent.
 
void drawSegment(const VECTOR2D &aStartPoint, const VECTOR2D &aEndPoint, double aWidth, bool aReserve=true)
Internal method for segment drawing.
 
unsigned int m_groupCounter
Counter used for generating keys for groups.
 
std::unordered_map< unsigned int, std::shared_ptr< VERTEX_ITEM > > GROUPS_MAP
 
VERTEX_MANAGER * m_overlayManager
Container for storing overlaid VERTEX_ITEMs.
 
bool m_isInitialized
Basic initialization flag, has to be done when the window is visible.
 
VERTEX_MANAGER * m_currentManager
Currently used VERTEX_MANAGER (for storing VERTEX_ITEMs).
 
void drawCircle(const VECTOR2D &aCenterPoint, double aRadius, bool aReserve=true)
Internal method for circle drawing.
 
std::deque< std::shared_ptr< GLdouble > > m_tessIntersects
 
void SetNegativeDrawMode(bool aSetting) override
Set negative draw mode in the renderer.
 
bool IsInitialized() const override
Return the initialization status for the canvas.
 
WX_CURSOR_TYPE m_currentwxCursor
wx cursor showing the current native cursor.
 
unsigned int m_mainBuffer
Main rendering target.
 
std::unique_ptr< GL_BITMAP_CACHE > m_bitmapCache
 
std::pair< VECTOR2D, float > computeBitmapTextSize(const UTF8 &aText) const
Compute a size of text drawn using bitmap font with current text setting applied.
 
bool IsContextLocked() override
Checks the state of the context lock.
 
void blitCursor()
Blit cursor into the current screen.
 
static wxString CheckFeatures(GAL_DISPLAY_OPTIONS &aOptions)
Checks OpenGL features.
 
void drawBitmapOverbar(double aLength, double aHeight, bool aReserve=true)
Draw an overbar over the currently drawn text.
 
bool m_isBitmapFontInitialized
Is the shader set to use bitmap fonts?
 
void drawSegmentChain(const std::function< VECTOR2D(int)> &aPointGetter, int aPointCount, double aWidth, bool aReserve=true)
Generic way of drawing a chain of segments stored in different containers.
 
bool updatedGalDisplayOptions(const GAL_DISPLAY_OPTIONS &aOptions) override
Handle updating display options.
 
unsigned int m_overlayBuffer
Auxiliary rendering target (for menus etc.)
 
OPENGL_COMPOSITOR * m_compositor
Handles multiple rendering targets.
 
VERTEX_MANAGER * m_cachedManager
Container for storing cached VERTEX_ITEMs.
 
void SetPaintListener(wxEvtHandler *aPaintListener)
 
void drawFilledSemiCircle(const VECTOR2D &aCenterPoint, double aRadius, double aAngle)
Draw a filled semicircle.
 
void onPaint(wxPaintEvent &aEvent)
This is the OnPaint event handler.
 
GLint ufm_minLinePixelWidth
 
void drawStrokedSemiCircle(const VECTOR2D &aCenterPoint, double aRadius, double aAngle, bool aReserve=true)
Draw a stroked semicircle.
 
unsigned int getNewGroupNumber()
Return a valid key that can be used as a new group number.
 
GLint ufm_antialiasingOffset
 
bool IsVisible() const override
Return true if the GAL canvas is visible on the screen.
 
wxEvtHandler * m_mouseListener
 
int m_swapInterval
Used to store swap interval information.
 
GROUPS_MAP m_groups
Stores information about VBO objects (groups)
 
void endUpdate() override
 
GLint ufm_fontTextureWidth
 
void drawTriangulatedPolyset(const SHAPE_POLY_SET &aPoly, bool aStrokeTriangulation)
Draw a set of polygons with a cached triangulation.
 
int GetSwapInterval() const override
Return the swap interval. -1 for adaptive, 0 for disabled/unknown.
 
GAL super
Super class definition.
 
void SetMouseListener(wxEvtHandler *aMouseListener)
 
VERTEX_MANAGER * m_nonCachedManager
Container for storing non-cached VERTEX_ITEMs.
 
int drawBitmapChar(unsigned long aChar, bool aReserve=true)
Draw a single character using bitmap font.
 
GLUtesselator * m_tesselator
 
wxEvtHandler * m_paintListener
 
bool m_isContextLocked
Used for assertion checking.
 
bool m_isFramebufferInitialized
Are the framebuffers initialized?
 
static GLuint g_fontTexture
Bitmap font texture handle (shared)
 
void reserveLineQuads(const int aLineCount)
Reserve specified number of line quads.
 
OPENGL_GAL(const KIGFX::VC_SETTINGS &aVcSettings, GAL_DISPLAY_OPTIONS &aDisplayOptions, wxWindow *aParent, wxEvtHandler *aMouseListener=nullptr, wxEvtHandler *aPaintListener=nullptr, const wxString &aName=wxT("GLCanvas"))
 
void beginUpdate() override
 
double calcAngleStep(double aRadius) const
Compute the angle step when drawing arcs/circles approximated with lines.
 
bool m_isGrouping
Was a group started?
 
GLint ufm_screenPixelSize
 
GLint ufm_pixelSizeMultiplier
 
void drawPolyline(const std::function< VECTOR2D(int)> &aPointGetter, int aPointCount, bool aReserve=true)
Generic way of drawing a polyline stored in different containers.
 
void skipGestureEvent(wxGestureEvent &aEvent)
Skip the gesture event to the parent.
 
void drawSemiCircle(const VECTOR2D &aCenterPoint, double aRadius, double aAngle)
Draw a semicircle.
 
void drawLineQuad(const VECTOR2D &aStartPoint, const VECTOR2D &aEndPoint, bool aReserve=true)
Draw a quad for the line.
 
VERTEX_MANAGER * m_tempManager
Container for storing temp (diff mode) VERTEX_ITEMs.
 
void onSetNativeCursor(wxSetCursorEvent &aEvent)
Give the correct cursor image when the native widget asks for it.
 
SHADER * m_shader
There is only one shader used for different objects.
 
RENDER_TARGET m_currentTarget
Current rendering target.
 
wxGLContext * m_glPrivContext
Canvas-specific OpenGL context.
 
static bool m_isBitmapFontLoaded
Is the bitmap font texture loaded?
 
static wxGLContext * m_glMainContext
Parent OpenGL context.
 
unsigned int m_tempBuffer
Temporary rendering target (for diffing etc.)
 
static int m_instanceCounter
GL GAL instance counter.
 
bool IsOpenGlEngine() override
Return true if the GAL engine is a OpenGL based type.
 
Provide the access to the OpenGL shaders.
 
Class to control vertex container and GPU with possibility of emulating old-style OpenGL 1....
 
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
 
Represent a set of closed polygons.
 
An 8 bit string that is assuredly encoded in UTF8, and supplies special conversion support to and fro...
 
wxCursor WX_CURSOR_TYPE
Represents either a wxCursorBundle for wx 3.3+ or a wxCursor for older versions.
 
MATRIX3x3< double > MATRIX3x3D
 
The Cairo implementation of the graphics abstraction layer.
 
RENDER_TARGET
RENDER_TARGET: Possible rendering targets.
 
Class to store instances of VERTEX without caching.
 
Handle multitarget rendering (ie.
 
#define SEG_PER_CIRCLE_COUNT
 
void DrawSegment(const ROUND_SEGMENT_2D &aSegment, unsigned int aNrSidesPerCircle)
Draw a thick line segment with rounded ends.
 
VERTEX_MANAGER * vboManager
Manager used for storing new vertices.
 
std::deque< std::shared_ptr< GLdouble > > & intersectPoints
Intersect points, that have to be freed after tessellation.
 
Structure to keep VIEW_CONTROLS settings for easy store/restore operations.
 
VECTOR2< int32_t > VECTOR2I
 
VECTOR2< double > VECTOR2D
 
Class to handle an item held in a container.