fix little_endian png 16bit per andrew
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / shapewipe / shapewipe.C
index e372f30ad271f2656d2ba6aef3e801316105d3b2..b11006d078d48b1371eca3bbe598b597e3d862ee 100644 (file)
@@ -164,7 +164,7 @@ ShapeWipeFeather::ShapeWipeFeather(ShapeWipeMain *client,
                ShapeWipeWindow *window, int x, int y)
  : BC_TumbleTextBox(window,
                bclip(client->config.feather, SHAPE_FMIN, SHAPE_FMAX),
-               SHAPE_FMIN, SHAPE_FMAX, x, y, 64, 3)
+               SHAPE_FMIN, SHAPE_FMAX, x, y, xS(64), yS(3))
 {
        this->client = client;
        this->window = window;
@@ -241,7 +241,7 @@ int ShapeWipeShape::handle_event()
 
 
 ShapeWipeWindow::ShapeWipeWindow(ShapeWipeMain *plugin)
- : PluginClientWindow(plugin, 425, 215, 425, 215, 0)
+ : PluginClientWindow(plugin, xS(425), yS(215), xS(425), yS(215), 0)
 {
        this->plugin = plugin;
        shape_feather = 0;
@@ -258,7 +258,7 @@ void ShapeWipeWindow::create_objects()
 {
        BC_Title *title = 0;
        lock_window("ShapeWipeWindow::create_objects");
-       int pad = 10, margin = 10;
+       int pad = xS(10), margin = xS(10);
        int x = margin, y = margin;
        int ww = get_w() - 2*margin;
 
@@ -268,13 +268,13 @@ void ShapeWipeWindow::create_objects()
        }
 
        BC_TitleBar *bar;
-       add_subwindow(bar = new BC_TitleBar(x, y, ww, 20, 10,
+       add_subwindow(bar = new BC_TitleBar(x, y, ww, xS(20), yS(10),
                _("Wipe"), MEDIUMFONT));
        y += bar->get_h() + pad;
 
        add_subwindow(title = new BC_Title(x, y, _("Shape:")));
-       int x1 = 85, x2 = 355, x3 = 386;
-       shape_text = new ShapeWipeShape(plugin, this, x1, y, x2-x1, 200);
+       int x1 = xS(85), x2 = xS(355), x3 = xS(386);
+       shape_text = new ShapeWipeShape(plugin, this, x1, y, x2-x1, yS(200));
        shape_text->create_objects();
        add_subwindow(new ShapeWipeTumble(plugin, this, x3, y));
        y += shape_text->get_h() + pad;
@@ -296,7 +296,7 @@ void ShapeWipeWindow::create_objects()
                plugin, this, x, y));
        y += aspect_ratio->get_h() + pad;
 
-       add_subwindow(bar = new BC_TitleBar(x, y, ww, 20, 10,
+       add_subwindow(bar = new BC_TitleBar(x, y, ww, xS(20), yS(10),
                _("Direction"), MEDIUMFONT));
        y += bar->get_h() + pad;
        x = margin;
@@ -565,20 +565,40 @@ void ShapeWipeMain::reset_pattern_image()
        float scale = feather ? 1/feather : 0xff; \
        type  **in_rows = (type**)input->get_rows(); \
        type **out_rows = (type**)output->get_rows(); \
-       for( int y=y1; y<y2; ++y ) { \
-               type *in_row = (type*) in_rows[y]; \
-               type *out_row = (type*)out_rows[y]; \
-               unsigned char *pattern_row = pattern_image[y]; \
-               for( int x=0; x<w; ++x ) { \
-                       tmp_type d = (pattern_row[x] - threshold) * scale; \
-                       if( d > 0xff ) d = 0xff; \
-                       else if( d < -0xff ) d = -0xff; \
-                       tmp_type a = (d + 0xff) / 2, b = 0xff - a; \
-                       for( int i=0; i<components; ++i ) { \
-                               type ic = in_row[i], oc = out_row[i]; \
-                               out_row[i] = (ic * a + oc * b) / 0xff; \
+       if( !dir ) { \
+               for( int y=y1; y<y2; ++y ) { \
+                       type *in_row = (type*) in_rows[y]; \
+                       type *out_row = (type*)out_rows[y]; \
+                       unsigned char *pattern_row = pattern_image[y]; \
+                       for( int x=0; x<w; ++x ) { \
+                               tmp_type d = (pattern_row[x] - threshold) * scale; \
+                               if( d > 0xff ) d = 0xff; \
+                               else if( d < -0xff ) d = -0xff; \
+                               tmp_type a = (d + 0xff) / 2, b = 0xff - a; \
+                               for( int i=0; i<components; ++i ) { \
+                                       type ic = in_row[i], oc = out_row[i]; \
+                                       out_row[i] = (ic * a + oc * b) / 0xff; \
+                               } \
+                               in_row += components; out_row += components; \
+                       } \
+               } \
+       } \
+       else { \
+               for( int y=y1; y<y2; ++y ) { \
+                       type *in_row = (type*) in_rows[y]; \
+                       type *out_row = (type*)out_rows[y]; \
+                       unsigned char *pattern_row = pattern_image[y]; \
+                       for( int x=0; x<w; ++x ) { \
+                               tmp_type d = (pattern_row[x] - threshold) * scale; \
+                               if( d > 0xff ) d = 0xff; \
+                               else if( d < -0xff ) d = -0xff; \
+                               tmp_type b = (d + 0xff) / 2, a = 0xff - b; \
+                               for( int i=0; i<components; ++i ) { \
+                                       type ic = in_row[i], oc = out_row[i]; \
+                                       out_row[i] = (ic * a + oc * b) / 0xff; \
+                               } \
+                               in_row += components; out_row += components; \
                        } \
-                       in_row += components; out_row += components; \
                } \
        } \
 }
@@ -646,6 +666,7 @@ void ShapeUnit::process_package(LoadPackage *package)
        VFrame *input = server->plugin->input;
        VFrame *output = server->plugin->output;
        int w = input->get_w();
+       int dir = server->plugin->config.direction;
 
        unsigned char **pattern_image = server->plugin->pattern_image;
        unsigned char threshold = server->plugin->threshold;