From abcf2b32777ffb934788e3219cacc2bbc048b6a3 Mon Sep 17 00:00:00 2001 From: Akshay Date: Sun, 11 Apr 2021 15:31:32 +0530 Subject: add `selection-start` and `selection-end` primitives --- src/lisp/prelude.rs | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) (limited to 'src/lisp/prelude.rs') diff --git a/src/lisp/prelude.rs b/src/lisp/prelude.rs index e24ade5..1d37a32 100644 --- a/src/lisp/prelude.rs +++ b/src/lisp/prelude.rs @@ -1,6 +1,6 @@ use crate::{ bitmap::MapPoint, - brush::Brush, + brush::{Brush, RectSelectBrush}, grid::GridKind, guide::Guide, lisp::{ @@ -11,7 +11,7 @@ use crate::{ }, primitive, undo::PaintRecord, - utils::load_script, + utils::{load_script, rect_coords}, }; use std::convert::TryInto; @@ -437,6 +437,40 @@ pub fn new_env() -> Result { } }); + primitive!(env, Arity::Exact(0), "selection-start", |_, app| { + if let Brush::RectSelect(RectSelectBrush { + start: Some(s), + end: Some(e), + .. + }) = app.brush + { + let pt = rect_coords(s, e).0; + Ok(LispExpr::DottedList(vec![ + (pt.x as i64).into(), + (pt.y as i64).into(), + ])) + } else { + Err(EvalError::CustomInternal("No active selection!").into()) + } + }); + + primitive!(env, Arity::Exact(0), "selection-end", |_, app| { + if let Brush::RectSelect(RectSelectBrush { + start: Some(s), + end: Some(e), + .. + }) = app.brush + { + let pt = rect_coords(s, e).1; + Ok(LispExpr::DottedList(vec![ + (pt.x as i64).into(), + (pt.y as i64).into(), + ])) + } else { + Err(EvalError::CustomInternal("No active selection!").into()) + } + }); + primitive!(env, Arity::Exact(2), "range", |args, _| { if type_match!( args, -- cgit v1.2.3