Advertisement
Guest User

Untitled

a guest
Nov 4th, 2014
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.76 KB | None | 0 0
  1.  
  2. static void _assigndir(double* x, double* y, const double* b)
  3. {
  4.   x[1]=b[0];
  5.   y[1]=b[1];
  6.   x[2]=b[2];
  7.   y[2]=b[3];
  8. }
  9.  
  10. static void _applydir(double* x, double* y, double w0, double w1, const double* b0, const double* b1)
  11. {
  12.   x[1]=w0*b0[0]+w1*b1[0];
  13.   y[1]=w0*b0[1]+w1*b1[1];
  14.   x[2]=w0*b0[2]+w1*b1[2];
  15.   y[2]=w0*b0[3]+w1*b1[3];
  16. }
  17.  
  18. bool GetMediaItemFadeBezParms(int shape, double dir, bool isfadeout,
  19.   double* x, double* y) // x[4], y[4] .. returns true if the fade is linear
  20. {
  21.   static const double b0[4] = { 0.5, 0.5, 0.5, 0.5 };  
  22.   static const double b1[4] = { 0.25, 0.5, 0.625, 1.0 };
  23.   static const double b2[4] = { 0.375, 0.0, 0.75, 0.5 };
  24.   static const double b3[4] = { 0.25, 1.0, 0.5, 1.0 };
  25.   static const double b4[4] = { 0.5, 0.0, 0.75, 0.0 };
  26.   static const double b5[4] = { 0.375, 0.0, 0.625, 1.0 };
  27.   static const double b6[4] = { 0.875, 0.0, 0.125, 1.0 };
  28.   static const double b7[4] = { 0.25, 0.375, 0.625, 1.0 };
  29.  
  30.   static const double b4i[4] = { 0.0, 1.0, 0.125, 1.0 };
  31.   static const double b50[4] = { 0.25, 0.25, 0.25, 1.0 };
  32.   static const double b51[4] = { 0.75, 0.0, 0.75, 0.75 };
  33.   static const double b60[4] = { 0.375, 0.25, 0.0, 1.0 };
  34.   static const double b61[4] = { 1.0, 0.0, 0.625, 0.75 };
  35.  
  36.   if (!isfadeout)
  37.   {
  38.     x[0]=y[0]=0.0;
  39.     x[3]=y[3]=1.0;
  40.   }
  41.   else
  42.   {
  43.     x[0]=y[3]=0.0;
  44.     x[3]=y[0]=1.0;
  45.   }
  46.  
  47.  
  48.   if (shape < 0 || shape >= NUM_FADE_SHAPES)
  49.   {
  50.     shape=0;
  51.     dir=0.0;
  52.   }
  53.  
  54.   if (isfadeout) dir=-dir;
  55.  
  56.   bool linear=false;
  57.  
  58.   if (dir < 0.0)
  59.   {
  60.     double w0=-dir;
  61.     double w1=1.0+dir;
  62.     if (shape == 1) _applydir(x, y, w0, w1, b4i, b1);
  63.     else if (shape == 2) _applydir(x, y, w0, w1, b1, b0);
  64.     else if (shape == 5) _applydir(x, y, w0, w1, b50, b5);
  65.     else if (shape == 6) _applydir(x, y, w0, w1, b60, b6);
  66.     else if (shape == 7) _applydir(x, y, w0, w1, b4i, b7);
  67.     else _applydir(x, y, w0, w1, b3, b0);
  68.   }
  69.   else if (dir > 0.0)
  70.   {
  71.     double w0=1.0-dir;
  72.     double w1=dir;
  73.     if (shape == 1) _applydir(x, y, w0, w1, b1, b4);
  74.     else if (shape == 2) _applydir(x, y, w0, w1, b0, b2);
  75.     else if (shape == 5) _applydir(x, y, w0, w1, b5, b51);
  76.     else if (shape == 6) _applydir(x, y, w0, w1, b6, b61);
  77.     else if (shape == 7) _applydir(x, y, w0, w1, b7, b4);
  78.     else _applydir(x, y, w0, w1, b0, b4);
  79.   }
  80.   else // dir == 0.0
  81.   {
  82.     if (shape == 1) _assigndir(x, y, b1);
  83.     else if (shape == 5) _assigndir(x, y, b5);
  84.     else if (shape == 6) _assigndir(x, y, b6);
  85.     else if (shape == 7) _assigndir(x, y, b7);
  86.     else
  87.     {
  88.       _assigndir(x, y, b0);
  89.       linear=true;
  90.     }
  91.   }
  92.  
  93.   if (isfadeout && !linear)
  94.   {
  95.     double ox1=x[1];
  96.     double ox2=x[2];
  97.     x[1]=1.0-ox2;
  98.     x[2]=1.0-ox1;
  99.     SWAP(y[1], y[2], double);
  100.   }
  101.  
  102.   return linear;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement