Files
test/source/blender/editors/include/ED_keyframes_draw.hh
Sybren A. Stüvel 933f74ca02 Anim: Baklava, add Animation data-block to anim filtering code
Add minimal support for the `Animation` data-block to the anim filtering
code. This means:

- F-Curves in the `Animation` data-block are shown in the Dope Sheet and
  Graph Editor.
- The `Animation` is shown underneath each animated data-block, just
  like an `Action` would be.
- Contrary to Actions, the expanded/collapsed state is stored on
  `id->adt` and not on `Animation`. Because an `Animation` is intended
  to be used by multiple data-blocks, they each should have their own
  flag for this.
- In the filtering code, this PR adds the 'fillanim' channel type. This
  is simply mimicking the name from the Action's 'fillact' type.

Limitations:

- Deleting of F-Curves is explicitly blocked, as that'll be introduced
  in a later PR. The block prevents Blender from crashing.
- The Dope Sheet doesn't have an Animation mode yet, that'll be for a
  later PR too.

Pull Request: https://projects.blender.org/blender/blender/pulls/120654
2024-04-20 12:19:16 +02:00

150 lines
5.5 KiB
C++

/* SPDX-FileCopyrightText: 2009 Blender Authors, Joshua Leung. All rights reserved.
*
* SPDX-License-Identifier: GPL-2.0-or-later */
/** \file
* \ingroup editors
*/
#pragma once
#include "BLI_sys_types.h"
#include "DNA_curve_types.h"
#include "ED_keyframes_keylist.hh"
struct Animation;
struct AnimData;
struct ChannelDrawList;
struct FCurve;
struct MaskLayer;
struct Object;
struct Scene;
struct View2D;
struct bAction;
struct bActionGroup;
struct bAnimContext;
struct bDopeSheet;
struct bGPDlayer;
struct GreasePencil;
struct GreasePencilLayer;
struct GreasePencilLayerTreeGroup;
/**
* Draw simple diamond-shape keyframe.
*
* The caller should set up vertex format, bind #GPU_SHADER_KEYFRAME_SHAPE,
* `immBegin(GPU_PRIM_POINTS, n)`, then call this `n` times.
*/
struct KeyframeShaderBindings {
uint pos_id;
uint size_id;
uint color_id;
uint outline_color_id;
uint flags_id;
};
void draw_keyframe_shape(float x,
float y,
float size,
bool sel,
eBezTriple_KeyframeType key_type,
eKeyframeShapeDrawOpts mode,
float alpha,
const KeyframeShaderBindings *sh_bindings,
short handle_type,
short extreme_type);
/* ******************************* Methods ****************************** */
/* Channel Drawing ------------------ */
/* F-Curve */
void ED_add_fcurve_channel(ChannelDrawList *draw_list,
AnimData *adt,
FCurve *fcu,
float ypos,
float yscale_fac,
int saction_flag);
/* Action Group Summary */
void ED_add_action_group_channel(ChannelDrawList *draw_list,
AnimData *adt,
bActionGroup *agrp,
float ypos,
float yscale_fac,
int saction_flag);
/* Animation Summary.*/
void ED_add_animation_channel(ChannelDrawList *channel_list,
AnimData *adt,
Animation *anim,
float ypos,
float yscale_fac,
int saction_flag);
/* Action Summary */
void ED_add_action_channel(ChannelDrawList *draw_list,
AnimData *adt,
bAction *act,
float ypos,
float yscale_fac,
int saction_flag);
/* Object Summary */
void ED_add_object_channel(ChannelDrawList *draw_list,
bDopeSheet *ads,
Object *ob,
float ypos,
float yscale_fac,
int saction_flag);
/* Scene Summary */
void ED_add_scene_channel(ChannelDrawList *draw_list,
bDopeSheet *ads,
Scene *sce,
float ypos,
float yscale_fac,
int saction_flag);
/* DopeSheet Summary */
void ED_add_summary_channel(
ChannelDrawList *draw_list, bAnimContext *ac, float ypos, float yscale_fac, int saction_flag);
/* Grease Pencil cels channels */
void ED_add_grease_pencil_cels_channel(ChannelDrawList *draw_list,
bDopeSheet *ads,
const GreasePencilLayer *layer,
float ypos,
float yscale_fac,
int saction_flag);
/* Grease Pencil layer group channels */
void ED_add_grease_pencil_layer_group_channel(ChannelDrawList *draw_list,
bDopeSheet *ads,
const GreasePencilLayerTreeGroup *layer,
float ypos,
float yscale_fac,
int saction_flag);
/* Grease Pencil data channels */
void ED_add_grease_pencil_datablock_channel(ChannelDrawList *draw_list,
bDopeSheet *ads,
const GreasePencil *grease_pencil,
const float ypos,
const float yscale_fac,
int saction_flag);
/* Grease Pencil Layer */
void ED_add_grease_pencil_layer_legacy_channel(ChannelDrawList *draw_list,
bDopeSheet *ads,
bGPDlayer *gpl,
float ypos,
float yscale_fac,
int saction_flag);
/* Mask Layer */
void ED_add_mask_layer_channel(ChannelDrawList *draw_list,
bDopeSheet *ads,
MaskLayer *masklay,
float ypos,
float yscale_fac,
int saction_flag);
ChannelDrawList *ED_channel_draw_list_create();
void ED_channel_list_flush(ChannelDrawList *draw_list, View2D *v2d);
void ED_channel_list_free(ChannelDrawList *draw_list);