swf: Convert ButtonState to bitflags
This commit is contained in:
parent
c088c18517
commit
7f4845d777
|
@ -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())
|
||||
|
|
|
@ -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()?;
|
||||
|
|
|
@ -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)]
|
||||
|
|
|
@ -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)?;
|
||||
|
|
Loading…
Reference in New Issue