summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorleo2004-12-13 20:37:52 +0000
committerleo2004-12-13 20:37:52 +0000
commit4ea740dc8870e9bbeae8d76faf3f99d44da57e3a (patch)
tree3118ba03f51238bfaadfef6fad6f4de165d989b1
parent676fac29c21b9ad9a91e3b94a16dba2bac13a550 (diff)
Added keys for Angle Snap, and display it on the Status Bar.
git-svn-id: http://svn.leocad.org/trunk@366 c7d43263-9d01-0410-8a33-9dba5d9f93d6
-rw-r--r--common/project.cpp30
-rwxr-xr-xcommon/system.h2
-rw-r--r--linux/system.cpp2
-rw-r--r--win/System.cpp28
4 files changed, 49 insertions, 13 deletions
diff --git a/common/project.cpp b/common/project.cpp
index 7ace654..60f463c 100644
--- a/common/project.cpp
+++ b/common/project.cpp
@@ -550,7 +550,7 @@ void Project::LoadDefaults(bool cameras)
m_nSnap = Sys_ProfileLoadInt ("Default", "Snap", LC_DRAW_SNAP_A | LC_DRAW_SNAP_X | LC_DRAW_SNAP_Y | LC_DRAW_SNAP_Z | LC_DRAW_MOVE | LC_DRAW_PREVIEW);
SystemUpdateSnap(m_nSnap);
m_nMoveSnap = 0;
- SystemUpdateMoveSnap(m_nMoveSnap);
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
m_fLineWidth = (float)Sys_ProfileLoadInt ("Default", "Line", 100)/100;
m_fFogDensity = (float)Sys_ProfileLoadInt ("Default", "Density", 10)/100;
rgb = Sys_ProfileLoadInt ("Default", "Fog", 0xFFFFFF);
@@ -1069,7 +1069,7 @@ bool Project::FileLoad(File* file, bool bUndo, bool bMerge)
SystemUpdateAnimation(m_bAnimation, m_bAddKeys);
SystemUpdateRenderingMode((m_nDetail & LC_DET_BACKGROUND) != 0, (m_nDetail & LC_DET_FAST) != 0);
SystemUpdateSnap(m_nSnap);
- SystemUpdateMoveSnap(m_nMoveSnap);
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
SystemUpdateCameraMenu(m_pCameras);
SystemUpdateCurrentCamera(NULL, m_pViewCameras[m_nActiveViewport], m_pCameras);
UpdateSelection();
@@ -5780,7 +5780,7 @@ void Project::HandleCommand(LC_COMMANDS id, unsigned long nParam)
else
m_nMoveSnap = (unsigned short)(nParam - 10)*5 + 10;
}
- SystemUpdateMoveSnap(m_nMoveSnap);
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
} break;
case LC_TOOLBAR_BACKGROUND:
@@ -6459,6 +6459,7 @@ bool Project::OnKeyDown(char nKey, bool bControl, bool bShift)
if (IsDrawing())
return false;
+ // FIXME: Almost all of this should go through the keyboard shortcut system.
switch (nKey)
{
case KEY_ESCAPE:
@@ -6490,8 +6491,27 @@ bool Project::OnKeyDown(char nKey, bool bControl, bool bShift)
}
else
{
- m_nMoveSnap = nKey - 0x30;
- SystemUpdateMoveSnap(m_nMoveSnap);
+ if (bShift)
+ {
+ switch (nKey)
+ {
+ case '0': m_nAngleSnap = 1; break;
+ case '1': m_nAngleSnap = 5; break;
+ case '2': m_nAngleSnap = 10; break;
+ case '3': m_nAngleSnap = 15; break;
+ case '4': m_nAngleSnap = 30; break;
+ case '5': m_nAngleSnap = 45; break;
+ case '6': m_nAngleSnap = 60; break;
+ case '7': m_nAngleSnap = 90; break;
+ case '8': m_nAngleSnap = 180; break;
+ }
+ }
+ else
+ {
+ m_nMoveSnap = nKey - 0x30;
+ }
+
+ SystemUpdateSnap(m_nMoveSnap, m_nAngleSnap);
}
ret = true;
} break;
diff --git a/common/system.h b/common/system.h
index 540c1de..415b30a 100755
--- a/common/system.h
+++ b/common/system.h
@@ -71,7 +71,7 @@ void SystemUpdateCurrentCamera(Camera* pOld, Camera* pNew, Camera* pCamera);
void SystemUpdateCameraMenu(Camera* pCamera);
void SystemUpdateTime(bool bAnimation, int nTime, int nTotal);
void SystemUpdateAnimation(bool bAnimation, bool bAddKeys);
-void SystemUpdateMoveSnap(unsigned short nMoveSnap);
+void SystemUpdateSnap(unsigned short MoveSnap, unsigned short RotateSnap);
void SystemUpdateSelected(unsigned long flags);
void SystemUpdatePaste(bool enable);
void SystemUpdatePlay(bool play, bool stop);
diff --git a/linux/system.cpp b/linux/system.cpp
index 493204b..736bea7 100644
--- a/linux/system.cpp
+++ b/linux/system.cpp
@@ -475,7 +475,7 @@ void SystemUpdateAnimation(bool bAnimation, bool bAddKeys)
ignore_commands = false;
}
-void SystemUpdateMoveSnap(unsigned short move_snap)
+void SystemUpdateSnap(unsigned short move_snap, unsigned short RotateSnap)
{
char text[11];
if (move_snap)
diff --git a/win/System.cpp b/win/System.cpp
index c8a36ae..cf19926 100644
--- a/win/System.cpp
+++ b/win/System.cpp
@@ -665,19 +665,35 @@ void SystemUpdateTime(bool bAnimation, int nTime, int nTotal)
StepModeless->UpdateRange(nTime, nTotal);
}
-void SystemUpdateMoveSnap(unsigned short nMoveSnap)
+void SystemUpdateSnap(unsigned short MoveSnap, unsigned short RotateSnap)
{
// Status bar
- char snap[11];
+ char snap[256];
CFrameWnd* pFrame = (CFrameWnd*)AfxGetMainWnd();
CStatusBar* pStatusBar = (CStatusBar*)pFrame->GetControlBar(AFX_IDW_STATUS_BAR);
- if (nMoveSnap)
- wsprintf(snap, " Move x%i ", nMoveSnap);
+ if (MoveSnap)
+ wsprintf(snap, " M: %d R: %d ", MoveSnap, RotateSnap);
else
- strcpy (snap, " Move /2 ");
+ wsprintf(snap, " M: /2 R: %d ", RotateSnap);
- pStatusBar->SetPaneText(pStatusBar->CommandToIndex(ID_INDICATOR_SNAP), LPCSTR(snap));
+ int Index = pStatusBar->CommandToIndex(ID_INDICATOR_SNAP);
+ pStatusBar->SetPaneText(Index, LPCSTR(snap));
+
+ // Resize the pane to fit the text.
+ UINT nID, nStyle; int cxWidth;
+ HFONT hFont = (HFONT)pStatusBar->SendMessage(WM_GETFONT);
+ CClientDC dcScreen(NULL);
+ HGDIOBJ hOldFont = NULL;
+ if (hFont != NULL)
+ hOldFont = dcScreen.SelectObject(hFont);
+
+ pStatusBar->GetPaneInfo(Index, nID, nStyle, cxWidth);
+ cxWidth = dcScreen.GetTextExtent(snap).cx;
+ pStatusBar->SetPaneInfo(Index, nID, nStyle, cxWidth);
+
+ if (hOldFont != NULL)
+ dcScreen.SelectObject(hOldFont);
}
void SystemUpdatePaste(bool enable)