BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

commit b3ed25f77445eba65ee5f0c3dde2b620215f44d3
parent 6475249c0818c842a10a3b3c74fbf27fd38006ad
Author: Matt Demanett <matt@demanett.net>
Date:   Tue,  7 May 2019 22:29:30 -0400

Walk2: translate display to follow offsets; paint grid ticks.

Diffstat:
Msrc/Walk2.cpp | 109+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 101 insertions(+), 8 deletions(-)

diff --git a/src/Walk2.cpp b/src/Walk2.cpp @@ -102,7 +102,7 @@ struct Walk2Display : TransparentWidget { ) : _module(module) , _size(size) - , _drawSize(_size.x - 2*_insetAround, _size.y - 2*_insetAround) + , _drawSize(2 * (_size.x - 2 * _insetAround), 2 * (_size.y - 2 * _insetAround)) , _midX(_insetAround + _drawSize.x/2) , _midY(_insetAround + _drawSize.y/2) , _font(Font::load(assetPlugin(plugin, "res/fonts/inconsolata.ttf"))) @@ -113,8 +113,14 @@ struct Walk2Display : TransparentWidget { drawBackground(vg); float strokeWidth = std::max(1.0f, 3 - gRackScene->zoomWidget->zoom); + float tx = 1.0f + (clamp(_module->_offsetX, -5.0f, 5.0f) / 5.0f); + tx *= -_drawSize.x / 4; + float ty = 1.0f - (clamp(_module->_offsetY, -5.0f, 5.0f) / 5.0f); + ty *= -_drawSize.y / 4; + nvgSave(vg); - nvgScissor(vg, _insetAround, _insetAround, _drawSize.x, _drawSize.y); + nvgScissor(vg, _insetAround, _insetAround, _drawSize.x / 2, _drawSize.y / 2); + nvgTranslate(vg, tx, ty); drawAxes(vg, strokeWidth); drawTrace(vg, _traceColor, _module->_outsX, _module->_outsY); nvgRestore(vg); @@ -132,7 +138,9 @@ struct Walk2Display : TransparentWidget { } void drawAxes(NVGcontext* vg, float strokeWidth) { - const float tick = 3.0f; + const float shortTick = 4.0f; + const float longTick = 8.0f; + float dot = 0.5f * strokeWidth; nvgSave(vg); nvgStrokeColor(vg, _axisColor); @@ -148,8 +156,10 @@ struct Walk2Display : TransparentWidget { nvgLineTo(vg, _midX, _insetAround + _drawSize.y); nvgStroke(vg); - for (int i = 1; i <= 5; ++i) { - float x = (i * 1.0f/5.0f) * 0.5f * _drawSize.x; + for (int i = 1; i <= 10; ++i) { + float tick = i % 5 == 0 ? longTick : shortTick; + + float x = (i * 0.1f) * 0.5f * _drawSize.x; nvgBeginPath(vg); nvgMoveTo(vg, _midX + x, _midY - tick); nvgLineTo(vg, _midX + x, _midY + tick); @@ -160,7 +170,7 @@ struct Walk2Display : TransparentWidget { nvgLineTo(vg, _midX - x, _midY + tick); nvgStroke(vg); - float y = (i * 1.0f/5.0f) * 0.5f * _drawSize.y; + float y = (i * 0.1f) * 0.5f * _drawSize.y; nvgBeginPath(vg); nvgMoveTo(vg, _midX - tick, _midY + y); nvgLineTo(vg, _midX + tick, _midY + y); @@ -170,8 +180,91 @@ struct Walk2Display : TransparentWidget { nvgMoveTo(vg, _midX - tick, _midY - y); nvgLineTo(vg, _midX + tick, _midY - y); nvgStroke(vg); + + for (int j = 1; j <= 10; ++j) { + float y = (j * 0.1f) * 0.5f * _drawSize.y; + + nvgBeginPath(vg); + nvgMoveTo(vg, _midX + x - dot, _midY + y); + nvgLineTo(vg, _midX + x + dot, _midY + y); + nvgStroke(vg); + + nvgBeginPath(vg); + nvgMoveTo(vg, _midX - x - dot, _midY + y); + nvgLineTo(vg, _midX - x + dot, _midY + y); + nvgStroke(vg); + + nvgBeginPath(vg); + nvgMoveTo(vg, _midX - x - dot, _midY - y); + nvgLineTo(vg, _midX - x + dot, _midY - y); + nvgStroke(vg); + + nvgBeginPath(vg); + nvgMoveTo(vg, _midX + x - dot, _midY - y); + nvgLineTo(vg, _midX + x + dot, _midY - y); + nvgStroke(vg); + } } + const float tick = shortTick; + { + float x = _midX - _drawSize.x / 4; + float y = _midY - _drawSize.y / 4; + + nvgBeginPath(vg); + nvgMoveTo(vg, x - tick, y); + nvgLineTo(vg, x + tick, y); + nvgStroke(vg); + + nvgBeginPath(vg); + nvgMoveTo(vg, x, y - tick); + nvgLineTo(vg, x, y + tick); + nvgStroke(vg); + } + { + float x = _midX + _drawSize.x / 4; + float y = _midY - _drawSize.y / 4; + + nvgBeginPath(vg); + nvgMoveTo(vg, x - tick, y); + nvgLineTo(vg, x + tick, y); + nvgStroke(vg); + + nvgBeginPath(vg); + nvgMoveTo(vg, x, y - tick); + nvgLineTo(vg, x, y + tick); + nvgStroke(vg); + } + { + float x = _midX + _drawSize.x / 4; + float y = _midY + _drawSize.y / 4; + + nvgBeginPath(vg); + nvgMoveTo(vg, x - tick, y); + nvgLineTo(vg, x + tick, y); + nvgStroke(vg); + + nvgBeginPath(vg); + nvgMoveTo(vg, x, y - tick); + nvgLineTo(vg, x, y + tick); + nvgStroke(vg); + } + { + float x = _midX - _drawSize.x / 4; + float y = _midY + _drawSize.y / 4; + + nvgBeginPath(vg); + nvgMoveTo(vg, x - tick, y); + nvgLineTo(vg, x + tick, y); + nvgStroke(vg); + + nvgBeginPath(vg); + nvgMoveTo(vg, x, y - tick); + nvgLineTo(vg, x, y + tick); + nvgStroke(vg); + } + + nvgRestore(vg); } @@ -225,11 +318,11 @@ struct Walk2Display : TransparentWidget { } inline float cvToPixelX(float mid, float extent, float cv) { - return mid + 0.1f * extent * cv; + return mid + 0.05f * extent * cv; } inline float cvToPixelY(float mid, float extent, float cv) { - return mid - 0.1f * extent * cv; + return mid - 0.05f * extent * cv; } };