]> git.sesse.net Git - nageru/blobdiff - theme.lua
Fix some broken culling code in the theme (no idea why this does not trigger more...
[nageru] / theme.lua
index d7c281dd3faacb3b62312fe0273e8b8199dc1038..7f47c8491341879c350dd7babe489163ce56a19b 100644 (file)
--- a/theme.lua
+++ b/theme.lua
@@ -333,6 +333,41 @@ function channel_signal(channel)
        end
 end
 
+-- API ENTRY POINT
+-- Called every frame. Returns the color (if any) to paint around the given
+-- channel. Returns a CSS color (typically to mark live and preview signals);
+-- "transparent" is allowed.
+-- Will never be called for live (0) or preview (1).
+function channel_color(channel)
+       if channel_involved_in(channel, live_signal_num) then
+               return "#f00"
+       end
+       if channel_involved_in(channel, preview_signal_num) then
+               return "#0f0"
+       end
+       return "transparent"
+end
+
+function channel_involved_in(channel, signal_num)
+       if signal_num == INPUT0_SIGNAL_NUM then
+               return channel == 2
+       end
+       if signal_num == INPUT1_SIGNAL_NUM then
+               return channel == 3
+       end
+       if signal_num == SBS_SIGNAL_NUM then
+               return (channel == 2 or channel == 3)
+       end
+       if signal_num == STATIC_SIGNAL_NUM then
+               return (channel == 5)
+       end
+       if signal_num == FADE_SIGNAL_NUM then
+               return (channel_involved_in(channel, fade_src_signal) or
+                       channel_involved_in(channel, fade_dst_signal))
+       end
+       return false
+end
+
 -- API ENTRY POINT
 -- Returns if a given channel supports setting white balance (starting from 2).
 -- Called only once for each channel, at the start of the program.
@@ -662,10 +697,15 @@ function place_rectangle(resample_effect, resize_effect, padding_effect, x0, y0,
 
        -- Cull.
        if x0 > screen_width or x1 < 0.0 or y0 > screen_height or y1 < 0.0 then
-               resample_effect:set_int("width", 1)
-               resample_effect:set_int("height", 1)
-               resample_effect:set_float("zoom_x", screen_width)
-               resample_effect:set_float("zoom_y", screen_height)
+               if resample_effect ~= nil then
+                       resample_effect:set_int("width", 1)
+                       resample_effect:set_int("height", 1)
+                       resample_effect:set_float("zoom_x", screen_width)
+                       resample_effect:set_float("zoom_y", screen_height)
+               else
+                       resize_effect:set_int("width", 1)
+                       resize_effect:set_int("height", 1)
+               end
                padding_effect:set_int("left", screen_width + 100)
                padding_effect:set_int("top", screen_height + 100)
                return
@@ -819,9 +859,9 @@ end
 function calc_fade_progress(t, transition_start, transition_end)
        local tt = (t - transition_start) / (transition_end - transition_start)
        if tt < 0.0 then
-               tt = 0.0
+               return 0.0
        elseif tt > 1.0 then
-               tt = 1.0
+               return 1.0
        end
 
        -- Make the fade look maybe a tad more natural, by pumping it