drawing: Generalized foreach_visible_button
This commit is contained in:
		@ -47,22 +47,17 @@ mod c {
 | 
				
			|||||||
        let layout = unsafe { &mut *layout };
 | 
					        let layout = unsafe { &mut *layout };
 | 
				
			||||||
        let cr = unsafe { cairo::Context::from_raw_none(cr) };
 | 
					        let cr = unsafe { cairo::Context::from_raw_none(cr) };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        let (view_offset, view) = layout.get_current_view_position();
 | 
					        layout.foreach_visible_button(|offset, button| {
 | 
				
			||||||
        for (row_offset, row) in &view.get_rows() {
 | 
					            let state = RefCell::borrow(&button.state).clone();
 | 
				
			||||||
            for (x_offset, button) in &row.buttons {
 | 
					            if state.pressed == keyboard::PressType::Pressed || state.locked {
 | 
				
			||||||
                let state = RefCell::borrow(&button.state).clone();
 | 
					                render_button_at_position(
 | 
				
			||||||
                if state.pressed == keyboard::PressType::Pressed || state.locked {
 | 
					                    renderer, &cr,
 | 
				
			||||||
                    render_button_at_position(
 | 
					                    offset,
 | 
				
			||||||
                        renderer, &cr,
 | 
					                    button.as_ref(),
 | 
				
			||||||
                        view_offset
 | 
					                    state.pressed, state.locked,
 | 
				
			||||||
                            + row_offset.clone()
 | 
					                );
 | 
				
			||||||
                            + Point { x: *x_offset, y: 0.0 },
 | 
					 | 
				
			||||||
                        button.as_ref(),
 | 
					 | 
				
			||||||
                        state.pressed, state.locked,
 | 
					 | 
				
			||||||
                    );
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        })
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    #[no_mangle]
 | 
					    #[no_mangle]
 | 
				
			||||||
@ -74,19 +69,15 @@ mod c {
 | 
				
			|||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
        let layout = unsafe { &mut *layout };
 | 
					        let layout = unsafe { &mut *layout };
 | 
				
			||||||
        let cr = unsafe { cairo::Context::from_raw_none(cr) };
 | 
					        let cr = unsafe { cairo::Context::from_raw_none(cr) };
 | 
				
			||||||
        let (view_offset, view) = layout.get_current_view_position();
 | 
					        
 | 
				
			||||||
        for (row_offset, row) in &view.get_rows() {
 | 
					        layout.foreach_visible_button(|offset, button| {
 | 
				
			||||||
            for (x_offset, button) in &row.buttons {
 | 
					            render_button_at_position(
 | 
				
			||||||
                render_button_at_position(
 | 
					                renderer, &cr,
 | 
				
			||||||
                    renderer, &cr,
 | 
					                offset,
 | 
				
			||||||
                    view_offset
 | 
					                button.as_ref(),
 | 
				
			||||||
                            + row_offset.clone()
 | 
					                keyboard::PressType::Released, false,
 | 
				
			||||||
                            + Point { x: *x_offset, y: 0.0 },
 | 
					            );
 | 
				
			||||||
                    button.as_ref(),
 | 
					        })
 | 
				
			||||||
                    keyboard::PressType::Released, false,
 | 
					 | 
				
			||||||
                );
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -728,6 +728,20 @@ impl Layout {
 | 
				
			|||||||
        let (offset, layout) = self.get_current_view_position();
 | 
					        let (offset, layout) = self.get_current_view_position();
 | 
				
			||||||
        layout.find_button_by_position(point - offset)
 | 
					        layout.find_button_by_position(point - offset)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub fn foreach_visible_button<F>(&self, mut f: F)
 | 
				
			||||||
 | 
					        where F: FnMut(c::Point, &Box<Button>)
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        let (view_offset, view) = self.get_current_view_position();
 | 
				
			||||||
 | 
					        for (row_offset, row) in &view.get_rows() {
 | 
				
			||||||
 | 
					            for (x_offset, button) in &row.buttons {
 | 
				
			||||||
 | 
					                let offset = view_offset
 | 
				
			||||||
 | 
					                    + row_offset.clone()
 | 
				
			||||||
 | 
					                    + c::Point { x: *x_offset, y: 0.0 };
 | 
				
			||||||
 | 
					                f(offset, button);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod procedures {
 | 
					mod procedures {
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user