From 684e3d1b0c485167b153c8a15fd39be4801e7adb Mon Sep 17 00:00:00 2001 From: visionmercer <62051836+visionmercer@users.noreply.github.com> Date: Thu, 28 May 2026 14:07:51 +0200 Subject: [PATCH] try again --- fonts/BOLD.CHR | Bin 0 -> 14670 bytes fonts/EURO.CHR | Bin 0 -> 8439 bytes fonts/GOTH.CHR | Bin 0 -> 18063 bytes fonts/LCOM.CHR | Bin 0 -> 12083 bytes fonts/LITT.CHR | Bin 0 -> 5131 bytes fonts/SCRI.CHR | Bin 0 -> 10987 bytes fonts/SIMP.CHR | Bin 0 -> 8437 bytes fonts/TSCR.CHR | Bin 0 -> 17355 bytes include/bgifnt.bm | 238 ++++++++++++++++++++++++++++++++++++ pixler.bas | 305 +++++++++++++++++++++++++++++++++++++--------- 10 files changed, 484 insertions(+), 59 deletions(-) create mode 100644 fonts/BOLD.CHR create mode 100644 fonts/EURO.CHR create mode 100644 fonts/GOTH.CHR create mode 100644 fonts/LCOM.CHR create mode 100644 fonts/LITT.CHR create mode 100644 fonts/SCRI.CHR create mode 100644 fonts/SIMP.CHR create mode 100644 fonts/TSCR.CHR create mode 100644 include/bgifnt.bm diff --git a/fonts/BOLD.CHR b/fonts/BOLD.CHR new file mode 100644 index 0000000000000000000000000000000000000000..8af2bc287747ceebbb68f5184244ab8ffff45238 GIT binary patch literal 14670 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 G@_zvswZl{Z literal 0 HcmV?d00001 diff --git a/fonts/EURO.CHR b/fonts/EURO.CHR new file mode 100644 index 0000000000000000000000000000000000000000..bb1f9ec5caffe77edd50a91de63b1392414df97b GIT binary patch literal 8439 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 D0Yb?{ literal 0 HcmV?d00001 diff --git a/fonts/GOTH.CHR b/fonts/GOTH.CHR new file mode 100644 index 0000000000000000000000000000000000000000..75f9a7ed3f8bb1449ecbc32070c7ba30396b31ba GIT binary patch literal 18063 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 literal 0 HcmV?d00001 diff --git a/fonts/LCOM.CHR b/fonts/LCOM.CHR new file mode 100644 index 0000000000000000000000000000000000000000..0916763036bbbbd05f09e6d2991afef33c7ffa67 GIT binary patch literal 12083 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 n9()iyIea7VE8}$gBQ8O@C?( literal 0 HcmV?d00001 diff --git a/fonts/LITT.CHR b/fonts/LITT.CHR new file mode 100644 index 0000000000000000000000000000000000000000..08c30672ea5a18f010183807f55c644c272ab1d4 GIT binary patch literal 5131 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 literal 0 HcmV?d00001 diff --git a/fonts/SCRI.CHR b/fonts/SCRI.CHR new file mode 100644 index 0000000000000000000000000000000000000000..92fb8a92fbff8e700a30109a40d90503ae4e41f6 GIT binary patch literal 10987 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 literal 0 HcmV?d00001 diff --git a/fonts/SIMP.CHR b/fonts/SIMP.CHR new file mode 100644 index 0000000000000000000000000000000000000000..00ee8d7c1c5499958c7ae8a65efacec9eadcd3f3 GIT binary patch literal 8437 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 F{{VM=X`}!E literal 0 HcmV?d00001 diff --git a/include/bgifnt.bm b/include/bgifnt.bm new file mode 100644 index 0000000..905f3b9 --- /dev/null +++ b/include/bgifnt.bm @@ -0,0 +1,238 @@ + +FUNCTION LoadBGIFont (filename AS STRING) + LoadBGIFont = __BGI_Internal(1, 0, 0, 0, 0, filename, 0) +END FUNCTION + +SUB UnloadBGIFont (fontHandle AS INTEGER) + DIM discard AS LONG + discard = __BGI_Internal(2, fontHandle, 0, 0, 0, "", 0) +END SUB + +SUB DisplayBGIText (fontHandle AS INTEGER, startX AS SINGLE, startY AS SINGLE, text AS STRING, fontSize AS SINGLE, col AS LONG) + DIM discard AS LONG + discard = __BGI_Internal(3, fontHandle, startX, startY, fontSize, text, col) +END SUB + +FUNCTION __BGI_Internal (mode AS INTEGER, handle AS INTEGER, arg1 AS SINGLE, arg2 AS SINGLE, arg3 AS SINGLE, textData AS STRING, col AS LONG) + DIM filename AS STRING + DIM fNum AS INTEGER + DIM slot AS INTEGER + DIM i AS LONG + DIM c AS INTEGER + DIM d AS STRING + DIM header_size_pos AS LONG + DIM header_size AS INTEGER + DIM stroke_header_start AS LONG + DIM strokes_offset AS INTEGER + DIM asc_temp AS INTEGER + DIM base_temp AS INTEGER + DIM desc_temp AS INTEGER + DIM char_offsets_pos AS LONG + DIM widths_pos AS LONG + + DIM startX AS SINGLE + DIM startY AS SINGLE + DIM fontSize AS SINGLE + DIM text AS STRING + DIM font_height AS INTEGER + DIM scale AS SINGLE + DIM x AS SINGLE + DIM ch AS INTEGER + DIM stroke_pos AS LONG + DIM cur_x AS SINGLE + DIM cur_y AS SINGLE + DIM byte1 AS INTEGER + DIM byte2 AS INTEGER + DIM op1 AS INTEGER + DIM op2 AS INTEGER + DIM m AS INTEGER + DIM dx_raw AS INTEGER + DIM dx AS INTEGER + DIM dy_raw AS INTEGER + DIM dy AS INTEGER + DIM new_x AS SINGLE + DIM new_y AS SINGLE + + + STATIC init AS INTEGER + STATIC __bgi_fontdata() AS STRING + STATIC __bgi_metrics() AS LONG + + CONST MAX_FONTS = 10 + CONST M_INUSE = 1 + CONST M_FIRSTCHAR = 2 + CONST M_NUMCHARS = 3 + CONST M_ASCENDER = 4 + CONST M_BASELINE = 5 + CONST M_DESCENDER = 6 + CONST M_STROKESSTART = 7 + CONST METRICS_SIZE = 521 + + IF NOT init THEN + REDIM __bgi_fontdata(1 TO MAX_FONTS) AS STRING + REDIM __bgi_metrics(1 TO MAX_FONTS, 1 TO METRICS_SIZE) AS LONG + init = -1 + END IF + + SELECT CASE mode + CASE 1 ' --- LOAD FONT --- + filename = textData + IF _FILEEXISTS(filename) = 0 THEN + PRINT "File not found: "; filename + __BGI_Internal = 0 + EXIT FUNCTION + END IF + slot = 0 + FOR i = 1 TO MAX_FONTS + IF __bgi_metrics(i, M_INUSE) = 0 THEN + slot = i + EXIT FOR + END IF + NEXT i + + IF slot = 0 THEN + PRINT "BGI Font Error: Maximum loaded font limit reached." + __BGI_Internal = 0 + EXIT FUNCTION + END IF + + ' Extract stream data safely + fNum = FREEFILE + OPEN filename FOR BINARY AS #fNum + __bgi_fontdata(slot) = SPACE$(LOF(fNum)) + GET #fNum, , __bgi_fontdata(slot) + CLOSE #fNum + + d = __bgi_fontdata(slot) + + ' Validate signature header identity + IF MID$(d, 1, 2) <> "PK" OR ASC(MID$(d, 3, 1)) <> 8 OR ASC(MID$(d, 4, 1)) <> 8 OR MID$(d, 5, 4) <> "BGI " THEN + PRINT "Not a valid Borland BGI .CHR font file: "; filename + __bgi_fontdata(slot) = "" + __BGI_Internal = 0 + EXIT FUNCTION + END IF + + ' Track string end parsing marker + i = 9 + WHILE i <= LEN(d) AND ASC(MID$(d, i, 1)) <> 26 + i = i + 1 + WEND + IF i > LEN(d) THEN + PRINT "Invalid font format: Missing description terminator." + __bgi_fontdata(slot) = "" + __BGI_Internal = 0 + EXIT FUNCTION + END IF + + header_size_pos = i + 1 + header_size = CVI(MID$(d, header_size_pos, 2)) + stroke_header_start = header_size + 1 + + IF ASC(MID$(d, stroke_header_start, 1)) <> ASC("+") THEN + PRINT "Not a stroked font." + __bgi_fontdata(slot) = "" + __BGI_Internal = 0 + EXIT FUNCTION + END IF + + __bgi_metrics(slot, M_NUMCHARS) = CVI(MID$(d, stroke_header_start + 1, 2)) + __bgi_metrics(slot, M_FIRSTCHAR) = ASC(MID$(d, stroke_header_start + 4, 1)) + strokes_offset = CVI(MID$(d, stroke_header_start + 5, 2)) + + ' Signed Int8 layout mappings + asc_temp = ASC(MID$(d, stroke_header_start + 8, 1)) + IF asc_temp > 127 THEN __bgi_metrics(slot, M_ASCENDER) = asc_temp - 256 ELSE __bgi_metrics(slot, M_ASCENDER) = asc_temp + base_temp = ASC(MID$(d, stroke_header_start + 9, 1)) + IF base_temp > 127 THEN __bgi_metrics(slot, M_BASELINE) = base_temp - 256 ELSE __bgi_metrics(slot, M_BASELINE) = base_temp + desc_temp = ASC(MID$(d, stroke_header_start + 10, 1)) + IF desc_temp > 127 THEN __bgi_metrics(slot, M_DESCENDER) = desc_temp - 256 ELSE __bgi_metrics(slot, M_DESCENDER) = desc_temp + + ' Assign vector stroke references + char_offsets_pos = stroke_header_start + 16 + FOR c = 0 TO __bgi_metrics(slot, M_NUMCHARS) - 1 + __bgi_metrics(slot, 8 + __bgi_metrics(slot, M_FIRSTCHAR) + c) = CVI(MID$(d, char_offsets_pos + c * 2, 2)) + NEXT c + + ' Map character layout metrics width boundaries + widths_pos = char_offsets_pos + __bgi_metrics(slot, M_NUMCHARS) * 2 + FOR c = 0 TO __bgi_metrics(slot, M_NUMCHARS) - 1 + __bgi_metrics(slot, 265 + __bgi_metrics(slot, M_FIRSTCHAR) + c) = ASC(MID$(d, widths_pos + c, 1)) + NEXT c + + __bgi_metrics(slot, M_STROKESSTART) = stroke_header_start + strokes_offset + __bgi_metrics(slot, M_INUSE) = -1 + + __BGI_Internal = slot + + CASE 2 ' --- UNLOAD FONT --- + IF handle >= 1 AND handle <= MAX_FONTS THEN + __bgi_metrics(handle, M_INUSE) = 0 + __bgi_fontdata(handle) = "" + END IF + + CASE 3 ' --- DISPLAY TEXT --- + IF handle < 1 OR handle > MAX_FONTS THEN EXIT FUNCTION + IF __bgi_metrics(handle, M_INUSE) = 0 THEN EXIT FUNCTION + + startX = arg1 + startY = arg2 + fontSize = arg3 + text = textData + + font_height = __bgi_metrics(handle, M_ASCENDER) - __bgi_metrics(handle, M_DESCENDER) + IF font_height = 0 THEN font_height = 1 + + scale = fontSize / font_height + x = startX + + FOR ch = 1 TO LEN(text) + c = ASC(MID$(text, ch, 1)) + + IF c < __bgi_metrics(handle, M_FIRSTCHAR) OR c >= __bgi_metrics(handle, M_FIRSTCHAR) + __bgi_metrics(handle, M_NUMCHARS) OR __bgi_metrics(handle, 8 + c) = 0 THEN + x = x + 8 * scale + _CONTINUE + END IF + + stroke_pos = __bgi_metrics(handle, M_STROKESSTART) + __bgi_metrics(handle, 8 + c) + cur_x = x + cur_y = startY + + DO + byte1 = ASC(MID$(__bgi_fontdata(handle), stroke_pos, 1)) + byte2 = ASC(MID$(__bgi_fontdata(handle), stroke_pos + 1, 1)) + stroke_pos = stroke_pos + 2 + + op1 = (byte1 AND 128) \ 128 + op2 = (byte2 AND 128) \ 128 + m = op1 + op1 + op2 + + IF m = 0 THEN EXIT DO + IF m = 1 THEN _CONTINUE + + dx_raw = byte1 AND 127 + dx = dx_raw + IF dx > 63 THEN dx = dx - 128 + + dy_raw = byte2 AND 127 + dy = dy_raw + IF dy > 63 THEN dy = dy - 128 + dy = -dy + + new_x = x + dx * scale + new_y = startY + dy * scale + + IF m = 2 THEN + cur_x = new_x + cur_y = new_y + ELSEIF m = 3 THEN + LINE (cur_x, cur_y)-(new_x, new_y), col + cur_x = new_x + cur_y = new_y + END IF + LOOP + + x = x + __bgi_metrics(handle, 265 + c) * scale + NEXT ch + END SELECT +END FUNCTION diff --git a/pixler.bas b/pixler.bas index 3fed931..0c15dff 100644 --- a/pixler.bas +++ b/pixler.bas @@ -64,6 +64,22 @@ state.bcolor=closestcolor(_rgb32(255,255,255),pal()) addcommand"fcolor ("+hex$(state.fcolor)+")" addcommand"bcolor ("+hex$(state.bcolor)+")" +DIM SHARED fontHandles(1 TO 10) AS INTEGER +DIM SHARED activeFontIndex AS INTEGER: activeFontIndex = 1 +DIM SHARED activeFontSize AS SINGLE: activeFontSize = 16 +DIM SHARED textToolString AS STRING + +fontHandles(1) = LoadBGIFont("./fonts/SIMP.CHR") +fontHandles(2) = LoadBGIFont("./fonts/BOLD.CHR") +fontHandles(3) = LoadBGIFont("./fonts/EURO.CHR") +fontHandles(4) = LoadBGIFont("./fonts/GOTH.CHR") +fontHandles(5) = LoadBGIFont("./fonts/LCOM.CHR") +fontHandles(6) = LoadBGIFont("./fonts/LITT.CHR") +fontHandles(7) = LoadBGIFont("./fonts/SANS.CHR") +fontHandles(8) = LoadBGIFont("./fonts/SCRI.CHR") +fontHandles(9) = LoadBGIFont("./fonts/TRIP.CHR") +fontHandles(10) = LoadBGIFont("./fonts/TSCR.CHR") + dim lastmx,lastmy dim keyin as string dim mouseworldy as long @@ -117,6 +133,7 @@ do end if ' Keyboarding + if not state.tool=16 and not state.isdrawing then keyin=inkey$ select case keyin case chr$(27) @@ -165,12 +182,13 @@ do redraw end if end select - + end if + canvas if showtoolbox then toolbox if showcolorpicker then colorpicker if showcommands then commandlist - + if state.tool = 12 then drawTextToolPanel _limit 30 _display loop @@ -198,6 +216,76 @@ sub commandlist if button(x,_height-25,60,23,"redraw") then redraw end sub +sub drawTextToolPanel + dim panelWidth as integer: panelWidth = 160 + dim x as integer: x = _width - panelWidth + static showFontList as integer ' Tracks the expanding drop-down list state + + ' Draw the side panel background card block + line (x, 0)-(_width - 1, _height - 1), backgroundcolor1, bf + line (x, 0)-(x, _height - 1), backgroundcolor2 + + _printmode _keepbackground + _printstring (x + 10, 15), "TEXT TOOL OPTIONS" + line (x + 10, 30)-(x + 140, 30), backgroundcolor2 + + ' --- Font Size Controls --- + _printstring (x + 10, 45), "Size: " + tst(int(activeFontSize)) + if button(x + 85, 42, 24, 20, "-") then + if activeFontSize > 4 then activeFontSize = activeFontSize - 2 + end if + if button(x + 115, 42, 24, 20, "+") then + if activeFontSize < 120 then activeFontSize = activeFontSize + 2 + end if + + ' --- Expandable Font Selection Links --- + dim currentFontName as string + select case activeFontIndex + case 1: currentFontName = "SIMP.CHR" + case 2: currentFontName = "BOLD.CHR" + case 3: currentFontName = "EURO.CHR" + case 4: currentFontName = "GOTH.CHR" + case 5: currentFontName = "LCOM.CHR" + case 6: currentFontName = "LITT.CHR" + case 7: currentFontName = "SANS.CHR" + case 8: currentFontName = "SCRI.CHR" + case 9: currentFontName = "TRIP.CHR" + case 10: currentFontName = "TSCR.CHR" + end select + + _printstring (x + 10, 80), "Font: " + if link(x + 55, 80, "[" + currentFontName + " ]") then + showFontList = not showFontList ' Toggle expansion list visibility + end if + + ' Render the drop-down links when expanded + if showFontList then + dim fontNames(1 to 10) as string + fontNames(1) = "Simplex": fontNames(2) = "Bold": fontNames(3) = "Euro" + fontNames(4) = "Gothic": fontNames(5) = "Complex": fontNames(6) = "Little" + fontNames(7) = "Sans": fontNames(8) = "Script": fontNames(9) = "Triplex" + fontNames(10) = "TScript" + + dim ly as integer, idx as integer + for idx = 1 to 10 + ly = 80 + (idx * 20) + ' Highlight the currently active font selection with an asterisk + dim itemPrefix as string + if idx = activeFontIndex then itemPrefix = "* " else itemPrefix = " " + + if link(x + 20, ly, itemPrefix + fontNames(idx)) then + activeFontIndex = idx + showFontList = 0 ' Auto-collapse list upon selection + end if + next idx + end if + + ' Guard the UI boundaries so clicks on this panel do not draw on the canvas below it + if _mousex >= x then + if _mousebutton(1) or _mousebutton(2) then mouseclicked = 0: rmouseclicked = 0 + end if +end sub + sub redraw redim numarr(0) as long dim i as integer @@ -257,6 +345,32 @@ sub redraw boundaryfill numarr(0),numarr(1),numarr(2),numarr(3) case "gradient" ditheredgradient numarr(0),numarr(1),numarr(2),numarr(3),state.fcolor,state.bcolor + case "gradient" + ditheredgradient numarr(0),numarr(1),numarr(2),numarr(3),state.fcolor,state.bcolor + + case "text" + ' Extract the string parameter from the command structure manually + ' e.g., text (X, Y, FontHandleIndex, FontSize, FColor, Your String Content) + dim txtStart as integer: txtStart = instr(commands(i), ",") + ' Advance past the first 5 commas to isolate the text string + dim commaCount as integer: commaCount = 0 + dim searchPos as integer: searchPos = 1 + while commaCount < 5 + searchPos = instr(searchPos, commands(i), ",") + if searchPos > 0 then + commaCount = commaCount + 1 + searchPos = searchPos + 1 + else + exit while + end if + wend + if commaCount = 5 then + dim textMsg as string + textMsg = mid$(commands(i), searchPos, instr(searchPos, commands(i), ")") - searchPos) + ' Draw text to the drawing layer directly + DisplayBGIText fontHandles(numarr(2)), numarr(0), numarr(1), textMsg, numarr(3), numarr(4) + end if + case "" ' blank line do nothing case else @@ -401,64 +515,64 @@ sub canvas end if next _dest layers(2).ihandle:cls,0:_dest 0 - ' 2.5 if the mouse is in ui thats all we need - if showtoolbox then - if _mousex>=0 and _mousex<=70 then - exit sub + ' 2.5 Check if the mouse pointer is hitting the UI boundaries + dim mouseInUI as _byte + mouseInUI = 0 + + if showtoolbox and (_mousex>=0 and _mousex<=70) then mouseInUI = -1 + if showcolorpicker and (_mousey>=_height-20) then mouseInUI = -1 + if showcommands and (_mousex>=drawx2) then mouseInUI = -1 + + ' 3. Calculate Canvas Coordinates (Center-aligned to the zoom block) + dim canx as long + dim cany as long + + canx=int((_mousex-state.offsetx+(state.zoom \ 2))/state.zoom) + cany=int((_mousey-state.offsety+(state.zoom \ 2))/state.zoom) + + static drawcol + if _mousebutton(1) then drawcol=state.fcolor + if _mousebutton(2) then drawcol=state.bcolor + + ' ONLY initiate drawing actions if the mouse is NOT in the UI + if mouseInUI = 0 then + if (mousedown or rmousedown) and state.isdrawing=0 then + state.startx=canx + state.starty=cany + state.isdrawing=-1 + end if end if - end if - if showcolorpicker then - if _mousey>=_height-20 then - exit sub + + ' Bypass tool execution for regular click-and-drag shapes, + ' but ALWAYS allow text tool (12) to pass through so it draws the live overlay + if mouseInUI = 0 or state.tool = 12 then + select case state.tool + case 1 + do.pencil canx,cany,drawcol + case 2 + do.line state.startx,state.starty,canx,cany,drawcol + case 3 + do.circle state.startx,state.starty,canx,cany,drawcol + case 4 + do.fcircle state.startx,state.starty,canx,cany,drawcol + case 5 + do.box state.startx,state.starty,canx,cany,drawcol + case 6 + do.fbox state.startx,state.starty,canx,cany,drawcol + case 7 + do.polygon canx,cany + case 8 + do.fpolygon canx,cany + case 9 + do.floodfill canx,cany,drawcol + case 10 + do.eyedropper canx,cany + case 11 + do.gradient state.startx,state.starty,canx,cany + case 12 + do.text canx, cany, drawcol + end select end if - end if - if showcommands then - if _mousex>=drawx2 then - exit sub - end if - end if - - ' 3. Calculate Canvas Coordinates (Center-aligned to the zoom block) - dim canx as long - dim cany as long - - canx=int((_mousex-state.offsetx+(state.zoom \ 2))/state.zoom) - cany=int((_mousey-state.offsety+(state.zoom \ 2))/state.zoom) - - static drawcol - if _mousebutton(1) then drawcol=state.fcolor - if _mousebutton(2) then drawcol=state.bcolor - - if (mousedown or rmousedown) and state.isdrawing=0 then - state.startx=canx - state.starty=cany - state.isdrawing=-1 - end if - - select case state.tool - case 1 - do.pencil canx,cany,drawcol - case 2 - do.line state.startx,state.starty,canx,cany,drawcol - case 3 - do.circle state.startx,state.starty,canx,cany,drawcol - case 4 - do.fcircle state.startx,state.starty,canx,cany,drawcol - case 5 - do.box state.startx,state.starty,canx,cany,drawcol - case 6 - do.fbox state.startx,state.starty,canx,cany,drawcol - case 7 - do.polygon canx,cany - case 8 - do.fpolygon canx,cany - case 9 - do.floodfill canx,cany,drawcol - case 10 - do.eyedropper canx,cany - case 11 - do.gradient state.startx,state.starty,canx,cany - end select end sub sub do.pencil(x as long,y as long,col as long) @@ -836,6 +950,21 @@ sub do.gradient(sx as long,sy as long,ex as long,ey as long) if state.isdrawing then osource=_source odest=_dest + + if _keydown(100303) or _keydown(100304) then + dim dx as single:dx=ex-sx + dim dy as single:dy=ey-sy + if dx<>0 or dy<>0 then + dim linelen as single:linelen=sqr(dx*dx+dy*dy) + dim angle as single:angle=_atan2(dy,dx) + dim degrees as single:degrees=angle*(180.0/_pi) + dim snappeddegrees as single:snappeddegrees=int((degrees+22.5)/45.0)*45.0 + dim snappedangle as single:snappedangle=snappeddegrees*(_pi/180.0) + ex=sx+_round(linelen*cos(snappedangle)) + ey=sy+_round(linelen*sin(snappedangle)) + end if + end if + if mouseclicked or rmouseclicked then _dest layers(1).ihandle addcommand"gradient ("+tst(sx)+","+tst(sy)+","+tst(ex)+","+tst(ey)+")" @@ -850,6 +979,54 @@ sub do.gradient(sx as long,sy as long,ex as long,ey as long) end if end sub +sub do.text (x as long, y as long, col as long) + dim osource as long + dim odest as long + + ' 1. Mouse Click on Canvas initiates the Typing Focus Lock + if (mouseclicked) and state.isdrawing = 0 then + state.startx = x + state.starty = y + state.isdrawing = -1 + textToolString = "" ' Clear typing input buffer + _keyclear ' Flush background buffer lines + end if + + if state.isdrawing then + osource = _source + odest = _dest + ' 2. Intercept keyboard streams directly inside the active lock state + dim k as long + do + k = _keyhit + if k = 0 then exit do + ' Character keys range check + if k >= 32 and k <= 126 then + textToolString = textToolString + chr$(k) + elseif k = 8 and len(textToolString) > 0 then ' Backspace behavior + textToolString = left$(textToolString, len(textToolString) - 1) + elseif k = 13 then + _dest layers(1).ihandle + DisplayBGIText fontHandles(activeFontIndex), state.startx, state.starty, textToolString, activeFontSize, col + addcommand "text (" + tst(state.startx) + "," + tst(state.starty) + "," + tst(activeFontIndex) + "," + tst(int(activeFontSize)) + "," + hex$(col) + "," + textToolString + ")" + state.isdrawing = 0 + _dest odest + _source osource + while inkey$<>"":wend + exit sub + elseif k = 27 then + state.isdrawing = 0 + exit sub + end if + loop + ' 3. Render dynamic typing string overlay to active live preview layer (layer 2) + _dest layers(2).ihandle + DisplayBGIText fontHandles(activeFontIndex), state.startx, state.starty, textToolString + "_", activeFontSize, col + _source osource + _dest odest + end if +end sub + function icon (index as long) static init as integer static icons() as long @@ -927,9 +1104,18 @@ function icon (index as long) line (22,10)-(26,6),c ' Squeeze bulb cap _dest 0 + icons(10)=_newimage(32,32,32):_dest icons(10) + ditheredgradient 6, 6, 26, 26, highlightcolor, backgroundcolor1 + + icons(11) = _NEWIMAGE(32, 32, 32): _DEST icons(11) + line (8, 8)-(24, 8), c + line (16, 8)-(16, 24), c + line (12, 24)-(20, 24), c + _DEST 0 + ' Fill remaining fallback slots (10-19) with clean blank images dim j as integer - for j=10 to 19 + for j=11 to 19 if icons(j)=0 then icons(j)=_newimage(32,32,32) next @@ -947,6 +1133,7 @@ end function '$include: 'include/imgout.bm' '$include: 'include/palette.bm' '$include: 'include/tools.bm' +'$include: 'include/bgifnt.bm' ''$include: 'include/effects.bm' function adduiicon(imagehandle as long)