Skip to content

Commit

Permalink
(Issue #42) Closed, Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
hjfactory committed Oct 8, 2012
1 parent 36da824 commit 1e9643e
Show file tree
Hide file tree
Showing 9 changed files with 113 additions and 112 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
unit TestThShape;
unit TestThRectangle;
{
Delphi DUnit Test Case
Expand All @@ -16,7 +16,7 @@ interface
System.UITypes, System.Types, System.SysUtils, FMX.Controls, System.UIConsts;

type
TestTThShape = class(TBaseTestUnit)
TestTThRectangle = class(TBaseTestUnit)
private
FTestClick: Boolean;
procedure _Test(Sender: TObject);
Expand All @@ -42,12 +42,10 @@ TestTThShape = class(TBaseTestUnit)
procedure TestRectangleMouseOverHighlight;

// #37 끝점이 시작점 앞에 있어도 그려져야 한다.
procedure TestDrawRectangleBRToTL; // BottomRight > TopLeft
procedure TestDrawRectangleTRToBL; // TopRight > BottomLeft
procedure TestDrawRectangleBLToTR; // BottomLeft > TopRight
procedure TestDrawRectangleEx;

// #42 최소 크기를 갖으며 그리거나 크기 조정시 반영된다.
procedure TestRectangleMinSize;
procedure TestDrawRectangleMinSize;
end;

implementation
Expand All @@ -57,7 +55,7 @@ implementation

{ TestTThShape }

procedure TestTThShape.TestItemFactory;
procedure TestTThRectangle.TestItemFactory;
var
Item: TThItem;
begin
Expand All @@ -80,7 +78,7 @@ procedure TestTThShape.TestItemFactory;
end;
end;

procedure TestTThShape.TestDrawRectangle;
procedure TestTThRectangle.TestDrawRectangle;
var
Item: TThItem;
begin
Expand All @@ -106,7 +104,7 @@ procedure TestTThShape.TestDrawRectangle;

// S1.100,50 으로 Canvas 이동 후 0,0 > 100, 100 Rectangle 그리면
// Rectangle의 좌표는 -100, -50 이어야 한다.
procedure TestTThShape.TestCanvasTrackingAndDrawRectangle;
procedure TestTThRectangle.TestCanvasTrackingAndDrawRectangle;
var
Item: TThItem;
begin
Expand Down Expand Up @@ -139,7 +137,7 @@ procedure TestTThShape.TestCanvasTrackingAndDrawRectangle;
Check(Item.Position.Y = -40, Format('Postion.Y : %f', [Item.Position.Y]));
end;

procedure TestTThShape.TestRectangleSelect;
procedure TestTThRectangle.TestRectangleSelect;
begin
// Draw Rectangle
FCanvas.DrawItemID := 1100;
Expand All @@ -156,7 +154,7 @@ procedure TestTThShape.TestRectangleSelect;

// S1.0,0에 Rectangle을 그리고 -100, -100 이동한 후
// -30, -30을 클릭하면 그영역에 있는 버튼이 클릭되야 한다.
procedure TestTThShape.TestRectangleOutOfCanvas;
procedure TestTThRectangle.TestRectangleOutOfCanvas;
var
Button: TButton;
begin
Expand Down Expand Up @@ -190,20 +188,20 @@ procedure TestTThShape.TestRectangleOutOfCanvas;
Check(FTestClick, '버튼이 클릭되지 않음');
end;

procedure TestTThShape.TestRectangleSelectionHighlight;
procedure TestTThRectangle.TestRectangleSelectionHighlight;
var
R: TThRectangle;
AC: TAlphaColor;
begin
// 10,10,100,100 그리기
// 그리기
FCanvas.DrawItemID := 1100;
MousePath.New
.Add(10, 10)
.Add(50, 50)
.Add(100, 100);
TestLib.RunMousePath(MousePath.Path);

// 50,50 클릭 선택
// 클릭 선택
TestLib.RunMouseClick(50, 50);

R := TThRectangle(FCanvas.SelectedItem);
Expand All @@ -220,16 +218,7 @@ procedure TestTThShape.TestRectangleSelectionHighlight;
// Check(TestLib.GetControlPixelColor(FCanvas, 105, 105) = claGray);
end;

procedure TestTThShape.TestRectangleMinSize;
begin
// Minsize 설정

// Minsize 미만으로 그리기

// MinSize로 그려진것 확인
end;

procedure TestTThShape.TestRectangleMouseOverHighlight;
procedure TestTThRectangle.TestRectangleMouseOverHighlight;
var
R: TThRectangle;
AC: TAlphaColor;
Expand Down Expand Up @@ -268,61 +257,101 @@ procedure TestTThShape.TestRectangleMouseOverHighlight;
Check(AC = claGray, 'Not matching Color');
end;

// BottomRight > TopLeft
procedure TestTThShape.TestDrawRectangleBRToTL;
procedure TestTThRectangle.TestDrawRectangleEx;
begin
// BRToTL
FCanvas.DrawItemID := 1100;
MousePath.New
.Add(100, 100)
.Add(50, 50)
.Add(10, 10);
.Add(200, 100)
.Add(150, 50)
.Add(110, 10);
TestLib.RunMousePath(MousePath.Path);

TestLib.RunMouseClick(50, 50);
TestLib.RunMouseClick(150, 50);

Check(Assigned(FCanvas.SelectedItem));
Check(FCanvas.SelectedItem.Position.X = 10, Format('X : %f', [FCanvas.SelectedItem.Position.X]));
end;
Check(FCanvas.SelectedItem.Position.X = 110, Format('BottomRight > TopLeft - X : %f', [FCanvas.SelectedItem.Position.X]));

// TopRight > BottomLeft
procedure TestTThShape.TestDrawRectangleTRToBL;
begin
// TRToBL
FCanvas.DrawItemID := 1100;
MousePath.New
.Add(100, 10)
.Add(50, 50)
.Add(10, 100);
.Add(100, 110)
.Add(50, 150)
.Add(10, 200);
TestLib.RunMousePath(MousePath.Path);

TestLib.RunMouseClick(50, 50);
TestLib.RunMouseClick(50, 150);

Check(Assigned(FCanvas.SelectedItem));
Check(FCanvas.SelectedItem.Position.X = 10, Format('X : %f', [FCanvas.SelectedItem.Position.X]));
Check(FCanvas.SelectedItem.Position.X = 10, Format('TopRight > BottomLeft - X : %f', [FCanvas.SelectedItem.Position.X]));

// BLToTR
FCanvas.DrawItemID := 1100;
MousePath.New
.Add(110, 200)
.Add(150, 150)
.Add(200, 110);
TestLib.RunMousePath(MousePath.Path);

TestLib.RunMouseClick(150, 150);

Check(Assigned(FCanvas.SelectedItem));
Check(FCanvas.SelectedItem.Position.X = 110, Format('BottomLeft > TopRight - X : %f', [FCanvas.SelectedItem.Position.X]));
end;

// BottomLeft > TopRight
procedure TestTThShape.TestDrawRectangleBLToTR;
procedure TestTThRectangle.TestDrawRectangleMinSize;
begin
// TLToBR
FCanvas.DrawItemID := 1100;
MousePath.New.Add(10, 10)
.Add(20, 20)
.Add(30, 30);
TestLib.RunMousePath(MousePath.Path);

TestLib.RunMouseClick(35, 35); // MinSize 30, 30 : 10,10 > 40, 40
Check(Assigned(FCanvas.SelectedItem), 'TLToBR');

// TRToBL
FCanvas.DrawItemID := 1100;
MousePath.New
.Add(10, 100)
.Add(50, 50)
.Add(100, 10);
.Add(60, 30)
.Add(70, 20)
.Add(80, 10);
TestLib.RunMousePath(MousePath.Path);

TestLib.RunMouseClick(50, 50);
TestLib.RunMouseClick(85, 5); // MinSize 30, 30 : 10,0 > 40, 30
Check(Assigned(FCanvas.SelectedItem), 'TRToBL');

Check(Assigned(FCanvas.SelectedItem));
Check(FCanvas.SelectedItem.Position.X = 10, Format('X : %f', [FCanvas.SelectedItem.Position.X]));
// BLToTR
FCanvas.DrawItemID := 1100;
MousePath.New
.Add(30, 60)
.Add(20, 70)
.Add(10, 80);
TestLib.RunMousePath(MousePath.Path);

TestLib.RunMouseClick(5, 85); // MinSize 30, 30 : 0,10 > 30, 40
Check(Assigned(FCanvas.SelectedItem), 'BLToTR');

// BRToTL
FCanvas.DrawItemID := 1100;
MousePath.New
.Add(80, 80)
.Add(70, 70)
.Add(60, 60);
TestLib.RunMousePath(MousePath.Path);

TestLib.RunMouseClick(55, 55); // MinSize 30, 30 : 0,0 > 30, 30
Check(Assigned(FCanvas.SelectedItem), 'BRToTL');
end;

procedure TestTThShape._Test(Sender: TObject);
procedure TestTThRectangle._Test(Sender: TObject);
begin
FTestClick := True;
end;

initialization
RegisterTest(TestTThShape.Suite);
RegisterTest(TestTThRectangle.Suite);

end.

2 changes: 1 addition & 1 deletion Source/Unittest/ThothCanvasTests.dpr
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ uses
ThItem in '..\src\Libraries\ThItem.pas',
ThShape in '..\src\Components\ThShape.pas',
ThItemFactory in '..\src\Components\ThItemFactory.pas',
TestThShape in 'TestThShape.pas',
TestThRectangle in 'TestThRectangle.pas',
BaseTestUnit in 'lib\BaseTestUnit.pas',
CommonUtils in '..\src\Utils\CommonUtils.pas',
ThItemHighlighterIF in '..\src\Interfaces\ThItemHighlighterIF.pas',
Expand Down
2 changes: 1 addition & 1 deletion Source/Unittest/ThothCanvasTests.dproj
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@
<DCCReference Include="..\src\Libraries\ThItem.pas"/>
<DCCReference Include="..\src\Components\ThShape.pas"/>
<DCCReference Include="..\src\Components\ThItemFactory.pas"/>
<DCCReference Include="TestThShape.pas"/>
<DCCReference Include="TestThRectangle.pas"/>
<DCCReference Include="lib\BaseTestUnit.pas"/>
<DCCReference Include="..\src\Utils\CommonUtils.pas"/>
<DCCReference Include="..\src\Interfaces\ThItemHighlighterIF.pas"/>
Expand Down
8 changes: 7 additions & 1 deletion Source/src/Components/ThCanvasEditor.pas
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ TThCanvasEditor = class(TThContainer)
implementation

uses
CommonUtils;
Math, CommonUtils;

{ TThCanvasEditor }

Expand Down Expand Up @@ -66,6 +66,12 @@ procedure TThCanvasEditor.MouseMove(Shift: TShiftState; X, Y: Single);
begin
if FIsDrawingItem and Assigned(FDrawItem) then
begin
// Minimum size
if Abs(FMouseDownPos.X - X) < FDrawItem.MinimumSize.X then
X := FMouseDownPos.X + IfThen(FMouseDownPos.X < X, 1, -1) * FDrawItem.MinimumSize.X;
if Abs(FMouseDownPos.Y - Y) < FDrawItem.MinimumSize.Y then
Y := FMouseDownPos.Y + IfThen(FMouseDownPos.Y < Y, 1, -1) * FDrawItem.MinimumSize.Y;

R := RectF(FMouseDownPos.X, FMouseDownPos.Y, X, Y);
R.Offset(-FContents.Position.X, -FContents.Position.Y);
R.NormalizeRect;
Expand Down
4 changes: 2 additions & 2 deletions Source/src/Components/ThItemHighlighter.pas
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,12 @@ constructor TThItemShadowHighlighter.Create(AOwner: IItemHighlitObject);

FHighlight := False;
FHighlightColor := claGray;
FHighlightSize := 10;
FHighlightSize := 5;
end;

procedure TThItemShadowHighlighter.DrawHighlight;
begin
FParent.DrawHighlight;
FParent.DrawItem(GetHighlightRect, FHighlightColor);
end;

function TThItemShadowHighlighter.GetHighlightRect: TRectF;
Expand Down
Loading

0 comments on commit 1e9643e

Please sign in to comment.