From efeea7571ab45c6a846208f0554153de549d1711 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Fri, 19 Jul 2019 13:24:03 +0200 Subject: [PATCH] Add get_frame_width() and get_frame_height() to the signals given to the theme, which is usually what the user wants. --- nageru/simple.lua | 4 +++- nageru/theme.cpp | 16 ++++++++++++++++ nageru/theme.lua | 13 +++++-------- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/nageru/simple.lua b/nageru/simple.lua index f349f3f..e799f80 100644 --- a/nageru/simple.lua +++ b/nageru/simple.lua @@ -99,8 +99,10 @@ end -- -- is basically an exposed InputState, which you can use to -- query for information about the signals at the point of the current --- frame. In particular, you can call get_width() and get_height() +-- frame. In particular, you can call get_frame_width() and get_frame_height() -- for any signal number, and use that to e.g. assist in scene selection. +-- (You can also use get_width() and get_height(), which return the +-- _field_ size. This has half the height for interlaced signals.) -- -- You should return the scene to use, after having set any parameters you -- want to set (through set_int() etc.). The parameters will be snapshot diff --git a/nageru/theme.cpp b/nageru/theme.cpp index 35046c1..ec8f431 100644 --- a/nageru/theme.cpp +++ b/nageru/theme.cpp @@ -636,6 +636,20 @@ int InputStateInfo_get_height(lua_State* L) return 1; } +int InputStateInfo_get_frame_height(lua_State* L) +{ + assert(lua_gettop(L) == 2); + InputStateInfo *input_state_info = get_input_state_info(L, 1); + Theme *theme = get_theme_updata(L); + int signal_num = theme->map_signal(luaL_checknumber(L, 2)); + unsigned height = input_state_info->last_height[signal_num]; + if (input_state_info->last_interlaced[signal_num]) { + height *= 2; + } + lua_pushnumber(L, height); + return 1; +} + int InputStateInfo_get_interlaced(lua_State* L) { assert(lua_gettop(L) == 2); @@ -979,6 +993,8 @@ const luaL_Reg LiftGammaGainEffect_funcs[] = { const luaL_Reg InputStateInfo_funcs[] = { { "get_width", InputStateInfo_get_width }, { "get_height", InputStateInfo_get_height }, + { "get_frame_width", InputStateInfo_get_width }, // Same as get_width(). + { "get_frame_height", InputStateInfo_get_frame_height }, { "get_interlaced", InputStateInfo_get_interlaced }, { "get_has_signal", InputStateInfo_get_has_signal }, { "get_is_connected", InputStateInfo_get_is_connected }, diff --git a/nageru/theme.lua b/nageru/theme.lua index 011dc4f..e098a2c 100644 --- a/nageru/theme.lua +++ b/nageru/theme.lua @@ -346,8 +346,10 @@ end -- -- is basically an exposed InputState, which you can use to -- query for information about the signals at the point of the current --- frame. In particular, you can call get_width() and get_height() +-- frame. In particular, you can call get_frame_width() and get_frame_height() -- for any signal number, and use that to e.g. assist in scene selection. +-- (You can also use get_width() and get_height(), which return the +-- _field_ size. This has half the height for interlaced signals.) -- -- You should return scene to use, after having set any parameters you -- want to set (through set_int() etc.). The parameters will be snapshot @@ -356,14 +358,9 @@ function get_scene(num, t, width, height, signals) local input_resolution = {} for signal_num=0,1 do local res = { - width = signals:get_width(signal_num), - height = signals:get_height(signal_num), + width = signals:get_frame_width(signal_num), + height = signals:get_frame_height(signal_num), } - if signals:get_interlaced(signal_num) then - -- Convert height from frame height to field height. - -- (Needed for e.g. place_rectangle.) - res.height = res.height * 2 - end input_resolution[signal_num] = res local text_res = signals:get_human_readable_resolution(signal_num) -- 2.39.2