MCPcopy Index your code
hub / github.com/endbasic/endbasic / run

Function run

sdl/src/host.rs:757–881  ·  view source on GitHub ↗
(
    resolution: Resolution,
    default_fg_color: Option<u8>,
    default_bg_color: Option<u8>,
    font: &'static Font,
    request_rx: Receiver<Request>,
    response_tx: SyncSender<Response>,
   

Source from the content-addressed store, hash-verified

755/// Runs the main graphics loop.
756#[allow(clippy::too_many_arguments)]
757pub(crate) fn run(
758 resolution: Resolution,
759 default_fg_color: Option<u8>,
760 default_bg_color: Option<u8>,
761 font: &'static Font,
762 request_rx: Receiver<Request>,
763 response_tx: SyncSender<Response>,
764 on_key_tx: Sender<Key>,
765 signals_tx: async_channel::Sender<Signal>,
766) {
767 let ctx = match Context::new(resolution, font) {
768 Ok(ctx) => ctx,
769 Err(e) => {
770 response_tx.send(Response::Empty(Err(e))).expect("Channel must be alive");
771 return;
772 }
773 };
774
775 let info = ctx.get_info();
776 let mut ctx = SharedContext(Rc::from(RefCell::from(ctx)));
777
778 let input = NoopInputOps {};
779 let mut console =
780 GraphicsConsole::new(input, ctx.clone(), NoopAudioOps, default_fg_color, default_bg_color)
781 .expect("Console initialization must succeed");
782
783 response_tx.send(Response::Empty(Ok(()))).expect("Channel must be alive");
784
785 let mut budget = LOOP_POLL_BUDGET;
786 loop {
787 let mut did_something = false;
788
789 match request_rx.try_recv() {
790 Ok(request) => {
791 let response = match request {
792 Request::Exit => break,
793
794 Request::Clear(how) => Response::Empty(console.clear(how)),
795 Request::SetColor(fg, bg) => Response::Empty(console.set_color(fg, bg)),
796 Request::EnterAlt => Response::Empty(console.enter_alt()),
797 Request::HideCursor => Response::Empty(console.hide_cursor()),
798 Request::LeaveAlt => Response::Empty(console.leave_alt()),
799 Request::Locate(pos) => Response::Empty(console.locate(pos)),
800 Request::MoveWithinLine(off) => Response::Empty(console.move_within_line(off)),
801 Request::Print(text) => Response::Empty(console.print(&text)),
802 Request::ShowCursor => Response::Empty(console.show_cursor()),
803 Request::GlyphSize => Response::GlyphSize(info.glyph_size),
804 Request::SizeChars => Response::SizeChars(info.size_chars),
805 Request::SizePixels => Response::SizePixels(info.size_pixels),
806 Request::Write(text) => Response::Empty(console.write(&text)),
807 Request::BucketFill(xy) => Response::Empty(console.bucket_fill(xy)),
808 Request::DrawCircle(center, radius) => {
809 Response::Empty(console.draw_circle(center, radius))
810 }
811 Request::DrawCircleFilled(center, radius) => {
812 Response::Empty(console.draw_circle_filled(center, radius))
813 }
814 Request::DrawLine(x1y1, x2y2) => Response::Empty(console.draw_line(x1y1, x2y2)),

Callers 1

runMethod · 0.70

Calls 15

SharedContextClass · 0.85
parse_eventFunction · 0.85
try_recvMethod · 0.80
save_bmpMethod · 0.80
poll_eventMethod · 0.80
get_infoMethod · 0.45
clearMethod · 0.45
set_colorMethod · 0.45
enter_altMethod · 0.45
hide_cursorMethod · 0.45
leave_altMethod · 0.45
locateMethod · 0.45

Tested by

no test coverage detected