Browse Source

Revise build system, add Befaco knobs, add screws

tags/v0.3.0
Andrew Belt 7 years ago
parent
commit
2574574288
8 changed files with 144 additions and 113 deletions
  1. +7
    -18
      Makefile
  2. +27
    -0
      Makefile.inc
  3. +80
    -44
      include/components.hpp
  4. +2
    -2
      include/rack.hpp
  5. +1
    -6
      include/scene.hpp
  6. +4
    -2
      include/widgets.hpp
  7. +23
    -25
      src/widgets/Light.cpp
  8. +0
    -16
      src/widgets/Screw.cpp

+ 7
- 18
Makefile View File

@@ -1,30 +1,22 @@
ARCH ?= linux
CFLAGS = -MMD -g -Wall -O2
CXXFLAGS = -MMD -g -Wall -std=c++11 -O3 -msse -mfpmath=sse -ffast-math -fno-exceptions \
ARCH ?= lin
FLAGS = -g -Wall -O3 -msse -mfpmath=sse -ffast-math \
-I./ext -I./include -I./ext -I./include
LDFLAGS =
CXXFLAGS = -fno-exceptions


SOURCES = $(wildcard src/*.cpp src/*/*.cpp) \ SOURCES = $(wildcard src/*.cpp src/*/*.cpp) \
ext/nanovg/src/nanovg.c ext/nanovg/src/nanovg.c




# Linux
ifeq ($(ARCH), linux)
CC = gcc
CXX = g++
ifeq ($(ARCH), lin)
SOURCES += ext/noc/noc_file_dialog.c SOURCES += ext/noc/noc_file_dialog.c
CFLAGS += -DNOC_FILE_DIALOG_GTK $(shell pkg-config --cflags gtk+-2.0) CFLAGS += -DNOC_FILE_DIALOG_GTK $(shell pkg-config --cflags gtk+-2.0)
CXXFLAGS += -DLINUX
LDFLAGS += -rdynamic \ LDFLAGS += -rdynamic \
-lpthread -lGL -lGLEW -lglfw -ldl -ljansson -lportaudio -lportmidi -lsamplerate \ -lpthread -lGL -lGLEW -lglfw -ldl -ljansson -lportaudio -lportmidi -lsamplerate \
$(shell pkg-config --libs gtk+-2.0) $(shell pkg-config --libs gtk+-2.0)
TARGET = Rack TARGET = Rack
endif endif


# Apple
ifeq ($(ARCH), apple)
CC = clang
CXX = clang++
ifeq ($(ARCH), mac)
SOURCES += ext/noc/noc_file_dialog.m SOURCES += ext/noc/noc_file_dialog.m
CFLAGS += -DNOC_FILE_DIALOG_OSX CFLAGS += -DNOC_FILE_DIALOG_OSX
CXXFLAGS += -DAPPLE -stdlib=libc++ -I$(HOME)/local/include CXXFLAGS += -DAPPLE -stdlib=libc++ -I$(HOME)/local/include
@@ -32,13 +24,10 @@ LDFLAGS += -stdlib=libc++ -L$(HOME)/local/lib -lpthread -lglew -lglfw3 -framewor
TARGET = Rack TARGET = Rack
endif endif


# Windows
ifeq ($(ARCH), windows)
CC = x86_64-w64-mingw32-gcc
CXX = x86_64-w64-mingw32-g++
ifeq ($(ARCH), win)
SOURCES += ext/noc/noc_file_dialog.c SOURCES += ext/noc/noc_file_dialog.c
CFLAGS += -DNOC_FILE_DIALOG_WIN32 CFLAGS += -DNOC_FILE_DIALOG_WIN32
CXXFLAGS += -DWINDOWS -D_USE_MATH_DEFINES -DGLEW_STATIC \
CXXFLAGS += -DGLEW_STATIC \
-I$(HOME)/pkg/portaudio-r1891-build/include -I$(HOME)/pkg/portaudio-r1891-build/include
LDFLAGS += \ LDFLAGS += \
-Wl,-Bstatic,--whole-archive \ -Wl,-Bstatic,--whole-archive \


+ 27
- 0
Makefile.inc View File

@@ -1,4 +1,31 @@
FLAGS += -MMD
CXXFLAGS += -std=c++11



ifeq ($(ARCH), lin)
CC ?= gcc
CXX ?= g++
FLAGS += -DLINUX
endif

ifeq ($(ARCH), mac)
CC ?= clang
CXX ?= clang++
FLAGS += -DAPPLE
CXXFLAGS += -stdlib=libc++
LDFLAGS += -stdlib=libc++
endif

ifeq ($(ARCH), win)
CC ?= x86_64-w64-mingw32-gcc
CXX ?= x86_64-w64-mingw32-g++
FLAGS += -DWINDOWS -D_USE_MATH_DEFINES
endif



CFLAGS := $(FLAGS) $(CFLAGS)
CXXFLAGS := $(FLAGS) $(CXXFLAGS)
OBJECTS += $(patsubst %, build/%.o, $(SOURCES)) OBJECTS += $(patsubst %, build/%.o, $(SOURCES))
DEPS = $(patsubst %, build/%.d, $(SOURCES)) DEPS = $(patsubst %, build/%.d, $(SOURCES))




+ 80
- 44
include/components.hpp View File

@@ -5,59 +5,84 @@
namespace rack { namespace rack {


//////////////////// ////////////////////
// knobs
// Knobs
//////////////////// ////////////////////


struct KnobDavies1900h : SpriteKnob { struct KnobDavies1900h : SpriteKnob {
KnobDavies1900h() { KnobDavies1900h() {
// box.size = Vec(36, 36);
// spriteOffset = Vec(-8, -8);
// spriteSize = Vec(64, 64);
// minIndex = 44;
// maxIndex = -46;
// spriteCount = 120;
box.size = Vec(42, 42);
spriteOffset = Vec(-9, -9);
spriteSize = Vec(60, 60);
minIndex = 0;
maxIndex = 119;
box.size = Vec(36, 36);
spriteOffset = Vec(-2, -2);
spriteSize = Vec(42, 42);
minIndex = 44;
maxIndex = -46;
spriteCount = 120; spriteCount = 120;
spriteImage = Image::load("res/Black Plastic small 01.png");
} }
}; };


struct KnobDavies1900hWhite : KnobDavies1900h { struct KnobDavies1900hWhite : KnobDavies1900h {
KnobDavies1900hWhite() { KnobDavies1900hWhite() {
// spriteImage = Image::load("res/ComponentLibrary/Davies1900hWhite.png");
spriteImage = Image::load("res/ComponentLibrary/Davies1900hWhite.png");
} }
}; };


struct KnobDavies1900hBlack : KnobDavies1900h { struct KnobDavies1900hBlack : KnobDavies1900h {
KnobDavies1900hBlack() { KnobDavies1900hBlack() {
// spriteImage = Image::load("res/ComponentLibrary/Davies1900hBlack.png");
spriteImage = Image::load("res/ComponentLibrary/Davies1900hBlack.png");
} }
}; };


struct KnobDavies1900hRed : KnobDavies1900h { struct KnobDavies1900hRed : KnobDavies1900h {
KnobDavies1900hRed() { KnobDavies1900hRed() {
// spriteImage = Image::load("res/ComponentLibrary/Davies1900hRed.png");
spriteImage = Image::load("res/ComponentLibrary/Davies1900hRed.png");
}
};

struct BefacoBigKnob : SpriteKnob {
BefacoBigKnob() {
box.size = Vec(75, 75);
spriteOffset = Vec(-2, -2);
spriteSize = Vec(81, 81);
minIndex = 44;
maxIndex = -46;
spriteCount = 120;
spriteImage = Image::load("res/ComponentLibrary/BefacoBigKnob.png");
}
};

struct BefacoTinyKnob : SpriteKnob {
BefacoTinyKnob() {
box.size = Vec(26, 26);
spriteOffset = Vec(-2, -2);
spriteSize = Vec(32, 32);
minIndex = 44;
maxIndex = -46;
spriteCount = 120;
spriteImage = Image::load("res/ComponentLibrary/BefacoTinyKnob.png");
}
};

struct BefacoSlidePot : SpriteKnob {
BefacoSlidePot() {
box.size = Vec(12, 122);
spriteOffset = Vec(-2, -6);
spriteSize = Vec(18, 134);
minIndex = 97;
maxIndex = 0;
spriteCount = 98;
spriteImage = Image::load("res/ComponentLibrary/BefacoSlidePot.png");
} }
}; };


//////////////////// ////////////////////
// ports
// Jacks
//////////////////// ////////////////////


struct PJ301M : SpriteWidget { struct PJ301M : SpriteWidget {
PJ301M() { PJ301M() {
// box.size = Vec(24, 24);
// spriteOffset = Vec(-10, -10);
// spriteSize = Vec(48, 48);
// spriteImage = Image::load("res/ComponentLibrary/PJ301M.png");
box.size = Vec(26, 26);
spriteOffset = Vec(-16, -16);
spriteSize = Vec(56, 56);
spriteImage = Image::load("res/port.png");
box.size = Vec(24, 24);
spriteOffset = Vec(-2, -2);
spriteSize = Vec(30, 30);
spriteImage = Image::load("res/ComponentLibrary/PJ301M.png");
} }
}; };
struct InputPortPJ301M : InputPort, PJ301M {}; struct InputPortPJ301M : InputPort, PJ301M {};
@@ -65,14 +90,10 @@ struct OutputPortPJ301M: OutputPort, PJ301M {};


struct PJ3410 : SpriteWidget { struct PJ3410 : SpriteWidget {
PJ3410() { PJ3410() {
// box.size = Vec(31, 31);
// spriteOffset = Vec(-9, -9);
// spriteSize = Vec(54, 54);
// spriteImage = Image::load("res/ComponentLibrary/PJ3410.png");
box.size = Vec(26, 26);
spriteOffset = Vec(-12, -12);
spriteSize = Vec(56, 56);
spriteImage = Image::load("res/port.png");
box.size = Vec(32, 32);
spriteOffset = Vec(-1, -1);
spriteSize = Vec(36, 36);
spriteImage = Image::load("res/ComponentLibrary/PJ3410.png");
} }
}; };
struct InputPortPJ3410 : InputPort, PJ3410 {}; struct InputPortPJ3410 : InputPort, PJ3410 {};
@@ -80,25 +101,40 @@ struct OutputPortPJ3410: OutputPort, PJ3410 {};


struct CL1362 : SpriteWidget { struct CL1362 : SpriteWidget {
CL1362() { CL1362() {
// box.size = Vec(33, 29);
// spriteOffset = Vec(-10, -10);
// spriteSize = Vec(57, 54);
// spriteImage = Image::load("res/ComponentLibrary/CL1362.png");
box.size = Vec(26, 26);
spriteOffset = Vec(-12, -12);
spriteSize = Vec(56, 56);
spriteImage = Image::load("res/port.png");

box.size = Vec(33, 29);
spriteOffset = Vec(-2, -2);
spriteSize = Vec(39, 36);
spriteImage = Image::load("res/ComponentLibrary/CL1362.png");
} }
}; };
struct InputPortCL1362 : InputPort, CL1362 {}; struct InputPortCL1362 : InputPort, CL1362 {};
struct OutputPortCL1362 : OutputPort, CL1362 {}; struct OutputPortCL1362 : OutputPort, CL1362 {};



//////////////////// ////////////////////
// panels
// Misc
//////////////////// ////////////////////


/** If you don't add these to your ModuleWidget, it will fall out of the rack... */
struct Screw : SpriteWidget {
Screw() {
box.size = Vec(15, 14);
spriteOffset = Vec(0, 0);
spriteSize = Vec(15, 14);
}
};

struct BlackScrew : Screw {
BlackScrew() {
spriteImage = Image::load("res/ComponentLibrary/ScrewBlack.png");
}
};

struct SilverScrew : Screw {
SilverScrew() {
spriteImage = Image::load("res/ComponentLibrary/ScrewSilver.png");
}
};

struct LightPanel : Panel { struct LightPanel : Panel {
LightPanel() { LightPanel() {
backgroundColor = nvgRGB(0xe8, 0xe8, 0xe8); backgroundColor = nvgRGB(0xe8, 0xe8, 0xe8);


+ 2
- 2
include/rack.hpp View File

@@ -61,9 +61,9 @@ OutputPort *createOutput(Vec pos, Module *module, int outputId) {
return port; return port;
} }


inline
template <class TScrew>
Screw *createScrew(Vec pos) { Screw *createScrew(Vec pos) {
Screw *screw = new Screw();
Screw *screw = new TScrew();
screw->box.pos = pos; screw->box.pos = pos;
return screw; return screw;
} }


+ 1
- 6
include/scene.hpp View File

@@ -104,16 +104,11 @@ struct Panel : TransparentWidget {
// params // params
//////////////////// ////////////////////


struct Light : TransparentWidget, SpriteWidget {
struct Light : TransparentWidget {
NVGcolor color; NVGcolor color;
void draw(NVGcontext *vg); void draw(NVGcontext *vg);
}; };


// If you don't add these to your ModuleWidget, it will fall out of the RackWidget
struct Screw : TransparentWidget {
Screw();
};

struct ParamWidget : OpaqueWidget, QuantityWidget { struct ParamWidget : OpaqueWidget, QuantityWidget {
Module *module = NULL; Module *module = NULL;
int paramId; int paramId;


+ 4
- 2
include/widgets.hpp View File

@@ -69,8 +69,10 @@ struct Widget {
Gives ownership of widget to this widget instance. Gives ownership of widget to this widget instance.
*/ */
void addChild(Widget *widget); void addChild(Widget *widget);
// Does not delete widget but transfers ownership to caller
// Silenty fails if widget is not a child
/** Removes widget from list of children if it exists.
Does not delete widget but transfers ownership to caller
Silently fails if widget is not a child
*/
void removeChild(Widget *widget); void removeChild(Widget *widget);
void clearChildren(); void clearChildren();




+ 23
- 25
src/widgets/Light.cpp View File

@@ -3,37 +3,35 @@


namespace rack { namespace rack {


void Light::draw(NVGcontext *vg) {
SpriteWidget::draw(vg);


if (color.a == 0.0)
return;
// Draw glow
void Light::draw(NVGcontext *vg) {
NVGcolor colorOutline = nvgLerpRGBA(color, nvgRGBf(0.0, 0.0, 0.0), 0.5);
Vec c = box.getCenter(); Vec c = box.getCenter();
float radius = box.size.x / 2.0;
NVGcolor icol, ocol;
NVGpaint paint;
// Inner glow
icol = nvgRGBf(1.0, 1.0, 1.0);
icol.a = clampf(color.a, 0.0, 1.0);
ocol = color;
ocol.a = clampf(color.a, 0.0, 1.0);
paint = nvgRadialGradient(vg, c.x+1, c.y+3, 0.0, radius, icol, ocol);
nvgFillPaint(vg, paint);
Vec r = box.size.div(2.0);

nvgBeginPath(vg); nvgBeginPath(vg);
nvgCircle(vg, c.x, c.y, radius);
nvgEllipse(vg, c.x, c.y, r.x, r.y);
nvgFillColor(vg, colorOutline);
nvgFill(vg); nvgFill(vg);
// Outer glow
icol = color;
icol.a = clampf(color.a / 10.0, 0.0, 1.0);
ocol = color;
ocol.a = 0.0;
float oradius = radius + 20.0;
paint = nvgRadialGradient(vg, c.x, c.y, radius, oradius, icol, ocol);
nvgFillPaint(vg, paint);

nvgBeginPath(vg); nvgBeginPath(vg);
nvgRect(vg, c.x - oradius, c.y - oradius, 2*oradius, 2*oradius);
nvgEllipse(vg, c.x, c.y, r.x - 1.0, r.y - 1.0);
nvgFillColor(vg, color);
nvgFill(vg); nvgFill(vg);

// float radius = box.size.x / 2.0;
// NVGcolor icol, ocol;
// NVGpaint paint;
// icol = color;
// icol.a = clampf(color.a / 10.0, 0.0, 1.0);
// ocol = color;
// ocol.a = 0.0;
// float oradius = radius + 20.0;
// paint = nvgRadialGradient(vg, c.x, c.y, radius, oradius, icol, ocol);
// nvgFillPaint(vg, paint);
// nvgBeginPath(vg);
// nvgRect(vg, c.x - oradius, c.y - oradius, 2*oradius, 2*oradius);
// nvgFill(vg);
} }






+ 0
- 16
src/widgets/Screw.cpp View File

@@ -1,16 +0,0 @@
#include "scene.hpp"


namespace rack {

Screw::Screw() {
// box.size = Vec(15, 15);
// spriteOffset = Vec(-7, -7);
// spriteSize = Vec(29, 29);
// spriteImage = Image::load("res/screw.png");

// index = randomu32() % 5;
}


} // namespace rack

Loading…
Cancel
Save