URI: 
       Implemented checker background. - icy_draw - icy_draw is the successor to mystic draw. fork / mirror
  HTML git clone https://git.drkhsh.at/icy_draw.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 17c3c6a06985cdb12f578b41b5276adef03ee187
   DIR parent 608e4f4e7b5b14e921c81e76b7a5c4a518d2889b
  HTML Author: Mike Krüger <mkrueger@posteo.de>
       Date:   Wed, 14 Dec 2022 20:37:12 +0100
       
       Implemented checker background.
       
       + worked on drawing.
       
       Diffstat:
         M src/model/tool/draw_rectangle_fill… |       2 +-
         M src/ui/ansi_editor/mod.rs           |      43 +++++++++++++------------------
         M src/ui/ansi_editor/render.rs        |      27 ++++++++++-----------------
         M src/ui/ansi_editor/render.shader.f… |      21 ++++++++++++++-------
       
       4 files changed, 43 insertions(+), 50 deletions(-)
       ---
   DIR diff --git a/src/model/tool/draw_rectangle_filled_imp.rs b/src/model/tool/draw_rectangle_filled_imp.rs
       @@ -2,7 +2,7 @@ use eframe::egui;
        use i18n_embed_fl::fl;
        use icy_engine::TextAttribute;
        
       -use super::{Editor, Event, Position, Tool, DrawMode, Plottable, plot_point, ScanLines, brush_imp::draw_glyph};
       +use super::{ Tool, DrawMode, Plottable, plot_point, ScanLines, brush_imp::draw_glyph};
        use std::{
            cell::{RefCell},
            rc::Rc,
   DIR diff --git a/src/ui/ansi_editor/mod.rs b/src/ui/ansi_editor/mod.rs
       @@ -1,5 +1,5 @@
       -use std::{cmp::{max}, fs, path::PathBuf, sync::{Arc, Mutex}};
       -use eframe::{epaint::{Vec2, Rect}, egui::{CursorIcon, self, ScrollArea, PointerButton}};
       +use std::{cmp::{max, min}, fs, path::PathBuf, sync::{Arc, Mutex}};
       +use eframe::{epaint::{Vec2, Rect, Pos2}, egui::{CursorIcon, self, ScrollArea, PointerButton}};
        use icy_engine::{Buffer, SaveOptions, AnsiParser, Selection, BufferParser};
        
        pub mod render;
       @@ -82,51 +82,44 @@ impl Document for AnsiEditor {
            fn show_ui(&mut self, ui: &mut eframe::egui::Ui) {
                let size = ui.max_rect().size();
                let buf_w = self.buffer_view.lock().unwrap().editor.buf.get_buffer_width();
       -        let buf_h = self.buffer_view.lock().unwrap().editor.buf.get_buffer_height();
       +        let buf_h = self.buffer_view.lock().unwrap().editor.buf.get_real_buffer_height();
       +        let scale = self.buffer_view.lock().unwrap().scale;
                // let h = max(buf_h, buffer_view.lock().unwrap().buf.get_real_buffer_height());
                let font_dimensions = self.buffer_view.lock().unwrap().editor.buf.get_font_dimensions();
        
       -        let mut scale_x = (size.x - 4.0) / font_dimensions.width as f32 / buf_w as f32;
       -        let mut scale_y = size.y / font_dimensions.height as f32 / buf_h as f32;
       -
       -        if scale_x < scale_y {
       -            scale_y = scale_x;
       -        } else {
       -            scale_x = scale_y;
       -        }
       -
                let char_size = Vec2::new(
       -            font_dimensions.width as f32 * scale_x,
       -            font_dimensions.height as f32 * scale_y,
       +            font_dimensions.width as f32 * scale,
       +            font_dimensions.height as f32 * scale,
                );
        
                let rect_w = buf_w as f32 * char_size.x;
                let rect_h = buf_h as f32 * char_size.y;
                let top_margin_height = ui.min_rect().top();
       +        let available_rect = ui.available_rect_before_wrap();
        
       -        let _output = ScrollArea::vertical()
       +        let _output = ScrollArea::both()
                    .auto_shrink([false; 2])
                    .stick_to_bottom(true)
                    .show_viewport(ui, |ui, viewport| {
                        let (id, draw_area) = ui.allocate_space(size);
                        let mut response = ui.interact(draw_area, id, egui::Sense::click());
        
       +                let rect_h = min(rect_h as i32, draw_area.height() as i32) as f32;
       +
                        let rect = Rect::from_min_size(
       -                    draw_area.left_top()
       -                        + Vec2::new(
       -                            (-4.0 + draw_area.width() - rect_w) / 2.,
       -                            (-top_margin_height
       -                                + viewport.top()
       -                                + (draw_area.height() - rect_h) / 2.)
       -                                .floor(),
       +                    //draw_area.left_top() + 
       +                    Pos2::new(
       +                            if rect_w < draw_area.width() { (draw_area.width() - rect_w) / 2. } else { 0. },
       +                            0.,
                                )
                                .ceil(),
                            Vec2::new(rect_w, rect_h),
                        );
       +
                        let real_height = self.buffer_view.lock().unwrap().editor.buf.get_real_buffer_height();
                        let max_lines = max(0, real_height - buf_h);
       -                ui.set_height(scale_y * max_lines as f32 * font_dimensions.height as f32);
       -
       +                ui.set_height(scale * max_lines as f32 * font_dimensions.height as f32);
       +                ui.set_width(rect_w);
                        let first_line = (viewport.top() / char_size.y) as i32;
                        let scroll_back_line = max(0, max_lines - first_line);
        
       @@ -140,13 +133,13 @@ impl Document for AnsiEditor {
                            rect: draw_area,
                            callback: std::sync::Arc::new(egui_glow::CallbackFn::new(
                                move |info, painter| {
       -
                                    buffer_view.lock().unwrap().update_buffer(painter.gl());
                                    buffer_view.lock().unwrap().paint(painter.gl(), info, draw_area, rect);
                                },
                            )),
                        };
        
       +
                        ui.painter().add(callback);
                        response = response.context_menu(terminal_context_menu);
        
   DIR diff --git a/src/ui/ansi_editor/render.rs b/src/ui/ansi_editor/render.rs
       @@ -236,18 +236,16 @@ impl BufferView {
                        }
                    }
        
       -            println!("{:?} / {:?}", draw_rect, rect);
       -
                    // draw Framebuffer
                    gl.bind_framebuffer(glow::FRAMEBUFFER, None);
                    gl.clear(glow::COLOR_BUFFER_BIT | glow::DEPTH_BUFFER_BIT);
       -
       +            println!("{:?}, {:?} ||| {:?}", draw_rect, rect, info.clip_rect);
        
                    gl.viewport(
       -                draw_rect.left() as i32,
       -                (info.screen_size_px[1] as f32 - draw_rect.max.y * info.pixels_per_point) as i32,
       -                draw_rect.width() as i32,
       -                draw_rect.height() as i32,
       +                info.clip_rect.left() as i32,
       +                (info.screen_size_px[1] as f32 - info.clip_rect.max.y * info.pixels_per_point) as i32,
       +                info.clip_rect.width() as i32,
       +                info.clip_rect.height() as i32,
                    );
                    gl.use_program(Some(self.draw_program));
                    gl.active_texture(glow::TEXTURE0);
       @@ -261,16 +259,11 @@ impl BufferView {
                        gl.get_uniform_location(self.draw_program, "u_effect")
                            .as_ref(),
                            0.0
       -                    /* 
       -                match self.post_processing {
       -                    crate::ui::main_window::PostProcessing::None => 0.0,
       -                    crate::ui::main_window::PostProcessing::CRT1 => 1.0,
       -                },*/
                    );
                    gl.uniform_4_f32(
                        gl.get_uniform_location(self.draw_program, "u_draw_rect")
                            .as_ref(),
       -                    draw_rect.left(),
       +                draw_rect.left(),
                        draw_rect.top(),
                        draw_rect.width(),
                        draw_rect.height(),
       @@ -279,10 +272,10 @@ impl BufferView {
                    gl.uniform_4_f32(
                        gl.get_uniform_location(self.draw_program, "u_draw_area")
                            .as_ref(),
       -                    draw_rect.left() + rect.left(),
       -                    draw_rect.top() + rect.top(),
       -                    draw_rect.left() + rect.right(),
       -                    draw_rect.top() + rect.bottom()
       +                    rect.left(),
       +                    rect.top(),
       +                    rect.right(),
       +                    rect.bottom()
                    );
        
                    gl.bind_vertex_array(Some(self.vertex_array));
   DIR diff --git a/src/ui/ansi_editor/render.shader.frag b/src/ui/ansi_editor/render.shader.frag
       @@ -1,4 +1,5 @@
        #version 330
       +
        in vec2 UV;
        
        uniform sampler2D u_render_texture;
       @@ -8,19 +9,25 @@ uniform float     u_effect;
        
        out vec3 color;
        
       +void draw_background() {
       +        float checker_size = 8.0;
       +    vec2 p = floor(gl_FragCoord.xy / checker_size);
       +    float PatternMask = mod(p.x + mod(p.y, 2.0), 2.0);
       +        if (PatternMask < 1.0) {
       +                color = vec3(0.4, 0.4, 0.4);
       +        } else {
       +                color = vec3(0.6, 0.6, 0.6);
       +        }
       +}
       +
        void main() {
       -        /*
                vec2 uv   = (gl_FragCoord.xy - u_draw_rect.xy) / u_draw_rect.zw;
       -
                vec2 from = u_draw_area.xy / u_draw_rect.zw;
                vec2 to   = u_draw_area.zw / u_draw_rect.zw;
       -
                if (from.x <= uv.x && uv.x < to.x && 
                    from.y <= uv.y && uv.y < to.y) {
                        color = texture(u_render_texture, (uv - from) / (to - from) ).xyz;
                } else {
       -                color = vec3(1.0);
       -        }*/
       -
       -        color = vec3(1.0);
       +                draw_background();
       +        }
        }
        \ No newline at end of file