47 GList *node = g_list_find(dev->
forms, form);
73 GList *forms_shared = g_list_copy(forms);
74 for(GList *node = forms_shared; node; node = g_list_next(node))
77 GList *old_forms = dev->
forms;
78 dev->
forms = forms_shared;
99 for(GList *form_node = dev->
forms; form_node; form_node = g_list_next(form_node))
107 GList *forms_snapshot = g_list_copy(dev->
forms);
108 for(GList *node = forms_snapshot; node; node = g_list_next(node))
114 return forms_snapshot;
int dt_atomic_get_int(dt_atomic_int *var)
int dt_atomic_sub_int(dt_atomic_int *var, int decr)
int dt_atomic_add_int(dt_atomic_int *var, int incr)
typedef void((*dt_cache_allocate_t)(void *userdata, dt_cache_entry_t *entry))
static int dt_pthread_rwlock_wrlock(dt_pthread_rwlock_t *rwlock) ACQUIRE(rwlock) NO_THREAD_SAFETY_ANALYSIS
static int dt_pthread_rwlock_unlock(dt_pthread_rwlock_t *rwlock) RELEASE_GENERIC(rwlock) NO_THREAD_SAFETY_ANALYSIS
static int dt_pthread_rwlock_rdlock(dt_pthread_rwlock_t *rwlock) ACQUIRE_SHARED(rwlock) NO_THREAD_SAFETY_ANALYSIS
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
void dt_masks_form_invalidate_gravity_center(dt_masks_form_t *mask_form)
void dt_masks_free_form(dt_masks_form_t *form)
dt_masks_form_t * dt_masks_dup_masks_form(const dt_masks_form_t *form)
Deep-copy a mask form, including its points list.
dt_masks_form_t * dt_masks_get_from_id_ext(GList *forms, int id)
The interactive half of the masks subsystem: the editing state (dt_masks_form_gui_t),...
GList * dt_masks_snapshot_current_forms(dt_develop_t *dev, gboolean reset_changed)
void dt_masks_replace_current_forms(dt_develop_t *dev, GList *forms)
dt_masks_form_t * dt_masks_form_ref(dt_masks_form_t *form)
void dt_masks_form_unref(dt_masks_form_t *form)
dt_masks_form_t * dt_masks_cow_touch(dt_develop_t *dev, dt_masks_form_t *form)
void dt_masks_release_all_forms(dt_develop_t *dev)
struct dt_masks_form_gui_t * form_gui
dt_pthread_rwlock_t masks_mutex