pub(crate) fn render(
        &mut self,
        app_info: &mut Data,
        labels: &LabelHandler,
        window: &dyn KeyHandler,
    ) -> Result<(), Box<dyn Error>> {
        app_info.contents.compute_new_window(app_info.offset);

        self.terminal.draw(|frame| {
            // We check if we need to recompute the terminal size in the case that the saved off
            // variable differs from the current frame, which can occur when a terminal is resized
            // between an event handling and a rendering.
            let size = frame.area();
            if size != self.terminal_size {
                self.terminal_size = size;
                self.comp_layouts = Self::calculate_dimensions(self.terminal_size, window);

                // We change the start_address here to ensure that 0 is ALWAYS the first start
                // address. We round to preventing constant resizing always moving to 0.
                app_info.start_address = (app_info.start_address
                    + (self.comp_layouts.bytes_per_line / 2))
                    / self.comp_layouts.bytes_per_line
                    * self.comp_layouts.bytes_per_line;
            }

            Self::render_frame(
                frame,
                self.terminal_size,
                app_info,
                labels,
                window,
                &self.comp_layouts,
            );
        })?;
        Ok(())
    }
Display the addresses, editors, labels, and popups based off of the specifications of
[`ComponentLayouts`], defined by
[`calculate_dimensions`](Self::calculate_dimensions).
src/screen.rs