steps to better support devices with precise scrolling deltas (trackpads).
Scrolling is done in the handler rather than creating and firing cmd events.
This is intended to support two-finger scrolling on the Magic Trackpad.
- Added a preference, 'Use mousewheel to pan', to allow panning by default
on mousewheel events. This reverses the existing behavior where unmodified
mousewheel zooms and Shift/Cmd modified pans.
The old behavior was:
- Unmodified scrollwheel performed zoom in/out
- Shift modified scrollwheel performed pan up/down
- Cmd modified scrollwheel performed pan left/right
- Shift+Cmd modified scrollwheel performed zoom in/out
with no cursor warp
With the new preference checked, this changes to:
- Unmodified scrollwheel performs pan up/down
- Shift modified scrollwheel performs pan left/right
- Cmd modified scrollwheel performs zoom in/out
- Shift+Cmd modified scrollwheel performs zoom in/out
with no cursor warp
With the preference unchecked, this is now:
- Unmodified scrollwheel performed zoom in/out
- Shift modified scrollwheel performed pan left/right
- Cmd modified scrollwheel performed pan up/down
- Shift+Cmd modified scrollwheel performed zoom in/out
with no cursor warp
It should be noted that for the last case, the behavior has changed.
This is not arbitrary. This now matches expected behavior for an OS X
application. This also matches what wxWidgets expects on this platform
as wxWidgets changes the axis of mousewheel events to horizontal when
the event is shift-modified.
The preference is added everwhere that mouse preferences previously
existed, i.e., eeschema, pcbnew and gerbview. The 3D Viewer does
not yet honor this preference, but behaves as if it was checked.
The pl_editor does not currently have any preferences to honor.
As with the magnify event support, this covers canvases for all
current tools, EDA_DRAW_PANEL, EDA_3D_CANVAS and EDA_DRAW_PANEL_GAL.
This does NOT modify the behavior of mousewheel zooming, though it
probably should. This remains unsuitable for use with a trackpad,
use pinch-to-zoom instead.
Committing this separately from the rest to ease making a patch for just this
functionality in case that it might make it into the trunk.
This can function standalone, though it is less useful without the rest.
It requires that wxwidgets-3.0.0_macosx_magnify_event.patch be applied to wxWidgets
It is completely optional; everything is guarded by the USE_OSX_MAGNIFY_EVENT macro.
- Added OnMagnify event handler to EDA_DRAW_PANEL, EDA_3D_CANVAS and the helper for
EDA_DRAW_PANEL_GAL, WX_VIEW_CONTROLS. This should cover canvases all current tools.
- Guarded all with USE_OSX_MAGNIFY EVENT feature macro and added support in CMakeLists.txt
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