[dasher] Change box non-uniformity range from -400:400 to -80:80 - at least one
- From: Patrick Welche <pwelche src gnome org>
- To: svn-commits-list gnome org
- Subject: [dasher] Change box non-uniformity range from -400:400 to -80:80 - at least one
- Date: Thu, 7 May 2009 10:03:55 -0400 (EDT)
commit c53a6736ec593ca241e1b0899af9054bf5a552d4
Author: Patrick Welche <prlw1 cam ac uk>
Date: Thu May 7 11:35:17 2009 +0100
Change box non-uniformity range from -400:400 to -80:80 - at least one
can set the non-uniformity back to zero now with sensible increments.
Reported by David MacKay. (Also some whitespace changes)
---
ChangeLog | 5 +
Src/DasherCore/DasherButtons.cpp | 194 +++++++++++++++++++-------------------
2 files changed, 102 insertions(+), 97 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index edc7f5d..294071f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-06 Patrick Welche <prlw1 cam ac uk>
+
+ * DasherButtons.cpp: Change box non-uniformity range to something more
+ sensible. Reported by David MacKay. (Also some whitespace changes)
+
2009-05-05 Patrick Welche <prlw1 cam ac uk>
* dasher_main.cpp: Don't accept a uri from GtkFileChooser as
diff --git a/Src/DasherCore/DasherButtons.cpp b/Src/DasherCore/DasherButtons.cpp
index 0851f51..f55eafb 100644
--- a/Src/DasherCore/DasherButtons.cpp
+++ b/Src/DasherCore/DasherButtons.cpp
@@ -28,7 +28,7 @@ static SModuleSettings sSettings[] = {
{LP_B, T_LONG, 2, 10, 1, 1, _("Number of boxes")},
{LP_S, T_LONG, 0, 256, 1, 1, _("Safety margin")},
/* TRANSLATORS: The boxes (zoom targets) in button mode can either be the same size, or different sizes - this is the extent to which the sizes are allowed to differ from each other. */
- {LP_R, T_LONG, -400, 400, 1, 10, _("Box non-uniformity")},
+ {LP_R, T_LONG, -80, 80, 1, 10, _("Box non-uniformity")},
/* TRANSLATORS: Intercept keyboard events for 'special' keys even when the Dasher window doesn't have keyboard focus.*/
{BP_GLOBAL_KEYBOARD, T_BOOL, -1, -1, -1, -1, _("Global keyboard grab")}
};
@@ -159,93 +159,93 @@ void CDasherButtons::SetupBoxes()
double dMaxSize;
if(dRatio == 1.0)
- dMaxSize = iDasherY / static_cast<double>(iForwardBoxes);
+ dMaxSize = iDasherY / static_cast<double>(iForwardBoxes);
else
- dMaxSize = ((dRatio - 1)/(pow(dRatio, iForwardBoxes) - 1)) * iDasherY;
+ dMaxSize = ((dRatio - 1)/(pow(dRatio, iForwardBoxes) - 1)) * iDasherY;
double dMin(0.0);
double dMax;
for(int i(0); i < m_iNumBoxes - 1; ++i) { // One button reserved for backoff
- dMax = dMin + dMaxSize * pow(dRatio, i);
+ dMax = dMin + dMaxSize * pow(dRatio, i);
// m_pBoxes[i].iDisplayTop = (i * iDasherY) / (m_iNumBoxes - 1);
// m_pBoxes[i].iDisplayBottom = ((i+1) * iDasherY) / (m_iNumBoxes - 1);
-
- m_pBoxes[i].iDisplayTop = static_cast<int>(dMin);
- m_pBoxes[i].iDisplayBottom = static_cast<int>(dMax);
-
- m_pBoxes[i].iTop = m_pBoxes[i].iDisplayTop - GetLongParameter(LP_S);
- m_pBoxes[i].iBottom = m_pBoxes[i].iDisplayBottom + GetLongParameter(LP_S);
-
- dMin = dMax;
+
+ m_pBoxes[i].iDisplayTop = static_cast<int>(dMin);
+ m_pBoxes[i].iDisplayBottom = static_cast<int>(dMax);
+
+ m_pBoxes[i].iTop = m_pBoxes[i].iDisplayTop - GetLongParameter(LP_S);
+ m_pBoxes[i].iBottom = m_pBoxes[i].iDisplayBottom + GetLongParameter(LP_S);
+
+ dMin = dMax;
}
}
else {
if(m_iNumBoxes == 2+1) { // Special case for two forwards buttons
- dNorm = 1+dRatio;
+ dNorm = 1+dRatio;
- m_pBoxes[0].iDisplayTop = 0;
- m_pBoxes[0].iDisplayBottom = int( (1 / dNorm) * iDasherY );
-
- m_pBoxes[1].iDisplayTop = int( (1 / dNorm) * iDasherY );
- m_pBoxes[1].iDisplayBottom = iDasherY;
+ m_pBoxes[0].iDisplayTop = 0;
+ m_pBoxes[0].iDisplayBottom = int( (1 / dNorm) * iDasherY );
+
+ m_pBoxes[1].iDisplayTop = int( (1 / dNorm) * iDasherY );
+ m_pBoxes[1].iDisplayBottom = iDasherY;
}
else {
- int iForwardsButtons(m_iNumBoxes - 1);
- bool bEven(iForwardsButtons % 2 == 0);
-
- int iGeometricTerms;
-
- if(bEven)
- iGeometricTerms = iForwardsButtons / 2;
- else
- iGeometricTerms = (1+iForwardsButtons) / 2;
-
- double dMaxSize;
-
- if(dRatio == 1.0) {
- dMaxSize = iDasherY / iForwardsButtons;
- }
- else {
- if(bEven)
- dMaxSize = iDasherY * (dRatio - 1) / (2 * (pow(dRatio, iGeometricTerms) - 1));
- else
- dMaxSize = iDasherY * (dRatio - 1) / (2 * (pow(dRatio, iGeometricTerms) - 1) - (dRatio - 1));
- }
-
- double dMin;
- double dMax;
-
- if(bEven)
- dMin = iDasherY / 2;
- else
- dMin = (iDasherY - dMaxSize)/2;
-
- int iUpBase;
- int iDownBase;
-
- if(bEven) {
- iUpBase = iForwardsButtons / 2;
- iDownBase = iUpBase - 1;
- }
- else {
- iUpBase = (iForwardsButtons - 1)/ 2;
- iDownBase = iUpBase;
- }
-
- for(int i(0); i < iGeometricTerms; ++i) { // One button reserved for backoff
- dMax = dMin + dMaxSize * pow(dRatio, i);
-
- m_pBoxes[iUpBase + i].iDisplayTop = int(dMin);
- m_pBoxes[iUpBase + i].iDisplayBottom = int(dMax);
-
- m_pBoxes[iDownBase - i].iDisplayTop = int(iDasherY - dMax);
- m_pBoxes[iDownBase - i].iDisplayBottom = int(iDasherY - dMin);
-
- dMin = dMax;
- }
+ int iForwardsButtons(m_iNumBoxes - 1);
+ bool bEven(iForwardsButtons % 2 == 0);
+
+ int iGeometricTerms;
+
+ if(bEven)
+ iGeometricTerms = iForwardsButtons / 2;
+ else
+ iGeometricTerms = (1+iForwardsButtons) / 2;
+
+ double dMaxSize;
+
+ if(dRatio == 1.0) {
+ dMaxSize = iDasherY / iForwardsButtons;
+ }
+ else {
+ if(bEven)
+ dMaxSize = iDasherY * (dRatio - 1) / (2 * (pow(dRatio, iGeometricTerms) - 1));
+ else
+ dMaxSize = iDasherY * (dRatio - 1) / (2 * (pow(dRatio, iGeometricTerms) - 1) - (dRatio - 1));
+ }
+
+ double dMin;
+ double dMax;
+
+ if(bEven)
+ dMin = iDasherY / 2;
+ else
+ dMin = (iDasherY - dMaxSize)/2;
+
+ int iUpBase;
+ int iDownBase;
+
+ if(bEven) {
+ iUpBase = iForwardsButtons / 2;
+ iDownBase = iUpBase - 1;
+ }
+ else {
+ iUpBase = (iForwardsButtons - 1)/ 2;
+ iDownBase = iUpBase;
+ }
+
+ for(int i(0); i < iGeometricTerms; ++i) { // One button reserved for backoff
+ dMax = dMin + dMaxSize * pow(dRatio, i);
+
+ m_pBoxes[iUpBase + i].iDisplayTop = int(dMin);
+ m_pBoxes[iUpBase + i].iDisplayBottom = int(dMax);
+
+ m_pBoxes[iDownBase - i].iDisplayTop = int(iDasherY - dMax);
+ m_pBoxes[iDownBase - i].iDisplayBottom = int(iDasherY - dMin);
+
+ dMin = dMax;
+ }
}
}
@@ -290,9 +290,9 @@ bool CDasherButtons::DecorateView(CDasherView *pView) {
pView->Dasher2Screen(iDasherX, iDasherY, p[1].x, p[1].y);
if(bFirst)
- pScreen->Polyline(p, 2, 1, 1);
+ pScreen->Polyline(p, 2, 1, 1);
else
- pScreen->Polyline(p, 2, 1, 2);
+ pScreen->Polyline(p, 2, 1, 2);
iDasherX = -100;
iDasherY = 4096 - iPos;
@@ -305,9 +305,9 @@ bool CDasherButtons::DecorateView(CDasherView *pView) {
pView->Dasher2Screen(iDasherX, iDasherY, p[1].x, p[1].y);
if(bFirst)
- pScreen->Polyline(p, 2, 1, 1);
+ pScreen->Polyline(p, 2, 1, 1);
else
- pScreen->Polyline(p, 2, 1, 2);
+ pScreen->Polyline(p, 2, 1, 2);
iPos -= iTargetWidth;
bFirst = false;
@@ -328,7 +328,7 @@ bool CDasherButtons::DecorateView(CDasherView *pView) {
else {
for(int i(0); i < m_iNumBoxes; ++i) {
if(i != iActiveBox)
- NewDrawGoTo(pView, m_pBoxes[i].iDisplayTop, m_pBoxes[i].iDisplayBottom, false);
+ NewDrawGoTo(pView, m_pBoxes[i].iDisplayTop, m_pBoxes[i].iDisplayBottom, false);
}
NewDrawGoTo(pView, m_pBoxes[iActiveBox].iDisplayTop, m_pBoxes[iActiveBox].iDisplayBottom, m_bMenu || m_bHighlight);
}
@@ -348,14 +348,14 @@ void CDasherButtons::KeyDown(int iTime, int iId, CDasherView *pView, CDasherMode
m_bDecorationChanged = true;
++iActiveBox;
if(iActiveBox == m_iNumBoxes)
- iActiveBox = 0;
+ iActiveBox = 0;
break;
case 2:
case 3:
m_bDecorationChanged = true;
pModel->ScheduleZoom((m_pBoxes[iActiveBox].iBottom - m_pBoxes[iActiveBox].iTop)/2, (m_pBoxes[iActiveBox].iBottom + m_pBoxes[iActiveBox].iTop)/2);
if(iActiveBox != m_iNumBoxes-1)
- iActiveBox = 0;
+ iActiveBox = 0;
break;
}
}
@@ -363,37 +363,37 @@ void CDasherButtons::KeyDown(int iTime, int iId, CDasherView *pView, CDasherMode
if(m_iStyle == 3) {
switch(iId) {
case 2:
- if(m_iLastBox == 1)
- pModel->ScheduleZoom((m_pBoxes[2].iBottom - m_pBoxes[2].iTop)/2, (m_pBoxes[2].iBottom + m_pBoxes[2].iTop)/2);
- else
- pModel->ScheduleZoom((m_pBoxes[0].iBottom - m_pBoxes[0].iTop)/2, (m_pBoxes[0].iBottom + m_pBoxes[0].iTop)/2);
- m_iLastBox = 1;
- break;
+ if(m_iLastBox == 1)
+ pModel->ScheduleZoom((m_pBoxes[2].iBottom - m_pBoxes[2].iTop)/2, (m_pBoxes[2].iBottom + m_pBoxes[2].iTop)/2);
+ else
+ pModel->ScheduleZoom((m_pBoxes[0].iBottom - m_pBoxes[0].iTop)/2, (m_pBoxes[0].iBottom + m_pBoxes[0].iTop)/2);
+ m_iLastBox = 1;
+ break;
case 3:
case 4:
- if(m_iLastBox == 2)
- pModel->ScheduleZoom((m_pBoxes[3].iBottom - m_pBoxes[3].iTop)/2, (m_pBoxes[3].iBottom + m_pBoxes[3].iTop)/2);
- else
- pModel->ScheduleZoom((m_pBoxes[1].iBottom - m_pBoxes[1].iTop)/2, (m_pBoxes[1].iBottom + m_pBoxes[1].iTop)/2);
- m_iLastBox = 2;
- break;
+ if(m_iLastBox == 2)
+ pModel->ScheduleZoom((m_pBoxes[3].iBottom - m_pBoxes[3].iTop)/2, (m_pBoxes[3].iBottom + m_pBoxes[3].iTop)/2);
+ else
+ pModel->ScheduleZoom((m_pBoxes[1].iBottom - m_pBoxes[1].iTop)/2, (m_pBoxes[1].iBottom + m_pBoxes[1].iTop)/2);
+ m_iLastBox = 2;
+ break;
case 1:
- pModel->ScheduleZoom((m_pBoxes[4].iBottom - m_pBoxes[4].iTop)/2, (m_pBoxes[4].iBottom + m_pBoxes[4].iTop)/2);
- break;
+ pModel->ScheduleZoom((m_pBoxes[4].iBottom - m_pBoxes[4].iTop)/2, (m_pBoxes[4].iBottom + m_pBoxes[4].iTop)/2);
+ break;
}
}
else {
if(iId == 100) // Ignore mouse events
- return;
+ return;
if(iId == 1)
- iActiveBox = m_iNumBoxes - 1;
+ iActiveBox = m_iNumBoxes - 1;
else if(iId <= m_iNumBoxes)
- iActiveBox = iId-2;
+ iActiveBox = iId-2;
else
- iActiveBox = m_iNumBoxes-2;
+ iActiveBox = m_iNumBoxes-2;
m_iLastTime = iTime;
-
+
pModel->ScheduleZoom((m_pBoxes[iActiveBox].iBottom - m_pBoxes[iActiveBox].iTop)/2, (m_pBoxes[iActiveBox].iBottom + m_pBoxes[iActiveBox].iTop)/2);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]