/** * * Copyright (c) 2013 Pascal Gauthier. * * 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 3 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * */ #include "DXLookNFeel.h" #include "DXComponents.h" #include "Dexed.h" Colour DXLookNFeel::background = Colour(60,50,47); Colour DXLookNFeel::fillColour = Colour(77,159,151); Colour DXLookNFeel::lightBackground = Colour(78,72,63); Colour DXLookNFeel::ctrlBackground = Colour(20,18,18); Colour DXLookNFeel::comboBoxBackground = Colour(20,18,18); DXLookNFeel::DXLookNFeel() { setColour(TextButton::buttonColourId,Colour(0xFF0FC00F)); setColour(TextButton::textColourOnId, Colours::white); setColour(TextButton::textColourOffId, Colours::white); setColour(Slider::rotarySliderOutlineColourId,Colour(0xFF0FC00F)); setColour(Slider::rotarySliderFillColourId,Colour(0xFFFFFFFF)); setColour(AlertWindow::backgroundColourId,lightBackground); setColour(AlertWindow::textColourId, Colours::white); setColour(TextEditor::backgroundColourId,ctrlBackground); setColour(TextEditor::textColourId, Colours::white); setColour(TextEditor::highlightColourId, fillColour); setColour(TextEditor::outlineColourId, Colours::transparentBlack); setColour(ComboBox::backgroundColourId,ctrlBackground); setColour(ComboBox::textColourId, Colours::white); setColour(ComboBox::buttonColourId, Colours::white); setColour(PopupMenu::backgroundColourId, background); setColour(PopupMenu::textColourId, Colours::white); setColour(PopupMenu::highlightedTextColourId, Colours::white); setColour(PopupMenu::highlightedBackgroundColourId, fillColour); defaultFont = Typeface::createSystemTypefaceFor(BinaryData::NotoSansRegular_ttf, BinaryData::NotoSansRegular_ttfSize); defaultFontBold = Typeface::createSystemTypefaceFor(BinaryData::NotoSansBold_ttf, BinaryData::NotoSansBold_ttfSize); } Typeface::Ptr DXLookNFeel::getTypefaceForFont(const Font &) { return defaultFont; } void DXLookNFeel::drawRotarySlider( Graphics &g, int x, int y, int width, int height, float sliderPosProportional, float rotaryStartAngle, float rotaryEndAngle, Slider &slider ) { Image myStrip = ImageCache::getFromMemory(BinaryData::Knob_34x34_png, BinaryData::Knob_34x34_pngSize); const double fractRotation = (slider.getValue() - slider.getMinimum()) / (slider.getMaximum() - slider.getMinimum()); //value between 0 and 1 for current amount of rotation const int nFrames = myStrip.getHeight()/myStrip.getWidth(); // number of frames for vertical film strip const int frameIdx = (int)ceil(fractRotation * ((double)nFrames-1.0) ); // current index from 0 --> nFrames-1 const float radius = jmin (width / 2.0f, height / 2.0f) ; const float centreX = x + width * 0.5f; const float centreY = y + height * 0.5f; const float rx = centreX - radius - 1.0f; const float ry = centreY - radius - 1.0f; g.drawImage(myStrip, (int)rx, (int)ry, 2*(int)radius, 2*(int)radius, 0, frameIdx*myStrip.getWidth(), myStrip.getWidth(), myStrip.getWidth()); }; void DXLookNFeel::drawToggleButton(Graphics& g, ToggleButton& button, bool isMouseOverButton, bool isButtonDown) { Image myStrip = ImageCache::getFromMemory(BinaryData::Switch_48x26_png, BinaryData::Switch_48x26_pngSize); g.drawImage(myStrip, 0, 0, 48, 26, 0, button.getToggleState() ? 0 : 26, 48, 26); } void DXLookNFeel::drawButtonBackground(Graphics &g, Button &button, const Colour& backgroundColour, bool isMouseOverButton, bool isButtonDown) { Image myStrip = ImageCache::getFromMemory(BinaryData::ButtonUnlabeled_50x30_png, BinaryData::ButtonUnlabeled_50x30_pngSize); int w = button.getWidth(); // dx, dy, dw, dl, sx, sy, sw, sl g.drawImage(myStrip, 0, 0, 3, 30, 0, isButtonDown ? 30 : 0, 3, 30); g.drawImage(myStrip, 3, 0, w-6, 30, 3, isButtonDown ? 30 : 0, 44, 30); g.drawImage(myStrip, w-3, 0, 3, 30, 47, isButtonDown ? 30 : 0, 47, 30); } void DXLookNFeel::drawLinearSliderBackground (Graphics&, int x, int y, int width, int height, float sliderPos, float minSliderPos, float maxSliderPos, const Slider::SliderStyle, Slider&) { // NOP } void DXLookNFeel::drawLinearSliderThumb (Graphics& g, int x, int y, int width, int height, float sliderPos, float minSliderPos, float maxSliderPos, const Slider::SliderStyle, Slider&) { Image myStrip = ImageCache::getFromMemory(BinaryData::Slider_26x26_png, BinaryData::Slider_26x26_pngSize); int p = sliderPos - minSliderPos; p -= 6; g.drawImage(myStrip, p, 0, 26, 26, 0, 0, 26, 26); } Font DXLookNFeel::getTextButtonFont(TextButton& button, int buttonHeight) { return Font(defaultFontBold); } void DXLookNFeel::positionComboBoxText(ComboBox& box, Label& label) { ComboBox *src = &box; // I'm not proud of this one, but really... it must be another way to do this.... ComboBoxImage* img = dynamic_cast(src); if(img != 0) { return; } LookAndFeel_V3::positionComboBoxText(box, label); }