diff --git a/editor/CMakeLists.txt b/editor/CMakeLists.txt index cce49479..935f5c79 100644 --- a/editor/CMakeLists.txt +++ b/editor/CMakeLists.txt @@ -5,11 +5,14 @@ set(EDITOR_RESOURCES logo.png logo_text.png logo_text@2x.png + logo_full_white.png icon_white.png icon_white@2x.png knob48.png knob48@2x.png Fonts/fluentui-system-regular-20.ttf + Fonts/ABeeZee-Regular.ttf + Fonts/ABeeZee-Regular.ttf PARENT_SCOPE) function(copy_editor_resources SOURCE_DIR DESTINATION_DIR) diff --git a/editor/layout/main.fl b/editor/layout/main.fl index 1d27e987..477d2d40 100644 --- a/editor/layout/main.fl +++ b/editor/layout/main.fl @@ -1,9 +1,9 @@ # data file for the Fltk User Interface Designer (fluid) -version 1.0305 +version 1.0304 header_name {.h} code_name {.cxx} widget_class mainView {open - xywh {410 523 800 475} type Double + xywh {572 266 800 475} type Double class LogicalGroup visible } { Fl_Group {} { @@ -12,112 +12,104 @@ widget_class mainView {open class LogicalGroup } { 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 } { Fl_Box {} { 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 } + 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 - xywh {110 5 380 100} box ROUNDED_BOX + xywh {185 5 380 100} box ROUNDED_BOX class RoundedGroup } { Fl_Box {} { label {File:} - xywh {125 15 40 25} labelsize 16 + xywh {200 13 40 30} labelsize 16 class Label } Fl_Box {} { label {KS:} - xywh {125 45 40 25} labelsize 16 + xywh {200 45 40 30} labelsize 16 class Label } Fl_Box {} { 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 } Fl_Box {} { 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 } Fl_Box sfzFileLabel_ { label {DefaultInstrument.sfz} - xywh {190 15 230 25} labelsize 20 + xywh {265 12 230 30} labelsize 20 class Label } Fl_Box {} { label {Key switch} - xywh {190 45 230 25} labelsize 20 + xywh {265 44 230 30} labelsize 20 class Label } Fl_Box {} { label {Voices:} - xywh {120 75 60 25} labelsize 12 align 24 + xywh {195 76 60 25} labelsize 12 align 24 class Label } Fl_Button {} { comment {tag=kTagLoadSfzFile} - xywh {425 15 25 25} labelsize 24 + xywh {500 14 25 25} labelsize 24 class LoadFileButton } Fl_Button {} { comment {tag=kTagEditSfzFile} - xywh {450 15 25 25} labelsize 24 + xywh {525 14 25 25} labelsize 24 class EditFileButton } Fl_Box infoVoicesLabel_ { - xywh {185 75 50 25} labelsize 12 align 16 + xywh {260 76 50 25} labelsize 12 align 16 class Label } Fl_Box {} { label {Max:} - xywh {240 75 60 25} labelsize 12 align 24 + xywh {315 76 60 25} labelsize 12 align 24 class Label } Fl_Box numVoicesLabel_ { - xywh {305 75 50 25} labelsize 12 align 16 + xywh {380 76 50 25} labelsize 12 align 16 class Label } Fl_Box {} { label {Memory:} - xywh {360 75 60 25} labelsize 12 align 24 + xywh {435 76 60 25} labelsize 12 align 24 class Label } Fl_Box memoryLabel_ { - xywh {425 75 50 25} labelsize 12 align 16 + xywh {500 76 50 25} labelsize 12 align 16 class Label } } Fl_Group {} {open - xywh {495 5 100 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 + xywh {570 5 225 100} box ROUNDED_BOX class RoundedGroup } { Fl_Dial {} { @@ -126,7 +118,7 @@ widget_class mainView {open } Fl_Box {} { label Center - xywh {610 70 60 25} labelsize 12 hide + xywh {610 70 60 5} labelsize 12 hide class ValueLabel } Fl_Dial volumeSlider_ { @@ -136,83 +128,74 @@ widget_class mainView {open } Fl_Box volumeLabel_ { label {0.0 dB} - xywh {675 70 60 25} labelsize 12 + xywh {675 70 60 22} labelsize 12 class ValueLabel } Fl_Box {} { - xywh {745 20 35 70} box BORDER_BOX + xywh {745 20 35 55} box BORDER_BOX class VMeter } } } - Fl_Group {subPanels_[kPanelGeneral]} { - xywh {5 110 790 285} hide + Fl_Group {subPanels_[kPanelGeneral]} {open selected + xywh {5 110 791 285} class LogicalGroup } { Fl_Group {} {open - xywh {5 110 120 285} box ROUNDED_BOX + xywh {5 110 175 280} box ROUNDED_BOX class RoundedGroup } { Fl_Box {} { label {Curves:} - xywh {15 120 60 25} labelsize 12 align 20 + xywh {20 120 60 25} align 20 class Label } Fl_Box {} { label {Masters:} - xywh {15 145 60 25} labelsize 12 align 20 + xywh {20 145 60 25} align 20 class Label } Fl_Box {} { label {Groups:} - xywh {15 170 60 25} labelsize 12 align 20 + xywh {20 170 60 25} align 20 class Label } Fl_Box {} { label {Regions:} - xywh {15 195 60 25} labelsize 12 align 20 + xywh {20 195 60 25} align 20 class Label } Fl_Box {} { label {Samples:} - xywh {15 220 60 25} labelsize 12 align 20 + xywh {20 220 60 25} align 20 class Label } Fl_Box infoCurvesLabel_ { label 0 - xywh {75 120 40 25} labelsize 12 align 16 + xywh {120 120 40 25} align 16 class Label } Fl_Box infoMastersLabel_ { label 0 - xywh {75 145 40 25} labelsize 12 align 16 + xywh {120 145 40 25} align 16 class Label } Fl_Box infoGroupsLabel_ { label 0 - xywh {75 170 40 25} labelsize 12 align 16 + xywh {120 170 40 25} align 16 class Label } Fl_Box infoRegionsLabel_ { label 0 - xywh {75 195 40 25} labelsize 12 align 16 + xywh {120 195 40 25} align 16 class Label } Fl_Box infoSamplesLabel_ { label 0 - xywh {75 220 40 25} labelsize 12 align 16 + xywh {120 220 40 25} align 16 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]} { xywh {5 110 790 285} hide @@ -229,114 +212,99 @@ widget_class mainView {open } } } - Fl_Group {subPanels_[kPanelSettings]} {open - xywh {5 110 790 285} + Fl_Group {subPanels_[kPanelSettings]} { + xywh {5 109 790 286} hide class LogicalGroup } { Fl_Group {} { - label Engine open selected - xywh {260 125 280 110} box ROUNDED_BOX labelsize 12 align 17 + label Engine open + xywh {260 110 280 110} box ROUNDED_BOX labelsize 12 align 17 class TitleGroup } { Fl_Spinner numVoicesSlider_ { comment {tag=kTagSetNumVoices} - xywh {285 185 60 25} labelsize 12 textsize 12 + xywh {285 170 60 25} labelsize 12 textsize 12 class ValueMenu } Fl_Box {} { label Polyphony - xywh {275 145 80 25} labelsize 12 + xywh {275 130 80 25} labelsize 12 class ValueLabel } Fl_Spinner oversamplingSlider_ { comment {tag=kTagSetOversampling} - xywh {370 185 60 25} labelsize 12 textsize 12 + xywh {370 170 60 25} labelsize 12 textsize 12 class ValueMenu } Fl_Box {} { label Oversampling - xywh {360 145 80 25} labelsize 12 + xywh {360 130 80 25} labelsize 12 class ValueLabel } Fl_Box {} { label {Preload size} - xywh {445 145 80 25} labelsize 12 + xywh {445 130 80 25} labelsize 12 class ValueLabel } Fl_Spinner preloadSizeSlider_ { comment {tag=kTagSetPreloadSize} - xywh {455 185 60 25} labelsize 12 textsize 12 + xywh {455 170 60 25} labelsize 12 textsize 12 class ValueMenu } } Fl_Group {} { 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 } { Fl_Box {} { label {Root key} - xywh {330 280 80 25} labelsize 12 + xywh {330 288 80 25} labelsize 12 class ValueLabel } Fl_Spinner tuningFrequencySlider_ { comment {tag=kTagSetTuningFrequency} - xywh {425 320 60 25} labelsize 12 textsize 12 + xywh {425 328 60 25} labelsize 12 textsize 12 class ValueMenu } Fl_Box {} { label Frequency - xywh {415 280 80 25} labelsize 12 + xywh {415 288 80 25} labelsize 12 class ValueLabel } Fl_Dial stretchedTuningSlider_ { comment {tag=kTagSetStretchedTuning} - xywh {515 305 48 48} value 0.5 + xywh {515 313 48 48} value 0.5 class Knob48 } Fl_Box {} { label Stretch - xywh {500 280 80 25} labelsize 12 + xywh {500 288 80 25} labelsize 12 class ValueLabel } Fl_Box {} { label {Scala file} - xywh {225 280 100 25} labelsize 12 + xywh {225 288 100 25} labelsize 12 class ValueLabel } Fl_Button scalaFileButton_ { label DefaultScale comment {tag=kTagLoadScalaFile} - xywh {225 320 100 25} labelsize 12 + xywh {225 328 100 25} labelsize 12 class ValueButton } Fl_Spinner scalaRootKeySlider_ { comment {tag=kTagSetScalaRootKey} - xywh {340 320 35 25} labelsize 12 textsize 12 + xywh {340 328 35 25} labelsize 12 textsize 12 class ValueMenu } Fl_Spinner scalaRootOctaveSlider_ { comment {tag=kTagSetScalaRootKey} - xywh {375 320 30 25} labelsize 12 textsize 12 + xywh {375 328 30 25} labelsize 12 textsize 12 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 {} { xywh {5 400 790 70} class Piano diff --git a/editor/resources/Fonts/ABeeZee-Italic.ttf b/editor/resources/Fonts/ABeeZee-Italic.ttf new file mode 100644 index 00000000..d98743af Binary files /dev/null and b/editor/resources/Fonts/ABeeZee-Italic.ttf differ diff --git a/editor/resources/Fonts/ABeeZee-Regular.ttf b/editor/resources/Fonts/ABeeZee-Regular.ttf new file mode 100644 index 00000000..71e6d162 Binary files /dev/null and b/editor/resources/Fonts/ABeeZee-Regular.ttf differ diff --git a/editor/resources/logo_full_white.png b/editor/resources/logo_full_white.png new file mode 100644 index 00000000..8aace05a Binary files /dev/null and b/editor/resources/logo_full_white.png differ diff --git a/editor/src/editor/Editor.cpp b/editor/src/editor/Editor.cpp index 1d7bc7b4..3d0c70ea 100644 --- a/editor/src/editor/Editor.cpp +++ b/editor/src/editor/Editor.cpp @@ -35,7 +35,6 @@ struct Editor::Impl : EditorController::Receiver, IControlListener { kPanelGeneral, kPanelControls, kPanelSettings, - kPanelInfo, kNumPanels, }; @@ -314,12 +313,38 @@ void Editor::Impl::uiReceiveValue(EditId id, const EditValue& v) 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() { CViewContainer* mainView; - SharedPointer iconWhite = owned(new CBitmap("icon_white.png")); + SharedPointer iconWhite = owned(new CBitmap("logo_full_white.png")); SharedPointer knob48 = owned(new CBitmap("knob48.png")); SharedPointer logoText = owned(new CBitmap("logo_text.png")); @@ -332,6 +357,7 @@ void Editor::Impl::createFrameContents() CColor titleBoxText; CColor titleBoxBackground; CColor icon; + CColor iconHighlight; CColor valueText; CColor valueBackground; }; @@ -342,6 +368,7 @@ void Editor::Impl::createFrameContents() lightTheme.titleBoxText = { 0xff, 0xff, 0xff }; lightTheme.titleBoxBackground = { 0x2e, 0x34, 0x36 }; lightTheme.icon = lightTheme.text; + lightTheme.iconHighlight = { 0xa8, 0x62, 0x34 }; lightTheme.valueText = { 0xff, 0xff, 0xff }; lightTheme.valueBackground = { 0x2e, 0x34, 0x36 }; Theme darkTheme; @@ -350,6 +377,7 @@ void Editor::Impl::createFrameContents() darkTheme.titleBoxText = { 0x00, 0x00, 0x00 }; darkTheme.titleBoxBackground = { 0xba, 0xbd, 0xb6 }; darkTheme.icon = darkTheme.text; + darkTheme.iconHighlight = { 0xa8, 0x62, 0x34 }; darkTheme.valueText = { 0x2e, 0x34, 0x36 }; darkTheme.valueBackground = { 0xff, 0xff, 0xff }; Theme& defaultTheme = lightTheme; @@ -363,18 +391,19 @@ void Editor::Impl::createFrameContents() typedef CKickButton SfizzMainButton; typedef CTextLabel Label; typedef CViewContainer HLine; - typedef CTextButton LightButton; typedef CAnimKnob Knob48; typedef CTextLabel ValueLabel; typedef CViewContainer VMeter; - typedef CView SfizzLargePicture; typedef SValueMenu ValueMenu; #if 0 typedef CTextButton Button; #endif typedef CTextButton ValueButton; - typedef CTextButton LoadFileButton; - typedef CTextButton EditFileButton; + typedef CHoverButton LoadFileButton; + typedef CHoverButton CCButton; + typedef CHoverButton HomeButton; + typedef CHoverButton SettingsButton; + typedef CHoverButton EditFileButton; typedef SPiano Piano; auto createLogicalGroup = [](const CRect& bounds, int, const char*, CHoriTxtAlign, int) { @@ -394,7 +423,7 @@ void Editor::Impl::createFrameContents() box->setBackgroundColor(theme->boxBackground); box->setTitleFontColor(theme->titleBoxText); box->setTitleBackgroundColor(theme->titleBoxBackground); - auto font = owned(new CFontDesc(*box->getTitleFont())); + auto font = owned(new CFontDesc("ABeeZee", fontsize)); font->setSize(fontsize); box->setTitleFont(font); return box; @@ -408,7 +437,7 @@ void Editor::Impl::createFrameContents() lbl->setBackColor(CColor(0x00, 0x00, 0x00, 0x00)); lbl->setFontColor(theme->text); lbl->setHoriAlign(align); - auto font = owned(new CFontDesc(*lbl->getFont())); + auto font = owned(new CFontDesc("ABeeZee", fontsize)); font->setSize(fontsize); lbl->setFont(font); return lbl; @@ -420,11 +449,6 @@ void Editor::Impl::createFrameContents() hline->setBackgroundColor(CColor(0xff, 0xff, 0xff, 0xff)); 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) { 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->setFontColor(theme->text); lbl->setHoriAlign(align); - auto font = owned(new CFontDesc(*lbl->getFont())); + auto font = owned(new CFontDesc("ABeeZee", fontsize)); font->setSize(fontsize); lbl->setFont(font); return lbl; @@ -445,11 +469,6 @@ void Editor::Impl::createFrameContents() container->setBackgroundColor(CColor(0x00, 0x00, 0x00, 0x00)); 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 auto createButton = [this](const CRect& bounds, int tag, const char* label, CHoriTxtAlign align, int fontsize) { CTextButton* button = new CTextButton(bounds, this, tag, label); @@ -462,7 +481,7 @@ void Editor::Impl::createFrameContents() #endif auto createValueButton = [this, &theme](const CRect& bounds, int tag, const char* label, CHoriTxtAlign align, int fontsize) { 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); button->setFont(font); 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) { SValueMenu* vm = new SValueMenu(bounds, this, tag); vm->setHoriAlign(align); - auto font = owned(new CFontDesc(*vm->getFont())); + auto font = owned(new CFontDesc("ABeeZee", fontsize)); font->setSize(fontsize); vm->setFont(font); vm->setFontColor(theme->valueText); @@ -487,19 +506,30 @@ void Editor::Impl::createFrameContents() return vm; }; 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->setTextColor(theme->icon); + btn->setHoverColor(theme->iconHighlight); btn->setFrameColor(CColor(0x00, 0x00, 0x00, 0x00)); btn->setGradient(nullptr); btn->setGradientHighlighted(nullptr); return btn; }; - auto createLoadFileButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int fontsize) { - return createGlyphButton(u8"\ue142", bounds, tag, fontsize); + auto createHomeButton = [&createGlyphButton](const CRect& bounds, int tag, const char*, CHoriTxtAlign, int 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) { - 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) { SPiano* piano = new SPiano(bounds); diff --git a/editor/src/editor/GUIComponents.cpp b/editor/src/editor/GUIComponents.cpp index c4e6f958..d604d76e 100644 --- a/editor/src/editor/GUIComponents.cpp +++ b/editor/src/editor/GUIComponents.cpp @@ -408,6 +408,9 @@ CMouseEventResult SValueMenu::onMouseDown(CPoint& where, const CButtonState& but menu->addEntry(item); 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)); } }); diff --git a/editor/src/editor/layout/main.hpp b/editor/src/editor/layout/main.hpp index 808e5a10..c8e93a39 100644 --- a/editor/src/editor/layout/main.hpp +++ b/editor/src/editor/layout/main.hpp @@ -4,164 +4,150 @@ mainView = view__0; enterTheme(darkTheme); LogicalGroup* const view__1 = createLogicalGroup(CRect(0, 0, 800, 110), -1, "", kCenterText, 14); 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); -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); -RoundedGroup* const view__4 = createRoundedGroup(CRect(110, 5, 490, 105), -1, "", kCenterText, 14); -view__1->addView(view__4); -Label* const view__5 = createLabel(CRect(15, 10, 55, 35), -1, "File:", kCenterText, 16); -view__4->addView(view__5); -Label* const view__6 = createLabel(CRect(15, 40, 55, 65), -1, "KS:", kCenterText, 16); -view__4->addView(view__6); -HLine* const view__7 = createHLine(CRect(10, 35, 365, 40), -1, "", kCenterText, 14); -view__4->addView(view__7); -HLine* const view__8 = createHLine(CRect(10, 65, 365, 70), -1, "", kCenterText, 14); -view__4->addView(view__8); -Label* const view__9 = createLabel(CRect(80, 10, 310, 35), -1, "DefaultInstrument.sfz", kCenterText, 20); -sfzFileLabel_ = view__9; -view__4->addView(view__9); -Label* const view__10 = createLabel(CRect(80, 40, 310, 65), -1, "Key switch", kCenterText, 20); -view__4->addView(view__10); -Label* const view__11 = createLabel(CRect(10, 70, 70, 95), -1, "Voices:", kRightText, 12); -view__4->addView(view__11); -LoadFileButton* const view__12 = createLoadFileButton(CRect(315, 10, 340, 35), kTagLoadSfzFile, "", kCenterText, 24); -view__4->addView(view__12); -EditFileButton* const view__13 = createEditFileButton(CRect(340, 10, 365, 35), kTagEditSfzFile, "", kCenterText, 24); -view__4->addView(view__13); -Label* const view__14 = createLabel(CRect(75, 70, 125, 95), -1, "", kCenterText, 12); -infoVoicesLabel_ = view__14; -view__4->addView(view__14); -Label* const view__15 = createLabel(CRect(130, 70, 190, 95), -1, "Max:", kRightText, 12); -view__4->addView(view__15); -Label* const view__16 = createLabel(CRect(195, 70, 245, 95), -1, "", kCenterText, 12); -numVoicesLabel_ = view__16; -view__4->addView(view__16); -Label* const view__17 = createLabel(CRect(250, 70, 310, 95), -1, "Memory:", kRightText, 12); -view__4->addView(view__17); -Label* const view__18 = createLabel(CRect(315, 70, 365, 95), -1, "", kCenterText, 12); -memoryLabel_ = view__18; -view__4->addView(view__18); -RoundedGroup* const view__19 = createRoundedGroup(CRect(495, 5, 595, 105), -1, "", kCenterText, 14); -view__1->addView(view__19); -LightButton* const view__20 = createLightButton(CRect(15, 37, 85, 62), kTagFirstChangePanel+kPanelSettings, "SETUP", kCenterText, 14); -view__19->addView(view__20); -LightButton* const view__21 = createLightButton(CRect(15, 10, 85, 35), kTagFirstChangePanel+kPanelControls, "CC", kCenterText, 14); -view__19->addView(view__21); -LightButton* const view__22 = createLightButton(CRect(15, 64, 85, 89), kTagFirstChangePanel+kPanelInfo, "INFO", kCenterText, 14); -view__19->addView(view__22); -RoundedGroup* const view__23 = createRoundedGroup(CRect(600, 5, 795, 105), -1, "", kCenterText, 14); -view__1->addView(view__23); -Knob48* const view__24 = createKnob48(CRect(15, 15, 63, 63), -1, "", kCenterText, 14); -view__23->addView(view__24); +HomeButton* const view__4 = createHomeButton(CRect(50, 71, 75, 96), kTagFirstChangePanel+kPanelGeneral, "", kCenterText, 24); +view__2->addView(view__4); +CCButton* const view__5 = createCCButton(CRect(75, 71, 100, 96), kTagFirstChangePanel+kPanelControls, "", kCenterText, 24); +view__2->addView(view__5); +SettingsButton* const view__6 = createSettingsButton(CRect(100, 71, 125, 96), kTagFirstChangePanel+kPanelSettings, "", kCenterText, 24); +view__2->addView(view__6); +RoundedGroup* const view__7 = createRoundedGroup(CRect(185, 5, 565, 105), -1, "", kCenterText, 14); +view__1->addView(view__7); +Label* const view__8 = createLabel(CRect(15, 8, 55, 38), -1, "File:", kCenterText, 16); +view__7->addView(view__8); +Label* const view__9 = createLabel(CRect(15, 40, 55, 70), -1, "KS:", kCenterText, 16); +view__7->addView(view__9); +HLine* const view__10 = createHLine(CRect(10, 36, 370, 41), -1, "", kCenterText, 14); +view__7->addView(view__10); +HLine* const view__11 = createHLine(CRect(10, 68, 370, 73), -1, "", kCenterText, 14); +view__7->addView(view__11); +Label* const view__12 = createLabel(CRect(80, 7, 310, 37), -1, "DefaultInstrument.sfz", kCenterText, 20); +sfzFileLabel_ = view__12; +view__7->addView(view__12); +Label* const view__13 = createLabel(CRect(80, 39, 310, 69), -1, "Key switch", kCenterText, 20); +view__7->addView(view__13); +Label* const view__14 = createLabel(CRect(10, 71, 70, 96), -1, "Voices:", kRightText, 12); +view__7->addView(view__14); +LoadFileButton* const view__15 = createLoadFileButton(CRect(315, 9, 340, 34), kTagLoadSfzFile, "", kCenterText, 24); +view__7->addView(view__15); +EditFileButton* const view__16 = createEditFileButton(CRect(340, 9, 365, 34), kTagEditSfzFile, "", kCenterText, 24); +view__7->addView(view__16); +Label* const view__17 = createLabel(CRect(75, 71, 125, 96), -1, "", kCenterText, 12); +infoVoicesLabel_ = view__17; +view__7->addView(view__17); +Label* const view__18 = createLabel(CRect(130, 71, 190, 96), -1, "Max:", kRightText, 12); +view__7->addView(view__18); +Label* const view__19 = createLabel(CRect(195, 71, 245, 96), -1, "", kCenterText, 12); +numVoicesLabel_ = view__19; +view__7->addView(view__19); +Label* const view__20 = createLabel(CRect(250, 71, 310, 96), -1, "Memory:", kRightText, 12); +view__7->addView(view__20); +Label* const view__21 = createLabel(CRect(315, 71, 365, 96), -1, "", kCenterText, 12); +memoryLabel_ = view__21; +view__7->addView(view__21); +RoundedGroup* const view__22 = createRoundedGroup(CRect(570, 5, 795, 105), -1, "", kCenterText, 14); +view__1->addView(view__22); +Knob48* const view__23 = createKnob48(CRect(45, 15, 93, 63), -1, "", kCenterText, 14); +view__22->addView(view__23); +view__23->setVisible(false); +ValueLabel* const view__24 = createValueLabel(CRect(40, 65, 100, 70), -1, "Center", kCenterText, 12); +view__22->addView(view__24); view__24->setVisible(false); -ValueLabel* const view__25 = createValueLabel(CRect(10, 65, 70, 90), -1, "Center", kCenterText, 12); -view__23->addView(view__25); -view__25->setVisible(false); -Knob48* const view__26 = createKnob48(CRect(80, 15, 128, 63), kTagSetVolume, "", kCenterText, 14); -volumeSlider_ = view__26; -view__23->addView(view__26); -ValueLabel* const view__27 = createValueLabel(CRect(75, 65, 135, 90), -1, "0.0 dB", kCenterText, 12); -volumeLabel_ = 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); +Knob48* const view__25 = createKnob48(CRect(110, 15, 158, 63), kTagSetVolume, "", kCenterText, 14); +volumeSlider_ = view__25; +view__22->addView(view__25); +ValueLabel* const view__26 = createValueLabel(CRect(105, 65, 165, 87), -1, "0.0 dB", kCenterText, 12); +volumeLabel_ = view__26; +view__22->addView(view__26); +VMeter* const view__27 = createVMeter(CRect(175, 15, 210, 70), -1, "", kCenterText, 14); +view__22->addView(view__27); enterTheme(defaultTheme); -LogicalGroup* const view__29 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14); -subPanels_[kPanelGeneral] = view__29; -view__0->addView(view__29); -view__29->setVisible(false); -RoundedGroup* const view__30 = createRoundedGroup(CRect(0, 0, 120, 285), -1, "", kCenterText, 14); +LogicalGroup* const view__28 = createLogicalGroup(CRect(5, 110, 796, 395), -1, "", kCenterText, 14); +subPanels_[kPanelGeneral] = view__28; +view__0->addView(view__28); +RoundedGroup* const view__29 = createRoundedGroup(CRect(0, 0, 175, 280), -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); -Label* const view__31 = createLabel(CRect(10, 10, 70, 35), -1, "Curves:", kLeftText, 12); -view__30->addView(view__31); -Label* const view__32 = createLabel(CRect(10, 35, 70, 60), -1, "Masters:", kLeftText, 12); -view__30->addView(view__32); -Label* const view__33 = createLabel(CRect(10, 60, 70, 85), -1, "Groups:", kLeftText, 12); -view__30->addView(view__33); -Label* const view__34 = createLabel(CRect(10, 85, 70, 110), -1, "Regions:", kLeftText, 12); -view__30->addView(view__34); -Label* const view__35 = createLabel(CRect(10, 110, 70, 135), -1, "Samples:", kLeftText, 12); -view__30->addView(view__35); -Label* const view__36 = createLabel(CRect(70, 10, 110, 35), -1, "0", kCenterText, 12); -infoCurvesLabel_ = view__36; -view__30->addView(view__36); -Label* const view__37 = createLabel(CRect(70, 35, 110, 60), -1, "0", kCenterText, 12); -infoMastersLabel_ = view__37; -view__30->addView(view__37); -Label* const view__38 = createLabel(CRect(70, 60, 110, 85), -1, "0", kCenterText, 12); -infoGroupsLabel_ = view__38; -view__30->addView(view__38); -Label* const view__39 = createLabel(CRect(70, 85, 110, 110), -1, "0", kCenterText, 12); -infoRegionsLabel_ = view__39; -view__30->addView(view__39); -Label* const view__40 = createLabel(CRect(70, 110, 110, 135), -1, "0", kCenterText, 12); -infoSamplesLabel_ = view__40; -view__30->addView(view__40); -LogicalGroup* const view__41 = createLogicalGroup(CRect(125, 0, 790, 280), -1, "", kCenterText, 14); -view__29->addView(view__41); -SfizzLargePicture* const view__42 = createSfizzLargePicture(CRect(130, 15, 530, 265), -1, "", kCenterText, 14); +Label* const view__31 = createLabel(CRect(15, 35, 75, 60), -1, "Masters:", kLeftText, 14); +view__29->addView(view__31); +Label* const view__32 = createLabel(CRect(15, 60, 75, 85), -1, "Groups:", kLeftText, 14); +view__29->addView(view__32); +Label* const view__33 = createLabel(CRect(15, 85, 75, 110), -1, "Regions:", kLeftText, 14); +view__29->addView(view__33); +Label* const view__34 = createLabel(CRect(15, 110, 75, 135), -1, "Samples:", kLeftText, 14); +view__29->addView(view__34); +Label* const view__35 = createLabel(CRect(115, 10, 155, 35), -1, "0", kCenterText, 14); +infoCurvesLabel_ = view__35; +view__29->addView(view__35); +Label* const view__36 = createLabel(CRect(115, 35, 155, 60), -1, "0", kCenterText, 14); +infoMastersLabel_ = view__36; +view__29->addView(view__36); +Label* const view__37 = createLabel(CRect(115, 60, 155, 85), -1, "0", kCenterText, 14); +infoGroupsLabel_ = view__37; +view__29->addView(view__37); +Label* const view__38 = createLabel(CRect(115, 85, 155, 110), -1, "0", kCenterText, 14); +infoRegionsLabel_ = view__38; +view__29->addView(view__38); +Label* const view__39 = createLabel(CRect(115, 110, 155, 135), -1, "0", kCenterText, 14); +infoSamplesLabel_ = view__39; +view__29->addView(view__39); +LogicalGroup* const view__40 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14); +subPanels_[kPanelControls] = view__40; +view__0->addView(view__40); +view__40->setVisible(false); +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); -LogicalGroup* const view__43 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14); -subPanels_[kPanelControls] = view__43; +LogicalGroup* const view__43 = createLogicalGroup(CRect(5, 109, 795, 395), -1, "", kCenterText, 14); +subPanels_[kPanelSettings] = view__43; view__0->addView(view__43); 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); -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); -LogicalGroup* const view__46 = createLogicalGroup(CRect(5, 110, 795, 395), -1, "", kCenterText, 14); -subPanels_[kPanelSettings] = view__46; -view__0->addView(view__46); -TitleGroup* const view__47 = createTitleGroup(CRect(255, 15, 535, 125), -1, "Engine", kCenterText, 12); -view__46->addView(view__47); -ValueMenu* const view__48 = createValueMenu(CRect(25, 60, 85, 85), kTagSetNumVoices, "", kCenterText, 12); -numVoicesSlider_ = view__48; -view__47->addView(view__48); -ValueLabel* const view__49 = createValueLabel(CRect(15, 20, 95, 45), -1, "Polyphony", kCenterText, 12); -view__47->addView(view__49); -ValueMenu* const view__50 = createValueMenu(CRect(110, 60, 170, 85), kTagSetOversampling, "", kCenterText, 12); -oversamplingSlider_ = view__50; -view__47->addView(view__50); -ValueLabel* const view__51 = createValueLabel(CRect(100, 20, 180, 45), -1, "Oversampling", kCenterText, 12); -view__47->addView(view__51); -ValueLabel* const view__52 = createValueLabel(CRect(185, 20, 265, 45), -1, "Preload size", kCenterText, 12); -view__47->addView(view__52); -ValueMenu* const view__53 = createValueMenu(CRect(195, 60, 255, 85), kTagSetPreloadSize, "", kCenterText, 12); -preloadSizeSlider_ = view__53; -view__47->addView(view__53); -TitleGroup* const view__54 = createTitleGroup(CRect(200, 150, 590, 270), -1, "Tuning", kCenterText, 12); -view__46->addView(view__54); -ValueLabel* const view__55 = createValueLabel(CRect(125, 20, 205, 45), -1, "Root key", kCenterText, 12); -view__54->addView(view__55); -ValueMenu* const view__56 = createValueMenu(CRect(220, 60, 280, 85), kTagSetTuningFrequency, "", kCenterText, 12); -tuningFrequencySlider_ = view__56; -view__54->addView(view__56); -ValueLabel* const view__57 = createValueLabel(CRect(210, 20, 290, 45), -1, "Frequency", kCenterText, 12); -view__54->addView(view__57); -Knob48* const view__58 = createKnob48(CRect(310, 45, 358, 93), kTagSetStretchedTuning, "", kCenterText, 14); -stretchedTuningSlider_ = view__58; -view__54->addView(view__58); -ValueLabel* const view__59 = createValueLabel(CRect(295, 20, 375, 45), -1, "Stretch", kCenterText, 12); -view__54->addView(view__59); -ValueLabel* const view__60 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12); -view__54->addView(view__60); -ValueButton* const view__61 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12); -scalaFileButton_ = view__61; -view__54->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); +ValueLabel* const view__46 = createValueLabel(CRect(15, 20, 95, 45), -1, "Polyphony", kCenterText, 12); +view__44->addView(view__46); +ValueMenu* const view__47 = createValueMenu(CRect(110, 60, 170, 85), kTagSetOversampling, "", kCenterText, 12); +oversamplingSlider_ = view__47; +view__44->addView(view__47); +ValueLabel* const view__48 = createValueLabel(CRect(100, 20, 180, 45), -1, "Oversampling", kCenterText, 12); +view__44->addView(view__48); +ValueLabel* const view__49 = createValueLabel(CRect(185, 20, 265, 45), -1, "Preload size", kCenterText, 12); +view__44->addView(view__49); +ValueMenu* const view__50 = createValueMenu(CRect(195, 60, 255, 85), kTagSetPreloadSize, "", kCenterText, 12); +preloadSizeSlider_ = view__50; +view__44->addView(view__50); +TitleGroup* const view__51 = createTitleGroup(CRect(200, 159, 590, 279), -1, "Tuning", kCenterText, 12); +view__43->addView(view__51); +ValueLabel* const view__52 = createValueLabel(CRect(125, 20, 205, 45), -1, "Root key", kCenterText, 12); +view__51->addView(view__52); +ValueMenu* const view__53 = createValueMenu(CRect(220, 60, 280, 85), kTagSetTuningFrequency, "", kCenterText, 12); +tuningFrequencySlider_ = view__53; +view__51->addView(view__53); +ValueLabel* const view__54 = createValueLabel(CRect(210, 20, 290, 45), -1, "Frequency", kCenterText, 12); +view__51->addView(view__54); +Knob48* const view__55 = createKnob48(CRect(310, 45, 358, 93), kTagSetStretchedTuning, "", kCenterText, 14); +stretchedTuningSlider_ = view__55; +view__51->addView(view__55); +ValueLabel* const view__56 = createValueLabel(CRect(295, 20, 375, 45), -1, "Stretch", kCenterText, 12); +view__51->addView(view__56); +ValueLabel* const view__57 = createValueLabel(CRect(20, 20, 120, 45), -1, "Scala file", kCenterText, 12); +view__51->addView(view__57); +ValueButton* const view__58 = createValueButton(CRect(20, 60, 120, 85), kTagLoadScalaFile, "DefaultScale", kCenterText, 12); +scalaFileButton_ = view__58; +view__51->addView(view__58); +ValueMenu* const view__59 = createValueMenu(CRect(135, 60, 170, 85), kTagSetScalaRootKey, "", kCenterText, 12); +scalaRootKeySlider_ = view__59; +view__51->addView(view__59); +ValueMenu* const view__60 = createValueMenu(CRect(170, 60, 200, 85), kTagSetScalaRootKey, "", kCenterText, 12); +scalaRootOctaveSlider_ = view__60; +view__51->addView(view__60); +Piano* const view__61 = createPiano(CRect(5, 400, 795, 470), -1, "", kCenterText, 14); +view__0->addView(view__61);