LMMS
Loading...
Searching...
No Matches
Fl_PADnoteHarmonicProfile.h
Go to the documentation of this file.
1/*
2 ZynAddSubFX - a software synthesizer
3
4 Fl_PADnoteHarmonicProfile.h - Harmonic Expansion View
5 Copyright (C) 2016 Mark McCurry
6
7 This program is free software; you can redistribute it and/or
8 modify it under the terms of the GNU General Public License
9 as published by the Free Software Foundation; either version 2
10 of the License, or (at your option) any later version.
11*/
12
13class PADnoteHarmonicProfile: public Fl_Box, public Fl_Osc_Widget
14{
15 public:
16 PADnoteHarmonicProfile(int x,int y, int w, int h, const char *label=0)
17 :Fl_Box(x,y,w,h,label), smps(new float[w]), realbw(0.0f)
18 {
19 memset(smps, 0, w*sizeof(float));
20 }
21
23 {
24 osc->removeLink(loc, (Fl_Osc_Widget*) this);
25 delete[] smps;
26 }
27
28 void init(void)
29 {
30 Fl_Osc_Pane *og = fetch_osc_pane(this);
31 assert(og);
32
33 loc = og->base + "profile";
34 osc = og->osc;
35 assert(osc);
36
37 osc->createLink(loc, (Fl_Osc_Widget*) this);
38 update();
39 }
40
41 void update(void)
42 {
43 osc->write(loc, "i", w());
44 }
45
46 void OSC_value(unsigned N, void *data, const char *name) override
47 {
48 assert(!strcmp(name, "profile"));
49 assert(N==w()*sizeof(float));
50 memcpy(smps, data, N);
51 redraw();
52 }
53
54 void OSC_value(float x, const char *name) override
55 {
56 assert(!strcmp(name, "profile"));
57 realbw = x;
58 redraw();
59 }
60
61 void draw(void)
62 {
63 int ox=x(),oy=y(),lx=w(),ly=h();
64 const bool active=active_r();
65 if(!visible())
66 return;
67
68 if (damage()!=1){
69 fl_color(fl_color_average(FL_BLACK,
70 FL_BACKGROUND_COLOR, 0.5 ));
71 fl_rectf(ox,oy,lx,ly);
72 }
73
74 //draw the equivalent bandwidth
75 if (active) fl_color(220,220,220);
76 else fl_color(160,165,165);
77 fl_line_style(FL_DASH);
78 int rbw=(int)(realbw*(lx-1.0)/2.0);
79 fl_begin_line();
80 for(int i=lx/2-rbw;i<(lx/2+rbw); ++i)
81 fl_vertex(ox+i,oy);
82 fl_end_line();
83
84 fl_line_style(FL_DASH);
85 if(active)
86 fl_color(200,200,200);
87 else
88 fl_color(160,160,160);
89
90 for (int i=1;i<10;i++){
91 const int kx=(int)(lx/10.0*i);
92 fl_line(ox + kx, oy, ox + kx, oy + ly - 1);
93 }
94 for (int i=1;i<5;i++){
95 const int ky=(int)(ly/5.0*i);
96 fl_line(ox,oy+ly-ky,ox+lx,oy+ly-ky-1);
97 }
98
99
100 fl_color(120,120,120);
101 fl_line_style(FL_DASH);
102 fl_line(ox+lx/2,oy,ox+lx/2,oy+ly);
103
104 //draw the graph
105 fl_line_style(FL_SOLID);
106 if (active)
107 fl_color(180,210,240);
108 else
109 fl_color(150,150,155);
110
111 fl_color(fl_color_add_alpha(fl_color(), 127));
112
113 fl_begin_polygon();
114 fl_vertex(ox, oy + h());
115 for (int i=0; i<lx; ++i){
116 int val=(int) ((ly-2)*smps[i]);
117 fl_vertex(ox+i,oy+ly-1-val);
118 }
119 fl_vertex(ox + w(), oy + h());
120 fl_end_polygon();
121
122
123 fl_line_style(FL_DASH);
124 if (active)
125 fl_color(0,100,220);
126 else
127 fl_color(150,160,170);
128 fl_line(ox+lx/2-rbw,oy,ox+lx/2-rbw,oy+ly-1);
129 fl_line(ox+lx/2+rbw,oy,ox+lx/2+rbw,oy+ly-1);
130
131 fl_line_style(0);
132 }
133 private:
134 float *smps;
135 float realbw;
136};
assert(0)
Definition Fl_Osc_Pane.H:20
std::string base
Definition Fl_Osc_Pane.H:24
class Fl_Osc_Interface * osc
Definition Fl_Osc_Pane.H:23
Fl_Osc_Interface * osc
Definition Fl_Osc_Widget.H:65
Fl_Osc_Widget(void)
Definition Fl_Osc_Widget.cpp:16
std::string loc
Definition Fl_Osc_Widget.H:62
class Fl_Osc_Pane * fetch_osc_pane(Fl_Widget *w)
Definition Fl_Osc_Widget.cpp:103
~PADnoteHarmonicProfile(void)
Definition Fl_PADnoteHarmonicProfile.h:22
void init(void)
Definition Fl_PADnoteHarmonicProfile.h:28
PADnoteHarmonicProfile(int x, int y, int w, int h, const char *label=0)
Definition Fl_PADnoteHarmonicProfile.h:16
float realbw
Definition Fl_PADnoteHarmonicProfile.h:135
void update(void)
Definition Fl_PADnoteHarmonicProfile.h:41
void OSC_value(unsigned N, void *data, const char *name) override
Definition Fl_PADnoteHarmonicProfile.h:46
void OSC_value(float x, const char *name) override
Definition Fl_PADnoteHarmonicProfile.h:54
void draw(void)
Definition Fl_PADnoteHarmonicProfile.h:61
float * smps
Definition Fl_PADnoteHarmonicProfile.h:134
UINT_D64 w
Definition inflate.c:942
int y
Definition inflate.c:1588
int lx[BMAX+1]
Definition inflate.c:1578
register unsigned i
Definition inflate.c:1575
unsigned x[BMAX+1]
Definition inflate.c:1586
static const char * name
Definition pugl.h:1582
int val
Definition jpeglib.h:956
JSAMPIMAGE data
Definition jpeglib.h:945
#define N
Definition nseel-cfunc.c:36
memcpy(hh, h, RAND_HEAD_LEN)
uch h[RAND_HEAD_LEN]
Definition crypt.c:459
typedef int(UZ_EXP MsgFn)()