translation fixes, pref wdw min width, xfer mode ops
[goodguy/history.git] / cinelerra-5.1 / cinelerra / overlayframe.inc
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  * 
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * 
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  * 
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  * 
20  */
21
22 #ifndef OVERLAYFRAME_INC
23 #define OVERLAYFRAME_INC
24
25 // Modes
26
27 /*
28 source
29 x = porter duff operator
30 g = good guy
31 a = android
32 * = hv 4.6.1
33
34 cin 5.1 overlayframe TRANSFER_MODEs
35 x       DST [Da, Dc]
36 x       DST_ATOP [Sa, Sc * (1 - Da) + Dc * Sa]
37 x       DST_IN  [Da * Sa, Dc * Sa]
38 x       DST_OUT [Da * (1 - Sa), Dc * (1 - Sa)]
39 x       DST_OVER [Sa * (1 - Da) + Da, Sc * (1 - Da) + Dc]
40 x       SRC [Sa, Sc]
41 x       SRC_ATOP [Da, Sc * Da + Dc * (1 - Sa)]
42 x       SRC_IN  [Sa * Da, Sc * Da]
43 x       SRC_OUT [Sa * (1 - Da), Sc * (1 - Da)]
44 x       SRC_OVER [Sa + Da * (1 - Sa), Sc + (1 - Sa) * Dc]
45 g       OR [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc]
46 a       XOR     [Sa * (1 - Da) + Da * (1 - Sa), Sc * (1 - Da) + Dc * (1 ­ Sa)]
47 *       NORMAL [Sa + Da * (1 - Sa), Sc * Sa + Dc * (1 ­ Sa)])
48 *       ADDITION [(Sa + Da), (Sc + Dc)]
49 *       SUBTRACT [(Sa - Da), (Sc ­ Dc)]
50 *       MULTIPLY [(Sa * Da), Sc * Dc]
51 *       DIVIDE  [(Sa / Da), (Sc / Dc)]
52 *       REPLACE [Sa, Sc] (fade = 1)
53 *       MAX     [max(Sa, Da), MAX(Sc, Dc)]
54 *       MIN [min(Sa, Da), MIN(Sc, Dc)]
55 g       AVERAGE [(Sa + Da) * 0.5, (Sc + Dc) * 0.5]
56 a       DARKEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)]
57 a       LIGHTEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)]
58
59 https://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
60         ADD Saturate(S + D)
61         CLEAR [0, 0]  
62         DARKEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + min(Sc, Dc)]  
63         DST [Da, Dc]  
64         DST_ATOP [Sa, Sa * Dc + Sc * (1 - Da)]  
65         DST_IN [Sa * Da, Sa * Dc]  
66         DST_OUT [Da * (1 - Sa), Dc * (1 - Sa)]  
67         DST_OVER [Sa + (1 - Sa)*Da, Rc = Dc + (1 - Da)*Sc]  
68         LIGHTEN [Sa + Da - Sa*Da, Sc*(1 - Da) + Dc*(1 - Sa) + max(Sc, Dc)]  
69         MULTIPLY [Sa * Da, Sc * Dc]  
70         OVERLAY (defined, but unspecified in android)
71         SCREEN [Sa + Da - Sa * Da, Sc + Dc - Sc * Dc]  
72         SRC [Sa, Sc]  
73         SRC_ATOP [Da, Sc * Da + (1 - Sa) * Dc]  
74         SRC_IN [Sa * Da, Sc * Da]  
75         SRC_OUT [Sa * (1 - Da), Sc * (1 - Da)]  
76         SRC_OVER [Sa + (1 - Sa)*Da, Rc = Sc + (1 - Sa)*Dc]  
77         XOR [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc]  
78
79 https://docs.gimp.org/2.6/en/gimp-concepts-layer-modes.html
80         Normal          [M]
81         Dissolve        [I + dots]
82         Multiply        [M * I]
83         Divide          [I / M]
84         Screen          [1 - (1-M)*(1-I)]
85         Overlay         [I * (I + 2*M*(1-I))]
86         Dodge           [I / (1-M)]
87         Burn            [1 - (1-I) / M]
88         Hard light      [M>0.5 ? (1 - (1-2*(M-0.5))*(1 - I) : 2*M*I]
89         Soft light      [((1-I)*M + Screen()) * I]
90         Grain extract   [I - M + 0.5]
91         Grain merge     [I + M - 0.5]
92         Difference      [abs(I-M)]
93         Addition        [min((I+M),1.0)]
94         Subtract        [max((I-M),0.0)]
95         Darken only     [min(M,I)]
96         Lighten only    [max(M,I)]
97         Hue             [hue(M) + sat(I)+val(I)]
98         Saturation      [sat(M) + hue(I)+val(I)]
99         Color           [hue(M)+sat(M) + val(I)]
100         Value           [val(M) + sat(I)+hue(I)]
101
102 */
103
104 #define TRANSFER_TYPES 23
105
106 #define TRANSFER_NORMAL         0
107 #define TRANSFER_ADDITION       1
108 #define TRANSFER_SUBTRACT       2
109 #define TRANSFER_MULTIPLY       3
110 #define TRANSFER_DIVIDE         4
111 #define TRANSFER_REPLACE        5
112 #define TRANSFER_MAX            6
113 #define TRANSFER_MIN            7
114 #define TRANSFER_AVERAGE        8
115 #define TRANSFER_DARKEN         9
116 #define TRANSFER_LIGHTEN        10
117 #define TRANSFER_DST            11
118 #define TRANSFER_DST_ATOP       12
119 #define TRANSFER_DST_IN         13
120 #define TRANSFER_DST_OUT        14
121 #define TRANSFER_DST_OVER       15
122 #define TRANSFER_SRC            16
123 #define TRANSFER_SRC_ATOP       17
124 #define TRANSFER_SRC_IN         18
125 #define TRANSFER_SRC_OUT        19
126 #define TRANSFER_SRC_OVER       20
127 #define TRANSFER_OR             21
128 #define TRANSFER_XOR            22
129
130 // Interpolation types
131
132
133 #define NEAREST_NEIGHBOR 0        // Nearest for enlargement and reduction
134 #define CUBIC_CUBIC      1        // Bicubic enlargement and reduction
135 #define CUBIC_LINEAR     2        // Bicubic enlargement and linear reduction
136 #define LINEAR_LINEAR    3        // Not explicitely called but used for user
137 #define LANCZOS_LANCZOS  4        // Just because we can
138
139 class OverlayFrame;
140
141 #endif