Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-07-03 18:04:39 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-07-03 18:04:39 +0400
commit42aaa47e9b01d6dd7f2cf73f754652233438bffe (patch)
treedfe9c077a9d4447bf8d0583f6ae51a7697b54acb /source/blender/blenkernel
parent44ca0a43287020747db479a2206c6b2587547e59 (diff)
dont display image sequences outside the frame range in the 3D viewport.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/BKE_image.h2
-rw-r--r--source/blender/blenkernel/intern/image.c33
2 files changed, 30 insertions, 5 deletions
diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index 699eb0a9f02..909ed471081 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -157,7 +157,7 @@ void BKE_image_assign_ibuf(struct Image *ima, struct ImBuf *ibuf);
/* called on frame change or before render */
void BKE_image_user_frame_calc(struct ImageUser *iuser, int cfra, int fieldnr);
void BKE_image_user_check_frame_calc(struct ImageUser *iuser, int cfra, int fieldnr);
-int BKE_image_user_frame_get(const struct ImageUser *iuser, int cfra, int fieldnr);
+int BKE_image_user_frame_get(const struct ImageUser *iuser, int cfra, int fieldnr, short *r_is_in_range);
void BKE_image_user_file_path(struct ImageUser *iuser, struct Image *ima, char *path);
/* sets index offset for multilayer files */
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index beaf8f719e3..65747baa323 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -2784,10 +2784,14 @@ ImBuf *BKE_image_get_ibuf(Image *ima, ImageUser *iuser)
return BKE_image_acquire_ibuf(ima, iuser, NULL);
}
-int BKE_image_user_frame_get(const ImageUser *iuser, int cfra, int fieldnr)
+int BKE_image_user_frame_get(const ImageUser *iuser, int cfra, int fieldnr, short *r_is_in_range)
{
const int len = (iuser->fie_ima * iuser->frames) / 2;
+ if (r_is_in_range) {
+ *r_is_in_range = FALSE;
+ }
+
if (len == 0) {
return 0;
}
@@ -2800,10 +2804,23 @@ int BKE_image_user_frame_get(const ImageUser *iuser, int cfra, int fieldnr)
cfra = ((cfra) % len);
if (cfra < 0) cfra += len;
if (cfra == 0) cfra = len;
+
+ if (r_is_in_range) {
+ *r_is_in_range = TRUE;
+ }
}
- if (cfra < 0) cfra = 0;
- else if (cfra > len) cfra = len;
+ if (cfra < 0) {
+ cfra = 0;
+ }
+ else if (cfra > len) {
+ cfra = len;
+ }
+ else {
+ if (r_is_in_range) {
+ *r_is_in_range = TRUE;
+ }
+ }
/* convert current frame to current field */
cfra = 2 * (cfra);
@@ -2827,7 +2844,15 @@ int BKE_image_user_frame_get(const ImageUser *iuser, int cfra, int fieldnr)
void BKE_image_user_frame_calc(ImageUser *iuser, int cfra, int fieldnr)
{
if (iuser) {
- const int framenr = BKE_image_user_frame_get(iuser, cfra, fieldnr);
+ short is_in_range;
+ const int framenr = BKE_image_user_frame_get(iuser, cfra, fieldnr, &is_in_range);
+
+ if (is_in_range) {
+ iuser->flag |= IMA_USER_FRAME_IN_RANGE;
+ }
+ else {
+ iuser->flag &= ~IMA_USER_FRAME_IN_RANGE;
+ }
/* allows image users to handle redraws */
if (iuser->flag & IMA_ANIM_ALWAYS)