void ProjucerLookAndFeel::drawTabButton (TabBarButton& button, Graphics& g, bool isMouseOver, bool isMouseDown) { const auto area = button.getActiveArea(); auto backgroundColour = findColour (button.isFrontTab() ? secondaryBackgroundColourId : inactiveTabBackgroundColourId); auto iconColour = findColour (button.isFrontTab() ? activeTabIconColourId : inactiveTabIconColourId); g.setColour (backgroundColour); g.fillRect (area); const auto alpha = button.isEnabled() ? ((isMouseOver || isMouseDown) ? 1.0f : 0.8f) : 0.3f; #ifndef BUILDING_JUCE_COMPILEENGINE if (button.getName() == "Project") { auto icon = Icon (getIcons().closedFolder, iconColour.withMultipliedAlpha (alpha)); icon.draw (g, button.getTextArea().reduced (8, 8).toFloat(), false); } else if (button.getName() == "Build") { auto icon = Icon (getIcons().buildTab, iconColour.withMultipliedAlpha (alpha)); icon.draw (g, button.getTextArea().reduced (8, 8).toFloat(), false); } else #endif { auto textColour = findColour (defaultTextColourId).withMultipliedAlpha (alpha); TextLayout textLayout; LookAndFeel_V3::createTabTextLayout (button, (float) area.getWidth(), (float) area.getHeight(), textColour, textLayout); textLayout.draw (g, button.getTextArea().toFloat()); } }
void CabbageIDELookAndFeel::drawAlertBox (Graphics& g, AlertWindow& alert, const Rectangle<int>& textArea, TextLayout& textLayout) { g.fillAll (CabbageSettings::getColourFromValueTree (colourTree, CabbageColourIds::alertWindowBackground, Colour (Colour::fromString("2ff52636a")))); int iconSpaceUsed = 160; if (alert.getAlertType() != AlertWindow::NoIcon) { Path icon; if (alert.getAlertType() == AlertWindow::WarningIcon) { Rectangle<float> rect (alert.getLocalBounds().removeFromLeft (iconSpaceUsed).toFloat()); const Image warningImage = ImageCache::getFromMemory (CabbageBinaryData::WarningIcon_png, CabbageBinaryData::WarningIcon_pngSize); //g.drawImage(warningImage, rect.reduced(20)); } if (alert.getAlertType() == AlertWindow::QuestionIcon) { Rectangle<float> rect (alert.getLocalBounds().removeFromLeft (iconSpaceUsed - 20).toFloat()); const Image warningImage = ImageCache::getFromMemory (CabbageBinaryData::WarningIcon_png, CabbageBinaryData::WarningIcon_pngSize); //g.drawImage(warningImage, rect.reduced(25)); } MemoryInputStream svgStream (CabbageBinaryData::processstop_svg, CabbageBinaryData::processstop_svgSize, false); ScopedPointer<XmlElement> svg (XmlDocument::parse (svgStream.readString())); if (svg == nullptr) jassert (false); ScopedPointer<Drawable> drawable; if (svg != nullptr) { drawable = Drawable::createFromSVG (*svg); Rectangle<float> rect (20, 20, 80, 80);//alert.getLocalBounds().removeFromLeft (iconSpaceUsed - 20).withHeight(130).toFloat()); drawable->setTransformToFit (rect, RectanglePlacement::stretchToFit); drawable->draw (g, 1.f, AffineTransform()); } } g.setColour (alert.findColour (AlertWindow::textColourId)); textLayout.draw (g, Rectangle<int> (textArea.getX() + iconSpaceUsed - 50, textArea.getY(), textArea.getWidth() - iconSpaceUsed - 40, textArea.getHeight()).toFloat()); g.setColour (alert.findColour (AlertWindow::outlineColourId)); g.drawRect (0, 0, alert.getWidth(), alert.getHeight()); }
void AttributedString::draw (Graphics& g, const Rectangle<float>& area) const { if (text.isNotEmpty() && g.clipRegionIntersects (area.getSmallestIntegerContainer())) { if (! g.getInternalContext()->drawTextLayout (*this, area)) { TextLayout layout; layout.createLayout (*this, area.getWidth()); layout.draw (g, area); } } }
void CtrlrLuaMethodEditorTabsLF::drawTabButton (TabBarButton& button, Graphics& g, bool isMouseOver, bool isMouseDown) { const Rectangle<int> activeArea (button.getActiveArea()); const TabbedButtonBar::Orientation o = button.getTabbedButtonBar().getOrientation(); const Colour bkg (button.getTabBackgroundColour()); if (button.getToggleState()) { g.setColour (bkg); } else { Point<int> p1, p2; switch (o) { case TabbedButtonBar::TabsAtBottom: p1 = activeArea.getBottomLeft(); p2 = activeArea.getTopLeft(); break; case TabbedButtonBar::TabsAtTop: p1 = activeArea.getTopLeft(); p2 = activeArea.getBottomLeft(); break; case TabbedButtonBar::TabsAtRight: p1 = activeArea.getTopRight(); p2 = activeArea.getTopLeft(); break; case TabbedButtonBar::TabsAtLeft: p1 = activeArea.getTopLeft(); p2 = activeArea.getTopRight(); break; default: jassertfalse; break; } g.setGradientFill (ColourGradient (bkg.brighter (0.2f), (float) p1.x, (float) p1.y, bkg.darker (0.1f), (float) p2.x, (float) p2.y, false)); } g.fillRect (activeArea); g.setColour (button.findColour (TabbedButtonBar::tabOutlineColourId)); Rectangle<int> r (activeArea); if (o != TabbedButtonBar::TabsAtBottom) g.fillRect (r.removeFromTop (1)); if (o != TabbedButtonBar::TabsAtTop) g.fillRect (r.removeFromBottom (1)); if (o != TabbedButtonBar::TabsAtRight) g.fillRect (r.removeFromLeft (1)); if (o != TabbedButtonBar::TabsAtLeft) g.fillRect (r.removeFromRight (1)); const float alpha = button.isEnabled() ? ((isMouseOver || isMouseDown) ? 1.0f : 0.8f) : 0.3f; Colour col (bkg.contrasting().withMultipliedAlpha (alpha)); if (TabbedButtonBar* bar = button.findParentComponentOfClass<TabbedButtonBar>()) { TabbedButtonBar::ColourIds colID = button.isFrontTab() ? TabbedButtonBar::frontTextColourId : TabbedButtonBar::tabTextColourId; if (bar->isColourSpecified (colID)) col = bar->findColour (colID); else if (isColourSpecified (colID)) col = findColour (colID); } const Rectangle<float> area (button.getTextArea().toFloat()); float length = area.getWidth(); float depth = area.getHeight(); if (button.getTabbedButtonBar().isVertical()) std::swap (length, depth); TextLayout textLayout; createTabTextLayout (button, length, depth, col, textLayout); AffineTransform t; switch (o) { case TabbedButtonBar::TabsAtLeft: t = t.rotated (float_Pi * -0.5f).translated (area.getX(), area.getBottom()); break; case TabbedButtonBar::TabsAtRight: t = t.rotated (float_Pi * 0.5f).translated (area.getRight(), area.getY()); break; case TabbedButtonBar::TabsAtTop: case TabbedButtonBar::TabsAtBottom: t = t.translated (area.getX(), area.getY()); break; default: jassertfalse; break; } g.addTransform (t); textLayout.draw (g, Rectangle<float> (length, depth)); }