Wavelength
Privacy-focused, cross-platform, and open-source communication application
Loading...
Searching...
No Matches
BlobAnimation Class Referencefinal

Main widget responsible for rendering and animating the dynamic blob. More...

#include <blob_animation.h>

Inheritance diagram for BlobAnimation:
Collaboration diagram for BlobAnimation:

Public Slots

void hideAnimation ()
 Hides the animation widget and pauses event tracking.
 
void setBackgroundColor (const QColor &color)
 Sets the background color used for rendering. Updates the grid buffer and triggers a repaint.
 
void setBlobColor (const QColor &color)
 Sets the border color of the blob. Triggers a repaint.
 
void setGridColor (const QColor &color)
 Sets the color of the background grid lines. Updates the grid buffer and triggers a repaint.
 
void setGridSpacing (int spacing)
 Sets the spacing between background grid lines. Updates the grid buffer and triggers a repaint.
 
void showAnimation ()
 Makes the animation widget visible and resumes event tracking.
 

Signals

void visualizationReset ()
 Emitted when the entire visualization is reset via ResetVisualization(). Allows other UI elements to update accordingly.
 

Public Member Functions

 BlobAnimation (QWidget *parent=nullptr)
 Constructs the BlobAnimation widget. Initializes parameters, states, event handlers, timers, and the physics thread. Sets up OpenGL format and connects signals/slots between components.
 
QPointF GetBlobCenter () const
 Gets the current calculated center position of the blob. If control points are not yet initialized, return the center of the widget.
 
void PauseAllEventTracking ()
 Pauses all event tracking mechanisms (window move/resize). Stops timers, clears movement buffers, and disables the event handler. Switches the blob state to Idle.
 
void ResetLifeColor ()
 Resets the blob's border color to its original value before SetLifeColor() was called.
 
void ResetVisualization ()
 Resets the entire blob visualization to its initial state. Resets blob position, shape, and dynamics, resets the HUD, and emits visualizationReset().
 
void ResumeAllEventTracking ()
 Resumes all event tracking mechanisms after being paused. Restarts timers, enables the event handler, resets the blob state, and forces a redrawing.
 
void SetLifeColor (const QColor &color)
 Temporarily sets the blob's border color (e.g., for highlighting). Stores the original color to be restored later by ResetLifeColor().
 
 ~BlobAnimation () override
 Destructor. Stops timers, cleans up OpenGL resources, joins the physics thread, and deletes state objects.
 

Protected Member Functions

QRectF CalculateBlobBoundingRect ()
 Calculates the bounding rectangle encompassing the blob's control points, including margins for border and glow. Used for optimizing paint events.
 
void DrawGrid ()
 Draws the background grid using a separate shader program and line primitives. Generates vertex data for horizontal and vertical lines based on grid spacing.
 
bool event (QEvent *event) override
 Overridden generic event handler.
 
bool eventFilter (QObject *watched, QEvent *event) override
 Overridden event filter. Delegates filtering primarily to BlobEventHandler.
 
void initializeGL () override
 Initializes OpenGL functions, shaders, VAO, and VBO. Called once before the first paintGL call.
 
void paintEvent (QPaintEvent *event) override
 Overridden paint event handler. Delegates rendering to BlobRenderer after checking if the paint area intersects the blob's bounding box. Uses a cached background pixmap for efficiency.
 
void paintGL () override
 Renders the blob and grid using OpenGL. Called whenever the widget needs to be painted. Binds shaders, sets uniforms (projection matrix, colors, etc.), updates VBO data, and draws the blob geometry.
 
void resizeEvent (QResizeEvent *event) override
 Overridden resize event handler. Delegates processing to BlobEventHandler.
 
void resizeGL (int w, int h) override
 Handles OpenGL viewport updates when the widget is resized.
 
void UpdateBlobGeometry ()
 Updates the internal vertex buffer (gl_vertices_) based on the current blob_center_ and control_points_. Prepares the geometry data for rendering with GL_TRIANGLE_FAN.
 

Private Slots

void CheckWindowPosition ()
 Slot connected to window_position_timer_. Called frequently to check the window position. Adds position samples to the BlobTransitionManager if the window has moved or if the buffer is stale.
 
void HandleResizeTimeout ()
 Slot connected to resize_debounce_timer_. Called after a short delay following resize events. Resets the blob to the center, resets the grid buffer, and updates the widget.
 
void onStateResetTimeout ()
 Slot connected to state_reset_timer_. Called after a period of inactivity in Moving or Resizing state. Automatically switches the state back to Idle.
 
void processMovementBuffer ()
 Slot (or helper called by updateAnimation) to process the window movement buffer via BlobTransitionManager. Provides callbacks to apply inertia forces and update the last known window position.
 
void updateAnimation ()
 Slot connected to animation_timer_. Called periodically (~60 FPS) to update the animation state. Processes movement buffer, applies current state logic, and triggers a repaint if needed.
 
void updatePhysics ()
 Slot (or helper called by physics thread) to update the blob's physics simulation. Calls BlobPhysics methods for internal forces, collisions, smoothing, and constraints.
 

Private Member Functions

void ApplyForces (const QVector2D &force)
 Applies an external force vector to the blob. Delegates force application to the current state object.
 
void ApplyIdleEffect ()
 Explicitly applies the idle state effect (e.g., heartbeat). Calls the Apply method of the idle_state_ object.
 
void InitializeBlob ()
 Initializes the blob's state (control points, target points, velocity, center) based on current parameters. Generates the initial organic shape.
 
void PhysicsThreadFunction ()
 The main function executed by the physics simulation thread. Enters a loop that repeatedly calls updatePhysics(), notifies the UI thread to update, and waits for the next frame time, controlled by physics_active_ flag and physics_condition_.
 
void ResetBlobToCenter ()
 Resets the blob's position to the center of the widget and regenerates its shape. Clears velocities and switches the state to Idle.
 
void SwitchToState (BlobConfig::AnimationState new_state)
 Switches the blob's current animation state (Idle, Moving, Resizing). Updates the current_blob_state_ pointer and handles state-specific logic like timer management and resetting state properties.
 

Static Private Member Functions

static std::vector< QPointF > GenerateOrganicShape (const QPointF &center, double base_radius, int num_of_points)
 Generates a set of points forming an organic, blob-like shape around a center point. Uses random factors combined with smoothing and sinusoidal variations to create irregularity.
 

Private Attributes

QTimer animation_timer_
 Main timer driving the animation updates (~60 FPS).
 
QPointF blob_center_
 The calculated center position of the blob. Protected by points_mutex_.
 
std::vector< QPointF > control_points_
 Vector storing the current positions of the blob's control points. Modified by physics and states. Protected by points_mutex_.
 
BlobStatecurrent_blob_state_
 Pointer to the currently active state object (points to one of the above).
 
BlobConfig::AnimationState current_state_ = BlobConfig::kIdle
 The current animation state (Idle, Moving, Resizing).
 
QColor default_life_color_
 Stores the default border color before SetLifeColor is called.
 
BlobEventHandler event_handler_
 Handles window move/resize event filtering and processing.
 
QTimer event_re_enable_timer_
 Timer for delayed re-enabling of events after transitions.
 
bool events_enabled_ = true
 Flag indicating if event processing is currently enabled.
 
std::vector< GLfloat > gl_vertices_
 Vector storing vertex data (x, y pairs) to be uploaded to the VBO.
 
BlobConfig::IdleParameters idle_params_
 Structure holding parameters specific to the idle state animation (wave amplitude/frequency).
 
std::unique_ptr< IdleStateidle_state_
 Unique pointer to the Idle state logic object.
 
QSize last_size_
 Stores the last known size of the widget after a resize event.
 
QPointF last_window_position_
 Stores the last known window position.
 
QPointF last_window_position_timer_
 Stores the last window position recorded by the window_position_timer_.
 
std::unique_ptr< MovingStatemoving_state_
 Unique pointer to the Moving state logic object.
 
bool needs_redraw_ = false
 Flag indicating if a redrawing is needed in the next animation frame.
 
bool original_border_color_set_ = false
 Flag indicating if default_life_color_ has been set.
 
BlobConfig::BlobParameters params_
 Structure holding general blob appearance parameters (colors, radius, points, etc.).
 
BlobPhysics physics_
 Object responsible for calculating physics interactions.
 
std::atomic< bool > physics_active_ {true}
 Atomic flag controlling the physics thread loop.
 
std::condition_variable physics_condition_
 Condition variable used by the physics thread to wait for the next frame time.
 
BlobConfig::PhysicsParameters physics_params_
 Structure holding physics simulation parameters (stiffness, damping, etc.).
 
std::thread physics_thread_
 The separate thread object running the physics simulation (PhysicsThreadFunction).
 
std::mutex points_mutex_
 Mutex protecting access to shared data between UI and physics threads (control_points_, velocity_, etc.).
 
double precalc_max_distance_ = 0.0
 Precalculated maximum distance constraint for physics.
 
double precalc_min_distance_ = 0.0
 Precalculated minimum distance constraint for physics.
 
BlobRenderer renderer_
 Object responsible for rendering the blob, grid, and HUD.
 
QTimer resize_debounce_timer_
 Timer for debouncing resize events.
 
std::unique_ptr< ResizingStateresizing_state_
 Unique pointer to the Resizing state logic object.
 
QOpenGLShaderProgram * shader_program_ = nullptr
 Pointer to the shader program used for rendering the blob.
 
QTimer state_reset_timer_
 Timer used to automatically switch back to Idle state after inactivity in Moving/Resizing state.
 
std::vector< QPointF > target_points_
 Vector storing the target positions for control points (used by physics). Protected by points_mutex_.
 
BlobTransitionManager transition_manager_
 Manages movement analysis, velocity calculation, and state transitions based on movement.
 
QOpenGLVertexArrayObject vao_
 Vertex Array Object encapsulating vertex buffer state.
 
QOpenGLBuffer vbo_
 Vertex Buffer Object storing blob geometry data.
 
std::vector< QPointF > velocity_
 Vector storing the current velocities of the blob's control points. Protected by points_mutex_.
 
QTimer window_position_timer_
 Timer for periodically checking the window position.
 

Detailed Description

Main widget responsible for rendering and animating the dynamic blob.

This class integrates physics simulation (BlobPhysics), rendering (BlobRenderer), state management (IdleState, MovingState, ResizingState), event handling (BlobEventHandler), and transition logic (BlobTransitionManager) to create a fluid, interactive blob animation. It uses QOpenGLWidget for hardware-accelerated rendering and runs physics calculations in a separate thread for performance.

Constructor & Destructor Documentation

◆ BlobAnimation()

BlobAnimation::BlobAnimation ( QWidget * parent = nullptr)
explicit

Constructs the BlobAnimation widget. Initializes parameters, states, event handlers, timers, and the physics thread. Sets up OpenGL format and connects signals/slots between components.

Parameters
parentOptional parent widget.
Here is the call graph for this function:

◆ ~BlobAnimation()

BlobAnimation::~BlobAnimation ( )
override

Destructor. Stops timers, cleans up OpenGL resources, joins the physics thread, and deletes state objects.

Member Function Documentation

◆ ApplyForces()

void BlobAnimation::ApplyForces ( const QVector2D & force)
private

Applies an external force vector to the blob. Delegates force application to the current state object.

Parameters
forceThe force vector to apply.

◆ ApplyIdleEffect()

void BlobAnimation::ApplyIdleEffect ( )
private

Explicitly applies the idle state effect (e.g., heartbeat). Calls the Apply method of the idle_state_ object.

◆ CalculateBlobBoundingRect()

QRectF BlobAnimation::CalculateBlobBoundingRect ( )
protected

Calculates the bounding rectangle encompassing the blob's control points, including margins for border and glow. Used for optimizing paint events.

Returns
The calculated bounding rectangle.
Here is the caller graph for this function:

◆ CheckWindowPosition

void BlobAnimation::CheckWindowPosition ( )
privateslot

Slot connected to window_position_timer_. Called frequently to check the window position. Adds position samples to the BlobTransitionManager if the window has moved or if the buffer is stale.

Here is the caller graph for this function:

◆ DrawGrid()

void BlobAnimation::DrawGrid ( )
protected

Draws the background grid using a separate shader program and line primitives. Generates vertex data for horizontal and vertical lines based on grid spacing.

◆ event()

bool BlobAnimation::event ( QEvent * event)
overrideprotected

Overridden generic event handler.

Parameters
eventThe event.
Returns
Result of QWidget::event(event).
Here is the call graph for this function:
Here is the caller graph for this function:

◆ eventFilter()

bool BlobAnimation::eventFilter ( QObject * watched,
QEvent * event )
overrideprotected

Overridden event filter. Delegates filtering primarily to BlobEventHandler.

Parameters
watchedThe object being watched.
eventThe event.
Returns
True if the event was handled, false otherwise.
Here is the call graph for this function:

◆ GenerateOrganicShape()

std::vector< QPointF > BlobAnimation::GenerateOrganicShape ( const QPointF & center,
double base_radius,
int num_of_points )
staticprivate

Generates a set of points forming an organic, blob-like shape around a center point. Uses random factors combined with smoothing and sinusoidal variations to create irregularity.

Parameters
centerThe center point for the shape.
base_radiusThe average radius of the shape.
num_of_pointsThe number of control points to generate.
Returns
A vector of QPointF representing the generated control points.
Here is the caller graph for this function:

◆ GetBlobCenter()

QPointF BlobAnimation::GetBlobCenter ( ) const
inline

Gets the current calculated center position of the blob. If control points are not yet initialized, return the center of the widget.

Returns
The blob's center position as a QPointF.

◆ HandleResizeTimeout

void BlobAnimation::HandleResizeTimeout ( )
privateslot

Slot connected to resize_debounce_timer_. Called after a short delay following resize events. Resets the blob to the center, resets the grid buffer, and updates the widget.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ hideAnimation

void BlobAnimation::hideAnimation ( )
slot

Hides the animation widget and pauses event tracking.

Here is the call graph for this function:

◆ InitializeBlob()

void BlobAnimation::InitializeBlob ( )
private

Initializes the blob's state (control points, target points, velocity, center) based on current parameters. Generates the initial organic shape.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ initializeGL()

void BlobAnimation::initializeGL ( )
overrideprotected

Initializes OpenGL functions, shaders, VAO, and VBO. Called once before the first paintGL call.

◆ onStateResetTimeout

void BlobAnimation::onStateResetTimeout ( )
privateslot

Slot connected to state_reset_timer_. Called after a period of inactivity in Moving or Resizing state. Automatically switches the state back to Idle.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ paintEvent()

void BlobAnimation::paintEvent ( QPaintEvent * event)
overrideprotected

Overridden paint event handler. Delegates rendering to BlobRenderer after checking if the paint area intersects the blob's bounding box. Uses a cached background pixmap for efficiency.

Parameters
eventThe paint event.
Here is the call graph for this function:

◆ paintGL()

void BlobAnimation::paintGL ( )
overrideprotected

Renders the blob and grid using OpenGL. Called whenever the widget needs to be painted. Binds shaders, sets uniforms (projection matrix, colors, etc.), updates VBO data, and draws the blob geometry.

Here is the call graph for this function:

◆ PauseAllEventTracking()

void BlobAnimation::PauseAllEventTracking ( )

Pauses all event tracking mechanisms (window move/resize). Stops timers, clears movement buffers, and disables the event handler. Switches the blob state to Idle.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PhysicsThreadFunction()

void BlobAnimation::PhysicsThreadFunction ( )
private

The main function executed by the physics simulation thread. Enters a loop that repeatedly calls updatePhysics(), notifies the UI thread to update, and waits for the next frame time, controlled by physics_active_ flag and physics_condition_.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ processMovementBuffer

void BlobAnimation::processMovementBuffer ( )
privateslot

Slot (or helper called by updateAnimation) to process the window movement buffer via BlobTransitionManager. Provides callbacks to apply inertia forces and update the last known window position.

Here is the caller graph for this function:

◆ ResetBlobToCenter()

void BlobAnimation::ResetBlobToCenter ( )
private

Resets the blob's position to the center of the widget and regenerates its shape. Clears velocities and switches the state to Idle.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ResetLifeColor()

void BlobAnimation::ResetLifeColor ( )

Resets the blob's border color to its original value before SetLifeColor() was called.

◆ ResetVisualization()

void BlobAnimation::ResetVisualization ( )

Resets the entire blob visualization to its initial state. Resets blob position, shape, and dynamics, resets the HUD, and emits visualizationReset().

Here is the call graph for this function:

◆ resizeEvent()

void BlobAnimation::resizeEvent ( QResizeEvent * event)
overrideprotected

Overridden resize event handler. Delegates processing to BlobEventHandler.

Parameters
eventThe resize event.
Here is the call graph for this function:

◆ resizeGL()

void BlobAnimation::resizeGL ( int w,
int h )
overrideprotected

Handles OpenGL viewport updates when the widget is resized.

Parameters
wNew width.
hNew height.

◆ ResumeAllEventTracking()

void BlobAnimation::ResumeAllEventTracking ( )

Resumes all event tracking mechanisms after being paused. Restarts timers, enables the event handler, resets the blob state, and forces a redrawing.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setBackgroundColor

void BlobAnimation::setBackgroundColor ( const QColor & color)
slot

Sets the background color used for rendering. Updates the grid buffer and triggers a repaint.

Parameters
colorThe new background color.

◆ setBlobColor

void BlobAnimation::setBlobColor ( const QColor & color)
slot

Sets the border color of the blob. Triggers a repaint.

Parameters
colorThe new blob border color.

◆ setGridColor

void BlobAnimation::setGridColor ( const QColor & color)
slot

Sets the color of the background grid lines. Updates the grid buffer and triggers a repaint.

Parameters
colorThe new grid color.

◆ setGridSpacing

void BlobAnimation::setGridSpacing ( int spacing)
slot

Sets the spacing between background grid lines. Updates the grid buffer and triggers a repaint.

Parameters
spacingThe new grid spacing in pixels.

◆ SetLifeColor()

void BlobAnimation::SetLifeColor ( const QColor & color)

Temporarily sets the blob's border color (e.g., for highlighting). Stores the original color to be restored later by ResetLifeColor().

Parameters
colorThe temporary color to apply.

◆ showAnimation

void BlobAnimation::showAnimation ( )
slot

Makes the animation widget visible and resumes event tracking.

Here is the call graph for this function:

◆ SwitchToState()

void BlobAnimation::SwitchToState ( BlobConfig::AnimationState new_state)
private

Switches the blob's current animation state (Idle, Moving, Resizing). Updates the current_blob_state_ pointer and handles state-specific logic like timer management and resetting state properties.

Parameters
new_stateThe target state to switch to.
Here is the caller graph for this function:

◆ updateAnimation

void BlobAnimation::updateAnimation ( )
privateslot

Slot connected to animation_timer_. Called periodically (~60 FPS) to update the animation state. Processes movement buffer, applies current state logic, and triggers a repaint if needed.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ UpdateBlobGeometry()

void BlobAnimation::UpdateBlobGeometry ( )
protected

Updates the internal vertex buffer (gl_vertices_) based on the current blob_center_ and control_points_. Prepares the geometry data for rendering with GL_TRIANGLE_FAN.

Here is the caller graph for this function:

◆ updatePhysics

void BlobAnimation::updatePhysics ( )
privateslot

Slot (or helper called by physics thread) to update the blob's physics simulation. Calls BlobPhysics methods for internal forces, collisions, smoothing, and constraints.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ visualizationReset

void BlobAnimation::visualizationReset ( )
signal

Emitted when the entire visualization is reset via ResetVisualization(). Allows other UI elements to update accordingly.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ animation_timer_

QTimer BlobAnimation::animation_timer_
private

Main timer driving the animation updates (~60 FPS).

◆ blob_center_

QPointF BlobAnimation::blob_center_
private

The calculated center position of the blob. Protected by points_mutex_.

◆ control_points_

std::vector<QPointF> BlobAnimation::control_points_
private

Vector storing the current positions of the blob's control points. Modified by physics and states. Protected by points_mutex_.

◆ current_blob_state_

BlobState* BlobAnimation::current_blob_state_
private

Pointer to the currently active state object (points to one of the above).

◆ current_state_

BlobConfig::AnimationState BlobAnimation::current_state_ = BlobConfig::kIdle
private

The current animation state (Idle, Moving, Resizing).

◆ default_life_color_

QColor BlobAnimation::default_life_color_
private

Stores the default border color before SetLifeColor is called.

◆ event_handler_

BlobEventHandler BlobAnimation::event_handler_
private

Handles window move/resize event filtering and processing.

◆ event_re_enable_timer_

QTimer BlobAnimation::event_re_enable_timer_
private

Timer for delayed re-enabling of events after transitions.

◆ events_enabled_

bool BlobAnimation::events_enabled_ = true
private

Flag indicating if event processing is currently enabled.

◆ gl_vertices_

std::vector<GLfloat> BlobAnimation::gl_vertices_
private

Vector storing vertex data (x, y pairs) to be uploaded to the VBO.

◆ idle_params_

BlobConfig::IdleParameters BlobAnimation::idle_params_
private

Structure holding parameters specific to the idle state animation (wave amplitude/frequency).

◆ idle_state_

std::unique_ptr<IdleState> BlobAnimation::idle_state_
private

Unique pointer to the Idle state logic object.

◆ last_size_

QSize BlobAnimation::last_size_
private

Stores the last known size of the widget after a resize event.

◆ last_window_position_

QPointF BlobAnimation::last_window_position_
private

Stores the last known window position.

◆ last_window_position_timer_

QPointF BlobAnimation::last_window_position_timer_
private

Stores the last window position recorded by the window_position_timer_.

◆ moving_state_

std::unique_ptr<MovingState> BlobAnimation::moving_state_
private

Unique pointer to the Moving state logic object.

◆ needs_redraw_

bool BlobAnimation::needs_redraw_ = false
private

Flag indicating if a redrawing is needed in the next animation frame.

◆ original_border_color_set_

bool BlobAnimation::original_border_color_set_ = false
private

Flag indicating if default_life_color_ has been set.

◆ params_

BlobConfig::BlobParameters BlobAnimation::params_
private

Structure holding general blob appearance parameters (colors, radius, points, etc.).

◆ physics_

BlobPhysics BlobAnimation::physics_
private

Object responsible for calculating physics interactions.

◆ physics_active_

std::atomic<bool> BlobAnimation::physics_active_ {true}
private

Atomic flag controlling the physics thread loop.

◆ physics_condition_

std::condition_variable BlobAnimation::physics_condition_
private

Condition variable used by the physics thread to wait for the next frame time.

◆ physics_params_

BlobConfig::PhysicsParameters BlobAnimation::physics_params_
private

Structure holding physics simulation parameters (stiffness, damping, etc.).

◆ physics_thread_

std::thread BlobAnimation::physics_thread_
private

The separate thread object running the physics simulation (PhysicsThreadFunction).

◆ points_mutex_

std::mutex BlobAnimation::points_mutex_
mutableprivate

Mutex protecting access to shared data between UI and physics threads (control_points_, velocity_, etc.).

◆ precalc_max_distance_

double BlobAnimation::precalc_max_distance_ = 0.0
private

Precalculated maximum distance constraint for physics.

◆ precalc_min_distance_

double BlobAnimation::precalc_min_distance_ = 0.0
private

Precalculated minimum distance constraint for physics.

◆ renderer_

BlobRenderer BlobAnimation::renderer_
private

Object responsible for rendering the blob, grid, and HUD.

◆ resize_debounce_timer_

QTimer BlobAnimation::resize_debounce_timer_
private

Timer for debouncing resize events.

◆ resizing_state_

std::unique_ptr<ResizingState> BlobAnimation::resizing_state_
private

Unique pointer to the Resizing state logic object.

◆ shader_program_

QOpenGLShaderProgram* BlobAnimation::shader_program_ = nullptr
private

Pointer to the shader program used for rendering the blob.

◆ state_reset_timer_

QTimer BlobAnimation::state_reset_timer_
private

Timer used to automatically switch back to Idle state after inactivity in Moving/Resizing state.

◆ target_points_

std::vector<QPointF> BlobAnimation::target_points_
private

Vector storing the target positions for control points (used by physics). Protected by points_mutex_.

◆ transition_manager_

BlobTransitionManager BlobAnimation::transition_manager_
private

Manages movement analysis, velocity calculation, and state transitions based on movement.

◆ vao_

QOpenGLVertexArrayObject BlobAnimation::vao_
private

Vertex Array Object encapsulating vertex buffer state.

◆ vbo_

QOpenGLBuffer BlobAnimation::vbo_
private

Vertex Buffer Object storing blob geometry data.

◆ velocity_

std::vector<QPointF> BlobAnimation::velocity_
private

Vector storing the current velocities of the blob's control points. Protected by points_mutex_.

◆ window_position_timer_

QTimer BlobAnimation::window_position_timer_
private

Timer for periodically checking the window position.


The documentation for this class was generated from the following files: