.. _program_listing_file_src_cue_sectioncuehandler.cpp: Program Listing for File sectioncuehandler.cpp ============================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/cue/sectioncuehandler.cpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "cuecontroller.h" #include "sectioncuehandler.h" namespace PixelMaestro { uint8_t* SectionCueHandler::remove_animation(uint8_t section_num, uint8_t layer_num, bool clear_pixels) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::RemoveAnimation, section_num, layer_num ); controller_.get_buffer()[++index] = (uint8_t)clear_pixels; return controller_.assemble(++index); } uint8_t* SectionCueHandler::remove_canvas(uint8_t section_num, uint8_t layer_num) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::RemoveCanvas, section_num, layer_num ); return controller_.assemble(++index); } uint8_t* SectionCueHandler::remove_layer(uint8_t section_num, uint8_t layer_num) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::RemoveLayer, section_num, layer_num ); return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_animation(uint8_t section_num, uint8_t layer_num, AnimationType animation_type, bool preserve_settings) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::SetAnimation, section_num, layer_num ); controller_.get_buffer()[++index] = (uint8_t)animation_type; controller_.get_buffer()[++index] = (uint8_t)preserve_settings; return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_brightness(uint8_t section_num, uint8_t layer_num, uint8_t brightness) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::SetBrightness, section_num, layer_num ); controller_.get_buffer()[++index] = brightness; return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_canvas(uint8_t section_num, uint8_t layer_num, uint16_t num_frames) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::SetCanvas, section_num, layer_num ); controller_.get_buffer()[++index] = num_frames; return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_dimensions(uint8_t section_num, uint8_t layer_num, uint16_t x, uint16_t y) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::SetDimensions, section_num, layer_num ); add_uint16_to_cue(index, x); add_uint16_to_cue(index, y); return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_layer(uint8_t section_num, uint8_t layer_num, Colors::MixMode mix_mode, uint8_t alpha) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::SetLayer, section_num, layer_num ); controller_.get_buffer()[++index] = (uint8_t)mix_mode; controller_.get_buffer()[++index] = alpha; return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_mirror(uint8_t section_num, uint8_t layer_num, bool x, bool y) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::SetMirror, section_num, layer_num ); controller_.get_buffer()[++index] = x; controller_.get_buffer()[++index] = y; return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_offset(uint8_t section_num, uint8_t layer_num, uint16_t x, uint16_t y) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::SetOffset, section_num, layer_num ); add_uint16_to_cue(index, x); add_uint16_to_cue(index, y); return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_scroll(uint8_t section_num, uint8_t layer_num, uint16_t x, uint16_t y, bool reverse_x, bool reverse_y) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::SetScroll, section_num, layer_num ); add_uint16_to_cue(index, x); add_uint16_to_cue(index, y); controller_.get_buffer()[++index] = (uint8_t)reverse_x; controller_.get_buffer()[++index] = (uint8_t)reverse_y; return controller_.assemble(++index); } uint8_t* SectionCueHandler::set_wrap(uint8_t section_num, uint8_t layer_num, bool wrap) { uint32_t index = start_cue( (uint8_t)CueController::Handler::SectionCueHandler, (uint8_t)Action::SetWrap, section_num, layer_num ); controller_.get_buffer()[++index] = static_cast(wrap); return controller_.assemble(++index); } void SectionCueHandler::run(uint8_t *cue) { Section* section = get_section(cue[(uint8_t)Byte::SectionByte], cue[(uint8_t)Byte::LayerByte]); if (section == nullptr) return; switch ((Action)cue[(uint8_t)Byte::ActionByte]) { case Action::RemoveAnimation: // Delete the Animation's Palette to avoid memory leak if (section->get_animation() != nullptr) { delete section->get_animation()->get_palette(); } section->remove_animation((bool)cue[(uint8_t)Byte::OptionsByte]); break; case Action::RemoveCanvas: // Delete the Canvas's Palette to avoid memory leak if (section->get_canvas() != nullptr) { delete section->get_canvas()->get_palette(); } section->remove_canvas(); break; case Action::RemoveLayer: section->remove_layer(); break; case Action::SetAnimation: { // If an Animation is set and we're not preserving settings, delete its Palette to avoid a memory leak. bool preserve_animation = (bool)cue[(uint8_t)Byte::OptionsByte + 1]; if (!preserve_animation && section->get_animation() != nullptr) { delete section->get_animation()->get_palette(); } section->set_animation((AnimationType)cue[(uint8_t)Byte::OptionsByte], preserve_animation); } break; case Action::SetBrightness: section->set_brightness(cue[(uint8_t)Byte::OptionsByte]); break; case Action::SetCanvas: section->set_canvas(cue[(uint8_t)Byte::OptionsByte]); break; case Action::SetDimensions: section->set_dimensions( IntByteConvert::byte_to_uint16(&cue[(uint8_t)Byte::OptionsByte]), IntByteConvert::byte_to_uint16(&cue[(uint8_t)Byte::OptionsByte + 2])); break; case Action::SetLayer: section->set_layer(Colors::MixMode(cue[(uint8_t)Byte::OptionsByte]), cue[(uint8_t)Byte::OptionsByte + 1]); break; case Action::SetMirror: section->set_mirror(cue[(uint8_t)Byte::OptionsByte], cue[(uint8_t)Byte::OptionsByte + 1]); break; case Action::SetOffset: section->set_offset( IntByteConvert::byte_to_uint16(&cue[(uint8_t)Byte::OptionsByte]), IntByteConvert::byte_to_uint16(&cue[(uint8_t)Byte::OptionsByte + 2]) ); break; case Action::SetScroll: section->set_scroll( IntByteConvert::byte_to_uint16(&cue[(uint8_t)Byte::OptionsByte]), IntByteConvert::byte_to_uint16(&cue[(uint8_t)Byte::OptionsByte + 2]), (bool)cue[(uint8_t)Byte::OptionsByte + 4], (bool)cue[(uint8_t)Byte::OptionsByte + 5] ); break; case Action::SetWrap: section->set_wrap(cue[(uint8_t)Byte::OptionsByte]); break; } } }