void Graphics::drawRect (Rectangle<float> r, const float lineThickness) const { RectangleList<float> rects; rects.addWithoutMerging (r.removeFromTop (lineThickness)); rects.addWithoutMerging (r.removeFromBottom (lineThickness)); rects.addWithoutMerging (r.removeFromLeft (lineThickness)); rects.addWithoutMerging (r.removeFromRight (lineThickness)); context.fillRectList (rects); }
void Graphics::drawRect (Rectangle<float> r, const float lineThickness) const { jassert (r.getWidth() >= 0.0f && r.getHeight() >= 0.0f); RectangleList<float> rects; rects.addWithoutMerging (r.removeFromTop (lineThickness)); rects.addWithoutMerging (r.removeFromBottom (lineThickness)); rects.addWithoutMerging (r.removeFromLeft (lineThickness)); rects.addWithoutMerging (r.removeFromRight (lineThickness)); context.fillRectList (rects); }
void drawDemo (Graphics& g) override { { RectangleList<float> verticalLines; verticalLines.ensureStorageAllocated (getWidth()); float pos = offset.getValue(); for (int x = 0; x < getWidth(); ++x) { float y = getHeight() * 0.3f; float length = y * std::abs (std::sin (x / 100.0f + 2.0f * pos)); verticalLines.addWithoutMerging (Rectangle<float> ((float) x, y - length * 0.5f, 1.0f, length)); } g.setColour (Colours::blue.withAlpha (getAlpha())); g.fillRectList (verticalLines); } { RectangleList<float> horizontalLines; horizontalLines.ensureStorageAllocated (getHeight()); float pos = offset.getValue(); for (int y = 0; y < getHeight(); ++y) { float x = getWidth() * 0.3f; float length = x * std::abs (std::sin (y / 100.0f + 2.0f * pos)); horizontalLines.addWithoutMerging (Rectangle<float> (x - length * 0.5f, (float) y, length, 1.0f)); } g.setColour (Colours::green.withAlpha (getAlpha())); g.fillRectList (horizontalLines); } g.setColour (Colours::red.withAlpha (getAlpha())); const float w = (float) getWidth(); const float h = (float) getHeight(); g.drawLine (positions[0].getValue() * w, positions[1].getValue() * h, positions[2].getValue() * w, positions[3].getValue() * h); g.drawLine (positions[4].getValue() * w, positions[5].getValue() * h, positions[6].getValue() * w, positions[7].getValue() * h); }
const RectangleList Desktop::getAllMonitorDisplayAreas (const bool clippedToWorkArea) const throw() { RectangleList rl; for (int i = 0; i < getNumDisplayMonitors(); ++i) rl.addWithoutMerging (getDisplayMonitorCoordinates (i, clippedToWorkArea)); return rl; }
RectangleList<int> Displays::getRectangleList (bool userAreasOnly) const { ASSERT_MESSAGE_MANAGER_IS_LOCKED RectangleList<int> rl; for (auto& d : displays) rl.addWithoutMerging (userAreasOnly ? d.userArea : d.totalArea); return rl; }
RectangleList Desktop::Displays::getRectangleList (bool userAreasOnly) const { RectangleList rl; for (int i = 0; i < displays.size(); ++i) { const Display& d = displays.getReference(i); rl.addWithoutMerging (userAreasOnly ? d.userArea : d.totalArea); } return rl; }
void Graphics::fillCheckerBoard (Rectangle<float> area, float checkWidth, float checkHeight, Colour colour1, Colour colour2) const { jassert (checkWidth > 0 && checkHeight > 0); // can't be zero or less! if (checkWidth > 0 && checkHeight > 0) { context.saveState(); if (colour1 == colour2) { context.setFill (colour1); context.fillRect (area); } else { auto clipped = context.getClipBounds().getIntersection (area.getSmallestIntegerContainer()); if (! clipped.isEmpty()) { const int checkNumX = (int) ((clipped.getX() - area.getX()) / checkWidth); const int checkNumY = (int) ((clipped.getY() - area.getY()) / checkHeight); const float startX = area.getX() + checkNumX * checkWidth; const float startY = area.getY() + checkNumY * checkHeight; const float right = (float) clipped.getRight(); const float bottom = (float) clipped.getBottom(); for (int i = 0; i < 2; ++i) { int cy = i; RectangleList<float> checks; for (float y = startY; y < bottom; y += checkHeight) for (float x = startX + (cy++ & 1) * checkWidth; x < right; x += checkWidth * 2.0f) checks.addWithoutMerging ({ x, y, checkWidth, checkHeight }); checks.clipTo (area); context.setFill (i == ((checkNumX ^ checkNumY) & 1) ? colour1 : colour2); context.fillRectList (checks); } } } context.restoreState(); } }
void LiveAudioInputDisplayComp::paint (Graphics& g) { RectangleList<float> waveform; const float midY = getHeight() * 0.5f; int sampleNum = (nextSample + numElementsInArray (samples) - 1); for (int x = jmin (getWidth(), (int) numElementsInArray (samples)); --x >= 0;) { const float sampleSize = midY * samples [sampleNum-- % numElementsInArray (samples)]; waveform.addWithoutMerging (Rectangle<float> ((float) x, midY - sampleSize, 1.0f, sampleSize * 2.0f)); } g.fillAll (Colours::black); g.setColour (Colours::green); g.fillRectList (waveform); }
void drawChannel (Graphics& g, const Rectangle<int>& area, const double startTime, const double endTime, const int channelNum, const float verticalZoomFactor, const double rate, const int numChans, const int sampsPerThumbSample, LevelDataSource* levelData, const OwnedArray<ThumbData>& chans) { if (refillCache (area.getWidth(), startTime, endTime, rate, numChans, sampsPerThumbSample, levelData, chans) && isPositiveAndBelow (channelNum, numChannelsCached)) { const Rectangle<int> clip (g.getClipBounds().getIntersection (area.withWidth (jmin (numSamplesCached, area.getWidth())))); if (! clip.isEmpty()) { const float topY = (float) area.getY(); const float bottomY = (float) area.getBottom(); const float midY = (topY + bottomY) * 0.5f; const float vscale = verticalZoomFactor * (bottomY - topY) / 256.0f; const MinMaxValue* cacheData = getData (channelNum, clip.getX() - area.getX()); RectangleList<float> waveform; waveform.ensureStorageAllocated (clip.getWidth()); float x = (float) clip.getX(); for (int w = clip.getWidth(); --w >= 0;) { if (cacheData->isNonZero()) { const float top = jmax (midY - cacheData->getMaxValue() * vscale - 0.3f, topY); const float bottom = jmin (midY - cacheData->getMinValue() * vscale + 0.3f, bottomY); waveform.addWithoutMerging (Rectangle<float> (x, top, 1.0f, bottom - top)); } x += 1.0f; ++cacheData; } g.fillRectList (waveform); } } }
void getHighlightArea (RectangleList<float>& area, float x, int y, int lineH, float characterWidth) const { if (highlightColumnStart < highlightColumnEnd) area.addWithoutMerging (Rectangle<float> (x + highlightColumnStart * characterWidth, (float) y, (highlightColumnEnd - highlightColumnStart) * characterWidth, (float) lineH)); }