• Maciej Suminski's avatar
    Introduction of Graphics Abstraction Layer based rendering for pcbnew. · e262b321
    Maciej Suminski authored
    New classes:
        - VIEW - represents view that is seen by user, takes care of layer ordering & visibility and how it is displayed (which location, how much zoomed, etc.)
        - VIEW_ITEM - Base class for every item that can be displayed on VIEW (the biggest change is that now it may be necessary to override ViewBBox & ViewGetLayers method for derived classes).
        - EDA_DRAW_PANEL_GAL - Inherits after EDA_DRAW_PANEL, displays VIEW output, right now it is not editable (in opposite to usual EDA_DRAW_PANEL).
        - GAL/OPENGL_GAL/CAIRO_GAL - Base Graphics Abstraction Layer class + two different flavours (Cairo is not fully supported yet), that offers methods to draw primitives using different libraries.
        - WX_VIEW_CONTROLS - Controller for VIEW, handles user events, allows zooming, panning, etc.
        - PAINTER/PCB_PAINTER - Classes that uses GAL interface to draw items (as you may have already guessed - PCB_PAINTER is a class for drawing PCB specific object, PAINTER is an abstract class). Its methods are invoked by VIEW, when an item has to be drawn. To display a new type of item - you need to implement draw(ITEM_TYPE*) method that draws it using GAL methods.
        - STROKE_FONT - Implements stroke font drawing using GAL methods.
                              
    Most important changes to Kicad original code:
        * EDA_ITEM now inherits from VIEW_ITEM, which is a base class for all drawable objects.
        * EDA_DRAW_FRAME contains both usual EDA_DRAW_PANEL and new EDA_DRAW_PANEL_GAL, that can be switched anytime.
        * There are some new layers for displaying multilayer pads, vias & pads holes (these are not shown yet on the right sidebar in pcbnew)
        * Display order of layers is different than in previous versions (if you are curious - you may check m_galLayerOrder@pcbnew/basepcbframe.cpp). Preserving usual order would result in not very natural display, such as showing silkscreen texts on the bottom.
        * Introduced new hotkey (Alt+F12) and new menu option (View->Switch canvas) for switching canvas during runtime.
        * Some of classes (mostly derived from BOARD_ITEM) now includes ViewBBox & ViewGetLayers methods.
        * Removed tools/class_painter.h, as now it is extended and included in source code.
                             
    Build changes:
        * GAL-based rendering option is turned on by a new compilation CMake option KICAD_GAL.
        * When compiling with CMake option KICAD_GAL=ON, GLEW and Cairo libraries are required.
        * GAL-related code is compiled into a static library (common/libgal).
        * Build with KICAD_GAL=OFF should not need any new libraries and should come out as a standard version of Kicad
                                
    Currently most of items in pcbnew can be displayed using OpenGL (to be done are DIMENSIONS and MARKERS).
    More details about GAL can be found in: http://www.ohwr.org/attachments/1884/view-spec.pdf
    e262b321
graphics_abstraction_layer.cpp 5.14 KB