add bgVertexBuffer and bgProgram to imperative shell, so we can draw bg and cursor without overlap, and without z-index
This commit is contained in:
@@ -9,18 +9,19 @@ structure TextBuilder :> TEXT_BUILDER =
|
|||||||
struct
|
struct
|
||||||
open TextConstants
|
open TextConstants
|
||||||
|
|
||||||
fun accToDrawMsg (textAcc, cursorAcc) =
|
fun accToDrawMsg (textAcc, cursorAcc, bgAcc) =
|
||||||
let
|
let
|
||||||
open MailboxType
|
open MailboxType
|
||||||
open DrawMsg
|
open DrawMsg
|
||||||
|
|
||||||
val textAcc = Vector.concat textAcc
|
val textAcc = Vector.concat textAcc
|
||||||
val cursorAcc = Vector.concat cursorAcc
|
val bgAcc = Vector.concat bgAcc
|
||||||
|
|
||||||
val textMsg = REDRAW_TEXT textAcc
|
val textMsg = REDRAW_TEXT textAcc
|
||||||
val cursorMsg = REDRAW_CURSOR cursorAcc
|
val cursorMsg = REDRAW_CURSOR cursorAcc
|
||||||
|
val bgMsg = REDRAW_BG bgAcc
|
||||||
in
|
in
|
||||||
[DRAW textMsg, DRAW cursorMsg]
|
[DRAW bgMsg, DRAW textMsg, DRAW cursorMsg]
|
||||||
end
|
end
|
||||||
|
|
||||||
fun buildCursor (posX, posY, fWindowWidth, fWindowHeight, r, g, b) =
|
fun buildCursor (posX, posY, fWindowWidth, fWindowHeight, r, g, b) =
|
||||||
@@ -83,7 +84,7 @@ struct
|
|||||||
|
|
||||||
fun buildTextString
|
fun buildTextString
|
||||||
( pos, str, acc, posX, posY, startX
|
( pos, str, acc, posX, posY, startX
|
||||||
, tl, absIdx, cursorPos, cursorAcc
|
, tl, absIdx, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData: window_data, colourData: colour_data
|
, windowData: window_data, colourData: colour_data
|
||||||
) =
|
) =
|
||||||
if pos < String.size str then
|
if pos < String.size str then
|
||||||
@@ -95,7 +96,7 @@ struct
|
|||||||
(* not in cursur *)
|
(* not in cursur *)
|
||||||
buildTextString
|
buildTextString
|
||||||
( pos + 1, str, acc, posX + xSpace, posY, startX
|
( pos + 1, str, acc, posX + xSpace, posY, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
@@ -104,12 +105,11 @@ struct
|
|||||||
val {fw, fh, ...} = windowData
|
val {fw, fh, ...} = windowData
|
||||||
val {r, g, b, ...} = colourData
|
val {r, g, b, ...} = colourData
|
||||||
|
|
||||||
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b)
|
val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
|
||||||
val cursorAcc = cursorHd :: cursorAcc
|
|
||||||
in
|
in
|
||||||
buildTextString
|
buildTextString
|
||||||
( pos + 1, str, acc, posX + xSpace, posY, startX
|
( pos + 1, str, acc, posX + xSpace, posY, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
@@ -119,7 +119,7 @@ struct
|
|||||||
(* not in cursor position, so iterate like normal *)
|
(* not in cursor position, so iterate like normal *)
|
||||||
buildTextString
|
buildTextString
|
||||||
( pos + 1, str, acc, startX, posY + ySpace, startX
|
( pos + 1, str, acc, startX, posY + ySpace, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
@@ -128,17 +128,16 @@ struct
|
|||||||
val {fw, fh, ...} = windowData
|
val {fw, fh, ...} = windowData
|
||||||
val {r, g, b, ...} = colourData
|
val {r, g, b, ...} = colourData
|
||||||
|
|
||||||
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b)
|
val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
|
||||||
val cursorAcc = cursorHd :: cursorAcc
|
|
||||||
in
|
in
|
||||||
buildTextString
|
buildTextString
|
||||||
( pos + 1, str, acc, startX, posY + ySpace, startX
|
( pos + 1, str, acc, startX, posY + ySpace, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
accToDrawMsg (acc, cursorAcc)
|
accToDrawMsg (acc, cursorAcc, bgAcc)
|
||||||
| chr =>
|
| chr =>
|
||||||
let
|
let
|
||||||
val chrFun = Vector.sub (CozetteAscii.asciiTable, Char.ord chr)
|
val chrFun = Vector.sub (CozetteAscii.asciiTable, Char.ord chr)
|
||||||
@@ -156,7 +155,7 @@ struct
|
|||||||
in
|
in
|
||||||
buildTextString
|
buildTextString
|
||||||
( pos + 1, str, acc, posX + xSpace, posY, startX
|
( pos + 1, str, acc, posX + xSpace, posY, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
@@ -173,19 +172,18 @@ struct
|
|||||||
in
|
in
|
||||||
buildTextString
|
buildTextString
|
||||||
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
|
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
accToDrawMsg (acc, cursorAcc)
|
accToDrawMsg (acc, cursorAcc, bgAcc)
|
||||||
else
|
else
|
||||||
(* equal to cursor *)
|
(* equal to cursor *)
|
||||||
let
|
let
|
||||||
val {fw, fh, ...} = windowData
|
val {fw, fh, ...} = windowData
|
||||||
val {r, g, b, hr, hg, hb} = colourData
|
val {r, g, b, hr, hg, hb} = colourData
|
||||||
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b)
|
val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
|
||||||
val cursorAcc = cursorHd :: cursorAcc
|
|
||||||
in
|
in
|
||||||
if posX + xSpace < #w windowData then
|
if posX + xSpace < #w windowData then
|
||||||
let
|
let
|
||||||
@@ -199,7 +197,7 @@ struct
|
|||||||
* since cursor was built *)
|
* since cursor was built *)
|
||||||
buildTextString
|
buildTextString
|
||||||
( pos + 1, str, acc, posX + xSpace, posY, startX
|
( pos + 1, str, acc, posX + xSpace, posY, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
@@ -215,12 +213,12 @@ struct
|
|||||||
* since cursor was built *)
|
* since cursor was built *)
|
||||||
buildTextString
|
buildTextString
|
||||||
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
|
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
accToDrawMsg (acc, cursorAcc)
|
accToDrawMsg (acc, cursorAcc, bgAcc)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@@ -229,11 +227,11 @@ struct
|
|||||||
hd :: tl =>
|
hd :: tl =>
|
||||||
buildTextString
|
buildTextString
|
||||||
( 0, hd, acc, posX, posY, startX
|
( 0, hd, acc, posX, posY, startX
|
||||||
, tl, absIdx, cursorPos, cursorAcc
|
, tl, absIdx, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
)
|
)
|
||||||
| [] =>
|
| [] =>
|
||||||
accToDrawMsg (acc, cursorAcc)
|
accToDrawMsg (acc, cursorAcc, bgAcc)
|
||||||
|
|
||||||
fun isInSearchRange (absIdx, searchPos, searchHd, searchLen) =
|
fun isInSearchRange (absIdx, searchPos, searchHd, searchLen) =
|
||||||
let
|
let
|
||||||
@@ -251,7 +249,7 @@ struct
|
|||||||
|
|
||||||
fun buildTextStringSearch
|
fun buildTextStringSearch
|
||||||
( pos, str, acc, posX, posY, startX
|
( pos, str, acc, posX, posY, startX
|
||||||
, tl, absIdx, cursorPos, cursorAcc
|
, tl, absIdx, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData: window_data, colourData: colour_data
|
, windowData: window_data, colourData: colour_data
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
) =
|
) =
|
||||||
@@ -261,7 +259,7 @@ struct
|
|||||||
(* go to next search hd/tl *)
|
(* go to next search hd/tl *)
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( pos, str, acc, posX, posY, startX
|
( pos, str, acc, posX, posY, startX
|
||||||
, tl, absIdx, cursorPos, cursorAcc
|
, tl, absIdx, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, 0, searchLen
|
, searchHd, searchTl, 0, searchLen
|
||||||
)
|
)
|
||||||
@@ -269,7 +267,7 @@ struct
|
|||||||
(* exhausted search hd/tl so calll normal build function *)
|
(* exhausted search hd/tl so calll normal build function *)
|
||||||
buildTextString
|
buildTextString
|
||||||
( pos, str, acc, posX, posY, startX
|
( pos, str, acc, posX, posY, startX
|
||||||
, tl, absIdx, cursorPos, cursorAcc
|
, tl, absIdx, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
)
|
)
|
||||||
else if pos < String.size str then
|
else if pos < String.size str then
|
||||||
@@ -289,11 +287,11 @@ struct
|
|||||||
val {fw, fh, ...} = windowData
|
val {fw, fh, ...} = windowData
|
||||||
|
|
||||||
val space = buildCursor (posX, posY, fw, fh, r, g, b)
|
val space = buildCursor (posX, posY, fw, fh, r, g, b)
|
||||||
val cursorAcc = space :: cursorAcc
|
val bgAcc = space :: bgAcc
|
||||||
in
|
in
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( pos + 1, str, acc, posX + xSpace, posY, startX
|
( pos + 1, str, acc, posX + xSpace, posY, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
)
|
)
|
||||||
@@ -301,7 +299,7 @@ struct
|
|||||||
else
|
else
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( pos + 1, str, acc, posX + xSpace, posY, startX
|
( pos + 1, str, acc, posX + xSpace, posY, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
)
|
)
|
||||||
@@ -311,12 +309,11 @@ struct
|
|||||||
val {fw, fh, ...} = windowData
|
val {fw, fh, ...} = windowData
|
||||||
val {r, g, b, ...} = colourData
|
val {r, g, b, ...} = colourData
|
||||||
|
|
||||||
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b)
|
val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
|
||||||
val cursorAcc = cursorHd :: cursorAcc
|
|
||||||
in
|
in
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( pos + 1, str, acc, posX + xSpace, posY, startX
|
( pos + 1, str, acc, posX + xSpace, posY, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
)
|
)
|
||||||
@@ -327,7 +324,7 @@ struct
|
|||||||
(* not in cursor position, so iterate like normal *)
|
(* not in cursor position, so iterate like normal *)
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( pos + 1, str, acc, startX, posY + ySpace, startX
|
( pos + 1, str, acc, startX, posY + ySpace, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
)
|
)
|
||||||
@@ -337,18 +334,17 @@ struct
|
|||||||
val {fw, fh, ...} = windowData
|
val {fw, fh, ...} = windowData
|
||||||
val {r, g, b, ...} = colourData
|
val {r, g, b, ...} = colourData
|
||||||
|
|
||||||
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b)
|
val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
|
||||||
val cursorAcc = cursorHd :: cursorAcc
|
|
||||||
in
|
in
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( pos + 1, str, acc, startX, posY + ySpace, startX
|
( pos + 1, str, acc, startX, posY + ySpace, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
accToDrawMsg (acc, cursorAcc)
|
accToDrawMsg (acc, cursorAcc, bgAcc)
|
||||||
| chr =>
|
| chr =>
|
||||||
let
|
let
|
||||||
val chrFun = Vector.sub (CozetteAscii.asciiTable, Char.ord chr)
|
val chrFun = Vector.sub (CozetteAscii.asciiTable, Char.ord chr)
|
||||||
@@ -376,11 +372,11 @@ struct
|
|||||||
val b: Real32.real = 0.1
|
val b: Real32.real = 0.1
|
||||||
|
|
||||||
val space = buildCursor (posX, posY, fw, fh, r, g, b)
|
val space = buildCursor (posX, posY, fw, fh, r, g, b)
|
||||||
val cursorAcc = space :: cursorAcc
|
val bgAcc = space :: bgAcc
|
||||||
in
|
in
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( pos + 1, str, acc, posX + xSpace, posY, startX
|
( pos + 1, str, acc, posX + xSpace, posY, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
)
|
)
|
||||||
@@ -400,7 +396,7 @@ struct
|
|||||||
in
|
in
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( pos + 1, str, acc, posX + xSpace, posY, startX
|
( pos + 1, str, acc, posX + xSpace, posY, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
)
|
)
|
||||||
@@ -418,20 +414,19 @@ struct
|
|||||||
in
|
in
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
|
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
accToDrawMsg (acc, cursorAcc)
|
accToDrawMsg (acc, cursorAcc, bgAcc)
|
||||||
else
|
else
|
||||||
(* equal to cursor *)
|
(* equal to cursor *)
|
||||||
let
|
let
|
||||||
val {fw, fh, ...} = windowData
|
val {fw, fh, ...} = windowData
|
||||||
val {r, g, b, hr, hg, hb} = colourData
|
val {r, g, b, hr, hg, hb} = colourData
|
||||||
val cursorHd = buildCursor (posX, posY, fw, fh, r, g ,b)
|
val cursorAcc = buildCursor (posX, posY, fw, fh, r, g ,b)
|
||||||
val cursorAcc = cursorHd :: cursorAcc
|
|
||||||
in
|
in
|
||||||
if posX + xSpace < #w windowData then
|
if posX + xSpace < #w windowData then
|
||||||
let
|
let
|
||||||
@@ -445,7 +440,7 @@ struct
|
|||||||
* since cursor was built *)
|
* since cursor was built *)
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( pos + 1, str, acc, posX + xSpace, posY, startX
|
( pos + 1, str, acc, posX + xSpace, posY, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
)
|
)
|
||||||
@@ -462,13 +457,13 @@ struct
|
|||||||
* since cursor was built *)
|
* since cursor was built *)
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
|
( pos + 1, str, acc, startX + xSpace, posY + ySpace, startX
|
||||||
, tl, absIdx + 1, cursorPos, cursorAcc
|
, tl, absIdx + 1, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
accToDrawMsg (acc, cursorAcc)
|
accToDrawMsg (acc, cursorAcc, bgAcc)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
@@ -477,12 +472,12 @@ struct
|
|||||||
hd :: tl =>
|
hd :: tl =>
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( 0, hd, acc, posX, posY, startX
|
( 0, hd, acc, posX, posY, startX
|
||||||
, tl, absIdx, cursorPos, cursorAcc
|
, tl, absIdx, cursorPos, cursorAcc, bgAcc
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, searchLen
|
, searchHd, searchTl, searchPos, searchLen
|
||||||
)
|
)
|
||||||
| [] =>
|
| [] =>
|
||||||
accToDrawMsg (acc, cursorAcc)
|
accToDrawMsg (acc, cursorAcc, bgAcc)
|
||||||
|
|
||||||
fun build
|
fun build
|
||||||
( startLine, cursorPos, lineGap: LineGap.t
|
( startLine, cursorPos, lineGap: LineGap.t
|
||||||
@@ -534,6 +529,7 @@ struct
|
|||||||
, hg = 0.219
|
, hg = 0.219
|
||||||
, hb = 0.25
|
, hb = 0.25
|
||||||
}
|
}
|
||||||
|
val cursorAcc = Vector.fromList []
|
||||||
in
|
in
|
||||||
(case #right searchList of
|
(case #right searchList of
|
||||||
searchHd :: searchTl =>
|
searchHd :: searchTl =>
|
||||||
@@ -542,7 +538,7 @@ struct
|
|||||||
in
|
in
|
||||||
buildTextStringSearch
|
buildTextStringSearch
|
||||||
( startIdx, rStrHd, [], 5, 5, 5
|
( startIdx, rStrHd, [], 5, 5, 5
|
||||||
, rStrTl, absIdx, cursorPos, []
|
, rStrTl, absIdx, cursorPos, cursorAcc, []
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
, searchHd, searchTl, searchPos, String.size searchString
|
, searchHd, searchTl, searchPos, String.size searchString
|
||||||
)
|
)
|
||||||
@@ -550,7 +546,7 @@ struct
|
|||||||
| [] =>
|
| [] =>
|
||||||
buildTextString
|
buildTextString
|
||||||
( startIdx, rStrHd, [], 5, 5, 5
|
( startIdx, rStrHd, [], 5, 5, 5
|
||||||
, rStrTl, absIdx, cursorPos, []
|
, rStrTl, absIdx, cursorPos, cursorAcc, []
|
||||||
, windowData, colourData
|
, windowData, colourData
|
||||||
))
|
))
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ sig
|
|||||||
datatype t =
|
datatype t =
|
||||||
REDRAW_TEXT of Real32.real vector
|
REDRAW_TEXT of Real32.real vector
|
||||||
| REDRAW_CURSOR of Real32.real vector
|
| REDRAW_CURSOR of Real32.real vector
|
||||||
|
| REDRAW_BG of Real32.real vector
|
||||||
| YANK of string
|
| YANK of string
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -11,5 +12,6 @@ struct
|
|||||||
datatype t =
|
datatype t =
|
||||||
REDRAW_TEXT of Real32.real vector
|
REDRAW_TEXT of Real32.real vector
|
||||||
| REDRAW_CURSOR of Real32.real vector
|
| REDRAW_CURSOR of Real32.real vector
|
||||||
|
| REDRAW_BG of Real32.real vector
|
||||||
| YANK of string
|
| YANK of string
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -17,6 +17,10 @@ struct
|
|||||||
, cursorProgram: Word32.word
|
, cursorProgram: Word32.word
|
||||||
, cursorDrawLength: int
|
, cursorDrawLength: int
|
||||||
|
|
||||||
|
, bgVertexBuffer: Word32.word
|
||||||
|
, bgProgram: Word32.word
|
||||||
|
, bgDrawLength: int
|
||||||
|
|
||||||
, drawMailbox: DrawMsg.t Mailbox.mbox
|
, drawMailbox: DrawMsg.t Mailbox.mbox
|
||||||
, window: MLton.Pointer.t
|
, window: MLton.Pointer.t
|
||||||
}
|
}
|
||||||
@@ -56,6 +60,10 @@ struct
|
|||||||
val cursorVertexBuffer = Gles3.createBuffer ()
|
val cursorVertexBuffer = Gles3.createBuffer ()
|
||||||
val cursorProgram = createProgram (xyrgbVertexShader, rgbFragmentShader)
|
val cursorProgram = createProgram (xyrgbVertexShader, rgbFragmentShader)
|
||||||
|
|
||||||
|
(* create background buffer and program *)
|
||||||
|
val bgVertexBuffer = Gles3.createBuffer ()
|
||||||
|
val bgProgram = createProgram (xyrgbVertexShader, rgbFragmentShader)
|
||||||
|
|
||||||
(* clean up shaders which are no longer needed once progran is linked. *)
|
(* clean up shaders which are no longer needed once progran is linked. *)
|
||||||
val _ = Gles3.deleteShader xyrgbVertexShader
|
val _ = Gles3.deleteShader xyrgbVertexShader
|
||||||
val _ = Gles3.deleteShader rgbFragmentShader
|
val _ = Gles3.deleteShader rgbFragmentShader
|
||||||
@@ -63,9 +71,15 @@ struct
|
|||||||
{ textVertexBuffer = textVertexBuffer
|
{ textVertexBuffer = textVertexBuffer
|
||||||
, textProgram = textProgram
|
, textProgram = textProgram
|
||||||
, textDrawLength = 0
|
, textDrawLength = 0
|
||||||
|
|
||||||
, cursorVertexBuffer = cursorVertexBuffer
|
, cursorVertexBuffer = cursorVertexBuffer
|
||||||
, cursorProgram = cursorProgram
|
, cursorProgram = cursorProgram
|
||||||
, cursorDrawLength = 0
|
, cursorDrawLength = 0
|
||||||
|
|
||||||
|
, bgVertexBuffer = bgVertexBuffer
|
||||||
|
, bgProgram = bgProgram
|
||||||
|
, bgDrawLength = 0
|
||||||
|
|
||||||
, drawMailbox = drawMailbox
|
, drawMailbox = drawMailbox
|
||||||
, window = window
|
, window = window
|
||||||
}
|
}
|
||||||
@@ -80,6 +94,9 @@ struct
|
|||||||
, cursorVertexBuffer
|
, cursorVertexBuffer
|
||||||
, cursorProgram
|
, cursorProgram
|
||||||
, cursorDrawLength
|
, cursorDrawLength
|
||||||
|
, bgVertexBuffer
|
||||||
|
, bgProgram
|
||||||
|
, bgDrawLength
|
||||||
, window
|
, window
|
||||||
, drawMailbox
|
, drawMailbox
|
||||||
} = shellState
|
} = shellState
|
||||||
@@ -94,6 +111,9 @@ struct
|
|||||||
, cursorVertexBuffer = cursorVertexBuffer
|
, cursorVertexBuffer = cursorVertexBuffer
|
||||||
, cursorProgram = cursorProgram
|
, cursorProgram = cursorProgram
|
||||||
, cursorDrawLength = cursorDrawLength
|
, cursorDrawLength = cursorDrawLength
|
||||||
|
, bgVertexBuffer = bgVertexBuffer
|
||||||
|
, bgProgram = bgProgram
|
||||||
|
, bgDrawLength = bgDrawLength
|
||||||
, drawMailbox = drawMailbox
|
, drawMailbox = drawMailbox
|
||||||
, window = window
|
, window = window
|
||||||
}
|
}
|
||||||
@@ -108,6 +128,9 @@ struct
|
|||||||
, cursorVertexBuffer
|
, cursorVertexBuffer
|
||||||
, cursorProgram
|
, cursorProgram
|
||||||
, cursorDrawLength = _
|
, cursorDrawLength = _
|
||||||
|
, bgVertexBuffer
|
||||||
|
, bgProgram
|
||||||
|
, bgDrawLength
|
||||||
, window
|
, window
|
||||||
, drawMailbox
|
, drawMailbox
|
||||||
} = shellState
|
} = shellState
|
||||||
@@ -122,6 +145,43 @@ struct
|
|||||||
, cursorVertexBuffer = cursorVertexBuffer
|
, cursorVertexBuffer = cursorVertexBuffer
|
||||||
, cursorProgram = cursorProgram
|
, cursorProgram = cursorProgram
|
||||||
, cursorDrawLength = newCursorDrawLength
|
, cursorDrawLength = newCursorDrawLength
|
||||||
|
, bgVertexBuffer = bgVertexBuffer
|
||||||
|
, bgProgram = bgProgram
|
||||||
|
, bgDrawLength = bgDrawLength
|
||||||
|
, drawMailbox = drawMailbox
|
||||||
|
, window = window
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
fun uploadBg (shellState: t, vec) =
|
||||||
|
let
|
||||||
|
val
|
||||||
|
{ textVertexBuffer
|
||||||
|
, textProgram
|
||||||
|
, textDrawLength
|
||||||
|
, cursorVertexBuffer
|
||||||
|
, cursorProgram
|
||||||
|
, cursorDrawLength
|
||||||
|
, bgVertexBuffer
|
||||||
|
, bgProgram
|
||||||
|
, bgDrawLength = _
|
||||||
|
, window
|
||||||
|
, drawMailbox
|
||||||
|
} = shellState
|
||||||
|
|
||||||
|
val _ = Gles3.bindBuffer bgVertexBuffer
|
||||||
|
val _ = Gles3.bufferData (vec, Vector.length vec, Gles3.STATIC_DRAW)
|
||||||
|
val newBgDrawLength = Vector.length vec div 5
|
||||||
|
in
|
||||||
|
{ textVertexBuffer = textVertexBuffer
|
||||||
|
, textProgram = textProgram
|
||||||
|
, textDrawLength = textDrawLength
|
||||||
|
, cursorVertexBuffer = cursorVertexBuffer
|
||||||
|
, cursorProgram = cursorProgram
|
||||||
|
, cursorDrawLength = cursorDrawLength
|
||||||
|
, bgVertexBuffer = bgVertexBuffer
|
||||||
|
, bgProgram = bgProgram
|
||||||
|
, bgDrawLength = newBgDrawLength
|
||||||
, drawMailbox = drawMailbox
|
, drawMailbox = drawMailbox
|
||||||
, window = window
|
, window = window
|
||||||
}
|
}
|
||||||
@@ -155,9 +215,13 @@ struct
|
|||||||
, cursorVertexBuffer
|
, cursorVertexBuffer
|
||||||
, cursorDrawLength
|
, cursorDrawLength
|
||||||
, cursorProgram
|
, cursorProgram
|
||||||
|
, bgVertexBuffer
|
||||||
|
, bgProgram
|
||||||
|
, bgDrawLength
|
||||||
, ...
|
, ...
|
||||||
} = drawObject
|
} = drawObject
|
||||||
|
|
||||||
|
val _ = drawXyrgb (bgVertexBuffer, bgProgram, bgDrawLength)
|
||||||
val _ = drawXyrgb (cursorVertexBuffer, cursorProgram, cursorDrawLength)
|
val _ = drawXyrgb (cursorVertexBuffer, cursorProgram, cursorDrawLength)
|
||||||
val _ = drawXyrgb (textVertexBuffer, textProgram, textDrawLength)
|
val _ = drawXyrgb (textVertexBuffer, textProgram, textDrawLength)
|
||||||
in
|
in
|
||||||
@@ -183,6 +247,7 @@ struct
|
|||||||
case msg of
|
case msg of
|
||||||
REDRAW_TEXT textVec => uploadText (shellState, textVec)
|
REDRAW_TEXT textVec => uploadText (shellState, textVec)
|
||||||
| REDRAW_CURSOR cursorVec => uploadCursor (shellState, cursorVec)
|
| REDRAW_CURSOR cursorVec => uploadCursor (shellState, cursorVec)
|
||||||
|
| REDRAW_BG bgVec => uploadBg (shellState, bgVec)
|
||||||
| YANK str => yank (shellState, str)
|
| YANK str => yank (shellState, str)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user