maintain aspect ratio when rendering images
This commit is contained in:
parent
54765018be
commit
e55d3f5814
12
408float.mu
12
408float.mu
|
@ -21,3 +21,15 @@ fn rational nr: int, dr: int -> _/xmm0: float {
|
||||||
result <- divide divisor
|
result <- divide divisor
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# n/m rounded up
|
||||||
|
fn scale-down-and-round-up n: int, m: int -> _/ecx: int {
|
||||||
|
var result/ecx: int <- copy n
|
||||||
|
result <- add m
|
||||||
|
result <- decrement
|
||||||
|
var result-f/xmm0: float <- convert result
|
||||||
|
var m-f/xmm1: float <- convert m
|
||||||
|
result-f <- divide m-f
|
||||||
|
result <- truncate result-f
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
13
511image.mu
13
511image.mu
|
@ -1098,3 +1098,16 @@ fn render-raw-image screen: (addr screen), _img: (addr image), xmin: int, ymin:
|
||||||
loop
|
loop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn scale-image-height _img: (addr image), width: int -> _/ebx: int {
|
||||||
|
var img/esi: (addr image) <- copy _img
|
||||||
|
var img-height/eax: (addr int) <- get img, height
|
||||||
|
var result-f/xmm0: float <- convert *img-height
|
||||||
|
var img-width/eax: (addr int) <- get img, width
|
||||||
|
var img-width-f/xmm1: float <- convert *img-width
|
||||||
|
result-f <- divide img-width-f
|
||||||
|
var width-f/xmm1: float <- convert width
|
||||||
|
result-f <- multiply width-f
|
||||||
|
var result/ebx: int <- convert result-f
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
|
@ -163,8 +163,9 @@ fn render-globals screen: (addr screen), _self: (addr global-table), show-cursor
|
||||||
var render-image?/eax: boolean <- render-image? curr, cursor-in-current-line?
|
var render-image?/eax: boolean <- render-image? curr, cursor-in-current-line?
|
||||||
compare render-image?, 0/false
|
compare render-image?, 0/false
|
||||||
break-if-=
|
break-if-=
|
||||||
render-image-definition screen, curr, 0/x y1
|
var y/ecx: int <- render-image-definition screen, curr, 0/x y1
|
||||||
add-to y1, 0xa # 1 line for definition, 8 lines (128px) for image, 1 line padding
|
y <- increment # padding
|
||||||
|
copy-to y1, y
|
||||||
break $render-globals:iter
|
break $render-globals:iter
|
||||||
}
|
}
|
||||||
var curr-input-ah/eax: (addr handle gap-buffer) <- get curr, input
|
var curr-input-ah/eax: (addr handle gap-buffer) <- get curr, input
|
||||||
|
@ -616,17 +617,21 @@ fn render-image? _self: (addr global), cursor-in-definition?: boolean -> _/eax:
|
||||||
return litimg?
|
return litimg?
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render-image-definition screen: (addr screen), _self: (addr global), x: int, y: int {
|
fn render-image-definition screen: (addr screen), _self: (addr global), x: int, _y: int -> _/ecx: int {
|
||||||
var self/esi: (addr global) <- copy _self
|
var self/esi: (addr global) <- copy _self
|
||||||
|
var y/ecx: int <- copy _y
|
||||||
|
set-cursor-position 0/screen, 0x20 0x20
|
||||||
|
draw-int32-decimal-wrapping-right-then-down-from-cursor-over-full-screen 0/screen, y, 4/fg 0/bg
|
||||||
{
|
{
|
||||||
var name-ah/eax: (addr handle array byte) <- get self, name
|
var name-ah/eax: (addr handle array byte) <- get self, name
|
||||||
var _name/eax: (addr array byte) <- lookup *name-ah
|
var _name/eax: (addr array byte) <- lookup *name-ah
|
||||||
var name/ecx: (addr array byte) <- copy _name
|
var name/edx: (addr array byte) <- copy _name
|
||||||
var x/eax: int <- draw-text-rightward-over-full-screen screen, "define ", x y, 7/fg=definition, 0xc5/bg=blue-bg
|
var x/eax: int <- draw-text-rightward-over-full-screen screen, "define ", x y, 7/fg=definition, 0xc5/bg=blue-bg
|
||||||
x <- draw-text-rightward-over-full-screen screen, name, x y, 7/fg=definition, 0xc5/bg=blue-bg
|
x <- draw-text-rightward-over-full-screen screen, name, x y, 7/fg=definition, 0xc5/bg=blue-bg
|
||||||
}
|
}
|
||||||
increment y
|
y <- increment # skip definition line
|
||||||
shift-left y, 4/log2fontheight
|
# y is now in pixels
|
||||||
|
y <- shift-left 4/log2fontheight
|
||||||
add-to x, 4
|
add-to x, 4
|
||||||
shift-left x, 3/log2fontwidth
|
shift-left x, 3/log2fontwidth
|
||||||
var value-ah/eax: (addr handle cell) <- get self, value
|
var value-ah/eax: (addr handle cell) <- get self, value
|
||||||
|
@ -638,10 +643,15 @@ fn render-image-definition screen: (addr screen), _self: (addr global), x: int,
|
||||||
var img-data-ah/eax: (addr handle stream byte) <- get second, text-data
|
var img-data-ah/eax: (addr handle stream byte) <- get second, text-data
|
||||||
var img-data/eax: (addr stream byte) <- lookup *img-data-ah
|
var img-data/eax: (addr stream byte) <- lookup *img-data-ah
|
||||||
var img-h: (handle cell)
|
var img-h: (handle cell)
|
||||||
var img-cell-ah/ecx: (addr handle cell) <- address img-h
|
var img-cell-ah/edx: (addr handle cell) <- address img-h
|
||||||
new-image img-cell-ah, img-data
|
new-image img-cell-ah, img-data
|
||||||
var img-cell/eax: (addr cell) <- lookup *img-cell-ah
|
var img-cell/eax: (addr cell) <- lookup *img-cell-ah
|
||||||
var img-ah/eax: (addr handle image) <- get img-cell, image-data
|
var img-ah/eax: (addr handle image) <- get img-cell, image-data
|
||||||
var img/eax: (addr image) <- lookup *img-ah
|
var img/eax: (addr image) <- lookup *img-ah
|
||||||
render-image screen, img, x y, 0x80/w 0x80/h
|
var height/ebx: int <- scale-image-height img, 0x80/width
|
||||||
|
render-image screen, img, x y, 0x80/width height
|
||||||
|
y <- add height
|
||||||
|
# switch y back to characters
|
||||||
|
y <- scale-down-and-round-up y, 0x10/font-height
|
||||||
|
return y
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue