diff --git a/drawprocs.pas b/drawprocs.pas index d1d75d2..5e7152d 100644 --- a/drawprocs.pas +++ b/drawprocs.pas @@ -16,7 +16,7 @@ procedure SetDrawPixelProc(dic : drawitemproc); procedure SetGetPixelProc(gic : GetItemProc); procedure DrawItem(item,x,y,x2,y2,index,mode : integer); -procedure FloodFill(px,py, MaxX,MaxY,index,mode : integer); +procedure FloodFill(x,y, MaxX,MaxY,index,mode : integer); implementation @@ -46,7 +46,7 @@ TFPoint = record Count : integer; PointList : array[1..MaxQueueSize] of TFPoint; constructor Create; - procedure push(pt : TFPoint); + procedure push(var pt : TFPoint); procedure popfirst(var pt : TFPoint); procedure pop(var pt : TFPoint); function GetCount : integer; @@ -64,7 +64,7 @@ constructor TPixelQueue.Create; count:=0; end; -procedure TPixelQueue.push(pt : TFPoint); +procedure TPixelQueue.push(var pt : TFPoint); begin if (count+1) > MaxQueueSize then exit; inc(count); @@ -99,71 +99,68 @@ function TPixelQueue.GetCount : integer; GetCount:=count; end; -procedure FloodFill(px,py, MaxX,MaxY,index,mode : integer); +procedure FloodFill(x, y, MaxX,MaxY,index,mode : integer); var - PQ : TPixelQueue; (*implement stack point class*) - temp : TFPoint; - txy : TFPoint; - y1 : integer; - spanleft,spanright : boolean; - targetColor : integer; + x1 : integer; + spanAbove, spanBelow : boolean; + PQ : TPixelQueue; + temp : TFPoint; + oldColor : integer; begin - targetColor := GetItemX(px, py); - if (targetColor=Index) then (* no need to do anything if they are the same *) - begin - exit; - end; + if GetItemX(x,y) = index then exit; + oldColor:=GetItemX(x,y); PQ:=TPixelQueue.Create; - txy.x:=px; - txy.y:=py; - PQ.Push(txy); - while (PQ.Count > 0) do + temp.x:=x; + temp.y:=y; + PQ.push(temp); + while PQ.GetCount>0 do begin - PQ.PopFirst(temp); - y1 := temp.Y; - while (y1 >= 0) AND (GetItemX(temp.X, y1) = targetColor) do + PQ.popfirst(temp); + x:=temp.x; + y:=temp.y; + + x1 := x; + while ((x1 >= 0) and (GetItemX(x1,y) = oldColor)) do begin - Dec(y1); + x1:=x1-1; end; - inc(y1); - spanLeft := false; - spanRight := false; - while (y1 0) AND (GetItemX(temp.X - 1, y1) = targetColor) then + PutItemX( x1,y, index,mode); + if((NOT spanAbove) and (y > 0) and (GetItemX(x1,(y - 1) ) = oldColor)) then begin - txy.x:=temp.x-1; - txy.y:=y1; - PQ.Push(txy); - spanLeft := true; + temp.x:=x1; + temp.y:=y-1; + PQ.push(temp); + spanAbove := true; end - // else if ((spanLeft AND (temp.X - 1 = 0)) AND (GetItemX(temp.X - 1, y1) <> targetColor)) then - else if ((spanLeft AND (temp.X - 1 = 0)) OR (GetItemX(temp.X - 1, y1) <> targetColor)) then - begin - spanLeft := false; + else if (spanAbove and (y > 0) and (GetItemX(x1,(y - 1)) <> oldColor)) then + begin + spanAbove := false; end; - if (NOT spanRight AND (temp.X targetColor)) then - else if (spanRight AND (temp.X < MaxX - 1) AND (GetItemX(temp.X + 1, y1) <> targetColor)) then - + else if(spanBelow and (y < MaxY - 1) and (GetItemX(x1,(y + 1)) <> oldColor)) then begin - spanRight := false; + spanBelow := false; end; - inc(y1); + x1:=x1+1; end; end; end; - Procedure CreateRandomSprayPoints; var i : integer; diff --git a/flood.pas b/flood.pas index e467be9..f47f9f5 100644 --- a/flood.pas +++ b/flood.pas @@ -1,208 +1,147 @@ unit flood; {$mode objfpc}{$H+} -//{$mode TP} interface uses Classes, SysUtils,rmcore; -Procedure Fill(xx,yy,NColor: Integer); -implementation +procedure ScanFill(x, y, width, height, newColor : integer); -Procedure Fill(xx,yy,NColor: Integer); +implementation const - Left =1; - right=2; - up =3; - down =4; - StackMax = 10000; -//Type -// stype = Array[0..10000] of byte; -// stypePtr=^Stype; -Var - StackHolderX : Array[0..StackMax] of Integer; - StackHolderY : Array[0..StackMax] of Integer; - StackHolderPos : Array[0..StackMax] of Integer; - sthnum : word; - pp : Word; - coltofill : Word; - - -Procedure AddToStack(nx,ny,np : integer); + MaxQueueSize = 100; +Type + TFPoint = record + x,y : integer; + end; + + TPixelQueue = Class + Count : integer; + PointList : array[1..MaxQueueSize] of TFPoint; + constructor Create; + procedure push(var pt : TFPoint); + procedure popfirst(var pt : TFPoint); + procedure pop(var pt : TFPoint); + function GetCount : integer; + end; + + +constructor TPixelQueue.Create; begin - if (sthnum >= StackMax) then exit; - inc(sthnum); - StackHolderx[sthnum]:=nx; - StackHoldery[sthnum]:=ny; - StackHolderpos[sthnum]:=np; + count:=0; end; -Procedure CheckRight; +procedure TPixelQueue.push(var pt : TFPoint); begin -if xx< (RMCoreBase.GetWidth-1) then + if (count+1) > MaxQueueSize then exit; + if (pt.x < 0) or (pt.y<0) then exit; + inc(count); + PointList[count]:=pt; +end; +procedure TPixelQueue.popfirst(var pt : TFPoint); +var +i : integer; begin -if RMCoreBase.getpixel(xx+1,yy) = ColTofill then -//IconImage[xx+1,yy] = ColTofill then + if count > 0 then + begin + pt:=PointList[1]; + dec(count); + for i:=1 to count do begin -(* Pplot2(xx+1,yy,false);*) -// IconImage[xx+1,yy] :=Ncolor; - RMCoreBase.putpixel(xx+1,yy,Ncolor); - - // inc(sthnum); - // StackHolderx[sthnum]:=xx+1; - // StackHoldery[sthnum]:=yy; - // StackHolderpos[sthnum]:=Right; - - AddToStack(xx+1,yy,Right); -end; -end; + PointList[i]:=PointList[i+1]; + end; + end; end; - -Procedure CheckLeft; -Begin -if xx >0 then -begin -//if IconImage[xx-1,yy] = ColTofill then -if RMCoreBase.GetPixel(xx-1,yy) = ColTofill then - +procedure TPixelQueue.pop(var pt : TFPoint); begin -(* Pplot2(xx-1,yy,false);*) -// IconImage[xx-1,yy]:=Ncolor; - RMCoreBase.PutPixel(xx-1,yy,Ncolor); - -// inc(sthnum); -// StackHolderx[sthnum]:=xx-1; -// StackHoldery[sthnum]:=yy; -// StackHolderpos[sthnum]:=left; - AddToStack(xx-1,yy,Left); - -end; -end; + if count > 0 then + begin + pt:=PointList[count]; + dec(count); + end; end; -Procedure CheckUp; -begin -if yy>0 then +function TPixelQueue.GetCount : integer; begin -//if IconImage[xx,yy-1] = ColTofill then - if RMCoreBase.GetPixel(xx,yy-1) =ColTofill then - begin -(* Pplot2(xx,yy-1,false);*) -// IconImage[xx,yy-1]:=Ncolor; - RMCoreBase.PutPixel(xx,yy-1,Ncolor); - -// inc(sthnum); -// StackHolderx[sthnum]:=xx; -// StackHoldery[sthnum]:=yy-1; -// StackHolderpos[sthnum]:=up; - AddToStack(xx,yy-1,up); - -end; + GetCount:=count; end; -end; - -Procedure CheckDown; -begin -if yy<(RMCoreBase.GetHeight-1) then +function GetPix(x,y : integer) : integer; begin -//If IconImage[xx,yy+1]=ColTofill then - If RMCoreBase.GetPixel(xx,yy+1)=ColTofill then - begin -(* Pplot2(xx,yy+1,false);*) -// IconImage[xx,yy+1]:=Ncolor; - RMCoreBase.PutPixel(xx,yy+1,Ncolor); - - // inc(sthnum); - // StackHolderx[sthnum]:=xx; - // StackHoldery[sthnum]:=yy+1; - // StackHolderpos[sthnum]:=down; - - AddToStack(xx,yy+1,down); - -end; -end; +// if (x<0) or (y<0) or (x>RMCoreBase.GetWidth-1) or (y>RMCoreBase.GetHeight-1) then +// result:=-1 +// else + result:=RMCoreBase.GetPixel(x,y); end; -Procedure GetColortoFill; +procedure PutPix(x,y,color : integer); begin -//ColToFill:=IconImage[xx,yy]; -ColToFill:=RMCoreBase.GetPixel(xx,yy); - + if (x<0) or (y<0) or (x>RMCoreBase.GetWidth-1) or (y>RMCoreBase.GetHeight-1) then exit; + RMCoreBase.PutPixel(x,y,color); end; - - -Procedure GetNewCord; +procedure ScanFill(x, y, width, height, newColor : integer); +var + x1 : integer; + spanAbove, spanBelow : boolean; + PQ : TPixelQueue; + temp : TFPoint; + oldColor : integer; begin - if sthnum > 0 then - begin - xx:=StackHolderx[sthnum]; - yy:=StackHoldery[sthnum]; - pp:=StackHolderpos[sthnum]; - dec(sthnum); - end; -end; - + if GetPix(x,y) = newColor then exit; + oldColor:=GetPix(x,y); + + PQ:=TPixelQueue.Create; + temp.x:=x; + temp.y:=y; + PQ.push(temp); + while PQ.GetCount>0 do + begin + PQ.popfirst(temp); + x:=temp.x; + y:=temp.y; + x1 := x; + while ((x1 >= 0) and (GetPix(x1,y) = oldColor)) do + begin + x1:=x1-1; + end; + x1:=x1+1; + spanAbove := false; + spanBelow := false; + while((x1 < width) and (GetPix(x1,y) = oldColor)) do + begin + PutPix( x1,y, newColor); + if((NOT spanAbove) and (y > 0) and (GetPix(x1,(y - 1) ) = oldColor)) then + begin + temp.x:=x1; + temp.y:=y-1; + PQ.push(temp); + spanAbove := true; + end + else if (spanAbove and (y > 0) and (GetPix(x1,(y - 1)) <> oldColor)) then + begin + spanAbove := false; + end; -begin -if (xx<0) or (xx>(RMCoreBase.GetWidth-1)) then exit; -if (yy<0) or (yy>(RMCoreBase.GetHeight-1)) then exit; - -//GetMem(StackHolderX,SizeOf(Stype)); -//GetMem(StackHolderY,SizeOf(Stype)); -//GetMem(StackHolderPos,SizeOf(Stype)); - - -//FillChar(StackHolderX,SizeOf(StackHolderX),0); -//FillChar(StackHolderY,SizeOf(StackHolderY),0); -//FillChar(StackHolderPos,SizeOf(StackHolderPos),0); - -sthnum:=1; -GetColorTofill; -If ColToFill = NColor then exit; -//IconImage[xx,yy]:=Ncolor; -RMCoreBase.PutPixel(xx,yy,Ncolor); - -Repeat - case pp of - Left: begin - CheckLeft; - CheckDown; - Checkup; + if ((NOT spanBelow) and (y < height - 1) and (GetPix(x1,(y + 1)) = oldColor)) then + begin + temp.x:=x1; + temp.y:=y+1; + PQ.push(temp); + spanBelow := true; + end + else if(spanBelow and (y < height - 1) and (GetPix(x1,(y + 1)) <> oldColor)) then + begin + spanBelow := false; end; - Right:begin - CheckRight; - CheckUp; - CheckDown; - end; - Up: begin - CheckRight; - CheckLeft; - Checkup; - end; - Down: begin - CheckDown; - CheckRight; - CheckLeft; - end; - else - begin - CheckRight; - CheckUP; - CheckDown; - CheckLeft; + x1:=x1+1; end; - end; - GetNewCord; -Until sthnum=0; -//FreeMem(StackHolderX,SizeOf(Stype)); -//FreeMem(StackHolderY,SizeOf(Stype)); -//FreeMem(StackHolderPos,SizeOf(Stype)); - + end; end; + + end. diff --git a/mapeditor.lfm b/mapeditor.lfm index 4512a2a..c45a7b5 100644 --- a/mapeditor.lfm +++ b/mapeditor.lfm @@ -1,11 +1,11 @@ object MapEdit: TMapEdit - Left = 297 - Height = 682 - Top = 246 - Width = 1130 + Left = 218 + Height = 860 + Top = 140 + Width = 1324 Caption = 'Map Editor' - ClientHeight = 662 - ClientWidth = 1130 + ClientHeight = 840 + ClientWidth = 1324 Menu = MainMenu1 OnActivate = FormActivate OnClose = FormClose @@ -20,13 +20,13 @@ object MapEdit: TMapEdit AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom Left = 0 - Height = 662 + Height = 840 Top = 0 - Width = 218 + Width = 256 Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'LeftPanel' - ClientHeight = 662 - ClientWidth = 218 + ClientHeight = 840 + ClientWidth = 256 ParentFont = False TabOrder = 3 object SelectedTilePanel: TPanel @@ -36,12 +36,12 @@ object MapEdit: TMapEdit AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = LeftVertSplitter Left = 1 - Height = 169 + Height = 216 Top = 1 - Width = 216 + Width = 254 Anchors = [akTop, akLeft, akRight, akBottom] - ClientHeight = 169 - ClientWidth = 216 + ClientHeight = 216 + ClientWidth = 254 ParentFont = False TabOrder = 0 object SelectedTileImage: TImage @@ -64,8 +64,8 @@ object MapEdit: TMapEdit Cursor = crVSplit Left = 1 Height = 9 - Top = 170 - Width = 216 + Top = 217 + Width = 254 Align = alNone Anchors = [akLeft, akRight] AutoSnap = False @@ -82,21 +82,21 @@ object MapEdit: TMapEdit AnchorSideBottom.Control = LeftPanel AnchorSideBottom.Side = asrBottom Left = 1 - Height = 482 - Top = 179 - Width = 216 + Height = 613 + Top = 226 + Width = 254 Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'LeftBottomPanel' - ClientHeight = 482 - ClientWidth = 216 + ClientHeight = 613 + ClientWidth = 254 ParentColor = False ParentFont = False TabOrder = 2 object TileListView: TListView Left = 1 - Height = 480 + Height = 611 Top = 1 - Width = 214 + Width = 252 Align = alClient Color = 15790320 Columns = <> @@ -119,22 +119,22 @@ object MapEdit: TMapEdit AnchorSideRight.Side = asrBottom AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 1033 - Height = 662 + Left = 1209 + Height = 840 Top = 0 - Width = 97 + Width = 115 Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'RightPanel' - ClientHeight = 662 - ClientWidth = 97 + ClientHeight = 840 + ClientWidth = 115 ParentColor = False ParentFont = False TabOrder = 0 object MapListView: TListView Left = 1 - Height = 660 + Height = 838 Top = 1 - Width = 95 + Width = 113 Align = alClient Color = 15790320 Columns = <> @@ -149,8 +149,8 @@ object MapEdit: TMapEdit AnchorSideTop.Control = Owner AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 218 - Height = 662 + Left = 256 + Height = 840 Top = 0 Width = 9 Align = alNone @@ -162,8 +162,8 @@ object MapEdit: TMapEdit AnchorSideTop.Control = Owner AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 1024 - Height = 662 + Left = 1200 + Height = 840 Top = 0 Width = 9 Align = alNone @@ -176,13 +176,13 @@ object MapEdit: TMapEdit AnchorSideLeft.Side = asrBottom AnchorSideTop.Control = Owner AnchorSideRight.Control = RightSplitter - Left = 227 + Left = 265 Height = 126 Top = 0 - Width = 797 + Width = 935 Anchors = [akTop, akLeft, akRight] ClientHeight = 126 - ClientWidth = 797 + ClientWidth = 935 ParentFont = False TabOrder = 4 object MapInfoLabel: TLabel @@ -195,7 +195,7 @@ object MapEdit: TMapEdit ParentFont = False end object TileZoom: TTrackBar - Left = 762 + Left = 900 Height = 99 Top = 13 Width = 25 @@ -210,7 +210,7 @@ object MapEdit: TMapEdit TabOrder = 0 end object Panel2: TPanel - Left = 159 + Left = 297 Height = 96 Top = 16 Width = 592 @@ -447,22 +447,22 @@ object MapEdit: TMapEdit AnchorSideRight.Control = RightSplitter AnchorSideBottom.Control = Owner AnchorSideBottom.Side = asrBottom - Left = 227 - Height = 536 + Left = 265 + Height = 714 Top = 126 - Width = 797 + Width = 935 Anchors = [akTop, akLeft, akRight, akBottom] Caption = 'MiddlePanel' - ClientHeight = 536 - ClientWidth = 797 + ClientHeight = 714 + ClientWidth = 935 ParentColor = False ParentFont = False TabOrder = 5 object MapScrollBox: TScrollBox Left = 1 - Height = 534 + Height = 712 Top = 1 - Width = 795 + Width = 933 HorzScrollBar.Increment = 10 HorzScrollBar.Page = 105 HorzScrollBar.Tracking = True @@ -471,8 +471,8 @@ object MapEdit: TMapEdit VertScrollBar.Tracking = True Align = alClient BorderStyle = bsNone - ClientHeight = 534 - ClientWidth = 795 + ClientHeight = 712 + ClientWidth = 933 ParentFont = False TabOrder = 0 object MapPaintBox: TPaintBox @@ -554,6 +554,9 @@ object MapEdit: TMapEdit Caption = 'Clear' OnClick = ClearMapClick end + object Undo: TMenuItem + Caption = 'Undo' + end object CopyToClipBoard: TMenuItem Caption = 'Copy' OnClick = CopyToClipBoardClick @@ -616,14 +619,95 @@ object MapEdit: TMapEdit end end object MenuItem19: TMenuItem - Caption = 'Tools' - object MenuToolDraw: TMenuItem + Caption = 'Tile Mode' + object TileModeDraw: TMenuItem Caption = 'Draw' - OnClick = MenuToolDrawClick + OnClick = TileModeDrawClick end - object MenuToolErase: TMenuItem + object TileModeErase: TMenuItem Caption = 'Erase' - OnClick = MenuToolEraseClick + OnClick = TileModeEraseClick + end + end + object MenuItem15: TMenuItem + Caption = 'Tools' + object ToolPencilMenu: TMenuItem + Caption = 'Pencil' + OnClick = ToolMenuClick + end + object ToolLineMenu: TMenuItem + Caption = 'Line' + OnClick = ToolMenuClick + end + object ToolRectangleMenu: TMenuItem + Caption = 'Rectangle' + OnClick = ToolMenuClick + end + object ToolFRectangleMenu: TMenuItem + Caption = 'Filled Rectangle' + OnClick = ToolMenuClick + end + object ToolCircleMenu: TMenuItem + Caption = 'Circle' + OnClick = ToolMenuClick + end + object ToolFCircleMenu: TMenuItem + Caption = 'Filled Circle' + OnClick = ToolMenuClick + end + object ToolEllipseMenu: TMenuItem + Caption = 'Ellipse' + OnClick = ToolMenuClick + end + object ToolFEllipseMenu: TMenuItem + Caption = 'Filled Ellipse' + OnClick = ToolMenuClick + end + object ToolPaintMenu: TMenuItem + Caption = 'Paint' + OnClick = ToolMenuClick + end + object ToolSprayPaintMenu: TMenuItem + Caption = 'Spray Paint' + OnClick = ToolMenuClick + end + object ToolSelectAreaMenu: TMenuItem + Caption = 'Select Area' + OnClick = ToolMenuClick + end + object ToolGridMenu: TMenuItem + Caption = 'Grid' + OnClick = ToolGridIconClick + end + object ToolFlipMenu: TMenuItem + Caption = 'Flip' + object Horizontal: TMenuItem + Caption = 'Horizontal' + OnClick = ToolHFLIPButtonClick + end + object Vertical: TMenuItem + Caption = 'Vertical' + OnClick = ToolVFLIPButtonClick + end + end + object ScrollMenu: TMenuItem + Caption = 'Scroll' + object ScrollRightMenu: TMenuItem + Caption = 'Right' + OnClick = ToolScrollRightIconClick + end + object ScrollLeftMenu: TMenuItem + Caption = 'Left' + OnClick = ToolScrollLeftIconClick + end + object ScrollUpMenu: TMenuItem + Caption = 'Up' + OnClick = ToolScrollUpIconClick + end + object ScrollDownMenu: TMenuItem + Caption = 'Down' + OnClick = ToolScrollDownIconClick + end end end end diff --git a/mapeditor.pas b/mapeditor.pas index edba50d..a11f0e3 100644 --- a/mapeditor.pas +++ b/mapeditor.pas @@ -14,6 +14,28 @@ interface TMapEdit = class(TForm) GroupBox1: TGroupBox; CopyToClipBoard: TMenuItem; + MenuItem15: TMenuItem; + ToolPencilMenu: TMenuItem; + ToolLineMenu: TMenuItem; + ToolRectangleMenu: TMenuItem; + ToolFRectangleMenu: TMenuItem; + ToolCircleMenu: TMenuItem; + ToolFCircleMenu: TMenuItem; + ToolEllipseMenu: TMenuItem; + ToolFEllipseMenu: TMenuItem; + ToolPaintMenu: TMenuItem; + ToolSprayPaintMenu: TMenuItem; + ToolSelectAreaMenu: TMenuItem; + ToolGridMenu: TMenuItem; + ToolFlipMenu: TMenuItem; + Horizontal: TMenuItem; + Vertical: TMenuItem; + ScrollMenu: TMenuItem; + ScrollRightMenu: TMenuItem; + ScrollLeftMenu: TMenuItem; + ScrollUpMenu: TMenuItem; + ScrollDownMenu: TMenuItem; + Undo: TMenuItem; PasteFromClipBoard: TMenuItem; Panel2: TPanel; RadioDraw: TRadioButton; @@ -51,8 +73,8 @@ TMapEdit = class(TForm) MenuItem17: TMenuItem; MenuItem18: TMenuItem; MenuItem19: TMenuItem; - MenuToolDraw: TMenuItem; - MenuToolErase: TMenuItem; + TileModeDraw: TMenuItem; + TileModeErase: TMenuItem; SelectedTileImage: TImage; MainMenu1: TMainMenu; ImageList1: TImageList; @@ -124,8 +146,8 @@ TMapEdit = class(TForm) procedure MenuSaveClick(Sender: TObject); procedure PasteFromClipBoardClick(Sender: TObject); procedure ReSizeMapClick(Sender: TObject); - procedure MenuToolDrawClick(Sender: TObject); - procedure MenuToolEraseClick(Sender: TObject); + procedure TileModeDrawClick(Sender: TObject); + procedure TileModeEraseClick(Sender: TObject); procedure RadioDrawClick(Sender: TObject); procedure RadioEraseClick(Sender: TObject); procedure ReSizeTiles(Sender: TObject); @@ -151,6 +173,7 @@ TMapEdit = class(TForm) procedure ToolGridIconClick(Sender: TObject); procedure ToolHFLIPButtonClick(Sender: TObject); procedure ToolIconClick(Sender: TObject); + procedure ToolMenuClick(Sender: TObject); procedure ToolScrollDownIconClick(Sender: TObject); procedure ToolScrollLeftIconClick(Sender: TObject); procedure ToolScrollRightIconClick(Sender: TObject); @@ -208,6 +231,10 @@ TMapEdit = class(TForm) procedure DrawGrid; Procedure LoadResourceIcons; Procedure UpdateToolSelectionIcons; + procedure ClearCheckedMenus; + procedure UpdateMenus; + procedure UpdateEditMenus; + end; @@ -279,6 +306,7 @@ procedure TMapEdit.FormCreate(Sender: TObject); OldMapY:=-1; RenderDrawToolShape:=False; UpdateToolSelectionIcons; + UpdateEditMenus; end; procedure TMapEdit.FormDestroy(Sender: TObject); @@ -297,7 +325,7 @@ procedure TMapEdit.FormShow(Sender: TObject); end else begin - LoadTile(CTile.ImageIndex); // Follow up open windows - reload current tile incase it was edited + LoadTile(CTile.ImageIndex); // Follow ScrollUpMenu open windows - reload current tile incase it was edited end; UpdateCurrentTile; @@ -306,7 +334,7 @@ procedure TMapEdit.FormShow(Sender: TObject); MapPaintBox.Width:=0; //this hack updated the scrollbars properly after the 2nd and following attempts MapPaintBox.Height:=0; MapPaintBox.Invalidate; - MapPaintBox.Width:=MapCoreBase.GetZoomMapPageWidth(CurrentMap)+1; //do not remove the +1 - hack to display right and bottom corner of grid + MapPaintBox.Width:=MapCoreBase.GetZoomMapPageWidth(CurrentMap)+1; //do not remove the +1 - hack to display ScrollRightMenu and bottom corner of grid MapPaintBox.Height:=MapCoreBase.GetZoomMapPageHeight(CurrentMap)+1; MapPaintBox.Invalidate; //forces a paint which draws the map @@ -334,18 +362,30 @@ procedure TMapEdit.FormActivate(Sender: TObject); LoadTilesToTileImageList; VerifyTileImageList; +// if CTile.ImageIndex > (ImageThumbBase.GetCount-1) then //check if the CTile has been deleted +// begin +// CTile.ImageIndex:=0; //set it to the first tile/sprite +// end; + + if ImageThumbBase.FindUID(CTile.ImageUID) = -1 then //check if current tile was deleted + begin + CTile.ImageIndex:=TileMissing; + end; + if CTile.ImageIndex = TileMissing then begin LoadTile(0); // first time opening MApEdit Window end else begin - LoadTile(CTile.ImageIndex); // Follow up open windows - reload current tile incase it was edited + LoadTile(CTile.ImageIndex); // Follow ScrollUpMenu open windows - reload current tile incase it was edited end; UpdateCurrentTile; - UpdateTileView; - + UpdateMapListView; //if new project is open or inserted - we need to update maplist view + UpdateMenus; + UpdateEditMenus; + UpdateToolSelectionIcons; MapPaintBox.Invalidate; end; @@ -388,8 +428,6 @@ procedure TMapEdit.PasteFromClipBoardClick(Sender: TObject); MapPaintBox.Invalidate; end; - - procedure TMapEdit.PlotTile(mx,my : integer; TTile : TileRec); var gx,gy : integer; @@ -408,7 +446,6 @@ procedure TMapEdit.ImageListPlotTile(mx,my : integer;var TTile : TileRec); begin gx:=mx*TileWidth; gy:=my*TileHeight; -// MapPaintBox.canvas.CopyRect(Rect(gx, gy, gx+TileWidth, gy+TileHeight), CTileBitMap.Canvas, Rect(0, 0,CTileBitMap.Width, CTileBitMap.Height)); TileImageList.Draw(MapPaintBox.Canvas,gx,gy,TTile.ImageIndex,true); end; @@ -583,7 +620,10 @@ procedure TMapEdit.MapListViewClick(Sender: TObject); MapScrollBox.HorzScrollBar.Position:=MapCoreBase.GetMapScrollHorizPos(MapCoreBase.GetCurrentMap); MapScrollBox.VertScrollBar.Position:=MapCoreBase.GetMapScrollVertPos(MapCoreBase.GetCurrentMap); SetDrawTool(MapCoreBase.GetMapDrawTool(CurrentMap)); + TileMode:=MapCoreBase.GetMapTileMode(CurrentMap); UpdateToolSelectionIcons; + UpdateMenus; + UpdateEditMenus; //UpdateMapView; MapPaintBox.Invalidate; end; @@ -695,6 +735,8 @@ procedure TMapEdit.MenuExportPascalArray(Sender: TObject); end; end; + + procedure TMapEdit.MenuMapPropsClick(Sender: TObject); var EO : MapExportFormatRec; @@ -721,6 +763,8 @@ procedure TMapEdit.MenuNewClick(Sender: TObject); MapCoreBase.AddMap; //making copy of Map 0 for all new maps - Map 0 is the primary map MapCoreBase.SetCurrentMap(MapCoreBase.GetMapCount-1); CurrentMap:=MapCoreBase.GetCurrentMap; + TileMode:=1; //draw + MapCoreBase.SetMapTileMode(CurrentMap,TileMode); // we set to draw because the copied data from map 0 may be in erase mode TileZoom.Position:=4; MapCoreBase.SetZoomSize(CurrentMap,TileZoom.Position); @@ -731,6 +775,8 @@ procedure TMapEdit.MenuNewClick(Sender: TObject); MapScrollBox.VertScrollBar.Position:=0; SetDrawTool(DrawShapePencil); UpdateToolSelectionIcons; + UpdateMenus; + UpdateEditMenus; MapPaintBox.Invalidate; end; @@ -757,10 +803,40 @@ procedure TMapEdit.MenuSaveClick(Sender: TObject); +procedure TMapEdit.UpdateEditMenus; +begin + ReSizeMap8x8.Checked:=false; + ReSizeMap16x16.Checked:=false; + ReSizeMap32x32.Checked:=false; + ReSizeMap64x64.Checked:=false; + case MapCoreBase.GetMapWidth(MapCoreBase.GetCurrentMap) of 8: ReSizeMap8x8.Checked:=true; + 16: ReSizeMap16x16.Checked:=true; + 32: ReSizeMap32x32.Checked:=true; + 64: ReSizeMap64x64.Checked:=true; + end; + ReSize8x8.Checked:=false; + ReSize16x16.Checked:=false; + ReSize32x32.Checked:=false; + ReSize64x64.Checked:=false; + ReSize128x128.Checked:=false; + ReSize256x256.Checked:=false; + + case MapCoreBase.GetMapTileWidth(MapCoreBase.GetCurrentMap) of 8: ReSize8x8.Checked:=true; + 16: ReSize16x16.Checked:=true; + 32: ReSize32x32.Checked:=true; + 64: ReSize64x64.Checked:=true; + 128: ReSize128x128.Checked:=true; + 256: ReSize256x256.Checked:=true; + + end; + +end; + procedure TMapEdit.ReSizeMapClick(Sender: TObject); var mw,mh : integer; begin + Case (Sender As TMenuItem).Name of 'ReSizeMap8x8' :begin mw:=8; mh:=8; @@ -781,31 +857,40 @@ procedure TMapEdit.ReSizeMapClick(Sender: TObject); MapCoreBase.ResizeMap(CurrentMap,mw,mh); // TileWidth:=MapCoreBase.GetZoomMapTileWidth(CurrentMap); // TileHeight:=MapCoreBase.GetZoomMapTileHeight(CurrentMap); + UpdateEditMenus; UpdatePageSize; // UpdateMapView; MapPaintBox.Invalidate; end; -procedure TMapEdit.MenuToolDrawClick(Sender: TObject); +procedure TMapEdit.TileModeDrawClick(Sender: TObject); begin - + TileMode:=1; + MapCoreBase.SetMapTileMode(MapCoreBase.GetCurrentMap,TileMode); +// RadioDraw.Checked:=true; + UpdateMenus; end; -procedure TMapEdit.MenuToolEraseClick(Sender: TObject); +procedure TMapEdit.TileModeEraseClick(Sender: TObject); begin - + TileMode:=0; + MapCoreBase.SetMapTileMode(MapCoreBase.GetCurrentMap,TileMode); +// RadioErase.Checked:=true; + UpdateMenus; end; procedure TMapEdit.RadioDrawClick(Sender: TObject); begin TileMode:=1; MapCoreBase.SetMapTileMode(MapCoreBase.GetCurrentMap,TileMode); + UpdateMenus; end; procedure TMapEdit.RadioEraseClick(Sender: TObject); begin TileMode:=0; MapCoreBase.SetMapTileMode(MapCoreBase.GetCurrentMap,TileMode); + UpdateMenus; end; procedure TMapEdit.ReSizeTiles(Sender: TObject); @@ -852,6 +937,7 @@ procedure TMapEdit.ReSizeTiles(Sender: TObject); UpdatePageSize; LoadTilesToTileImageList; //UpdateMapView; + UpdateEditMenus; MapPaintBox.Invalidate; end; @@ -861,18 +947,18 @@ procedure TMapEdit.ReSizeTiles(Sender: TObject); begin TileMode:=Tool; MapCoreBase.SetMapTileMode(MapCoreBase.GetCurrentMap,TileMode); - MenuToolErase.Checked:=false; - MenuToolDraw.Checked:=false; + TileModeErase.Checked:=false; + TileModeDraw.Checked:=false; if Tool = 0 then begin RadioErase.Checked:=true; - MenuToolErase.Checked:=true; + TileModeErase.Checked:=true; end else if Tool = 1 then begin RadioDraw.Checked:=true; - MenuToolDraw.Checked:=true; + TileModeDraw.Checked:=true; end; end; @@ -991,6 +1077,9 @@ procedure TMapEdit.TileListViewClick(Sender: TObject); LoadTile(item.Index); UpdateCurrentTile; + UpdateToolSelectionIcons; + UpdateMenus; + end; end; @@ -1009,6 +1098,7 @@ procedure TMapEdit.TileZoomChange(Sender: TObject); UpdatePageSize; //UpdateMapView; LoadTilesToTileImageList; + UpdateEditMenus; MapPaintBox.Invalidate; end; @@ -1124,7 +1214,7 @@ procedure TMapEdit.UpdateMapInfo(x,y : integer); //MapInfoLabel.Caption:='X = '+IntToStr(mx)+' Y = '+IntToStr(my); end; -// xyx2y2 mouse down event - this handles all the tools that just requires x,y,x2,y2 coords only - pixel and spraypaint +// xyx2y2 mouse ScrollDownMenu event - this handles all the tools that just requires x,y,x2,y2 coords only - pixel and spraypaint procedure TMapEdit.MPaintBoxMouseDownXYX2Y2Tool(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var @@ -1198,11 +1288,11 @@ procedure TMapEdit.MPaintBoxMouseMoveXYX2Y2Tool(Sender: TObject; Shift: TShiftSt MapPaintBox.Invalidate; //draw the current end; -// xyx2y2 mouse up event - this handles all the tools that just requires x,y,x2,y2 coords only - pixel and spraypaint +// xyx2y2 mouse ScrollUpMenu event - this handles all the tools that just requires x,y,x2,y2 coords only - pixel and spraypaint procedure TMapEdit.MPaintBoxMouseUpXYX2Y2Tool(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin - if (OldMapX=-1) or (OldMapY=-1) then exit; //prevent right clicking from outsize of zoom area while moving into zoom area creates unwanted event - checking the coors allows to jump out with out drawing garbage + if (OldMapX=-1) or (OldMapY=-1) then exit; //prevent ScrollRightMenu clicking from outsize of zoom area while moving into zoom area creates unwanted event - checking the coors allows to jump out with out drawing garbage OldMapX:=-1; OldMapY:=-1; // DrawTool:=RMDRAWTools.GetDrawTool; @@ -1214,12 +1304,13 @@ procedure TMapEdit.MPaintBoxMouseUpXYX2Y2Tool(Sender: TObject; Button: TMouseBut MapPaintBox.Invalidate; end; -// xy mouse down event - this handles all the tools that just requires x,y coords only - pixel and spraypaint +// xy mouse ScrollDownMenu event - this handles all the tools that just requires x,y coords only - pixel and spraypaint procedure TMapEdit.MPaintBoxMouseDownXYTool(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin MapX:=GetMapX(x); MapY:=GetMapY(y); - if (MapX=OldMapX) and (MapY=OldMapY) then exit; // we are just just drawing in the same zoom x,y + // if (MapX=OldMapX) and (MapY=OldMapY) then exit; // we are just just drawing in the same zoom x,y + // breaks flood painting over the same tile OldMapX:=MapX; OldMapY:=MapY; @@ -1269,7 +1360,7 @@ procedure TMapEdit.MPaintBoxMouseMoveXYTool(Sender: TObject; Shift: TShiftState; MapPaintBox.Invalidate; end; -// xy mouse up event - this handles all the tools that just requires x,y coords only - pixel and spraypaint +// xy mouse ScrollUpMenu event - this handles all the tools that just requires x,y coords only - pixel and spraypaint procedure TMapEdit.MPaintBoxMouseUpXYTool(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin @@ -1315,9 +1406,14 @@ procedure TMapEdit.MPaintBoxMouseUp(Sender: TObject; Button: TMouseButton; procedure TMapEdit.ToolGridIconClick(Sender: TObject); begin if MapCoreBase.GetMapGridStatus(MapCoreBase.GetCurrentMap) = 1 then - MapCoreBase.SetMapGridStatus(MapCoreBase.GetCurrentMap,0) - else MapCoreBase.SetMapGridStatus(MapCoreBase.GetCurrentMap,1); - + begin + MapCoreBase.SetMapGridStatus(MapCoreBase.GetCurrentMap,0); + end + else + begin + MapCoreBase.SetMapGridStatus(MapCoreBase.GetCurrentMap,1); + end; + UpdateMenus; MapPaintBox.Invalidate; end; @@ -1331,7 +1427,10 @@ procedure TMapEdit.ToolHFLIPButtonClick(Sender: TObject); end; procedure TMapEdit.ToolIconClick(Sender: TObject); +var + PrevTool : integer; begin + PrevTool:=DrawTool; MapCoreBase.SetMapClipStatus(MapCoreBase.GetCurrentMap,0); Case (Sender As TImage).Name of 'ToolPencilIcon':DrawTool:=DrawShapePencil; 'ToolLineIcon':DrawTool:=DrawShapeLine; @@ -1347,7 +1446,28 @@ procedure TMapEdit.ToolIconClick(Sender: TObject); end; MapCoreBase.SetMapDrawTool(MapCoreBase.GetCurrentMap,DrawTool); UpdateToolSelectionIcons; - MapPaintBox.Invalidate; + UpdateMenus; + if PrevTool = DrawShapeClip then MapPaintBox.Invalidate; // removes select outline +end; + + +procedure TMapEdit.ToolMenuClick(Sender: TObject); +begin + Case (Sender As TMenuItem).Name of 'ToolPencilMenu':DrawTool:=DrawShapePencil; + 'ToolLineMenu':DrawTool:=DrawShapeLine; + 'ToolRectangleMenu':DrawTool:=DrawShapeRectangle; + 'ToolFRectangleMenu':DrawTool:=DrawShapeFRectangle; + 'ToolFCircleMenu':DrawTool:=DrawShapeFCircle; + 'ToolCircleMenu':DrawTool:=DrawShapeCircle; + 'ToolEllipseMenu':DrawTool:=DrawShapeEllipse; + 'ToolFEllipseMenu':DrawTool:=DrawShapeFEllipse; + 'ToolPaintMenu':DrawTool:=DrawShapePaint; + 'ToolSprayPaintMenu':DrawTool:=DrawShapeSpray; + 'ToolSelectAreaMenu':DrawTool:=DrawShapeClip; + end; + MapCoreBase.SetMapDrawTool(MapCoreBase.GetCurrentMap,DrawTool); + UpdateToolSelectionIcons; + UpdateMenus; end; procedure TMapEdit.ToolScrollDownIconClick(Sender: TObject); @@ -1425,6 +1545,57 @@ procedure TMapEdit.ToolVFLIPButtonClick(Sender: TObject); ToolScrollRightIcon.Picture.LoadFromResourceName(HInstance,'RIGHT1'); end; +procedure TMapEdit.ClearCheckedMenus; +begin + TileModeDraw.Checked:=false; + TileModeErase.Checked:=false; + + ToolFRectangleMenu.Checked:=false; + ToolRectangleMenu.Checked:=false; + ToolLineMenu.Checked:=false; + ToolSelectAreaMenu.Checked:=false; + + ToolSprayPaintMenu.Checked:=false; + ToolPaintMenu.Checked:=false; + ToolCircleMenu.Checked:=false; + ToolFCircleMenu.Checked:=false; + ToolEllipseMenu.Checked:=false; + ToolFEllipseMenu.Checked:=false; + + ToolPencilMenu.Checked:=false; + ToolGridMenu.Checked:=false; +end; + + +procedure TMapEdit.UpdateMenus; // and Tile Mode radio buttons +begin + ClearCheckedMenus; + if TileMode = 1 then + begin + TileModeDraw.Checked:=true; + RadioDraw.Checked:=true; + end + else + begin + TileModeErase.Checked:=true; + RadioErase.Checked:=true; + end; + + case DrawTool of DrawShapePencil:ToolPencilMenu.Checked:=true; + DrawShapeLine:ToolLineMenu.Checked:=true; + DrawShapeCircle: ToolCircleMenu.Checked:=true; + DrawShapeFCircle: ToolFCircleMenu.Checked:=true; + DrawShapeEllipse: ToolEllipseMenu.Checked:=true; + DrawShapeFEllipse: ToolFEllipseMenu.Checked:=true; + DrawShapeRectangle: ToolRectangleMenu.Checked:=true; + DrawShapeFRectangle: ToolFRectangleMenu.Checked:=true; + DrawShapeSpray: ToolSprayPaintMenu.Checked:=true; + DrawShapePaint: ToolPaintMenu.Checked:=true; + DrawShapeClip:ToolSelectAreaMenu.Checked:=true; + end; + if MapCoreBase.GetMapGridStatus(MapCoreBase.GetCurrentMap)=1 then ToolGridMenu.Checked:=true; +end; + procedure TMapEdit.UpdateToolSelectionIcons; begin LoadResourceIcons; diff --git a/rmabout.pas b/rmabout.pas index 0455709..3360ec2 100644 --- a/rmabout.pas +++ b/rmabout.pas @@ -8,8 +8,8 @@ interface Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls,lclintf; Const - ProgramName ='Raster Master v1.7 R84 '; - ProgramLicense = 'Released May 31 - 2023 under MIT License'; + ProgramName ='Raster Master v1.9 R86 '; + ProgramLicense = 'Released June 15 - 2023 under MIT License'; type diff --git a/rmmain.lfm b/rmmain.lfm index 5392bc9..58e9cad 100644 --- a/rmmain.lfm +++ b/rmmain.lfm @@ -1,7 +1,7 @@ object RMMainForm: TRMMainForm - Left = 148 + Left = 163 Height = 872 - Top = 169 + Top = 71 Width = 1335 Align = alClient Caption = 'Raster Master' @@ -174,7 +174,7 @@ object RMMainForm: TRMMainForm Left = 0 Height = 13 Top = 226 - Width = 225 + Width = 226 Align = alNone Anchors = [akLeft, akRight] Color = 11625216 @@ -977,7 +977,7 @@ object RMMainForm: TRMMainForm OnClick = FileExitMenuClick end end - object MenuItem1: TMenuItem + object MenuEdit: TMenuItem Caption = 'Edit' object EditResizeTo: TMenuItem Caption = 'Resize To' @@ -1307,11 +1307,11 @@ object RMMainForm: TRMMainForm object ToolFlipMenu: TMenuItem Caption = 'Flip' object ToolFlipHorizMenu: TMenuItem - Caption = 'Horintal' + Caption = 'Horizontal' OnClick = ToolFlipHorizMenuClick end object ToolFlipVirtMenu: TMenuItem - Caption = 'Virtical' + Caption = 'Vertical' OnClick = ToolFlipVirtMenuClick end end diff --git a/rmmain.pas b/rmmain.pas index 7c85199..958fcdf 100644 --- a/rmmain.pas +++ b/rmmain.pas @@ -31,7 +31,7 @@ TRMMainForm = class(TForm) ImageList1: TImageList; InfoBarLabel: TLabel; ListView1: TListView; - MenuItem1: TMenuItem; + MenuEdit: TMenuItem; EditCopy: TMenuItem; EditPaste: TMenuItem; EditColor: TMenuItem; @@ -436,6 +436,9 @@ TRMMainForm = class(TForm) procedure LoadDefaultPalette; procedure UpdatePalette; procedure UpdatePaletteMenu; + procedure UpdateEditMenu; + procedure UpdateToolsMenu; + procedure UpdateToolFlipScrollMenu; procedure UpdateColorBox; @@ -558,7 +561,7 @@ procedure TRMMainForm.FormCreate(Sender: TObject); ClearSelectedToolsMenu; PaletteVGA.Checked:=true; // set vga palette UpdateToolSelectionIcons; - ToolPencilMenu.Checked:=true; //enable pencil tool in SpriteImportMenu + UpdateEditMenu; InitThumbView; ZoomX:=0; @@ -1415,15 +1418,18 @@ procedure TRMMainForm.ZPaintBoxMouseDownXYTool(Sender: TObject; Button: TMouseBu begin ZoomX:=RMDrawTools.GetZoomX(x); ZoomY:=RMDrawTools.GetZoomY(y); - if (ZoomX=OldZoomX) and (ZoomY=OldZoomY) then exit; // we are just just drawing in the same zoom x,y - +// if (ZoomX=OldZoomX) and (ZoomY=OldZoomY) then exit; // we are just just drawing in the same zoom x,y +// this is commented out because it breaks repainting to the same pixel OldZoomX:=ZoomX; OldZoomY:=ZoomY; DrawTool:=RMDRAWTools.GetDrawTool; if DrawTool = DrawShapePaint then // special kludge here - fix in future updates begin - Fill(ZoomX,ZoomY,RMCoreBase.GetCurColor); + ScanFill(ZoomX,ZoomY,RMCoreBase.GetWidth,RMCoreBase.GetHeight,RMCoreBase.GetCurColor); + // Fill(ZoomX,ZoomY,RMCoreBase.GetWidth,RMCoreBase.GetHeight,RMCoreBase.GetCurColor); + // Fill(ZoomX,ZoomY,RMCoreBase.GetCurColor); + UpdateRenderBitMap; ZoomPaintBox.Invalidate; UpdateActualArea; @@ -1598,12 +1604,33 @@ procedure TRMMainForm.ZoomPaintBoxPaint(Sender: TObject); RMDrawTools.DrawOverlayOnClipArea(ZoomPaintBox.Canvas,clYellow,0); //mode 0 is copy end; +procedure TRMMainForm.UpdateToolsMenu; +var + DT : integer; +begin + DT:=RMDRAWTools.GetDrawTool; + case DT of DrawShapePencil:ToolPencilMenu.Checked:=true; + DrawShapeLine:ToolLineMenu.Checked:=true; + DrawShapeCircle: ToolCircleMenu.Checked:=true; + DrawShapeFCircle: ToolFCircleMenu.Checked:=true; + DrawShapeEllipse: ToolEllipseMenu.Checked:=true; + DrawShapeFEllipse: ToolFEllipseMenu.Checked:=true; + DrawShapeRectangle: ToolRectangleMenu.Checked:=true; + DrawShapeFRectangle: ToolFRectangleMenu.Checked:=true; + DrawShapeSpray: ToolMenuSprayPaint.Checked:=true; + DrawShapePaint: ToolMenuPaint.Checked:=true; + DrawShapeClip: ToolSelectAreaMenu.Checked:=true; + end; + if RMDrawTools.GetGridMode = 1 then ToolGridMenu.Checked:=true; +end; procedure TRMMainForm.ClearSelectedToolsMenu; begin + ToolPencilMenu.Checked:=false; + ToolLineMenu.Checked:=false; + ToolFRectangleMenu.Checked:=false; ToolRectangleMenu.Checked:=false; - ToolLineMenu.Checked:=false; ToolSelectAreaMenu.Checked:=false; ToolMenuSprayPaint.Checked:=false; @@ -1613,7 +1640,7 @@ procedure TRMMainForm.ClearSelectedToolsMenu; ToolEllipseMenu.Checked:=false; ToolFEllipseMenu.Checked:=false; - ToolPencilMenu.Checked:=false; + ToolGridMenu.Checked:=false; end; Procedure TRMMainForm.LoadResourceIcons; @@ -1674,6 +1701,8 @@ procedure TRMMainForm.UpdateToolSelectionIcons; DrawShapeClip:ToolSelectAreaIcon.Picture.LoadFromResourceName(HInstance,'SELECT2'); end; + ClearSelectedToolsMenu; + UpdateToolsMenu; end; procedure TRMMainForm.ShowSelectAreaTools; @@ -2003,10 +2032,29 @@ procedure TRMMainForm.GWBASICClick(Sender: TObject); end; end; +Procedure TRMMainForm.UpdateEditMenu; +begin + EditResizeTo8.Checked:=false; + EditResizeTo16.Checked:=false; + EditResizeTo32.Checked:=false; + EditResizeTo64.Checked:=false; + EditResizeTo128.Checked:=false; + EditResizeTo256.Checked:=false; + case RMCoreBase.GetWidth of 8: EditResizeTo8.Checked:=true; + 16: EditResizeTo16.Checked:=true; + 32: EditResizeTo32.Checked:=true; + 64: EditResizeTo64.Checked:=true; + 128: EditResizeTo128.Checked:=true; + 256: EditResizeTo256.Checked:=true; + + end; +end; + procedure TRMMainForm.EditResizeToNewSize(Sender: TObject); var ImgWidth,ImgHeight : integer; begin + if (Sender As TMenuItem).Name = 'EditResizeTo8' then begin ImgWidth:=8; @@ -2054,6 +2102,7 @@ procedure TRMMainForm.EditResizeToNewSize(Sender: TObject); UpdateActualArea; UpdateZoomArea; UpdateThumbView; + UpdateEditMenu; end; procedure TRMMainForm.javaScriptArrayClick(Sender: TObject); @@ -3059,9 +3108,11 @@ procedure TRMMainForm.ListView1Click(Sender: TObject); CoreToPalette; UpdateColorBox; - UpdateToolSelectionIcons; + UpdateToolSelectionIcons; //calls updatetoolsmenu + //UpdateToolsMenu; UpdatePalette; UpdatePaletteMenu; + UpdateEditMenu; UpdateActualArea; UpdateZoomArea; UpdateZoomScroller; @@ -3414,6 +3465,7 @@ procedure TRMMainForm.OpenProjectFileClick(Sender: TObject); UpdateToolSelectionIcons; UpdatePalette; UpdatePaletteMenu; + UpdateEditMenu; UpdateActualArea; UpdateZoomArea; UpdateZoomScroller; @@ -3515,6 +3567,7 @@ procedure TRMMainForm.FileDeleteClick(Sender: TObject); UpdatePalette; UpdateActualArea; UpdateZoomArea; + UpdateEditMenu; end; end; end; diff --git a/rmtools.pas b/rmtools.pas index 5765475..835a391 100644 --- a/rmtools.pas +++ b/rmtools.pas @@ -955,7 +955,6 @@ function TRMDrawTools.GetMaxYOffset(ActualImageHeight,ZoomImageHeight : integer) //GetMaxYOffset:=yoff-1; end; - function TRMDrawTools.GetZoomX(x : integer) : integer; begin GetZoomX:=x div GridArea.CellWidth; @@ -968,8 +967,6 @@ function TRMDrawTools.GetZoomY(y : integer) : integer; if GetZoomY < 0 then GetZoomY:=0; end; - - procedure TRMDrawTools.DrawGrid(Image : TCanvas;x,y,gWidth,gHeight,mode : integer); begin Image.Brush.Color := $f0f0f0;