X-Git-Url: https://scm.cri.ensmp.fr/git/Faustine.git/blobdiff_plain/1059e1cc0c2ecfa237406949aa26155b6a5b9154..66f23d4fabf89ad09adbd4dfc15ac6b5b2b7da83:/interpreter/preprocessor/faust-0.9.47mr3/compiler/draw/schema/blockSchema.cpp diff --git a/interpreter/preprocessor/faust-0.9.47mr3/compiler/draw/schema/blockSchema.cpp b/interpreter/preprocessor/faust-0.9.47mr3/compiler/draw/schema/blockSchema.cpp new file mode 100644 index 0000000..ca5ff55 --- /dev/null +++ b/interpreter/preprocessor/faust-0.9.47mr3/compiler/draw/schema/blockSchema.cpp @@ -0,0 +1,302 @@ +/************************************************************************ + ************************************************************************ + FAUST compiler + Copyright (C) 2003-2004 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + ************************************************************************ + ************************************************************************/ + + +#include "blockSchema.h" +#include + +using namespace std; + +static double quantize(int n) +{ + int q = 3; + return dLetter * (q *((n+q-1)/q)); +} + +/** + * Build a simple colored blockSchema with a certain number of + * inputs and outputs, a text to be displayed, and an optional link. + * Computes the size of the box according to the length of the text + * and the maximum number of ports. + */ +schema* makeBlockSchema ( unsigned int inputs, + unsigned int outputs, + const string& text, + const string& color, + const string& link ) +{ + // determine the optimal size of the box + double minimal = 3*dWire; + double w = 2*dHorz + max( minimal, quantize(text.size()) ); + double h = 2*dVert + max( minimal, max(inputs, outputs) * dWire ); + + return new blockSchema(inputs, outputs, w, h, text, color, link); +} + +/** + * Build a simple colored blockSchema with a certain number of + * inputs and outputs, a text to be displayed, and an optional link. + * The length of the text as well as th number of inputs and outputs + * are used to compute the size of the blockSchema + */ +blockSchema::blockSchema ( unsigned int inputs, + unsigned int outputs, + double width, + double height, + const string& text, + const string& color, + const string& link ) + + : schema( inputs, outputs, width, height ), + fText(text), + fColor(color), + fLink(link) +{ + for (unsigned int i=0; iout direction + c.addInput(point(p.x+dx, p.y)); + } +} + +/** + * Draw horizontal line from the blockSchema rectangle to the + * output points + */ +void blockSchema::collectOutputWires(collector& c) +{ + double dx = (orientation() == kLeftRight) ? dHorz : -dHorz; + + for (unsigned int i=0; iout direction + c.addOutput(point(p.x-dx, p.y)); + } +} + +