Tweaking the GUI

The instrument information can be on the main tab
Put the button behind the logo
Embed the ABeeZee font and use it everywhere
Add hover colors to glyph buttons
Replace the "file open" glyph by a folder
This commit is contained in:
Paul Ferrand 2020-09-11 03:23:39 +02:00
parent 279382a7b2
commit 59c64bcb91
8 changed files with 269 additions and 279 deletions

View file

@ -5,11 +5,14 @@ set(EDITOR_RESOURCES
logo.png logo.png
logo_text.png logo_text.png
logo_text@2x.png logo_text@2x.png
logo_full_white.png
icon_white.png icon_white.png
icon_white@2x.png icon_white@2x.png
knob48.png knob48.png
knob48@2x.png knob48@2x.png
Fonts/fluentui-system-regular-20.ttf Fonts/fluentui-system-regular-20.ttf
Fonts/ABeeZee-Regular.ttf
Fonts/ABeeZee-Regular.ttf
PARENT_SCOPE) PARENT_SCOPE)
function(copy_editor_resources SOURCE_DIR DESTINATION_DIR) function(copy_editor_resources SOURCE_DIR DESTINATION_DIR)

View file

@ -1,9 +1,9 @@
# data file for the Fltk User Interface Designer (fluid) # data file for the Fltk User Interface Designer (fluid)
version 1.0305 version 1.0304
header_name {.h} header_name {.h}
code_name {.cxx} code_name {.cxx}
widget_class mainView {open widget_class mainView {open
xywh {410 523 800 475} type Double xywh {572 266 800 475} type Double
class LogicalGroup visible class LogicalGroup visible
} { } {
Fl_Group {} { Fl_Group {} {
@ -12,112 +12,104 @@ widget_class mainView {open
class LogicalGroup class LogicalGroup
} { } {
Fl_Group {} {open Fl_Group {} {open
xywh {5 4 100 101} box ROUNDED_BOX align 0 xywh {5 4 175 101} box ROUNDED_BOX align 0
class RoundedGroup class RoundedGroup
} { } {
Fl_Box {} { Fl_Box {} {
comment {tag=kTagFirstChangePanel+kPanelGeneral} comment {tag=kTagFirstChangePanel+kPanelGeneral}
image {../resources/icon_white.png} xywh {7 6 96 96} image {../resources/logo_full_white.png} xywh {10 11 165 63}
class SfizzMainButton class SfizzMainButton
} }
Fl_Button {} {
comment {tag=kTagFirstChangePanel+kPanelGeneral}
xywh {55 75 25 25} labelsize 24
class HomeButton
}
Fl_Button {} {
comment {tag=kTagFirstChangePanel+kPanelControls}
xywh {80 75 25 25} labelsize 24
class CCButton
}
Fl_Button {} {
comment {tag=kTagFirstChangePanel+kPanelSettings}
xywh {105 75 25 25} labelsize 24
class SettingsButton
}
} }
Fl_Group {} {open Fl_Group {} {open
xywh {110 5 380 100} box ROUNDED_BOX xywh {185 5 380 100} box ROUNDED_BOX
class RoundedGroup class RoundedGroup
} { } {
Fl_Box {} { Fl_Box {} {
label {File:} label {File:}
xywh {125 15 40 25} labelsize 16 xywh {200 13 40 30} labelsize 16
class Label class Label
} }
Fl_Box {} { Fl_Box {} {
label {KS:} label {KS:}
xywh {125 45 40 25} labelsize 16 xywh {200 45 40 30} labelsize 16
class Label class Label
} }
Fl_Box {} { Fl_Box {} {
label {Separator 1} label {Separator 1}
xywh {120 40 355 5} box BORDER_BOX labeltype NO_LABEL xywh {195 41 360 5} box BORDER_BOX labeltype NO_LABEL
class HLine class HLine
} }
Fl_Box {} { Fl_Box {} {
label {Separator 2} label {Separator 2}
xywh {120 70 355 5} box BORDER_BOX labeltype NO_LABEL xywh {195 73 360 5} box BORDER_BOX labeltype NO_LABEL
class HLine class HLine
} }
Fl_Box sfzFileLabel_ { Fl_Box sfzFileLabel_ {
label {DefaultInstrument.sfz} label {DefaultInstrument.sfz}
xywh {190 15 230 25} labelsize 20 xywh {265 12 230 30} labelsize 20
class Label class Label
} }
Fl_Box {} { Fl_Box {} {
label {Key switch} label {Key switch}
xywh {190 45 230 25} labelsize 20 xywh {265 44 230 30} labelsize 20
class Label class Label
} }
Fl_Box {} { Fl_Box {} {
label {Voices:} label {Voices:}
xywh {120 75 60 25} labelsize 12 align 24 xywh {195 76 60 25} labelsize 12 align 24
class Label class Label
} }
Fl_Button {} { Fl_Button {} {
comment {tag=kTagLoadSfzFile} comment {tag=kTagLoadSfzFile}
xywh {425 15 25 25} labelsize 24 xywh {500 14 25 25} labelsize 24
class LoadFileButton class LoadFileButton
} }
Fl_Button {} { Fl_Button {} {
comment {tag=kTagEditSfzFile} comment {tag=kTagEditSfzFile}
xywh {450 15 25 25} labelsize 24 xywh {525 14 25 25} labelsize 24
class EditFileButton class EditFileButton
} }
Fl_Box infoVoicesLabel_ { Fl_Box infoVoicesLabel_ {
xywh {185 75 50 25} labelsize 12 align 16 xywh {260 76 50 25} labelsize 12 align 16
class Label class Label
} }
Fl_Box {} { Fl_Box {} {
label {Max:} label {Max:}
xywh {240 75 60 25} labelsize 12 align 24 xywh {315 76 60 25} labelsize 12 align 24
class Label class Label
} }
Fl_Box numVoicesLabel_ { Fl_Box numVoicesLabel_ {
xywh {305 75 50 25} labelsize 12 align 16 xywh {380 76 50 25} labelsize 12 align 16
class Label class Label
} }
Fl_Box {} { Fl_Box {} {
label {Memory:} label {Memory:}
xywh {360 75 60 25} labelsize 12 align 24 xywh {435 76 60 25} labelsize 12 align 24
class Label class Label
} }
Fl_Box memoryLabel_ { Fl_Box memoryLabel_ {
xywh {425 75 50 25} labelsize 12 align 16 xywh {500 76 50 25} labelsize 12 align 16
class Label class Label
} }
} }
Fl_Group {} {open Fl_Group {} {open
xywh {495 5 100 100} box ROUNDED_BOX xywh {570 5 225 100} box ROUNDED_BOX
class RoundedGroup
} {
Fl_Light_Button {} {
label SETUP
comment {tag=kTagFirstChangePanel+kPanelSettings}
xywh {510 42 70 25}
class LightButton
}
Fl_Light_Button {} {
label CC
comment {tag=kTagFirstChangePanel+kPanelControls}
xywh {510 15 70 25}
class LightButton
}
Fl_Light_Button {} {
label INFO
comment {tag=kTagFirstChangePanel+kPanelInfo}
xywh {510 69 70 25}
class LightButton
}
}
Fl_Group {} {open
xywh {600 5 195 100} box ROUNDED_BOX
class RoundedGroup class RoundedGroup
} { } {
Fl_Dial {} { Fl_Dial {} {
@ -126,7 +118,7 @@ widget_class mainView {open
} }
Fl_Box {} { Fl_Box {} {
label Center label Center
xywh {610 70 60 25} labelsize 12 hide xywh {610 70 60 5} labelsize 12 hide
class ValueLabel class ValueLabel
} }
Fl_Dial volumeSlider_ { Fl_Dial volumeSlider_ {
@ -136,83 +128,74 @@ widget_class mainView {open
} }
Fl_Box volumeLabel_ { Fl_Box volumeLabel_ {
label {0.0 dB} label {0.0 dB}
xywh {675 70 60 25} labelsize 12 xywh {675 70 60 22} labelsize 12
class ValueLabel class ValueLabel
} }
Fl_Box {} { Fl_Box {} {
xywh {745 20 35 70} box BORDER_BOX xywh {745 20 35 55} box BORDER_BOX
class VMeter class VMeter
} }
} }
} }
Fl_Group {subPanels_[kPanelGeneral]} { Fl_Group {subPanels_[kPanelGeneral]} {open selected
xywh {5 110 790 285} hide xywh {5 110 791 285}
class LogicalGroup class LogicalGroup
} { } {
Fl_Group {} {open Fl_Group {} {open
xywh {5 110 120 285} box ROUNDED_BOX xywh {5 110 175 280} box ROUNDED_BOX
class RoundedGroup class RoundedGroup
} { } {
Fl_Box {} { Fl_Box {} {
label {Curves:} label {Curves:}
xywh {15 120 60 25} labelsize 12 align 20 xywh {20 120 60 25} align 20
class Label class Label
} }
Fl_Box {} { Fl_Box {} {
label {Masters:} label {Masters:}
xywh {15 145 60 25} labelsize 12 align 20 xywh {20 145 60 25} align 20
class Label class Label
} }
Fl_Box {} { Fl_Box {} {
label {Groups:} label {Groups:}
xywh {15 170 60 25} labelsize 12 align 20 xywh {20 170 60 25} align 20
class Label class Label
} }
Fl_Box {} { Fl_Box {} {
label {Regions:} label {Regions:}
xywh {15 195 60 25} labelsize 12 align 20 xywh {20 195 60 25} align 20
class Label class Label
} }
Fl_Box {} { Fl_Box {} {
label {Samples:} label {Samples:}
xywh {15 220 60 25} labelsize 12 align 20 xywh {20 220 60 25} align 20
class Label class Label
} }
Fl_Box infoCurvesLabel_ { Fl_Box infoCurvesLabel_ {
label 0 label 0
xywh {75 120 40 25} labelsize 12 align 16 xywh {120 120 40 25} align 16
class Label class Label
} }
Fl_Box infoMastersLabel_ { Fl_Box infoMastersLabel_ {
label 0 label 0
xywh {75 145 40 25} labelsize 12 align 16 xywh {120 145 40 25} align 16
class Label class Label
} }
Fl_Box infoGroupsLabel_ { Fl_Box infoGroupsLabel_ {
label 0 label 0
xywh {75 170 40 25} labelsize 12 align 16 xywh {120 170 40 25} align 16
class Label class Label
} }
Fl_Box infoRegionsLabel_ { Fl_Box infoRegionsLabel_ {
label 0 label 0
xywh {75 195 40 25} labelsize 12 align 16 xywh {120 195 40 25} align 16
class Label class Label
} }
Fl_Box infoSamplesLabel_ { Fl_Box infoSamplesLabel_ {
label 0 label 0
xywh {75 220 40 25} labelsize 12 align 16 xywh {120 220 40 25} align 16
class Label class Label
} }
} }
Fl_Group {} {open
xywh {130 110 665 280}
class LogicalGroup
} {
Fl_Box {} {
image {../resources/logo_text.png} xywh {260 125 400 250}
class SfizzLargePicture
}
}
} }
Fl_Group {subPanels_[kPanelControls]} { Fl_Group {subPanels_[kPanelControls]} {
xywh {5 110 790 285} hide xywh {5 110 790 285} hide
@ -229,114 +212,99 @@ widget_class mainView {open
} }
} }
} }
Fl_Group {subPanels_[kPanelSettings]} {open Fl_Group {subPanels_[kPanelSettings]} {
xywh {5 110 790 285} xywh {5 109 790 286} hide
class LogicalGroup class LogicalGroup
} { } {
Fl_Group {} { Fl_Group {} {
label Engine open selected label Engine open
xywh {260 125 280 110} box ROUNDED_BOX labelsize 12 align 17 xywh {260 110 280 110} box ROUNDED_BOX labelsize 12 align 17
class TitleGroup class TitleGroup
} { } {
Fl_Spinner numVoicesSlider_ { Fl_Spinner numVoicesSlider_ {
comment {tag=kTagSetNumVoices} comment {tag=kTagSetNumVoices}
xywh {285 185 60 25} labelsize 12 textsize 12 xywh {285 170 60 25} labelsize 12 textsize 12
class ValueMenu class ValueMenu
} }
Fl_Box {} { Fl_Box {} {
label Polyphony label Polyphony
xywh {275 145 80 25} labelsize 12 xywh {275 130 80 25} labelsize 12
class ValueLabel class ValueLabel
} }
Fl_Spinner oversamplingSlider_ { Fl_Spinner oversamplingSlider_ {
comment {tag=kTagSetOversampling} comment {tag=kTagSetOversampling}
xywh {370 185 60 25} labelsize 12 textsize 12 xywh {370 170 60 25} labelsize 12 textsize 12
class ValueMenu class ValueMenu
} }
Fl_Box {} { Fl_Box {} {
label Oversampling label Oversampling
xywh {360 145 80 25} labelsize 12 xywh {360 130 80 25} labelsize 12
class ValueLabel class ValueLabel
} }
Fl_Box {} { Fl_Box {} {
label {Preload size} label {Preload size}
xywh {445 145 80 25} labelsize 12 xywh {445 130 80 25} labelsize 12
class ValueLabel class ValueLabel
} }
Fl_Spinner preloadSizeSlider_ { Fl_Spinner preloadSizeSlider_ {
comment {tag=kTagSetPreloadSize} comment {tag=kTagSetPreloadSize}
xywh {455 185 60 25} labelsize 12 textsize 12 xywh {455 170 60 25} labelsize 12 textsize 12
class ValueMenu class ValueMenu
} }
} }
Fl_Group {} { Fl_Group {} {
label Tuning open label Tuning open
xywh {205 260 390 120} box ROUNDED_BOX labelsize 12 align 17 xywh {205 268 390 120} box ROUNDED_BOX labelsize 12 align 17
class TitleGroup class TitleGroup
} { } {
Fl_Box {} { Fl_Box {} {
label {Root key} label {Root key}
xywh {330 280 80 25} labelsize 12 xywh {330 288 80 25} labelsize 12
class ValueLabel class ValueLabel
} }
Fl_Spinner tuningFrequencySlider_ { Fl_Spinner tuningFrequencySlider_ {
comment {tag=kTagSetTuningFrequency} comment {tag=kTagSetTuningFrequency}
xywh {425 320 60 25} labelsize 12 textsize 12 xywh {425 328 60 25} labelsize 12 textsize 12
class ValueMenu class ValueMenu
} }
Fl_Box {} { Fl_Box {} {
label Frequency label Frequency
xywh {415 280 80 25} labelsize 12 xywh {415 288 80 25} labelsize 12
class ValueLabel class ValueLabel
} }
Fl_Dial stretchedTuningSlider_ { Fl_Dial stretchedTuningSlider_ {
comment {tag=kTagSetStretchedTuning} comment {tag=kTagSetStretchedTuning}
xywh {515 305 48 48} value 0.5 xywh {515 313 48 48} value 0.5
class Knob48 class Knob48
} }
Fl_Box {} { Fl_Box {} {
label Stretch label Stretch
xywh {500 280 80 25} labelsize 12 xywh {500 288 80 25} labelsize 12
class ValueLabel class ValueLabel
} }
Fl_Box {} { Fl_Box {} {
label {Scala file} label {Scala file}
xywh {225 280 100 25} labelsize 12 xywh {225 288 100 25} labelsize 12
class ValueLabel class ValueLabel
} }
Fl_Button scalaFileButton_ { Fl_Button scalaFileButton_ {
label DefaultScale label DefaultScale
comment {tag=kTagLoadScalaFile} comment {tag=kTagLoadScalaFile}
xywh {225 320 100 25} labelsize 12 xywh {225 328 100 25} labelsize 12
class ValueButton class ValueButton
} }
Fl_Spinner scalaRootKeySlider_ { Fl_Spinner scalaRootKeySlider_ {
comment {tag=kTagSetScalaRootKey} comment {tag=kTagSetScalaRootKey}
xywh {340 320 35 25} labelsize 12 textsize 12 xywh {340 328 35 25} labelsize 12 textsize 12
class ValueMenu class ValueMenu
} }
Fl_Spinner scalaRootOctaveSlider_ { Fl_Spinner scalaRootOctaveSlider_ {
comment {tag=kTagSetScalaRootKey} comment {tag=kTagSetScalaRootKey}
xywh {375 320 30 25} labelsize 12 textsize 12 xywh {375 328 30 25} labelsize 12 textsize 12
class ValueMenu class ValueMenu
} }
} }
} }
Fl_Group {subPanels_[kPanelInfo]} {
xywh {5 110 790 285} hide
class LogicalGroup
} {
Fl_Group {} {open
xywh {5 110 790 285} box ROUNDED_BOX
class RoundedGroup
} {
Fl_Box {} {
label {Informative text goes here}
xywh {5 110 790 285} labelsize 40
class Label
}
}
}
Fl_Box {} { Fl_Box {} {
xywh {5 400 790 70} xywh {5 400 790 70}
class Piano class Piano

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

View file

@ -35,7 +35,6 @@ struct Editor::Impl : EditorController::Receiver, IControlListener {
kPanelGeneral, kPanelGeneral,
kPanelControls, kPanelControls,
kPanelSettings, kPanelSettings,
kPanelInfo,
kNumPanels, kNumPanels,
}; };
@ -314,12 +313,38 @@ void Editor::Impl::uiReceiveValue(EditId id, const EditValue& v)
break; break;
} }
} }
class CHoverButton: public CTextButton {
public:
CHoverButton(const CRect& size, IControlListener* listener = nullptr, int32_t tag = -1, UTF8StringPtr title = nullptr)
: CTextButton(size, listener, tag, title) {}
void setHoverColor(const CColor& color)
{
hoverColor = color;
}
CMouseEventResult onMouseEntered (CPoint& where, const CButtonState& buttons) override
{
backupColor = getTextColor();
setTextColor(hoverColor);
return CTextButton::onMouseEntered(where, buttons);
}
CMouseEventResult onMouseExited (CPoint& where, const CButtonState& buttons) override
{
setTextColor(backupColor);
return CTextButton::onMouseExited(where, buttons);
}
private:
CColor hoverColor;
CColor backupColor;
};
void Editor::Impl::createFrameContents() void Editor::Impl::createFrameContents()
{ {
CViewContainer* mainView; CViewContainer* mainView;
SharedPointer<CBitmap> iconWhite = owned(new CBitmap("icon_white.png")); SharedPointer<CBitmap> iconWhite = owned(new CBitmap("logo_full_white.png"));
SharedPointer<CBitmap> knob48 = owned(new CBitmap("knob48.png")); SharedPointer<CBitmap> knob48 = owned(new CBitmap("knob48.png"));
SharedPointer<CBitmap> logoText = owned(new CBitmap("logo_text.png")); SharedPointer<CBitmap> logoText = owned(new CBitmap("logo_text.png"));
@ -332,6 +357,7 @@ void Editor::Impl::createFrameContents()
CColor titleBoxText; CColor titleBoxText;
CColor titleBoxBackground; CColor titleBoxBackground;
CColor icon; CColor icon;
CColor iconHighlight;
CColor valueText; CColor valueText;
CColor valueBackground; CColor valueBackground;
}; };
@ -342,6 +368,7 @@ void Editor::Impl::createFrameContents()
lightTheme.titleBoxText = { 0xff, 0xff, 0xff }; lightTheme.titleBoxText = { 0xff, 0xff, 0xff };
lightTheme.titleBoxBackground = { 0x2e, 0x34, 0x36 }; lightTheme.titleBoxBackground = { 0x2e, 0x34, 0x36 };
lightTheme.icon = lightTheme.text; lightTheme.icon = lightTheme.text;
lightTheme.iconHighlight = { 0xa8, 0x62, 0x34 };
lightTheme.valueText = { 0xff, 0xff, 0xff }; lightTheme.valueText = { 0xff, 0xff, 0xff };
lightTheme.valueBackground = { 0x2e, 0x34, 0x36 }; lightTheme.valueBackground = { 0x2e, 0x34, 0x36 };
Theme darkTheme; Theme darkTheme;
@ -350,6 +377,7 @@ void Editor::Impl::createFrameContents()
darkTheme.titleBoxText = { 0x00, 0x00, 0x00 }; darkTheme.titleBoxText = { 0x00, 0x00, 0x00 };
darkTheme.titleBoxBackground = { 0xba, 0xbd, 0xb6 }; darkTheme.titleBoxBackground = { 0xba, 0xbd, 0xb6 };
darkTheme.icon = darkTheme.text; darkTheme.icon = darkTheme.text;
darkTheme.iconHighlight = { 0xa8, 0x62, 0x34 };
darkTheme.valueText = { 0x2e, 0x34, 0x36 }; darkTheme.valueText = { 0x2e, 0x34, 0x36 };
darkTheme.valueBackground = { 0xff, 0xff, 0xff }; darkTheme.valueBackground = { 0xff, 0xff, 0xff };
Theme& defaultTheme = lightTheme; Theme& defaultTheme = lightTheme;
@ -363,18 +391,19 @@ void Editor::Impl::createFrameContents()
typedef CKickButton SfizzMainButton; typedef CKickButton SfizzMainButton;
typedef CTextLabel Label; typedef CTextLabel Label;
typedef CViewContainer HLine; typedef CViewContainer HLine;
typedef CTextButton LightButton;
typedef CAnimKnob Knob48; typedef CAnimKnob Knob48;
typedef CTextLabel ValueLabel; typedef CTextLabel ValueLabel;
typedef CViewContainer VMeter; typedef CViewContainer VMeter;
typedef CView SfizzLargePicture;
typedef SValueMenu ValueMenu; typedef SValueMenu ValueMenu;
#if 0 #if 0
typedef CTextButton Button; typedef CTextButton Button;
#endif #endif
typedef CTextButton ValueButton; typedef CTextButton ValueButton;
typedef CTextButton LoadFileButton; typedef CHoverButton LoadFileButton;
typedef CTextButton EditFileButton; typedef CHoverButton CCButton;
typedef CHoverButton HomeButton;
typedef CHoverButton SettingsButton;
typedef CHoverButton EditFileButton;
typedef SPiano Piano; typedef SPiano Piano;
auto createLogicalGroup = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) { auto createLogicalGroup = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
@ -394,7 +423,7 @@ void Editor::Impl::createFrameContents()
box->setBackgroundColor(theme->boxBackground); box->setBackgroundColor(theme->boxBackground);
box->setTitleFontColor(theme->titleBoxText); box->setTitleFontColor(theme->titleBoxText);
box->setTitleBackgroundColor(theme->titleBoxBackground); box->setTitleBackgroundColor(theme->titleBoxBackground);
auto font = owned(new CFontDesc(*box->getTitleFont())); auto font = owned(new CFontDesc("ABeeZee", fontsize));
font->setSize(fontsize); font->setSize(fontsize);
box->setTitleFont(font); box->setTitleFont(font);
return box; return box;
@ -408,7 +437,7 @@ void Editor::Impl::createFrameContents()
lbl->setBackColor(CColor(0x00, 0x00, 0x00, 0x00)); lbl->setBackColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setFontColor(theme->text); lbl->setFontColor(theme->text);
lbl->setHoriAlign(align); lbl->setHoriAlign(align);
auto font = owned(new CFontDesc(*lbl->getFont())); auto font = owned(new CFontDesc("ABeeZee", fontsize));
font->setSize(fontsize); font->setSize(fontsize);
lbl->setFont(font); lbl->setFont(font);
return lbl; return lbl;
@ -420,11 +449,6 @@ void Editor::Impl::createFrameContents()
hline->setBackgroundColor(CColor(0xff, 0xff, 0xff, 0xff)); hline->setBackgroundColor(CColor(0xff, 0xff, 0xff, 0xff));
return hline; return hline;
}; };
auto createLightButton = [this](const CRect& bounds, int tag, const char* label, CHoriTxtAlign align, int) {
CTextButton* button = new CTextButton(bounds, this, tag, label);
button->setTextAlignment(align);
return button;
};
auto createKnob48 = [this, &knob48](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int) { auto createKnob48 = [this, &knob48](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int) {
return new CAnimKnob(bounds, this, tag, 31, 48, knob48); return new CAnimKnob(bounds, this, tag, 31, 48, knob48);
}; };
@ -434,7 +458,7 @@ void Editor::Impl::createFrameContents()
lbl->setBackColor(CColor(0x00, 0x00, 0x00, 0x00)); lbl->setBackColor(CColor(0x00, 0x00, 0x00, 0x00));
lbl->setFontColor(theme->text); lbl->setFontColor(theme->text);
lbl->setHoriAlign(align); lbl->setHoriAlign(align);
auto font = owned(new CFontDesc(*lbl->getFont())); auto font = owned(new CFontDesc("ABeeZee", fontsize));
font->setSize(fontsize); font->setSize(fontsize);
lbl->setFont(font); lbl->setFont(font);
return lbl; return lbl;
@ -445,11 +469,6 @@ void Editor::Impl::createFrameContents()
container->setBackgroundColor(CColor(0x00, 0x00, 0x00, 0x00)); container->setBackgroundColor(CColor(0x00, 0x00, 0x00, 0x00));
return container; return container;
}; };
auto createSfizzLargePicture = [&logoText](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
CView* picture = new CView(bounds);
picture->setBackground(logoText);
return picture;
};
#if 0 #if 0
auto createButton = [this](const CRect& bounds, int tag, const char* label, CHoriTxtAlign align, int fontsize) { auto createButton = [this](const CRect& bounds, int tag, const char* label, CHoriTxtAlign align, int fontsize) {
CTextButton* button = new CTextButton(bounds, this, tag, label); CTextButton* button = new CTextButton(bounds, this, tag, label);
@ -462,7 +481,7 @@ void Editor::Impl::createFrameContents()
#endif #endif
auto createValueButton = [this, &theme](const CRect& bounds, int tag, const char* label, CHoriTxtAlign align, int fontsize) { auto createValueButton = [this, &theme](const CRect& bounds, int tag, const char* label, CHoriTxtAlign align, int fontsize) {
CTextButton* button = new CTextButton(bounds, this, tag, label); CTextButton* button = new CTextButton(bounds, this, tag, label);
auto font = owned(new CFontDesc(*button->getFont())); auto font = owned(new CFontDesc("ABeeZee", fontsize));
font->setSize(fontsize); font->setSize(fontsize);
button->setFont(font); button->setFont(font);
button->setTextAlignment(align); button->setTextAlignment(align);
@ -476,7 +495,7 @@ void Editor::Impl::createFrameContents()
auto createValueMenu = [this, &theme](const CRect& bounds, int tag, const char*, CHoriTxtAlign align, int fontsize) { auto createValueMenu = [this, &theme](const CRect& bounds, int tag, const char*, CHoriTxtAlign align, int fontsize) {
SValueMenu* vm = new SValueMenu(bounds, this, tag); SValueMenu* vm = new SValueMenu(bounds, this, tag);
vm->setHoriAlign(align); vm->setHoriAlign(align);
auto font = owned(new CFontDesc(*vm->getFont())); auto font = owned(new CFontDesc("ABeeZee", fontsize));
font->setSize(fontsize); font->setSize(fontsize);
vm->setFont(font); vm->setFont(font);
vm->setFontColor(theme->valueText); vm->setFontColor(theme->valueText);
@ -487,19 +506,30 @@ void Editor::Impl::createFrameContents()
return vm; return vm;
}; };
auto createGlyphButton = [this, &theme](UTF8StringPtr glyph, const CRect& bounds, int tag, int fontsize) { auto createGlyphButton = [this, &theme](UTF8StringPtr glyph, const CRect& bounds, int tag, int fontsize) {
CTextButton* btn = new CTextButton(bounds, this, tag, glyph); CHoverButton* btn = new CHoverButton(bounds, this, tag, glyph);
btn->setFont(new CFontDesc("Fluent System Regular W20", fontsize)); btn->setFont(new CFontDesc("Fluent System Regular W20", fontsize));
btn->setTextColor(theme->icon); btn->setTextColor(theme->icon);
btn->setHoverColor(theme->iconHighlight);
btn->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00)); btn->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00));
btn->setGradient(nullptr); btn->setGradient(nullptr);
btn->setGradientHighlighted(nullptr); btn->setGradientHighlighted(nullptr);
return btn; return btn;
}; };
auto createLoadFileButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) { auto createHomeButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue142", bounds, tag, fontsize); return createGlyphButton(u8"\ue1d6", bounds, tag, fontsize);
};
auto createCCButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
// return createGlyphButton(u8"\ue240", bounds, tag, fontsize);
return createGlyphButton(u8"\ue140", bounds, tag, fontsize);
};
auto createSettingsButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue2e4", bounds, tag, fontsize);
}; };
auto createEditFileButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) { auto createEditFileButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue148", bounds, tag, fontsize); return createGlyphButton(u8"\ue142", bounds, tag, fontsize);
};
auto createLoadFileButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) {
return createGlyphButton(u8"\ue1a3", bounds, tag, fontsize);
}; };
auto createPiano = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) { auto createPiano = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) {
SPiano* piano = new SPiano(bounds); SPiano* piano = new SPiano(bounds);

View file

@ -408,6 +408,9 @@ CMouseEventResult SValueMenu::onMouseDown(CPoint& where, const CButtonState& but
menu->addEntry(item); menu->addEntry(item);
item->remember(); // above call does not increment refcount item->remember(); // above call does not increment refcount
} }
menu->setFont(self->getFont());
menu->setFontColor(self->getFontColor());
menu->setBackColor(self->getBackColor());
menu->popup(frame, frameWhere + CPoint(0.0, 1.0)); menu->popup(frame, frameWhere + CPoint(0.0, 1.0));
} }
}); });

View file

@ -4,164 +4,150 @@ mainView = view__0;
enterTheme(darkTheme); enterTheme(darkTheme);
LogicalGroup* const view__1 = createLogicalGroup(CRect(0, 0, 800, 110), -1, "", kCenterText, 14); LogicalGroup* const view__1 = createLogicalGroup(CRect(0, 0, 800, 110), -1, "", kCenterText, 14);
view__0->addView(view__1); view__0->addView(view__1);
RoundedGroup* const view__2 = createRoundedGroup(CRect(5, 4, 105, 105), -1, "", kCenterText, 14); RoundedGroup* const view__2 = createRoundedGroup(CRect(5, 4, 180, 105), -1, "", kCenterText, 14);
view__1->addView(view__2); view__1->addView(view__2);
SfizzMainButton* const view__3 = createSfizzMainButton(CRect(2, 2, 98, 98), kTagFirstChangePanel+kPanelGeneral, "", kCenterText, 14); SfizzMainButton* const view__3 = createSfizzMainButton(CRect(5, 7, 170, 70), kTagFirstChangePanel+kPanelGeneral, "", kCenterText, 14);
view__2->addView(view__3); view__2->addView(view__3);
RoundedGroup* const view__4 = createRoundedGroup(CRect(110, 5, 490, 105), -1, "", kCenterText, 14); HomeButton* const view__4 = createHomeButton(CRect(50, 71, 75, 96), kTagFirstChangePanel+kPanelGeneral, "", kCenterText, 24);
view__1->addView(view__4); view__2->addView(view__4);
Label* const view__5 = createLabel(CRect(15, 10, 55, 35), -1, "File:", kCenterText, 16); CCButton* const view__5 = createCCButton(CRect(75, 71, 100, 96), kTagFirstChangePanel+kPanelControls, "", kCenterText, 24);
view__4->addView(view__5); view__2->addView(view__5);
Label* const view__6 = createLabel(CRect(15, 40, 55, 65), -1, "KS:", kCenterText, 16); SettingsButton* const view__6 = createSettingsButton(CRect(100, 71, 125, 96), kTagFirstChangePanel+kPanelSettings, "", kCenterText, 24);
view__4->addView(view__6); view__2->addView(view__6);
HLine* const view__7 = createHLine(CRect(10, 35, 365, 40), -1, "", kCenterText, 14); RoundedGroup* const view__7 = createRoundedGroup(CRect(185, 5, 565, 105), -1, "", kCenterText, 14);
view__4->addView(view__7); view__1->addView(view__7);
HLine* const view__8 = createHLine(CRect(10, 65, 365, 70), -1, "", kCenterText, 14); Label* const view__8 = createLabel(CRect(15, 8, 55, 38), -1, "File:", kCenterText, 16);
view__4->addView(view__8); view__7->addView(view__8);
Label* const view__9 = createLabel(CRect(80, 10, 310, 35), -1, "DefaultInstrument.sfz", kCenterText, 20); Label* const view__9 = createLabel(CRect(15, 40, 55, 70), -1, "KS:", kCenterText, 16);
sfzFileLabel_ = view__9; view__7->addView(view__9);
view__4->addView(view__9); HLine* const view__10 = createHLine(CRect(10, 36, 370, 41), -1, "", kCenterText, 14);
Label* const view__10 = createLabel(CRect(80, 40, 310, 65), -1, "Key switch", kCenterText, 20); view__7->addView(view__10);
view__4->addView(view__10); HLine* const view__11 = createHLine(CRect(10, 68, 370, 73), -1, "", kCenterText, 14);
Label* const view__11 = createLabel(CRect(10, 70, 70, 95), -1, "Voices:", kRightText, 12); view__7->addView(view__11);
view__4->addView(view__11); Label* const view__12 = createLabel(CRect(80, 7, 310, 37), -1, "DefaultInstrument.sfz", kCenterText, 20);
LoadFileButton* const view__12 = createLoadFileButton(CRect(315, 10, 340, 35), kTagLoadSfzFile, "", kCenterText, 24); sfzFileLabel_ = view__12;
view__4->addView(view__12); view__7->addView(view__12);
EditFileButton* const view__13 = createEditFileButton(CRect(340, 10, 365, 35), kTagEditSfzFile, "", kCenterText, 24); Label* const view__13 = createLabel(CRect(80, 39, 310, 69), -1, "Key switch", kCenterText, 20);
view__4->addView(view__13); view__7->addView(view__13);
Label* const view__14 = createLabel(CRect(75, 70, 125, 95), -1, "", kCenterText, 12); Label* const view__14 = createLabel(CRect(10, 71, 70, 96), -1, "Voices:", kRightText, 12);
infoVoicesLabel_ = view__14; view__7->addView(view__14);
view__4->addView(view__14); LoadFileButton* const view__15 = createLoadFileButton(CRect(315, 9, 340, 34), kTagLoadSfzFile, "", kCenterText, 24);
Label* const view__15 = createLabel(CRect(130, 70, 190, 95), -1, "Max:", kRightText, 12); view__7->addView(view__15);
view__4->addView(view__15); EditFileButton* const view__16 = createEditFileButton(CRect(340, 9, 365, 34), kTagEditSfzFile, "", kCenterText, 24);
Label* const view__16 = createLabel(CRect(195, 70, 245, 95), -1, "", kCenterText, 12); view__7->addView(view__16);
numVoicesLabel_ = view__16; Label* const view__17 = createLabel(CRect(75, 71, 125, 96), -1, "", kCenterText, 12);
view__4->addView(view__16); infoVoicesLabel_ = view__17;
Label* const view__17 = createLabel(CRect(250, 70, 310, 95), -1, "Memory:", kRightText, 12); view__7->addView(view__17);
view__4->addView(view__17); Label* const view__18 = createLabel(CRect(130, 71, 190, 96), -1, "Max:", kRightText, 12);
Label* const view__18 = createLabel(CRect(315, 70, 365, 95), -1, "", kCenterText, 12); view__7->addView(view__18);
memoryLabel_ = view__18; Label* const view__19 = createLabel(CRect(195, 71, 245, 96), -1, "", kCenterText, 12);
view__4->addView(view__18); numVoicesLabel_ = view__19;
RoundedGroup* const view__19 = createRoundedGroup(CRect(495, 5, 595, 105), -1, "", kCenterText, 14); view__7->addView(view__19);
view__1->addView(view__19); Label* const view__20 = createLabel(CRect(250, 71, 310, 96), -1, "Memory:", kRightText, 12);
LightButton* const view__20 = createLightButton(CRect(15, 37, 85, 62), kTagFirstChangePanel+kPanelSettings, "SETUP", kCenterText, 14); view__7->addView(view__20);
view__19->addView(view__20); Label* const view__21 = createLabel(CRect(315, 71, 365, 96), -1, "", kCenterText, 12);
LightButton* const view__21 = createLightButton(CRect(15, 10, 85, 35), kTagFirstChangePanel+kPanelControls, "CC", kCenterText, 14); memoryLabel_ = view__21;
view__19->addView(view__21); view__7->addView(view__21);
LightButton* const view__22 = createLightButton(CRect(15, 64, 85, 89), kTagFirstChangePanel+kPanelInfo, "INFO", kCenterText, 14); RoundedGroup* const view__22 = createRoundedGroup(CRect(570, 5, 795, 105), -1, "", kCenterText, 14);
view__19->addView(view__22); view__1->addView(view__22);
RoundedGroup* const view__23 = createRoundedGroup(CRect(600, 5, 795, 105), -1, "", kCenterText, 14); Knob48* const view__23 = createKnob48(CRect(45, 15, 93, 63), -1, "", kCenterText, 14);
view__1->addView(view__23); view__22->addView(view__23);
Knob48* const view__24 = createKnob48(CRect(15, 15, 63, 63), -1, "", kCenterText, 14); view__23->setVisible(false);
view__23->addView(view__24); ValueLabel* const view__24 = createValueLabel(CRect(40, 65, 100, 70), -1, "Center", kCenterText, 12);
view__22->addView(view__24);
view__24->setVisible(false); view__24->setVisible(false);
ValueLabel* const view__25 = createValueLabel(CRect(10, 65, 70, 90), -1, "Center", kCenterText, 12); Knob48* const view__25 = createKnob48(CRect(110, 15, 158, 63), kTagSetVolume, "", kCenterText, 14);
view__23->addView(view__25); volumeSlider_ = view__25;
view__25->setVisible(false); view__22->addView(view__25);
Knob48* const view__26 = createKnob48(CRect(80, 15, 128, 63), kTagSetVolume, "", kCenterText, 14); ValueLabel* const view__26 = createValueLabel(CRect(105, 65, 165, 87), -1, "0.0 dB", kCenterText, 12);
volumeSlider_ = view__26; volumeLabel_ = view__26;
view__23->addView(view__26); view__22->addView(view__26);
ValueLabel* const view__27 = createValueLabel(CRect(75, 65, 135, 90), -1, "0.0 dB", kCenterText, 12); VMeter* const view__27 = createVMeter(CRect(175, 15, 210, 70), -1, "", kCenterText, 14);
volumeLabel_ = view__27; view__22->addView(view__27);
view__23->addView(view__27);
VMeter* const view__28 = createVMeter(CRect(145, 15, 180, 85), -1, "", kCenterText, 14);
view__23->addView(view__28);
enterTheme(defaultTheme); enterTheme(defaultTheme);
LogicalGroup* const view__29 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14); LogicalGroup* const view__28 = createLogicalGroup(CRect(5, 110, 796, 395), -1, "", kCenterText, 14);
subPanels_[kPanelGeneral] = view__29; subPanels_[kPanelGeneral] = view__28;
view__0->addView(view__29); view__0->addView(view__28);
view__29->setVisible(false); RoundedGroup* const view__29 = createRoundedGroup(CRect(0, 0, 175, 280), -1, "", kCenterText, 14);
RoundedGroup* const view__30 = createRoundedGroup(CRect(0, 0, 120, 285), -1, "", kCenterText, 14); view__28->addView(view__29);
Label* const view__30 = createLabel(CRect(15, 10, 75, 35), -1, "Curves:", kLeftText, 14);
view__29->addView(view__30); view__29->addView(view__30);
Label* const view__31 = createLabel(CRect(10, 10, 70, 35), -1, "Curves:", kLeftText, 12); Label* const view__31 = createLabel(CRect(15, 35, 75, 60), -1, "Masters:", kLeftText, 14);
view__30->addView(view__31); view__29->addView(view__31);
Label* const view__32 = createLabel(CRect(10, 35, 70, 60), -1, "Masters:", kLeftText, 12); Label* const view__32 = createLabel(CRect(15, 60, 75, 85), -1, "Groups:", kLeftText, 14);
view__30->addView(view__32); view__29->addView(view__32);
Label* const view__33 = createLabel(CRect(10, 60, 70, 85), -1, "Groups:", kLeftText, 12); Label* const view__33 = createLabel(CRect(15, 85, 75, 110), -1, "Regions:", kLeftText, 14);
view__30->addView(view__33); view__29->addView(view__33);
Label* const view__34 = createLabel(CRect(10, 85, 70, 110), -1, "Regions:", kLeftText, 12); Label* const view__34 = createLabel(CRect(15, 110, 75, 135), -1, "Samples:", kLeftText, 14);
view__30->addView(view__34); view__29->addView(view__34);
Label* const view__35 = createLabel(CRect(10, 110, 70, 135), -1, "Samples:", kLeftText, 12); Label* const view__35 = createLabel(CRect(115, 10, 155, 35), -1, "0", kCenterText, 14);
view__30->addView(view__35); infoCurvesLabel_ = view__35;
Label* const view__36 = createLabel(CRect(70, 10, 110, 35), -1, "0", kCenterText, 12); view__29->addView(view__35);
infoCurvesLabel_ = view__36; Label* const view__36 = createLabel(CRect(115, 35, 155, 60), -1, "0", kCenterText, 14);
view__30->addView(view__36); infoMastersLabel_ = view__36;
Label* const view__37 = createLabel(CRect(70, 35, 110, 60), -1, "0", kCenterText, 12); view__29->addView(view__36);
infoMastersLabel_ = view__37; Label* const view__37 = createLabel(CRect(115, 60, 155, 85), -1, "0", kCenterText, 14);
view__30->addView(view__37); infoGroupsLabel_ = view__37;
Label* const view__38 = createLabel(CRect(70, 60, 110, 85), -1, "0", kCenterText, 12); view__29->addView(view__37);
infoGroupsLabel_ = view__38; Label* const view__38 = createLabel(CRect(115, 85, 155, 110), -1, "0", kCenterText, 14);
view__30->addView(view__38); infoRegionsLabel_ = view__38;
Label* const view__39 = createLabel(CRect(70, 85, 110, 110), -1, "0", kCenterText, 12); view__29->addView(view__38);
infoRegionsLabel_ = view__39; Label* const view__39 = createLabel(CRect(115, 110, 155, 135), -1, "0", kCenterText, 14);
view__30->addView(view__39); infoSamplesLabel_ = view__39;
Label* const view__40 = createLabel(CRect(70, 110, 110, 135), -1, "0", kCenterText, 12); view__29->addView(view__39);
infoSamplesLabel_ = view__40; LogicalGroup* const view__40 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14);
view__30->addView(view__40); subPanels_[kPanelControls] = view__40;
LogicalGroup* const view__41 = createLogicalGroup(CRect(125, 0, 790, 280), -1, "", kCenterText, 14); view__0->addView(view__40);
view__29->addView(view__41); view__40->setVisible(false);
SfizzLargePicture* const view__42 = createSfizzLargePicture(CRect(130, 15, 530, 265), -1, "", kCenterText, 14); RoundedGroup* const view__41 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
view__40->addView(view__41);
Label* const view__42 = createLabel(CRect(0, 0, 790, 285), -1, "Controls not available", kCenterText, 40);
view__41->addView(view__42); view__41->addView(view__42);
LogicalGroup* const view__43 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14); LogicalGroup* const view__43 = createLogicalGroup(CRect(5, 109, 795, 395), -1, "", kCenterText, 14);
subPanels_[kPanelControls] = view__43; subPanels_[kPanelSettings] = view__43;
view__0->addView(view__43); view__0->addView(view__43);
view__43->setVisible(false); view__43->setVisible(false);
RoundedGroup* const view__44 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14); TitleGroup* const view__44 = createTitleGroup(CRect(255, 1, 535, 111), -1, "Engine", kCenterText, 12);
view__43->addView(view__44); view__43->addView(view__44);
Label* const view__45 = createLabel(CRect(0, 0, 790, 285), -1, "Controls not available", kCenterText, 40); ValueMenu* const view__45 = createValueMenu(CRect(25, 60, 85, 85), kTagSetNumVoices, "", kCenterText, 12);
numVoicesSlider_ = view__45;
view__44->addView(view__45); view__44->addView(view__45);
LogicalGroup* const view__46 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14); ValueLabel* const view__46 = createValueLabel(CRect(15, 20, 95, 45), -1, "Polyphony", kCenterText, 12);
subPanels_[kPanelSettings] = view__46; view__44->addView(view__46);
view__0->addView(view__46); ValueMenu* const view__47 = createValueMenu(CRect(110, 60, 170, 85), kTagSetOversampling, "", kCenterText, 12);
TitleGroup* const view__47 = createTitleGroup(CRect(255, 15, 535, 125), -1, "Engine", kCenterText, 12); oversamplingSlider_ = view__47;
view__46->addView(view__47); view__44->addView(view__47);
ValueMenu* const view__48 = createValueMenu(CRect(25, 60, 85, 85), kTagSetNumVoices, "", kCenterText, 12); ValueLabel* const view__48 = createValueLabel(CRect(100, 20, 180, 45), -1, "Oversampling", kCenterText, 12);
numVoicesSlider_ = view__48; view__44->addView(view__48);
view__47->addView(view__48); ValueLabel* const view__49 = createValueLabel(CRect(185, 20, 265, 45), -1, "Preload size", kCenterText, 12);
ValueLabel* const view__49 = createValueLabel(CRect(15, 20, 95, 45), -1, "Polyphony", kCenterText, 12); view__44->addView(view__49);
view__47->addView(view__49); ValueMenu* const view__50 = createValueMenu(CRect(195, 60, 255, 85), kTagSetPreloadSize, "", kCenterText, 12);
ValueMenu* const view__50 = createValueMenu(CRect(110, 60, 170, 85), kTagSetOversampling, "", kCenterText, 12); preloadSizeSlider_ = view__50;
oversamplingSlider_ = view__50; view__44->addView(view__50);
view__47->addView(view__50); TitleGroup* const view__51 = createTitleGroup(CRect(200, 159, 590, 279), -1, "Tuning", kCenterText, 12);
ValueLabel* const view__51 = createValueLabel(CRect(100, 20, 180, 45), -1, "Oversampling", kCenterText, 12); view__43->addView(view__51);
view__47->addView(view__51); ValueLabel* const view__52 = createValueLabel(CRect(125, 20, 205, 45), -1, "Root key", kCenterText, 12);
ValueLabel* const view__52 = createValueLabel(CRect(185, 20, 265, 45), -1, "Preload size", kCenterText, 12); view__51->addView(view__52);
view__47->addView(view__52); ValueMenu* const view__53 = createValueMenu(CRect(220, 60, 280, 85), kTagSetTuningFrequency, "", kCenterText, 12);
ValueMenu* const view__53 = createValueMenu(CRect(195, 60, 255, 85), kTagSetPreloadSize, "", kCenterText, 12); tuningFrequencySlider_ = view__53;
preloadSizeSlider_ = view__53; view__51->addView(view__53);
view__47->addView(view__53); ValueLabel* const view__54 = createValueLabel(CRect(210, 20, 290, 45), -1, "Frequency", kCenterText, 12);
TitleGroup* const view__54 = createTitleGroup(CRect(200, 150, 590, 270), -1, "Tuning", kCenterText, 12); view__51->addView(view__54);
view__46->addView(view__54); Knob48* const view__55 = createKnob48(CRect(310, 45, 358, 93), kTagSetStretchedTuning, "", kCenterText, 14);
ValueLabel* const view__55 = createValueLabel(CRect(125, 20, 205, 45), -1, "Root key", kCenterText, 12); stretchedTuningSlider_ = view__55;
view__54->addView(view__55); view__51->addView(view__55);
ValueMenu* const view__56 = createValueMenu(CRect(220, 60, 280, 85), kTagSetTuningFrequency, "", kCenterText, 12); ValueLabel* const view__56 = createValueLabel(CRect(295, 20, 375, 45), -1, "Stretch", kCenterText, 12);
tuningFrequencySlider_ = view__56; view__51->addView(view__56);
view__54->addView(view__56); ValueLabel* const view__57 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12);
ValueLabel* const view__57 = createValueLabel(CRect(210, 20, 290, 45), -1, "Frequency", kCenterText, 12); view__51->addView(view__57);
view__54->addView(view__57); ValueButton* const view__58 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12);
Knob48* const view__58 = createKnob48(CRect(310, 45, 358, 93), kTagSetStretchedTuning, "", kCenterText, 14); scalaFileButton_ = view__58;
stretchedTuningSlider_ = view__58; view__51->addView(view__58);
view__54->addView(view__58); ValueMenu* const view__59 = createValueMenu(CRect(135, 60, 170, 85), kTagSetScalaRootKey, "", kCenterText, 12);
ValueLabel* const view__59 = createValueLabel(CRect(295, 20, 375, 45), -1, "Stretch", kCenterText, 12); scalaRootKeySlider_ = view__59;
view__54->addView(view__59); view__51->addView(view__59);
ValueLabel* const view__60 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12); ValueMenu* const view__60 = createValueMenu(CRect(170, 60, 200, 85), kTagSetScalaRootKey, "", kCenterText, 12);
view__54->addView(view__60); scalaRootOctaveSlider_ = view__60;
ValueButton* const view__61 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12); view__51->addView(view__60);
scalaFileButton_ = view__61; Piano* const view__61 = createPiano(CRect(5, 400, 795, 470), -1, "", kCenterText, 14);
view__54->addView(view__61); view__0->addView(view__61);
ValueMenu* const view__62 = createValueMenu(CRect(135, 60, 170, 85), kTagSetScalaRootKey, "", kCenterText, 12);
scalaRootKeySlider_ = view__62;
view__54->addView(view__62);
ValueMenu* const view__63 = createValueMenu(CRect(170, 60, 200, 85), kTagSetScalaRootKey, "", kCenterText, 12);
scalaRootOctaveSlider_ = view__63;
view__54->addView(view__63);
LogicalGroup* const view__64 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14);
subPanels_[kPanelInfo] = view__64;
view__0->addView(view__64);
view__64->setVisible(false);
RoundedGroup* const view__65 = createRoundedGroup(CRect(0, 0, 790, 285), -1, "", kCenterText, 14);
view__64->addView(view__65);
Label* const view__66 = createLabel(CRect(0, 0, 790, 285), -1, "Informative text goes here", kCenterText, 40);
view__65->addView(view__66);
Piano* const view__67 = createPiano(CRect(5, 400, 795, 470), -1, "", kCenterText, 14);
view__0->addView(view__67);