22static LiVESWidget **fxcombos;
23static LiVESWidget **pscrolls;
24static LiVESWidget **combo_entries;
25static LiVESWidget **key_checks;
26static LiVESWidget **rb_fx_areas;
27static LiVESWidget **rb_clip_areas;
28static LiVESWidget **clip_boxes;
29static LiVESWidget *param_hbox;
30static LiVESWidget *top_hbox;
33static ulong *combo_fns;
34static ulong *rb_clip_fns;
35static ulong *rb_fx_fns;
37static int rte_keys_virtual;
38static int n_screen_areas;
39static int n_clip_boxes;
41static int next_screen_area;
43static void ce_thumbs_remove_param_boxes(
boolean remove_pinned);
44static void ce_thumbs_remove_param_box(
int key);
51 for (i = 0; i < rte_keys_virtual; i++) {
56 for (i = 0; i < rte_keys_virtual; i++) {
66#if LIVES_HAS_GRID_WIDGET
67static boolean switch_clip_cb(LiVESWidget * eventbox, LiVESXEventButton * event, livespointer user_data) {
68 int i = LIVES_POINTER_TO_INT(user_data);
76static void ce_thumbs_fx_changed(LiVESCombo * combo, livespointer user_data) {
78 int key = LIVES_POINTER_TO_INT(user_data);
84 if (cmode == mode)
return;
98 LIVES_POINTER_TO_INT(lives_widget_object_get_data(LIVES_WIDGET_OBJECT(key_checks[i]),
108 if (key >= rte_keys_virtual)
return;
111 if (!on && pscrolls[key]) ce_thumbs_remove_param_box(key);
113 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(key_checks[key]),
"active", LIVES_INT_TO_POINTER(on));
119 if (key >= rte_keys_virtual || mode < 0)
return;
122 ce_thumbs_remove_param_box(key);
127static void pin_toggled(LiVESToggleButton * t, livespointer pkey) {
128 int key = LIVES_POINTER_TO_INT(pkey);
129 boolean state = LIVES_POINTER_TO_INT(lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
"pinned"));
130 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
"pinned", LIVES_INT_TO_POINTER(!state));
133#if LIVES_HAS_GRID_WIDGET
135static void clip_area_toggled(LiVESToggleButton * t, livespointer parea) {
136 int area = LIVES_POINTER_TO_INT(parea);
145#define SPARE_CLIP_BOXES 100
148#if LIVES_HAS_GRID_WIDGET
150 LiVESWidget *thumb_image = NULL;
151 LiVESWidget *vbox, *vbox2, *vbox3;
152 LiVESWidget *usibl = NULL, *sibl = NULL;
153 LiVESWidget *hbox, *hbox2;
154 LiVESWidget *tscroll, *cscroll;
162 LiVESPixbuf *thumbnail;
165 LiVESList *fxlist = NULL;
167 GSList *rb_fx_areas_group = NULL;
168 GSList *rb_clip_areas_group = NULL;
177 int count = -1, rcount = 0;
212 fxcombos = (LiVESWidget **)
lives_malloc((rte_keys_virtual) * modes *
sizeof(LiVESWidget *));
213 pscrolls = (LiVESWidget **)
lives_malloc((rte_keys_virtual) * modes *
sizeof(LiVESWidget *));
214 combo_entries = (LiVESWidget **)
lives_malloc((rte_keys_virtual) * modes *
sizeof(LiVESWidget *));
215 key_checks = (LiVESWidget **)
lives_malloc((rte_keys_virtual) * modes *
sizeof(LiVESWidget *));
217 rb_fx_areas = (LiVESWidget **)
lives_malloc((n_screen_areas) * modes *
sizeof(LiVESWidget *));
218 rb_clip_areas = (LiVESWidget **)
lives_malloc((n_screen_areas) * modes *
sizeof(LiVESWidget *));
220 clip_boxes = (LiVESWidget **)
lives_malloc((n_clip_boxes) * modes *
sizeof(LiVESWidget *));
227 for (i = 0; i < n_clip_boxes; i++) {
228 clip_boxes[i] = NULL;
231 for (i = 0; i < rte_keys_virtual; i++) {
248 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(key_checks[i]),
"active",
251 ch_fns[i] = lives_signal_sync_connect_after(LIVES_GUI_OBJECT(key_checks[i]), LIVES_WIDGET_TOGGLED_SIGNAL,
267 combo_fns[i] = lives_signal_sync_connect(LIVES_GUI_OBJECT(fxcombos[i]), LIVES_WIDGET_CHANGED_SIGNAL,
268 LIVES_GUI_CALLBACK(ce_thumbs_fx_changed), LIVES_INT_TO_POINTER(i));
310 for (i = 0; i < n_screen_areas; i++) {
327 &rb_clip_areas_group, LIVES_BOX(hbox),
332 rb_clip_fns[i] = lives_signal_sync_connect(LIVES_GUI_OBJECT(rb_clip_areas[i]), LIVES_WIDGET_TOGGLED_SIGNAL,
333 LIVES_GUI_CALLBACK(clip_area_toggled), LIVES_INT_TO_POINTER(i));
366 i = LIVES_POINTER_TO_INT(cliplist->data);
371 cliplist = cliplist->next;
379 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(clip_boxes[count]),
"clipno", LIVES_INT_TO_POINTER(i));
397 if (rcount == cpw - 1) rcount = 0;
400 sibl = clip_boxes[count];
406 sibl = usibl = clip_boxes[count];
421 lives_signal_sync_connect(LIVES_GUI_OBJECT(clip_boxes[count]), LIVES_WIDGET_BUTTON_PRESS_EVENT,
422 LIVES_GUI_CALLBACK(switch_clip_cb), LIVES_INT_TO_POINTER(i));
424 cliplist = cliplist->next;
444 ce_thumbs_remove_param_boxes(
TRUE);
464 LiVESWidget *pin_check;
466 char *fname, *tmp, *tmp2;
470 if (key >= rte_keys_virtual)
return;
474 ce_thumbs_remove_param_boxes(
FALSE);
510 (tmp2 = (
_(
"Pin the parameter box to the window"))));
514 lives_signal_sync_connect_after(LIVES_GUI_OBJECT(pin_check), LIVES_WIDGET_TOGGLED_SIGNAL,
515 LIVES_GUI_CALLBACK(pin_toggled), LIVES_INT_TO_POINTER(key));
522 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
"pinned", LIVES_INT_TO_POINTER(
FALSE));
523 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
"update", LIVES_INT_TO_POINTER(
FALSE));
524 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
RFX_KEY, rfx);
529static void ce_thumbs_remove_param_box(
int key) {
532 if (key >= rte_keys_virtual)
return;
533 if (!pscrolls[key])
return;
534 rfx = (
lives_rfx_t *)lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
RFX_KEY);
537 pscrolls[key] = NULL;
542static void ce_thumbs_remove_param_boxes(
boolean remove_pinned) {
544 for (
int i = 0; i < rte_keys_virtual; i++) {
546 if (remove_pinned || !LIVES_POINTER_TO_INT(lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[i]),
"pinned")))
547 ce_thumbs_remove_param_box(i);
555 if (key >= rte_keys_virtual || !pscrolls[key])
return;
556 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
"update", LIVES_INT_TO_POINTER(
TRUE));
564 for (
int i = 0; i < rte_keys_virtual; i++) {
566 if (LIVES_POINTER_TO_INT(lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[i]),
"update"))) {
567 lives_widget_object_set_data(LIVES_WIDGET_OBJECT(pscrolls[i]),
"update", LIVES_INT_TO_POINTER(
FALSE));
568 rfx = (
lives_rfx_t *)lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[i]),
RFX_KEY);
579 if (key >= rte_keys_virtual)
return;
582 rfx = (
lives_rfx_t *)lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
RFX_KEY);
593 if (key >= rte_keys_virtual)
return;
596 rfx = (
lives_rfx_t *)lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
RFX_KEY);
604 for (
int i = 0; i < rte_keys_virtual; i++) {
605 if (pscrolls[i] && i == key &&
606 rfx == (
lives_rfx_t *)lives_widget_object_get_data(LIVES_WIDGET_OBJECT(pscrolls[key]),
RFX_KEY)) {
617 LiVESList *fxlist = NULL;
620 if (key >= rte_keys_virtual)
return;
644 for (
int i = 0; i < rte_keys_virtual; i++) {
675 boolean match =
FALSE;
678 for (
int i = 0; i < n_clip_boxes; i++) {
679 if (!clip_boxes[i])
break;
681 clipno = LIVES_POINTER_TO_INT(lives_widget_object_get_data(LIVES_WIDGET_OBJECT(clip_boxes[i]),
"clipno"));
709 next_screen_area = area;
void switch_clip(int type, int newclip, boolean force)
void ce_thumbs_liberate_clip_area_register(int area)
void ce_thumbs_update_params(int key, int i, LiVESList *list)
void ce_thumbs_liberate_clip_area(int area)
void ce_thumbs_set_interactive(boolean interactive)
void ce_thumbs_update_current_clip(void)
void ce_thumbs_update_visual_params(int key)
void start_ce_thumb_mode(void)
void ce_thumbs_check_for_rte(lives_rfx_t *rfx, lives_rfx_t *rte_rfx, int key)
void ce_thumbs_reset_combos(void)
void ce_thumbs_highlight_current_clip(void)
void ce_thumbs_register_rfx_change(int key, int mode)
void ce_thumbs_set_keych(int key, boolean on)
void ce_thumbs_reset_combo(int key)
void ce_thumbs_apply_rfx_changes(void)
void ce_thumbs_apply_liberation(void)
void ce_thumbs_set_mode_combo(int key, int mode)
void ce_thumbs_set_clip_area(void)
void ce_thumbs_set_fx_area(int area)
void end_ce_thumb_mode(void)
void ce_thumbs_set_key_check_state(void)
void ce_thumbs_add_param_box(int key, boolean remove)
int rte_key_getmaxmode(int key)
returns highest mode which is set
int rte_key_getmode(int key)
returns current active mode for a key (or -1)
weed_plant_t * rte_keymode_get_instance(int key, int mode)
returns refcounted filter_instance bound to key/mode (or NULL)
char * weed_instance_get_filter_name(weed_plant_t *inst, boolean get_compound_parent)
char * rte_keymode_get_filter_name(int key, int mode, boolean add_notes)
returns name of filter_class bound to key/mode (or "")
boolean rte_key_setmode(int key, int newmode)
newmode has two special values, -1 = cycle forwards, -2 = cycle backwards key is 1 based,...
LIVES_GLOBAL_INLINE int weed_instance_unref(weed_plant_t *inst)
#define WEED_LEAF_HOST_KEY
boolean rte_on_off_callback_hook(LiVESToggleButton *button, livespointer user_data)
for widgets
LIVES_GLOBAL_INLINE int rte_getmodespk(void)
_palette * palette
interface colour settings
#define CLIP_HAS_VIDEO(clip)
void get_basename(char *filename)
void lives_list_free_all(LiVESList **)
#define IS_NORMAL_CLIP(clip)
@ CLIP_TYPE_VIDEODEV
frames from video device
@ CLIP_TYPE_YUV4MPEG
yuv4mpeg stream
#define LIVES_IS_INTERACTIVE
#define LIVES_MAIN_WINDOW_WIDGET
#define STYLE_1
turn on theming if set
#define SCREEN_AREA_BACKGROUND
#define SCREEN_AREA_FOREGROUND
LiVESPixbuf * make_thumb(lives_mt *mt, int file, int width, int height, frames_t frame, LiVESInterpType interp, boolean noblanks)
#define CLIP_THUMB_HEIGHT
int set_param_from_list(LiVESList *plist, lives_param_t *param, int pnum, boolean with_min_max, boolean upd)
update values for param using values in plist if upd is TRUE, the widgets for that param also are upd...
void on_paramwindow_button_clicked(LiVESButton *button, lives_rfx_t *rfx)
void update_visual_params(lives_rfx_t *rfx, boolean update_hidden)
apply internal value changes to interface widgets
_fx_dialog * on_fx_pre_activate(lives_rfx_t *rfx, boolean is_realtime, LiVESWidget *pbox)
boolean make_param_box(LiVESVBox *top_vbox, lives_rfx_t *rfx)
make a dynamic parameter window
void rfx_free(lives_rfx_t *rfx)
lives_rfx_t * weed_to_rfx(weed_plant_t *plant, boolean show_reinits)
LiVESWidgetColor menu_and_bars
LiVESWidgetColor normal_back
lives_clip_type_t clip_type
char name[CLIP_NAME_MAXLEN]
the display name
void * source
points to the source (e.g. a weed_plant_t)
int min_frames
for Weed, 1
volatile uint64_t rte
current max for VJ mode == 64 effects on fg clip
lives_clip_t * files[MAX_FILES+1]
+1 for the clipboard
boolean block_param_updates
block visual param changes from updating real values
LiVESList * cliplist
hash table of clips in menu order
lives_screen_area_t * screen_areas
LiVESWidget * message_box
int scrap_file
we throw odd sized frames here when recording in real time; used if a source is a generator or stream
int num_tr_applied
number of transitions active
int blend_file
background clip details
int ascrap_file
scrap file for recording audio scraps
#define lives_strdup_printf(fmt,...)