Fix T74586: Image Editor Uses Invalid Display Channels

When using the image editor the display channels attribute can become
invalid when selecting another image/buffer. This patch will check what
display channels are valid and when an invalid channel is selected it
will fall back to the color channel.

To de-duplicate the code it also introduces a
`ED_space_image_get_display_channel_mask` function that will determine
the valid bitflags for the display channel of a given `ImBuf`.
This commit is contained in:
2020-03-23 13:51:55 +01:00
parent 64982e213f
commit 6a5bd812b5
4 changed files with 66 additions and 28 deletions

View File

@@ -175,6 +175,30 @@ void ED_space_image_release_buffer(SpaceImage *sima, ImBuf *ibuf, void *lock)
}
}
/* Get the SpaceImage flag that is valid for the given ibuf. */
int ED_space_image_get_display_channel_mask(ImBuf *ibuf)
{
int result = (SI_USE_ALPHA | SI_SHOW_ALPHA | SI_SHOW_ZBUF | SI_SHOW_R | SI_SHOW_G | SI_SHOW_B);
if (!ibuf) {
return result;
}
const bool color = ibuf->channels >= 3;
const bool alpha = ibuf->channels == 4;
const bool zbuf = ibuf->zbuf || ibuf->zbuf_float || (ibuf->channels == 1);
if (!alpha) {
result &= ~(SI_USE_ALPHA | SI_SHOW_ALPHA);
}
if (!zbuf) {
result &= ~(SI_SHOW_ZBUF);
}
if (!color) {
result &= ~(SI_SHOW_R | SI_SHOW_G | SI_SHOW_B);
}
return result;
}
bool ED_space_image_has_buffer(SpaceImage *sima)
{
ImBuf *ibuf;