implement play/pause

custom
jacqueline 1 year ago
parent f3e4210f24
commit e6844a68b6
  1. 6
      lua/playing.lua
  2. 2
      src/lua/include/property.hpp
  3. 2
      src/lua/property.cpp
  4. 1
      src/ui/include/ui_fsm.hpp
  5. 16
      src/ui/ui_fsm.cpp

@ -107,7 +107,11 @@ return function(opts)
controls:Image {
src = "//lua/img/prev.png",
}
local play_pause_img = controls:Image {
local play_pause_btn = controls:Button {}
play_pause_btn:onClicked(function()
playback.playing:set(not playback.playing:get())
end)
local play_pause_img = play_pause_btn:Image {
src = "//lua/img/pause.png",
}
controls:Image {

@ -26,6 +26,8 @@ class Property {
Property(const LuaValue&);
Property(const LuaValue&, std::function<bool(const LuaValue&)>);
auto Get() -> const LuaValue& { return value_; }
auto IsTwoWay() -> bool { return cb_.has_value(); }
auto PushValue(lua_State& s) -> int;

@ -221,7 +221,7 @@ auto Property::PopValue(lua_State& s) -> bool {
}
break;
case LUA_TBOOLEAN:
new_val = lua_toboolean(&s, 2);
new_val = static_cast<bool>(lua_toboolean(&s, 2));
break;
case LUA_TSTRING:
new_val = lua_tostring(&s, 2);

@ -136,6 +136,7 @@ class Lua : public UiState {
private:
auto PushLuaScreen(lua_State*) -> int;
auto PopLuaScreen(lua_State*) -> int;
auto SetPlaying(const lua::LuaValue&) -> bool;
std::shared_ptr<lua::Property> battery_pct_;
std::shared_ptr<lua::Property> battery_mv_;

@ -7,6 +7,7 @@
#include "ui_fsm.hpp"
#include <memory>
#include <variant>
#include "lua.h"
#include "lua.hpp"
@ -179,7 +180,8 @@ void Lua::entry() {
queue_position_ = std::make_shared<lua::Property>(0);
queue_size_ = std::make_shared<lua::Property>(0);
playback_playing_ = std::make_shared<lua::Property>(false);
playback_playing_ = std::make_shared<lua::Property>(
false, [&](const lua::LuaValue& val) { return SetPlaying(val); });
playback_track_ = std::make_shared<lua::Property>();
playback_position_ = std::make_shared<lua::Property>();
@ -250,6 +252,18 @@ auto Lua::PopLuaScreen(lua_State* s) -> int {
return 0;
}
auto Lua::SetPlaying(const lua::LuaValue& val) -> bool {
bool current_val = std::get<bool>(playback_playing_->Get());
if (!std::holds_alternative<bool>(val)) {
return false;
}
bool new_val = std::get<bool>(val);
if (current_val != new_val) {
events::Audio().Dispatch(audio::TogglePlayPause{});
}
return true;
}
void Lua::exit() {
lv_group_set_default(NULL);
}

Loading…
Cancel
Save