185 return data_[index + 1];
211 return data_.get() + index;
221 data_[index + 4] = x;
222 data_[index + 5] = y + h;
238 data_[index + 4] = x;
239 data_[index + 5] = y;
257 data_[index] = shader_value;
267 void setDimensions(
int i,
float quad_width,
float quad_height,
float full_width,
float full_height) {
269 float w = quad_width * full_width / 2.0f;
270 float h = quad_height * full_height / 2.0f;
272 data_[index + 2] = w;
273 data_[index + 3] = h;
302 data_[index + 1] = y;
313 void setQuad(
int i,
float x,
float y,
float w,
float h) {
317 data_[index + 1] = y;
348 float adjusted = 2.0f * rounding;
432 std::unique_ptr<OpenGLShaderProgram::Attribute>
position_;
454 setQuad(0, -1.0f, -1.0f, 2.0f, 2.0f);
465 hover_(false), shrink_left_(false), hover_amount_(-1.0f) { }
468 static constexpr float kHoverChange = 0.2f;
469 float last_hover = hover_amount_;
471 hover_amount_ = std::min(1.0f, hover_amount_ + kHoverChange);
473 hover_amount_ = std::max(0.0f, hover_amount_ - kHoverChange);
475 if (last_hover != hover_amount_) {
482 Range<double> range = scroll_bar_->getCurrentRange();
483 Range<double> total_range = scroll_bar_->getRangeLimit();
484 float start_ratio = (range.getStart() - total_range.getStart()) / total_range.getLength();
485 float end_ratio = (range.getEnd() - total_range.getStart()) / total_range.getLength();
486 setQuadVertical(0, 1.0f - 2.0f * end_ratio, 2.0f * (end_ratio - start_ratio));
496 ScrollBar* scroll_bar_;
510 addAndMakeVisible(bar_);
517 ScrollBar::resized();
518 bar_.setBounds(getLocalBounds());
523 ScrollBar::mouseEnter(e);
528 ScrollBar::mouseExit(e);
533 ScrollBar::mouseDown(e);
534 bar_.
setColor(color_.overlaidWith(color_));
538 ScrollBar::mouseDown(e);
569 float width = rounding / bounds.getWidth() * 2.0f;
570 float height = rounding / bounds.getHeight() * 2.0f;
572 setQuad(0, -1.0f, -1.0f, width, height);
573 setQuad(1, -1.0f, 1.0f - height, width, height);
574 setQuad(2, 1.0f - width, 1.0f - height, width, height);
575 setQuad(3, 1.0f - width, -1.0f, width, height);
582 float width = rounding / bounds.getWidth() * 2.0f;
583 float height = rounding / bounds.getHeight() * 2.0f;
585 setQuad(0, -1.0f, -1.0f, width, height);
586 setQuad(1, -2.0f, -2.0f, 0.0f, 0.0f);
587 setQuad(2, -2.0f, -2.0f, 0.0f, 0.0f);
588 setQuad(3, 1.0f - width, -1.0f, width, height);
A base component class that integrates JUCE's Component with OpenGL rendering.
Definition open_gl_component.h:20
virtual void render(OpenGlWrapper &open_gl, bool animate)=0
Pure virtual function to render the component using OpenGL.
virtual void resized() override
Called when the component is resized.
Definition open_gl_component.cpp:121
A set of quads forming rounded corners, used to render corner shapes via OpenGL.
Definition open_gl_multi_quad.h:554
void setCorners(Rectangle< int > bounds, float rounding)
Configures quads to form all four rounded corners of a rectangle.
Definition open_gl_multi_quad.h:568
OpenGlCorners()
Definition open_gl_multi_quad.h:556
void setBottomCorners(Rectangle< int > bounds, float rounding)
Configures quads to form only the bottom rounded corners of a rectangle.
Definition open_gl_multi_quad.h:581
A component for rendering multiple quads using OpenGL, with customizable colors, rounding,...
Definition open_gl_multi_quad.h:16
float current_alpha_mult_
Current alpha multiplier for gradual changes.
Definition open_gl_multi_quad.h:410
Shaders::FragmentShader fragment_shader_
The fragment shader used for rendering.
Definition open_gl_multi_quad.h:396
bool draw_when_not_visible_
If true, draw even if the component is not visible.
Definition open_gl_multi_quad.h:400
std::unique_ptr< OpenGLShaderProgram::Attribute > shader_values_
Definition open_gl_multi_quad.h:435
float thickness_
Target thickness.
Definition open_gl_multi_quad.h:414
void setThickness(float thickness, bool reset=false)
Sets the thickness used by some shaders and can reset to this thickness.
Definition open_gl_multi_quad.h:338
Colour thumb_color_
Color for a "thumb" element (e.g., in a slider).
Definition open_gl_multi_quad.h:406
void setActive(bool active)
Activates or deactivates rendering of this component.
Definition open_gl_multi_quad.h:331
void paintBackground(Graphics &g) override
Suppresses background painting; rendering is handled by OpenGL.
Definition open_gl_multi_quad.h:65
Colour alt_color_
Alternate color for shader use.
Definition open_gl_multi_quad.h:404
void setQuadHorizontal(int i, float x, float w)
Sets horizontal position and width for a quad.
Definition open_gl_multi_quad.h:285
void setShaderValue(int i, float shader_value, int value_index=0)
Sets a shader value for all four vertices of a quad.
Definition open_gl_multi_quad.h:254
Colour mod_color_
Modulation color for shader.
Definition open_gl_multi_quad.h:405
void markDirty()
Marks all vertex data as dirty, prompting a refresh on the next render.
Definition open_gl_multi_quad.h:78
bool active_
If false, nothing is rendered.
Definition open_gl_multi_quad.h:401
std::unique_ptr< OpenGLShaderProgram::Uniform > color_uniform_
Definition open_gl_multi_quad.h:421
virtual void init(OpenGlWrapper &open_gl) override
Initializes OpenGL buffers and shader attributes.
Definition open_gl_multi_quad.cpp:37
void setQuad(int i, float x, float y, float w, float h)
Sets the position and size of a quad in normalized device space.
Definition open_gl_multi_quad.h:313
OpenGLShaderProgram * shader_
Definition open_gl_multi_quad.h:420
float thumb_amount_
Amount parameter for thumb effects.
Definition open_gl_multi_quad.h:408
void setQuadVertical(int i, float y, float h)
Sets vertical position and height for a quad.
Definition open_gl_multi_quad.h:299
force_inline float getQuadHeight(int i) const
Gets the height of the specified quad.
Definition open_gl_multi_quad.h:199
std::unique_ptr< OpenGLShaderProgram::Uniform > alt_color_uniform_
Definition open_gl_multi_quad.h:422
static constexpr float kThicknessDecay
Decay factor for thickness adjustments over time.
Definition open_gl_multi_quad.h:27
void setTargetComponent(Component *target_component)
Sets a target component to help position the quads.
Definition open_gl_multi_quad.h:358
void setNumQuads(int num_quads)
Sets how many quads will actually be drawn (up to max_quads).
Definition open_gl_multi_quad.h:92
bool additive_blending_
Use additive blending if true.
Definition open_gl_multi_quad.h:412
force_inline void setAltColor(Colour color)
Sets an alternate color, often used by custom shaders.
Definition open_gl_multi_quad.h:118
void setFragmentShader(Shaders::FragmentShader shader)
Sets the fragment shader used to render the quads.
Definition open_gl_multi_quad.h:86
float rounding_
Rounding radius for corners.
Definition open_gl_multi_quad.h:415
virtual void render(OpenGlWrapper &open_gl, bool animate) override
Renders the quads using OpenGL.
Definition open_gl_multi_quad.cpp:92
static constexpr int kNumFloatsPerVertex
Number of floats per vertex (x, y, w, h, plus custom shader values).
Definition open_gl_multi_quad.h:21
float * getVerticesData(int i)
Gets a pointer to the vertex data for a given quad.
Definition open_gl_multi_quad.h:209
GLuint indices_buffer_
OpenGL buffer for index data.
Definition open_gl_multi_quad.h:438
virtual void destroy(OpenGlWrapper &open_gl) override
Releases OpenGL resources when the component is destroyed.
Definition open_gl_multi_quad.cpp:69
std::unique_ptr< OpenGLShaderProgram::Uniform > background_color_uniform_
Definition open_gl_multi_quad.h:424
void resized() override
Called when the component is resized. Marks data as dirty to recalculate positions if needed.
Definition open_gl_multi_quad.h:70
void setCoordinates(int i, float x, float y, float w, float h)
Sets coordinates for a quad in normalized device space.
Definition open_gl_multi_quad.h:234
static constexpr float kAlphaInc
Increment for alpha blending adjustments.
Definition open_gl_multi_quad.h:29
force_inline void setColor(Colour color)
Sets the base color for the quads.
Definition open_gl_multi_quad.h:102
static constexpr int kNumFloatsPerQuad
Number of floats total per quad (4 vertices * 10 floats each).
Definition open_gl_multi_quad.h:23
virtual ~OpenGlMultiQuad()
Destructor. Frees any allocated OpenGL resources.
Definition open_gl_multi_quad.cpp:35
force_inline void setStartPos(float pos)
Sets a starting position used by some shaders (e.g., arc start).
Definition open_gl_multi_quad.h:150
static constexpr int kNumIndicesPerQuad
Number of indices per quad (2 triangles forming a rectangle).
Definition open_gl_multi_quad.h:25
std::unique_ptr< OpenGLShaderProgram::Uniform > mod_color_uniform_
Definition open_gl_multi_quad.h:423
void setScissorComponent(Component *scissor_component)
Sets a component for scissoring (clipping) rendering area.
Definition open_gl_multi_quad.h:365
GLuint vertex_buffer_
OpenGL buffer for vertex data.
Definition open_gl_multi_quad.h:437
force_inline float getQuadWidth(int i) const
Gets the width of the specified quad.
Definition open_gl_multi_quad.h:191
force_inline void setThumbAmount(float amount)
Sets the amount of thumb exposure (used in certain shader effects).
Definition open_gl_multi_quad.h:142
float max_arc_
Maximum arc for certain shader effects.
Definition open_gl_multi_quad.h:407
std::unique_ptr< OpenGLShaderProgram::Attribute > coordinates_
Definition open_gl_multi_quad.h:434
void setDimensions(int i, float quad_width, float quad_height, float full_width, float full_height)
Sets dimensions for a quad, typically to scale based on component size.
Definition open_gl_multi_quad.h:267
Colour color_
Base color tint.
Definition open_gl_multi_quad.h:403
std::unique_ptr< OpenGLShaderProgram::Attribute > position_
Definition open_gl_multi_quad.h:432
std::unique_ptr< OpenGLShaderProgram::Uniform > rounding_uniform_
Definition open_gl_multi_quad.h:427
std::unique_ptr< int[]> indices_
Index data for drawing quads.
Definition open_gl_multi_quad.h:418
std::unique_ptr< OpenGLShaderProgram::Uniform > thickness_uniform_
Definition open_gl_multi_quad.h:426
force_inline float getMaxArc()
Gets the current maximum arc value.
Definition open_gl_multi_quad.h:166
force_inline void setThumbColor(Colour color)
Sets a "thumb" color, potentially for scroll bars or similar widgets.
Definition open_gl_multi_quad.h:134
std::unique_ptr< OpenGLShaderProgram::Uniform > max_arc_uniform_
Definition open_gl_multi_quad.h:428
void setDrawWhenNotVisible(bool draw)
Sets whether to draw even if the component is not visible.
Definition open_gl_multi_quad.h:391
int max_quads_
Maximum number of quads.
Definition open_gl_multi_quad.h:397
std::unique_ptr< OpenGLShaderProgram::Uniform > start_pos_uniform_
Definition open_gl_multi_quad.h:430
Component * scissor_component_
The component used for scissoring (clipping).
Definition open_gl_multi_quad.h:395
void setRounding(float rounding)
Sets the rounding radius of the quads.
Definition open_gl_multi_quad.h:347
bool dirty_
If true, vertex data is dirty and needs re-upload.
Definition open_gl_multi_quad.h:402
force_inline float getQuadY(int i) const
Gets the y-position of a specified quad.
Definition open_gl_multi_quad.h:183
static constexpr int kNumVertices
Number of vertices per quad.
Definition open_gl_multi_quad.h:19
force_inline float getQuadX(int i) const
Gets the x-position of a specified quad.
Definition open_gl_multi_quad.h:175
force_inline void setMaxArc(float max_arc)
Sets the maximum arc angle or similar parameter used by some shaders.
Definition open_gl_multi_quad.h:158
float alpha_mult_
Target alpha multiplier.
Definition open_gl_multi_quad.h:411
std::unique_ptr< float[]> data_
Vertex data for all quads.
Definition open_gl_multi_quad.h:417
float start_pos_
Start position parameter for shader effects.
Definition open_gl_multi_quad.h:409
Component * target_component_
The component this relates to for sizing/positioning.
Definition open_gl_multi_quad.h:394
std::unique_ptr< OpenGLShaderProgram::Attribute > dimensions_
Definition open_gl_multi_quad.h:433
force_inline void setModColor(Colour color)
Sets a modulation color for custom effects in the shader.
Definition open_gl_multi_quad.h:126
std::unique_ptr< OpenGLShaderProgram::Uniform > thumb_color_uniform_
Definition open_gl_multi_quad.h:425
std::unique_ptr< OpenGLShaderProgram::Uniform > alpha_mult_uniform_
Definition open_gl_multi_quad.h:431
OpenGLShaderProgram * shader()
Gets the current OpenGL shader program.
Definition open_gl_multi_quad.h:372
OpenGlMultiQuad(int max_quads, Shaders::FragmentShader shader=Shaders::kColorFragment)
Constructs an OpenGlMultiQuad with a given maximum number of quads.
Definition open_gl_multi_quad.cpp:6
void setAlpha(float alpha, bool reset=false)
Sets the alpha blending multiplier, can reset to this alpha.
Definition open_gl_multi_quad.h:382
force_inline Colour getColor()
Gets the current base color.
Definition open_gl_multi_quad.h:110
std::unique_ptr< OpenGLShaderProgram::Uniform > thumb_amount_uniform_
Definition open_gl_multi_quad.h:429
void setAdditive(bool additive)
Enables or disables additive blending for rendering.
Definition open_gl_multi_quad.h:377
int num_quads_
Current number of quads to draw.
Definition open_gl_multi_quad.h:398
void setRotatedCoordinates(int i, float x, float y, float w, float h)
Sets rotated coordinates for a quad, adjusting its texture mapping.
Definition open_gl_multi_quad.h:217
float current_thickness_
Current thickness for gradual changes.
Definition open_gl_multi_quad.h:413
A convenience class for a single quad rendered via OpenGL.
Definition open_gl_multi_quad.h:447
OpenGlQuad(Shaders::FragmentShader shader)
Constructs a single quad with a given fragment shader.
Definition open_gl_multi_quad.h:453
Manages and provides access to vertex and fragment shaders used by the OpenGL rendering pipeline.
Definition shaders.h:19
FragmentShader
An enumeration of all available fragment shaders.
Definition shaders.h:58
@ kColorFragment
Definition shaders.h:63
#define VITAL_ASSERT(x)
Definition common.h:11
#define force_inline
Definition common.h:23
A helper struct containing references to OpenGL context, shaders, and display scale.
Definition shaders.h:174