File: gap_mov_dialog.h

package info (click to toggle)
gimp-gap 2.6.0%2Bdfsg-1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 19,656 kB
  • ctags: 7,358
  • sloc: ansic: 119,801; sh: 3,890; makefile: 932; lisp: 97; pascal: 55
file content (230 lines) | stat: -rw-r--r-- 8,915 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
/* gap_mov_dialog.h
 * 1997.11.06 hof (Wolfgang Hofer)
 *
 * GAP ... Gimp Animation Plugins
 *
 * Dialog Window for gap_mov
 *
 */
/* The GIMP -- an image manipulation program
 * Copyright (C) 1995 Spencer Kimball and Peter Mattis
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */
#ifndef _GAP_MOV_DIALOG_H
#define _GAP_MOV_DIALOG_H

/* revision history:
 * gimp    1.3.20d; 2003/10/14  hof: added bluebox stuff
 * gimp    1.3.20d; 2003/10/05  hof: added tweenindex (twix)
 * gimp    1.3.20c; 2003/09/29  hof: new features: perspective transformation, tween_layer and trace_layer
 *                                   changed opacity, rotation and resize from int to gdouble
 * gimp    1.3.14a; 2003/05/24  hof: moved render procedures to module gap_mov_render
 * gimp    1.1.29b; 2000/11/19  hof: new feature: FRAME based Stepmodes, 
 *                                   increased controlpoint Limit GAP_MOV_MAX_POINT (from 256 -> 1024)
 * gimp    1.1.20a; 2000/04/25  hof: support for keyframes, anim_preview
 * version 0.96.02; 1998.07.25  hof: added clip_to_img
 */

#include "gap_bluebox.h"

#define GAP_MOV_KEEP_SRC_PAINTMODE 4444

typedef enum
{
  GAP_STEP_LOOP      = 0,
  GAP_STEP_LOOP_REV  = 1,
  GAP_STEP_ONCE      = 2,
  GAP_STEP_ONCE_REV  = 3,
  GAP_STEP_PING_PONG = 4,
  GAP_STEP_NONE      = 5,
  GAP_STEP_FRAME_LOOP      = 100,
  GAP_STEP_FRAME_LOOP_REV  = 101,
  GAP_STEP_FRAME_ONCE      = 102,
  GAP_STEP_FRAME_ONCE_REV  = 103,
  GAP_STEP_FRAME_PING_PONG = 104,
  GAP_STEP_FRAME_NONE      = 105
} GapMovStepMode;

#define GAP_STEP_FRAME      GAP_STEP_FRAME_LOOP

typedef enum
{
  GAP_HANDLE_LEFT_TOP  = 0,
  GAP_HANDLE_LEFT_BOT  = 1,
  GAP_HANDLE_RIGHT_TOP = 2,
  GAP_HANDLE_RIGHT_BOT = 3,
  GAP_HANDLE_CENTER    = 4
} GapMovHandle;

typedef enum
{
  GAP_APV_EXACT      = 0,
  GAP_APV_ONE_FRAME  = 1,
  GAP_APV_QUICK      = 2
} GapMovApvMode;


typedef enum
{
  GAP_MOV_SEL_IGNORE          = 0,
  GAP_MOV_SEL_INITIAL         = 1,
  GAP_MOV_SEL_FRAME_SPECIFIC  = 2
} GapMovSelMode;

typedef struct {
        long    dst_frame_nr;     /* current destination frame_nr */
        long    src_layer_idx;    /* index of current layer (used for multilayer stepmodes) */
        long    src_frame_idx;    /* current frame number (used for source frame stepmodes) */
        gdouble src_layer_idx_dbl;
        gdouble src_frame_idx_dbl;
        gint32 *src_layers;       /* array of source images layer id's (used for multilayer stepmodes) */
        long    src_last_layer;   /* index of last layer 0 upto n-1 (used for multilayer stepmodes) */
        gdouble currX,  currY;
        gint    l_handleX;
        gint    l_handleY;
        
        gdouble currOpacity;
        gdouble currWidth;
        gdouble currHeight;
        gdouble currRotation;

        gdouble currTTLX;     /*  transform x top left */
        gdouble currTTLY;     /*  transform y top left */
        gdouble currTTRX;     /*  transform x top right */
        gdouble currTTRY;     /*  transform y top right */
        gdouble currTBLX;     /*  transform x bot left */
        gdouble currTBLY;     /*  transform y bot left */
        gdouble currTBRX;     /*  transform x bot right */
        gdouble currTBRY;     /*  transform y bot right */
        
        gdouble currSelFeatherRadius;
} GapMovCurrent;


typedef struct {
        gint    p_x, p_y;   /* +- path koordinates */
        gdouble opacity;    /* 0.0  upto 100.0% */
        gdouble w_resize;   /* width resize 10 upto 300% */
        gdouble h_resize;   /* height resize 10 upto 300% */
        gdouble rotation;   /* rotatation +- degrees */
        
        gint    keyframe_abs;
        gint    keyframe;
        
        /* 4-point transform distortion (perspective) */
        gdouble ttlx;     /* 0.0 upto 10.0 transform x top left */
        gdouble ttly;     /* 0.0 upto 10.0 transform y top left */
        gdouble ttrx;     /* 0.0 upto 10.0 transform x top right */
        gdouble ttry;     /* 0.0 upto 10.0 transform y top right */
        gdouble tblx;     /* 0.0 upto 10.0 transform x bot left */
        gdouble tbly;     /* 0.0 upto 10.0 transform y bot left */
        gdouble tbrx;     /* 0.0 upto 10.0 transform x bot right */
        gdouble tbry;     /* 0.0 upto 10.0 transform y bot right */

        /* 4-point transform distortion (perspective) */
        gdouble sel_feather_radius;
} GapMovPoint;

#define GAP_MOV_MAX_POINT 1024

/*
 * Notes:
 * - The source image MUST NOT be one of the Frames
 *   of the destination Animation !!
 */

typedef struct {
        gint32         src_image_id;   /* source image */
        gint32         src_layer_id;   /* id of layer (to begin with) */
        GapMovHandle   src_handle;
        GapMovStepMode src_stepmode;
        GapMovSelMode  src_selmode;
        int            src_paintmode;
        gint           src_force_visible;      /* TRUE FALSE */
        gint           src_apply_bluebox;      /* TRUE FALSE */
        gint           clip_to_img;            /* TRUE FALSE */

        gint32         tmpsel_image_id;     /* a temporary image to save the selection of the source image or frame */
        gint32         tmpsel_channel_id;   /* the selection */

        gdouble        step_speed_factor;
        gdouble        tween_opacity_initial;
        gdouble        tween_opacity_desc;
        gdouble        trace_opacity_initial;
        gdouble        trace_opacity_desc;
        gint           tracelayer_enable;
        gint           tween_steps;     /* 0 == no virtual tweens between frames */

        gint    point_idx;           /* 0 upto MAX_POINT -1 */
        gint    point_idx_max;       /* 0 upto MAX_POINT -1 */
        GapMovPoint point[GAP_MOV_MAX_POINT];

        gint    dst_range_start;  /* use current frame as default */
        gint    dst_range_end;
        gint    dst_layerstack;

        /* for dialog only */   
        gint32  dst_image_id;      /* frame image */
        gint32  tmp_image_id;      /* temp. flattened preview image */
        gint32  tmp_alt_image_id;  /* temp. preview image (preloaded preview frame) */
        gint32  tmp_alt_framenr;   /* framenr of the tmp_alt_image_id */

        /* for generating animated preview only */
        GapMovApvMode  apv_mode;
        gint32   apv_src_frame;     /* image_id of the (already scaled) baseframe
                                     * or -1 in exact mode.
                                     * (exact mode uses unscaled original frames)
                                     */
        gint32   apv_mlayer_image;  /* destination image_id for the animated preview
                                     * -1 if we are not in anim_preview mode
                                     */
        gchar   *apv_gap_paste_buff;  /* Optional PasteBuffer (to store preview frames)
                                       * "/tmp/gimp_video_paste_buffer/gap_pasteframe_" 
                                       * NULL if we do not copy frames to a paste_buffer
                                       */

        gdouble  apv_framerate;
        gdouble  apv_scalex;
        gdouble  apv_scaley;

        /* for FRAME based stepmodes */
        gint32   cache_src_image_id;    /* id of the source image (from where cache image was copied) */ 
        gint32   cache_tmp_image_id;    /* id of a cached flattened copy of the src image */
        gint32   cache_tmp_layer_id;    /* the only visible layer in the cached image */
        gint32   cache_frame_number;
        GapAnimInfo *cache_ainfo_ptr;

        /* for tween and trace layer processing */
        gint32 tween_image_id;   /* -1 if no tweening */
        gint32 tween_layer_id;   /* -1 if no tweening */
        gint32 trace_image_id;   /* -1 if no tracing */
        gint32 trace_layer_id;   /* -1 if no tracing */
        gint   twix;             /* current tweenindex, 0 is used for the real frame, processing order: tween_steps .... 2, 1, 0 */

        /* for the bluebox filter */
        GapBlueboxGlobalParams *bbp;
        GapBlueboxGlobalParams *bbp_pv;

} GapMovValues;

typedef struct {
        GapAnimInfo  *dst_ainfo_ptr;      /* destination frames */
        GapMovValues *val_ptr;
} GapMovData;

long  gap_mov_dlg_move_dialog (GapMovData *mov_ptr);

#endif