Merging r47674 through r47676 from trunk into soc-2011-tomato
authorSergey Sharybin <sergey.vfx@gmail.com>
Sun, 10 Jun 2012 12:37:41 +0000 (12:37 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Sun, 10 Jun 2012 12:37:41 +0000 (12:37 +0000)
1  2 
source/blender/editors/interface/interface_draw.c

index ad2dca5cec4e35d64db3dde129d554dc11cca5a7,f6339d4456f4a687bdf31210dccd221f3162a874..f368e7cf4c7f509f1681af4babb674a3aba3b905
@@@ -43,7 -43,6 +43,7 @@@
  
  #include "BKE_colortools.h"
  #include "BKE_texture.h"
 +#include "BKE_tracking.h"
  
  
  #include "IMB_imbuf.h"
@@@ -754,8 -753,12 +754,12 @@@ void ui_draw_but_HISTOGRAM(ARegion *ar
                fdrawline(rect.xmin + (i / 4.f) * w, rect.ymin, rect.xmin + (i / 4.f) * w, rect.ymax);
        }
        
-       if (hist->mode == HISTO_MODE_LUMA)
+       if (hist->mode == HISTO_MODE_LUMA) {
                histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_luma, res, is_line);
+       }
+       else if (hist->mode == HISTO_MODE_ALPHA) {
+               histogram_draw_one(1.0, 1.0, 1.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_a, res, is_line);
+       }
        else {
                if (hist->mode == HISTO_MODE_RGB || hist->mode == HISTO_MODE_R)
                        histogram_draw_one(1.0, 0.0, 0.0, 0.75, rect.xmin, rect.ymin, w, h, hist->data_r, res, is_line);
@@@ -1504,10 -1507,36 +1508,10 @@@ void ui_draw_but_CURVE(ARegion *ar, uiB
        fdrawbox(rect->xmin, rect->ymin, rect->xmax, rect->ymax);
  }
  
 -static ImBuf *scale_trackpreview_ibuf(ImBuf *ibuf, float track_pos[2], int width, float height, int margin)
 -{
 -      ImBuf *scaleibuf;
 -      const float scalex = ((float)ibuf->x - 2 * margin) / width;
 -      const float scaley = ((float)ibuf->y - 2 * margin) / height;
 -      /* NOTE: 1.0f = 0.5f for integer coordinate coorrection (center of pixel vs. left bottom corner of bixel)
 -       *       and 0.5f for centering image in preview (cross is draving at exact center of widget so image
 -       *       should be shifted by half of pixel for correct centering) - sergey */
 -      float off_x = (int)track_pos[0] - track_pos[0] + 1.0f;
 -      float off_y = (int)track_pos[1] - track_pos[1] + 1.0f;
 -      int x, y;
 -
 -      scaleibuf = IMB_allocImBuf(width, height, 32, IB_rect);
 -
 -      for (y = 0; y < height; y++) {
 -              for (x = 0; x < width; x++) {
 -                      float src_x = scalex * (x) + margin - off_x;
 -                      float src_y = scaley * (y) + margin - off_y;
 -
 -                      bicubic_interpolation(ibuf, scaleibuf, src_x, src_y, x, y);
 -              }
 -      }
 -
 -      return scaleibuf;
 -}
 -
  void ui_draw_but_TRACKPREVIEW(ARegion *ar, uiBut *but, uiWidgetColors *UNUSED(wcol), rcti *recti)
  {
        rctf rect;
 -      int ok = 0;
 +      int ok = 0, width, height;
        GLint scissor[4];
        MovieClipScopes *scopes = (MovieClipScopes *)but->poin;
  
        rect.ymin = (float)recti->ymin + SCOPE_RESIZE_PAD + 2;
        rect.ymax = (float)recti->ymax - 1;
  
 +      width = rect.xmax - rect.xmin + 1;
 +      height = rect.ymax - rect.ymin;
 +
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  
  
                ok = 1;
        }
 -      else if (scopes->track_preview) {
 -              /* additional margin around image */
 -              /* NOTE: should be kept in sync with value from BKE_movieclip_update_scopes */
 -              const int margin = 3;
 -              float zoomx, zoomy, track_pos[2], off_x, off_y;
 -              int a, width, height;
 +      else if ((scopes->track_search) &&
 +               ((!scopes->track_preview) ||
 +               (scopes->track_preview->x != width || scopes->track_preview->y != height)))
 +      {
 +              ImBuf *tmpibuf;
 +
 +              if (scopes->track_preview)
 +                      IMB_freeImBuf(scopes->track_preview);
 +
 +              tmpibuf = BKE_tracking_sample_pattern_imbuf(scopes->frame_width, scopes->frame_height,
 +                                                          scopes->track_search, &scopes->undist_marker,
 +                                                          width, height, scopes->track_pos);
 +
 +              if (tmpibuf->rect_float)
 +                      IMB_rect_from_float(tmpibuf);
 +
 +              // XXX: for debug only
 +              // tmpibuf->ftype = PNG;
 +              // IMB_saveiff(tmpibuf, "sample.png", IB_rect);
 +
 +              if (tmpibuf->rect)
 +                      scopes->track_preview = tmpibuf;
 +              else
 +                      IMB_freeImBuf(tmpibuf);
 +      }
 +
 +      if (!ok && scopes->track_preview) {
 +              float track_pos[2];
 +              int a;
                ImBuf *drawibuf;
  
                glPushMatrix();
  
 -              track_pos[0] = scopes->track_pos[0] - margin;
 -              track_pos[1] = scopes->track_pos[1] - margin;
 +              track_pos[0] = scopes->track_pos[0];
 +              track_pos[1] = scopes->track_pos[1];
  
                /* draw content of pattern area */
                glScissor(ar->winrct.xmin + rect.xmin, ar->winrct.ymin + rect.ymin, scissor[2], scissor[3]);
  
 -              width = rect.xmax - rect.xmin + 1;
 -              height = rect.ymax - rect.ymin;
 -
                if (width > 0 && height > 0) {
 -                      zoomx = (float)width / (scopes->track_preview->x - 2 * margin);
 -                      zoomy = (float)height / (scopes->track_preview->y - 2 * margin);
 -
 -                      off_x = ((int)track_pos[0] - track_pos[0] + 0.5f) * zoomx;
 -                      off_y = ((int)track_pos[1] - track_pos[1] + 0.5f) * zoomy;
 -
 -                      drawibuf = scale_trackpreview_ibuf(scopes->track_preview, track_pos, width, height, margin);
 +                      drawibuf = scopes->track_preview;
  
                        glaDrawPixelsSafe(rect.xmin, rect.ymin + 1, drawibuf->x, drawibuf->y,
                                          drawibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, drawibuf->rect);
 -                      IMB_freeImBuf(drawibuf);
  
                        /* draw cross for pizel position */
 -                      glTranslatef(off_x + rect.xmin + track_pos[0] * zoomx, off_y + rect.ymin + track_pos[1] * zoomy, 0.f);
 +                      glTranslatef(rect.xmin + track_pos[0], rect.ymin + track_pos[1], 0.f);
                        glScissor(ar->winrct.xmin + rect.xmin,
                                  ar->winrct.ymin + rect.ymin,
                                  rect.xmax - rect.xmin,