mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 14:54:47 +00:00
parent
12990d293c
commit
cf7c816123
2 changed files with 44 additions and 18 deletions
|
@ -23,6 +23,7 @@ use std::path::Path;
|
||||||
use winit::event;
|
use winit::event;
|
||||||
use winit::event::{Event, ModifiersState};
|
use winit::event::{Event, ModifiersState};
|
||||||
use winit::event_loop::ControlFlow;
|
use winit::event_loop::ControlFlow;
|
||||||
|
use wgpu::{TextureView, CommandEncoder, RenderPass};
|
||||||
|
|
||||||
|
|
||||||
pub mod ast;
|
pub mod ast;
|
||||||
|
@ -137,7 +138,7 @@ fn run_event_loop() -> Result<(), Box<dyn Error>> {
|
||||||
Event::WindowEvent {
|
Event::WindowEvent {
|
||||||
event: event::WindowEvent::CloseRequested,
|
event: event::WindowEvent::CloseRequested,
|
||||||
..
|
..
|
||||||
} => *control_flow = winit::event_loop::ControlFlow::Exit,
|
} => *control_flow = ControlFlow::Exit,
|
||||||
//Resize
|
//Resize
|
||||||
Event::WindowEvent {
|
Event::WindowEvent {
|
||||||
event: event::WindowEvent::Resized(new_size),
|
event: event::WindowEvent::Resized(new_size),
|
||||||
|
@ -214,6 +215,7 @@ fn run_event_loop() -> Result<(), Box<dyn Error>> {
|
||||||
);
|
);
|
||||||
|
|
||||||
if let Some(selection) = ed_model.selection_opt {
|
if let Some(selection) = ed_model.selection_opt {
|
||||||
|
|
||||||
let selection_rects_res = create_selection_rects(selection, &glyph_bounds_rects);
|
let selection_rects_res = create_selection_rects(selection, &glyph_bounds_rects);
|
||||||
|
|
||||||
match selection_rects_res {
|
match selection_rects_res {
|
||||||
|
@ -225,26 +227,22 @@ fn run_event_loop() -> Result<(), Box<dyn Error>> {
|
||||||
&selection_rects,
|
&selection_rects,
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut render_pass = encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
|
let mut render_pass = begin_render_pass(&mut encoder, &frame.view);
|
||||||
color_attachments: &[wgpu::RenderPassColorAttachmentDescriptor {
|
|
||||||
attachment: &frame.view,
|
|
||||||
resolve_target: None,
|
|
||||||
ops: wgpu::Operations::default(),
|
|
||||||
}],
|
|
||||||
depth_stencil_attachment: None,
|
|
||||||
});
|
|
||||||
|
|
||||||
render_pass.set_pipeline(&rect_pipeline);
|
render_pass.set_pipeline(&rect_pipeline);
|
||||||
render_pass.set_bind_group(0, &ortho.bind_group, &[]);
|
render_pass.set_bind_group(0, &ortho.bind_group, &[]);
|
||||||
render_pass.set_vertex_buffer(0, rect_buffers.vertex_buffer.slice(..));
|
render_pass.set_vertex_buffer(0, rect_buffers.vertex_buffer.slice(..));
|
||||||
render_pass.set_index_buffer(rect_buffers.index_buffer.slice(..));
|
render_pass.set_index_buffer(rect_buffers.index_buffer.slice(..));
|
||||||
render_pass.draw_indexed(0..rect_buffers.num_rects, 0, 0..1);
|
render_pass.draw_indexed(0..rect_buffers.num_rects, 0, 0..1);
|
||||||
|
|
||||||
drop(render_pass);
|
|
||||||
},
|
},
|
||||||
Err(e) => print_err(&e) //TODO draw error text on screen
|
Err(e) => {
|
||||||
|
begin_render_pass(&mut encoder, &frame.view);
|
||||||
|
print_err(&e) //TODO draw error text on screen
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
begin_render_pass(&mut encoder, &frame.view);
|
||||||
|
}
|
||||||
|
|
||||||
// draw all text
|
// draw all text
|
||||||
glyph_brush
|
glyph_brush
|
||||||
|
@ -278,6 +276,28 @@ fn run_event_loop() -> Result<(), Box<dyn Error>> {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn begin_render_pass<'a>(
|
||||||
|
encoder: &'a mut CommandEncoder,
|
||||||
|
texture_view: &'a TextureView
|
||||||
|
) -> RenderPass<'a> {
|
||||||
|
encoder.begin_render_pass(&wgpu::RenderPassDescriptor {
|
||||||
|
color_attachments: &[wgpu::RenderPassColorAttachmentDescriptor {
|
||||||
|
attachment: texture_view,
|
||||||
|
resolve_target: None,
|
||||||
|
ops: wgpu::Operations {
|
||||||
|
load: wgpu::LoadOp::Clear(wgpu::Color {
|
||||||
|
r: 0.0,
|
||||||
|
g: 0.0,
|
||||||
|
b: 0.0,
|
||||||
|
a: 1.0,
|
||||||
|
}),
|
||||||
|
store: true,
|
||||||
|
},
|
||||||
|
}],
|
||||||
|
depth_stencil_attachment: None,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
fn make_rect_pipeline(
|
fn make_rect_pipeline(
|
||||||
gpu_device: &wgpu::Device,
|
gpu_device: &wgpu::Device,
|
||||||
swap_chain_descr: &wgpu::SwapChainDescriptor,
|
swap_chain_descr: &wgpu::SwapChainDescriptor,
|
||||||
|
@ -414,17 +434,23 @@ fn update_text_state(ed_model: &mut model::Model, received_char: &char) {
|
||||||
Position {
|
Position {
|
||||||
line: ed_model.caret_pos.line + 1,
|
line: ed_model.caret_pos.line + 1,
|
||||||
column: 0
|
column: 0
|
||||||
}
|
};
|
||||||
|
|
||||||
|
ed_model.selection_opt = None;
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
|
let nr_lines = ed_model.lines.len();
|
||||||
|
|
||||||
if let Some(last_line) = ed_model.lines.last_mut() {
|
if let Some(last_line) = ed_model.lines.last_mut() {
|
||||||
last_line.push(*received_char);
|
last_line.push(*received_char);
|
||||||
|
|
||||||
ed_model.caret_pos =
|
ed_model.caret_pos =
|
||||||
Position {
|
Position {
|
||||||
line: ed_model.caret_pos.line,
|
line: nr_lines - 1,
|
||||||
column: ed_model.caret_pos.column + 1
|
column: last_line.len()
|
||||||
}
|
};
|
||||||
|
|
||||||
|
ed_model.selection_opt = None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,7 +10,7 @@ pub fn move_caret_left(old_caret_pos: Position, old_selection_opt: Option<RawSel
|
||||||
if old_caret_pos.line == 0 {
|
if old_caret_pos.line == 0 {
|
||||||
(0, 0)
|
(0, 0)
|
||||||
} else if let Some(curr_line) = lines.get(old_line_nr - 1) {
|
} else if let Some(curr_line) = lines.get(old_line_nr - 1) {
|
||||||
(old_line_nr - 1, curr_line.len())
|
(old_line_nr - 1, curr_line.len()-2)
|
||||||
} else {
|
} else {
|
||||||
(0, 0) // this should never happen, should this method return Result?
|
(0, 0) // this should never happen, should this method return Result?
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue