DVX_GUI/sdk/samples/basic/iconed/iconed.frm

476 lines
11 KiB
Text

VERSION DVX 1.00
Begin Form IconEd
Caption = "DVX Icon Editor"
Layout = VBox
AutoSize = True
Resizable = False
Centered = True
Begin Menu mnuFile
Caption = "&File"
Begin Menu mnuNew
Caption = "&New"
End
Begin Menu mnuOpen
Caption = "&Open..."
End
Begin Menu mnuSave
Caption = "&Save..."
End
Begin Menu mnuSep1
Caption = "-"
End
Begin Menu mnuExit
Caption = "E&xit"
End
End
Begin Menu mnuTools
Caption = "&Tools"
Begin Menu mnuPencil
Caption = "&Pencil"
Checked = True
RadioCheck = True
End
Begin Menu mnuEraser
Caption = "&Eraser"
RadioCheck = True
End
Begin Menu mnuPicker
Caption = "Color Pic&ker"
RadioCheck = True
End
End
Begin Menu mnuSize
Caption = "&Size"
Begin Menu mnuSize16
Caption = "16 x 16"
RadioCheck = True
End
Begin Menu mnuSize24
Caption = "24 x 24"
RadioCheck = True
End
Begin Menu mnuSize32
Caption = "32 x 32"
Checked = True
RadioCheck = True
End
End
Begin Frame fraMain
Caption = ""
Layout = HBox
Weight = 100
Begin PictureBox cvEditor
Width = 256
Height = 256
Weight = 0
End
Begin Frame fraSidebar
Caption = ""
Layout = VBox
Width = 100
Weight = 0
Begin Label lblPreview
Caption = "Preview:"
End
Begin PictureBox cvPreview
Width = 32
Height = 32
Weight = 0
End
Begin Label lblColor
Caption = "Color:"
End
Begin PictureBox cvSelColor
Width = 32
Height = 20
Weight = 0
End
Begin Label lblPalette
Caption = "Palette:"
End
Begin PictureBox cvPalette
Width = 80
Height = 80
Weight = 0
End
End
End
Begin Label lblStatus
Caption = "Ready. (0, 0)"
Height = 16
Weight = 0
End
End
OPTION EXPLICIT
CONST CANVAS_SIZE = 256
CONST BG_COLOR = &H00C0C0C0
CONST GRID_COLOR = &H00808080
CONST EDGE_COLOR = &H00404040
CONST TOOL_PENCIL = 0
CONST TOOL_ERASER = 1
CONST TOOL_PICKER = 2
CONST PAL_COLS = 8
CONST PAL_ROWS = 4
CONST PAL_CELL = 10
DIM pixels(31, 31) AS LONG
DIM palette(31) AS LONG
DIM iconW AS INTEGER
DIM iconH AS INTEGER
DIM pixelSize AS INTEGER
DIM curTool AS INTEGER
DIM curColor AS LONG
DIM drawing AS BOOLEAN
DIM dirty AS BOOLEAN
DIM filePath AS STRING
SUB InitPalette
palette(0) = &H00000000
palette(1) = &H00FFFFFF
palette(2) = &H00C0C0C0
palette(3) = &H00808080
palette(4) = &H00FF0000
palette(5) = &H00800000
palette(6) = &H00FF8000
palette(7) = &H00804000
palette(8) = &H00FFFF00
palette(9) = &H00808000
palette(10) = &H0000FF00
palette(11) = &H00008000
palette(12) = &H0000FFFF
palette(13) = &H00008080
palette(14) = &H0000FF80
palette(15) = &H00004040
palette(16) = &H000000FF
palette(17) = &H00000080
palette(18) = &H008000FF
palette(19) = &H00800080
palette(20) = &H00FF00FF
palette(21) = &H00FF0080
palette(22) = &H00FF80C0
palette(23) = &H004040FF
palette(24) = &H00404040
palette(25) = &H00A0A0A0
palette(26) = &H00E0E0E0
palette(27) = &H00FFE0C0
palette(28) = &H00C0FFE0
palette(29) = &H00C0E0FF
palette(30) = &H00FFC0C0
palette(31) = &H00C0C0FF
END SUB
SUB ClearPixels
DIM x AS INTEGER
DIM y AS INTEGER
FOR y = 0 TO 31
FOR x = 0 TO 31
pixels(x, y) = BG_COLOR
NEXT x
NEXT y
dirty = False
END SUB
SUB SetIconSize(w AS INTEGER)
iconW = w
iconH = w
pixelSize = CANVAS_SIZE \ w
END SUB
SUB DrawEditorGrid
DIM x AS INTEGER
DIM y AS INTEGER
DIM edgeW AS INTEGER
cvEditor.Clear BG_COLOR
FOR y = 0 TO iconH - 1
FOR x = 0 TO iconW - 1
cvEditor.FillRect x * pixelSize, y * pixelSize, pixelSize, pixelSize, pixels(x, y)
NEXT x
NEXT y
FOR x = 0 TO iconW
cvEditor.DrawLine x * pixelSize, 0, x * pixelSize, iconH * pixelSize, GRID_COLOR
NEXT x
FOR y = 0 TO iconH
cvEditor.DrawLine 0, y * pixelSize, iconW * pixelSize, y * pixelSize, GRID_COLOR
NEXT y
edgeW = iconW * pixelSize
cvEditor.DrawRect 0, 0, edgeW, edgeW, EDGE_COLOR
cvEditor.Refresh
END SUB
SUB DrawPreview
DIM x AS INTEGER
DIM y AS INTEGER
cvPreview.Clear BG_COLOR
FOR y = 0 TO iconH - 1
FOR x = 0 TO iconW - 1
cvPreview.SetPixel x, y, pixels(x, y)
NEXT x
NEXT y
cvPreview.Refresh
END SUB
SUB DrawPalette
DIM i AS INTEGER
DIM px AS INTEGER
DIM py AS INTEGER
cvPalette.Clear BG_COLOR
FOR i = 0 TO 31
px = (i MOD PAL_COLS) * PAL_CELL
py = (i \ PAL_COLS) * PAL_CELL
cvPalette.FillRect px, py, PAL_CELL, PAL_CELL, palette(i)
cvPalette.DrawRect px, py, PAL_CELL, PAL_CELL, &H00000000
NEXT i
cvPalette.Refresh
END SUB
SUB DrawSelectedColor
cvSelColor.Clear curColor
cvSelColor.Refresh
END SUB
SUB RefreshAll
DrawEditorGrid
DrawPreview
DrawSelectedColor
END SUB
SUB UpdateTitle
DIM t AS STRING
t = "DVX Icon Editor - " + STR$(iconW) + "x" + STR$(iconH)
IF filePath <> "" THEN
t = t + " - " + filePath
END IF
IF dirty THEN
t = t + " *"
END IF
IconEd.Caption = t
END SUB
SUB SetIconPixel(x AS INTEGER, y AS INTEGER)
DIM c AS LONG
IF x < 0 OR x >= iconW OR y < 0 OR y >= iconH THEN
EXIT SUB
END IF
IF curTool = TOOL_ERASER THEN
c = BG_COLOR
ELSE
c = curColor
END IF
IF pixels(x, y) <> c THEN
pixels(x, y) = c
dirty = True
UpdateTitle
cvEditor.FillRect x * pixelSize, y * pixelSize, pixelSize, pixelSize, c
cvEditor.DrawLine x * pixelSize, y * pixelSize, (x + 1) * pixelSize, y * pixelSize, GRID_COLOR
cvEditor.DrawLine x * pixelSize, y * pixelSize, x * pixelSize, (y + 1) * pixelSize, GRID_COLOR
cvEditor.DrawLine (x + 1) * pixelSize, y * pixelSize, (x + 1) * pixelSize, (y + 1) * pixelSize, GRID_COLOR
cvEditor.DrawLine x * pixelSize, (y + 1) * pixelSize, (x + 1) * pixelSize, (y + 1) * pixelSize, GRID_COLOR
cvPreview.SetPixel x, y, c
END IF
END SUB
SUB SelectTool(t AS INTEGER)
curTool = t
IF t = TOOL_PENCIL THEN
mnuPencil.Checked = True
lblStatus.Caption = "Tool: Pencil"
ELSEIF t = TOOL_ERASER THEN
mnuEraser.Checked = True
lblStatus.Caption = "Tool: Eraser"
ELSEIF t = TOOL_PICKER THEN
mnuPicker.Checked = True
lblStatus.Caption = "Tool: Picker"
END IF
END SUB
SUB ChangeSize(newSize AS INTEGER)
DIM ans AS INTEGER
IF newSize = iconW THEN
EXIT SUB
END IF
IF dirty THEN
ans = MsgBox("Unsaved changes will be lost. Change size?", vbYesNo)
IF ans = vbNo THEN
EXIT SUB
END IF
END IF
SetIconSize newSize
ClearPixels
filePath = ""
IF newSize = 16 THEN
mnuSize16.Checked = True
ELSEIF newSize = 24 THEN
mnuSize24.Checked = True
ELSE
mnuSize32.Checked = True
END IF
UpdateTitle
RefreshAll
lblStatus.Caption = STR$(iconW) + "x" + STR$(iconH) + " - Ready."
END SUB
SUB IconEd_Load
InitPalette
SetIconSize 32
ClearPixels
curTool = TOOL_PENCIL
curColor = &H00000000
drawing = False
filePath = ""
DrawPalette
RefreshAll
UpdateTitle
END SUB
SUB mnuNew_Click
DIM ans AS INTEGER
IF dirty THEN
ans = MsgBox("Unsaved changes. Start new icon?", vbYesNo)
IF ans = vbNo THEN
EXIT SUB
END IF
END IF
ClearPixels
filePath = ""
UpdateTitle
RefreshAll
END SUB
SUB mnuOpen_Click
DIM ans AS INTEGER
DIM path AS STRING
DIM x AS INTEGER
DIM y AS INTEGER
IF dirty THEN
ans = MsgBox("Unsaved changes. Open another file?", vbYesNo)
IF ans = vbNo THEN
EXIT SUB
END IF
END IF
path = InputBox$("Open BMP file:", "Open Icon", filePath)
IF path = "" THEN
EXIT SUB
END IF
cvPreview.Load path
FOR y = 0 TO iconH - 1
FOR x = 0 TO iconW - 1
pixels(x, y) = cvPreview.GetPixel(x, y)
NEXT x
NEXT y
filePath = path
dirty = False
UpdateTitle
RefreshAll
END SUB
SUB mnuSave_Click
DIM path AS STRING
IF filePath = "" THEN
path = InputBox$("Save BMP file:", "Save Icon", "ICON.BMP")
ELSE
path = InputBox$("Save BMP file:", "Save Icon", filePath)
END IF
IF path = "" THEN
EXIT SUB
END IF
DrawPreview
cvPreview.Save path
filePath = path
dirty = False
UpdateTitle
lblStatus.Caption = "Saved: " + path
END SUB
SUB mnuExit_Click
Unload IconEd
END SUB
SUB mnuPencil_Click
SelectTool TOOL_PENCIL
END SUB
SUB mnuEraser_Click
SelectTool TOOL_ERASER
END SUB
SUB mnuPicker_Click
SelectTool TOOL_PICKER
END SUB
SUB mnuSize16_Click
ChangeSize 16
END SUB
SUB mnuSize24_Click
ChangeSize 24
END SUB
SUB mnuSize32_Click
ChangeSize 32
END SUB
SUB cvEditor_MouseDown(button AS INTEGER, x AS INTEGER, y AS INTEGER)
DIM px AS INTEGER
DIM py AS INTEGER
px = x \ pixelSize
py = y \ pixelSize
IF curTool = TOOL_PICKER THEN
IF px >= 0 AND px < iconW AND py >= 0 AND py < iconH THEN
curColor = pixels(px, py)
DrawSelectedColor
SelectTool TOOL_PENCIL
END IF
EXIT SUB
END IF
drawing = True
SetIconPixel px, py
lblStatus.Caption = "(" + STR$(px) + "," + STR$(py) + ")"
END SUB
SUB cvEditor_MouseMove(button AS INTEGER, x AS INTEGER, y AS INTEGER)
DIM px AS INTEGER
DIM py AS INTEGER
px = x \ pixelSize
py = y \ pixelSize
IF px >= 0 AND px < iconW AND py >= 0 AND py < iconH THEN
lblStatus.Caption = "(" + STR$(px) + "," + STR$(py) + ")"
END IF
IF drawing THEN
SetIconPixel px, py
END IF
END SUB
SUB cvEditor_MouseUp(button AS INTEGER, x AS INTEGER, y AS INTEGER)
drawing = False
END SUB
SUB cvPalette_MouseDown(button AS INTEGER, x AS INTEGER, y AS INTEGER)
DIM col AS INTEGER
DIM row AS INTEGER
DIM idx AS INTEGER
col = x \ PAL_CELL
row = y \ PAL_CELL
IF col >= 0 AND col < PAL_COLS AND row >= 0 AND row < PAL_ROWS THEN
idx = row * PAL_COLS + col
curColor = palette(idx)
DrawSelectedColor
IF curTool = TOOL_PICKER THEN
SelectTool TOOL_PENCIL
END IF
END IF
END SUB