swf: Convert ButtonState to bitflags

This commit is contained in:
relrelb 2021-01-23 02:17:22 +02:00 committed by Mike Welsh
parent c088c18517
commit 7f4845d777
4 changed files with 15 additions and 42 deletions

View File

@ -129,9 +129,9 @@ impl<'gc> Button<'gc> {
let mut write = self.0.write(context.gc_context);
write.state = state;
let swf_state = match state {
ButtonState::Up => swf::ButtonState::Up,
ButtonState::Over => swf::ButtonState::Over,
ButtonState::Down => swf::ButtonState::Down,
ButtonState::Up => swf::ButtonState::UP,
ButtonState::Over => swf::ButtonState::OVER,
ButtonState::Down => swf::ButtonState::DOWN,
};
// Create any new children that exist in this state, and remove children
@ -141,7 +141,7 @@ impl<'gc> Button<'gc> {
let mut children = Vec::new();
for record in &write.static_data.read().records {
if record.states.contains(&swf_state) {
if record.states.contains(swf_state) {
// State contains this depth, so we don't have to remove it.
removed_depths.remove(&record.depth.into());
@ -257,7 +257,7 @@ impl<'gc> TDisplayObject<'gc> for Button<'gc> {
let read = self.0.read();
for record in &read.static_data.read().records {
if record.states.contains(&swf::ButtonState::HitTest) {
if record.states.contains(swf::ButtonState::HIT_TEST) {
match context
.library
.library_for_movie_mut(read.static_data.read().swf.clone())

View File

@ -902,19 +902,7 @@ impl<'a> Reader<'a> {
if flags == 0 {
return Ok(None);
}
let mut states = HashSet::with_capacity(4);
if (flags & 0b1) != 0 {
states.insert(ButtonState::Up);
}
if (flags & 0b10) != 0 {
states.insert(ButtonState::Over);
}
if (flags & 0b100) != 0 {
states.insert(ButtonState::Down);
}
if (flags & 0b1000) != 0 {
states.insert(ButtonState::HitTest);
}
let states = ButtonState::from_bits_truncate(flags);
let id = self.read_u16()?;
let depth = self.read_u16()?;
let matrix = self.read_matrix()?;

View File

@ -814,7 +814,7 @@ pub struct Button<'a> {
#[derive(Debug, PartialEq, Clone)]
pub struct ButtonRecord {
pub states: HashSet<ButtonState>,
pub states: ButtonState,
pub id: CharacterId,
pub depth: Depth,
pub matrix: Matrix,
@ -823,12 +823,13 @@ pub struct ButtonRecord {
pub blend_mode: BlendMode,
}
#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
pub enum ButtonState {
Up,
Over,
Down,
HitTest,
bitflags! {
pub struct ButtonState: u8 {
const UP = 1 << 0;
const OVER = 1 << 1;
const DOWN = 1 << 2;
const HIT_TEST = 1 << 3;
}
}
#[derive(Debug, PartialEq, Clone)]

View File

@ -1560,23 +1560,7 @@ impl<W: Write> Writer<W> {
0b1_0000
} else {
0
} | if record.states.contains(&ButtonState::HitTest) {
0b1000
} else {
0
} | if record.states.contains(&ButtonState::Down) {
0b100
} else {
0
} | if record.states.contains(&ButtonState::Over) {
0b10
} else {
0
} | if record.states.contains(&ButtonState::Up) {
0b1
} else {
0
};
} | record.states.bits();
self.write_u8(flags)?;
self.write_u16(record.id)?;
self.write_u16(record.depth)?;