1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-06-25 16:48:44 +02:00

Merge branch 'master' into temp

* master:
  Enh1444 and Bug1435 fixed by CHANGED MAC BUILD PROCEURE...
  Restore correct resizing of the time ruler for the scrub bar button
  Bug1443 again: Mac label shift-click should differ, per David Bailes
  More access key fixes. Better Pinned tooltip.
  Bug1443: Various odd behavior of label text editor, fixed...
  Further fix for Windows build
  fix Windows build
  Correctly load parameters for Change Pitch effect
This commit is contained in:
Paul Licameli 2016-07-12 22:15:55 -04:00
commit 9aff1ff6c6
10 changed files with 409 additions and 123 deletions

View File

@ -37,6 +37,8 @@ http://forum.audacityteam.org/viewtopic.php?p=303835#p303835 .
cd wxWidgets-3.0.2
patch -p0 -i <path to Audacity source>/mac/wxMac_additions/wxMac-3.0.2-fixes.patch .
patch -p0 -i <path to Audacity source>/mac/wxMac_additions/eventloops.patch .
patch -p0 -i <path to Audacity source>/mac/wxMac_additions/pinch-spread.patch .
patch -p0 -i <path to Audacity source>/mac/wxMac_additions/focusrings.patch .
10) And finally build/install wxWidgets:

View File

@ -0,0 +1,123 @@
From 148b0ed936b023b9b87d7703ecb86c4279f1182a Mon Sep 17 00:00:00 2001
From: Paul Licameli <paul.licameli@audacityteam.org>
Date: Wed, 6 Jul 2016 14:18:17 -0400
Subject: [PATCH 2/2] Focus rings are back for buttons, choice, listbox,
dateTimePicker controls
---
include/wx/button.h | 2 ++
include/wx/choice.h | 2 ++
include/wx/datetimectrl.h | 2 ++
include/wx/listbox.h | 2 ++
include/wx/window.h | 2 ++
src/osx/cocoa/window.mm | 22 +++++++++++++++++++++-
6 files changed, 31 insertions(+), 1 deletion(-)
diff --git a/include/wx/button.h b/include/wx/button.h
index 71dbee4..6aa75d3 100644
--- include/wx/button.h
+++ include/wx/button.h
@@ -42,6 +42,8 @@ public:
// returns the default button size for this platform
static wxSize GetDefaultSize();
+ virtual bool NeedsFocusRing() const { return true; }
+
protected:
wxDECLARE_NO_COPY_CLASS(wxButtonBase);
};
diff --git a/include/wx/choice.h b/include/wx/choice.h
index 3a848f9..421a9a7 100644
--- include/wx/choice.h
+++ include/wx/choice.h
@@ -57,6 +57,8 @@ public:
// override wxItemContainer::IsSorted
virtual bool IsSorted() const { return HasFlag(wxCB_SORT); }
+ virtual bool NeedsFocusRing() const { return true; }
+
protected:
// The generic implementation doesn't determine the height correctly and
// doesn't account for the width of the arrow but does take into account
diff --git a/include/wx/datetimectrl.h b/include/wx/datetimectrl.h
index 30f23df..d51c6c1 100644
--- include/wx/datetimectrl.h
+++ include/wx/datetimectrl.h
@@ -32,6 +32,8 @@ public:
// Set/get the date or time (in the latter case, time part is ignored).
virtual void SetValue(const wxDateTime& dt) = 0;
virtual wxDateTime GetValue() const = 0;
+
+ virtual bool NeedsFocusRing() const { return true; }
};
#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
diff --git a/include/wx/listbox.h b/include/wx/listbox.h
index afb0220..b9d47f0 100644
--- include/wx/listbox.h
+++ include/wx/listbox.h
@@ -94,6 +94,8 @@ public:
int HitTest(const wxPoint& point) const { return DoListHitTest(point); }
int HitTest(int x, int y) const { return DoListHitTest(wxPoint(x, y)); }
+ virtual bool NeedsFocusRing() const { return true; }
+
protected:
virtual void DoSetFirstItem(int n) = 0;
diff --git a/include/wx/window.h b/include/wx/window.h
index 7dffad4..bbe727d 100644
--- include/wx/window.h
+++ include/wx/window.h
@@ -260,6 +260,8 @@ public:
// moving/resizing
// ---------------
+ virtual bool NeedsFocusRing() const { return false; }
+
// set the window size and/or position
void SetSize( int x, int y, int width, int height,
int sizeFlags = wxSIZE_AUTO )
diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm
index d9fa4ae..881d0e9 100644
--- src/osx/cocoa/window.mm
+++ src/osx/cocoa/window.mm
@@ -17,6 +17,7 @@
#include "wx/textctrl.h"
#include "wx/combobox.h"
#include "wx/radiobut.h"
+ #include "wx/button.h"
#endif
#ifdef __WXMAC__
@@ -1660,7 +1661,26 @@ void wxWidgetCocoaImpl::drawRect(void* rect, WXWidget slf, void *WXUNUSED(_cmd))
// call super
SEL _cmd = @selector(drawRect:);
wxOSX_DrawRectHandlerPtr superimpl = (wxOSX_DrawRectHandlerPtr) [[slf superclass] instanceMethodForSelector:_cmd];
- superimpl(slf, _cmd, *(NSRect*)rect);
+
+ wxWindow *peer = GetWXPeer();
+ bool hasFocus = peer->HasFocus();
+ if (hasFocus &&
+ peer->NeedsFocusRing()) {
+ superimpl(slf, _cmd, *(NSRect*)rect);
+
+ // Paint it again, without text, causing focus halo to be
+ // superimposed about all else
+ HIThemeBeginFocus( context, kHIThemeFocusRingOnly, NULL );
+ CGContextSetTextDrawingMode( context, kCGTextInvisible );
+ superimpl(slf, _cmd, *(NSRect*)rect);
+ HIThemeEndFocus( context );
+
+ CGContextRestoreGState( context );
+ CGContextSaveGState( context );
+ }
+ else
+ superimpl(slf, _cmd, *(NSRect*)rect);
+
CGContextRestoreGState( context );
CGContextSaveGState( context );
}
--
2.3.2 (Apple Git-55)

View File

@ -0,0 +1,206 @@
From 74a186065ad04a1ed3d43baeccec9083910ec623 Mon Sep 17 00:00:00 2001
From: Paul Licameli <paul.licameli@audacityteam.org>
Date: Sun, 3 Jul 2016 10:16:12 -0400
Subject: [PATCH 1/2] Add wxEVT_MAGNIFY mouse event.
Currently this is implemented for wxOSX only.
Closes #14322.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78274 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
---
docs/changes.txt | 1 +
include/wx/event.h | 9 ++++++++-
interface/wx/event.h | 29 +++++++++++++++++++++++++++++
src/common/event.cpp | 4 ++++
src/osx/cocoa/window.mm | 10 ++++++++++
5 files changed, 52 insertions(+), 1 deletion(-)
diff --git a/docs/changes.txt b/docs/changes.txt
index 72e7d42..6436bfb 100644
--- docs/changes.txt
+++ docs/changes.txt
@@ -585,6 +585,7 @@ All:
All (GUI):
+- Add wxEVT_MAGNIFY mouse event (Joost Nieuwenhuijse).
- Add wxGenericListCtrl::EndEditLabel() (Tim Kosse).
- Implement bounding box computation in wxGCDC (Toni Ruža).
- Fix saving GIF animations with 2.5s+ delays between frames (elvissteinjr).
diff --git a/include/wx/event.h b/include/wx/event.h
index 61ec19c..26af365 100644
--- include/wx/event.h
+++ include/wx/event.h
@@ -716,6 +716,7 @@ wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_AUX1_DCLICK, wxMouseEvent);
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_AUX2_DOWN, wxMouseEvent);
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_AUX2_UP, wxMouseEvent);
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_AUX2_DCLICK, wxMouseEvent);
+wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_MAGNIFY, wxMouseEvent);
// Character input event type
wxDECLARE_EXPORTED_EVENT(WXDLLIMPEXP_CORE, wxEVT_CHAR, wxKeyEvent);
@@ -1751,6 +1752,8 @@ public:
bool Aux1DClick() const { return (m_eventType == wxEVT_AUX1_DCLICK); }
bool Aux2DClick() const { return (m_eventType == wxEVT_AUX2_DCLICK); }
+ bool Magnify() const { return (m_eventType == wxEVT_MAGNIFY); }
+
// True if a button is down and the mouse is moving
bool Dragging() const
{
@@ -1805,6 +1808,7 @@ public:
// Is the system set to do page scrolling?
bool IsPageScroll() const { return ((unsigned int)m_linesPerAction == UINT_MAX); }
+ float GetMagnification() const { return m_magnification; }
virtual wxEvent *Clone() const { return new wxMouseEvent(*this); }
virtual wxEventCategory GetEventCategory() const { return wxEVT_CATEGORY_USER_INPUT; }
@@ -1823,6 +1827,7 @@ public:
int m_wheelDelta;
int m_linesPerAction;
int m_columnsPerAction;
+ float m_magnification;
protected:
void Assign(const wxMouseEvent& evt);
@@ -4218,6 +4223,7 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&
#define EVT_MOUSE_AUX2_DOWN(func) wx__DECLARE_EVT0(wxEVT_AUX2_DOWN, wxMouseEventHandler(func))
#define EVT_MOUSE_AUX2_UP(func) wx__DECLARE_EVT0(wxEVT_AUX2_UP, wxMouseEventHandler(func))
#define EVT_MOUSE_AUX2_DCLICK(func) wx__DECLARE_EVT0(wxEVT_AUX2_DCLICK, wxMouseEventHandler(func))
+#define EVT_MAGNIFY(func) wx__DECLARE_EVT0(wxEVT_MAGNIFY, wxMouseEventHandler(func))
// All mouse events
#define EVT_MOUSE_EVENTS(func) \
@@ -4239,7 +4245,8 @@ typedef void (wxEvtHandler::*wxClipboardTextEventFunction)(wxClipboardTextEvent&
EVT_MOTION(func) \
EVT_LEAVE_WINDOW(func) \
EVT_ENTER_WINDOW(func) \
- EVT_MOUSEWHEEL(func)
+ EVT_MOUSEWHEEL(func) \
+ EVT_MAGNIFY(func)
// Scrolling from wxWindow (sent to wxScrolledWindow)
#define EVT_SCROLLWIN_TOP(func) wx__DECLARE_EVT0(wxEVT_SCROLLWIN_TOP, wxScrollWinEventHandler(func))
diff --git a/interface/wx/event.h b/interface/wx/event.h
index 52bb609..7fe007a 100644
--- interface/wx/event.h
+++ interface/wx/event.h
@@ -2626,6 +2626,8 @@ enum wxMouseWheelAxis
Process a @c wxEVT_MOUSEWHEEL event.
@event{EVT_MOUSE_EVENTS(func)}
Process all mouse events.
+ @event{EVT_MAGNIFY(func)}
+ Process a @c wxEVT_MAGNIFY event (new since wxWidgets 3.1.0).
@endEventTable
@library{wxcore}
@@ -2659,6 +2661,7 @@ public:
@li @c wxEVT_AUX2_DCLICK
@li @c wxEVT_MOTION
@li @c wxEVT_MOUSEWHEEL
+ @li @c wxEVT_MAGNIFY
*/
wxMouseEvent(wxEventType mouseEventType = wxEVT_NULL);
@@ -2785,6 +2788,21 @@ public:
wxPoint GetLogicalPosition(const wxDC& dc) const;
/**
+ For magnify (pinch to zoom) events: returns the change in magnification.
+
+ A value of 0 means no change, a positive value means we should enlarge
+ (or zoom in), a negative value means we should shrink (or zoom out).
+
+ This method is only valid to call for @c wxEVT_MAGNIFY events which are
+ currently only generated under OS X.
+
+ @see Magnify()
+
+ @since 3.1.0
+ */
+ float GetMagnification() const;
+
+ /**
Get wheel delta, normally 120.
This is the threshold for action to be taken, and one such action
@@ -2851,6 +2869,17 @@ public:
bool LeftUp() const;
/**
+ Returns @true if the event is a magnify (i.e.\ pinch to zoom) event.
+
+ Such events are currently generated only under OS X.
+
+ @see GetMagnification()
+
+ @since 3.1.0
+ */
+ bool Magnify() const;
+
+ /**
Returns @true if the Meta key was down at the time of the event.
*/
bool MetaDown() const;
diff --git a/src/common/event.cpp b/src/common/event.cpp
index d92a4ac..1015c84 100644
--- src/common/event.cpp
+++ src/common/event.cpp
@@ -208,6 +208,7 @@ wxDEFINE_EVENT( wxEVT_AUX1_DCLICK, wxMouseEvent );
wxDEFINE_EVENT( wxEVT_AUX2_DOWN, wxMouseEvent );
wxDEFINE_EVENT( wxEVT_AUX2_UP, wxMouseEvent );
wxDEFINE_EVENT( wxEVT_AUX2_DCLICK, wxMouseEvent );
+wxDEFINE_EVENT( wxEVT_MAGNIFY, wxMouseEvent );
// Character input event type
wxDEFINE_EVENT( wxEVT_CHAR, wxKeyEvent );
@@ -576,6 +577,7 @@ wxMouseEvent::wxMouseEvent(wxEventType commandType)
m_wheelDelta = 0;
m_linesPerAction = 0;
m_columnsPerAction = 0;
+ m_magnification = 0.0f;
}
void wxMouseEvent::Assign(const wxMouseEvent& event)
@@ -600,6 +602,8 @@ void wxMouseEvent::Assign(const wxMouseEvent& event)
m_linesPerAction = event.m_linesPerAction;
m_columnsPerAction = event.m_columnsPerAction;
m_wheelAxis = event.m_wheelAxis;
+
+ m_magnification = event.m_magnification;
}
// return true if was a button dclick event
diff --git a/src/osx/cocoa/window.mm b/src/osx/cocoa/window.mm
index ede8ebf..d9fa4ae 100644
--- src/osx/cocoa/window.mm
+++ src/osx/cocoa/window.mm
@@ -741,6 +741,12 @@ void wxWidgetCocoaImpl::SetupMouseEvent( wxMouseEvent &wxevent , NSEvent * nsEve
case NSMouseMoved :
wxevent.SetEventType( wxEVT_MOTION ) ;
break;
+
+ case NSEventTypeMagnify:
+ wxevent.SetEventType( wxEVT_MAGNIFY );
+ wxevent.m_magnification = [nsEvent magnification];
+ break;
+
default :
break ;
}
@@ -1772,6 +1778,10 @@ void wxOSXCocoaClassAddWXMethods(Class c)
wxOSX_CLASS_ADD_METHOD(c, @selector(scrollWheel:), (IMP) wxOSX_mouseEvent, "v@:@" )
wxOSX_CLASS_ADD_METHOD(c, @selector(mouseEntered:), (IMP) wxOSX_mouseEvent, "v@:@" )
wxOSX_CLASS_ADD_METHOD(c, @selector(mouseExited:), (IMP) wxOSX_mouseEvent, "v@:@" )
+
+#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5
+ wxOSX_CLASS_ADD_METHOD(c, @selector(magnifyWithEvent:), (IMP)wxOSX_mouseEvent, "v@:@")
+#endif
wxOSX_CLASS_ADD_METHOD(c, @selector(cursorUpdate:), (IMP) wxOSX_cursorUpdate, "v@:@" )
--
2.3.2 (Apple Git-55)

View File

@ -269,7 +269,6 @@ void LabelTrack::WarpLabels(const TimeWarper &warper) {
void LabelTrack::ResetFlags()
{
mDragXPos = -1;
mInitialCursorPos = 1;
mCurrentCursorPos = 1;
mRightDragging = false;
@ -522,8 +521,6 @@ LabelStruct::LabelStruct(const SelectedRegion &region,
: selectedRegion(region)
, title(aTitle)
{
changeInitialMouseXPos = true;
highlighted = false;
updated = false;
width = 0;
x = 0;
@ -541,8 +538,6 @@ LabelStruct::LabelStruct(const SelectedRegion &region,
// Overwrite the times
selectedRegion.setTimes(t0, t1);
changeInitialMouseXPos = true;
highlighted = false;
updated = false;
width = 0;
x = 0;
@ -694,9 +689,6 @@ void LabelStruct::DrawTextBox(wxDC & dc, const wxRect & r) const
void LabelStruct::DrawHighlight
( wxDC & dc, int xPos1, int xPos2, int charHeight) const
{
highlighted = true;
changeInitialMouseXPos = false;
wxPen curPen = dc.GetPen();
curPen.SetColour(wxString(wxT("BLUE")));
wxBrush curBrush = dc.GetBrush();
@ -826,7 +818,7 @@ void LabelTrack::Draw(wxDC & dc, const wxRect & r,
}}
// Draw highlights
if ((mDragXPos != -1) && (mSelIndex >= 0 ))
if ((mInitialCursorPos != mCurrentCursorPos) && (mSelIndex >= 0 ))
{
int xpos1, xpos2;
CalcHighlightXs(&xpos1, &xpos2);
@ -866,11 +858,11 @@ void LabelTrack::Draw(wxDC & dc, const wxRect & r,
}
}
/// Set the cursor position according to x position of mouse
/// uses GetTextExtent to find the character position
/// corresponding to the x pixel position.
void LabelTrack::SetCurrentCursorPosition(int xPos)
int LabelTrack::FindCurrentCursorPosition(int xPos)
{
int result = -1;
wxMemoryDC dc;
if(msFont.Ok())
dc.SetFont(msFont);
@ -898,7 +890,7 @@ void LabelTrack::SetCurrentCursorPosition(int xPos)
if (xPos <= bound)
{
// Found
mCurrentCursorPos = charIndex - 1;
result = charIndex - 1;
finished = true;
}
else
@ -908,10 +900,16 @@ void LabelTrack::SetCurrentCursorPosition(int xPos)
}
}
if (!finished)
{
// Cursor should be in the last position
mCurrentCursorPos = length;
result = length;
return result;
}
/// Set the cursor position according to x position of mouse
void LabelTrack::SetCurrentCursorPosition(int xPos)
{
mCurrentCursorPos = FindCurrentCursorPosition(xPos);
}
void LabelTrack::calculateFontHeight(wxDC & dc) const
@ -936,8 +934,6 @@ bool LabelTrack::IsTextSelected()
{
if (mSelIndex == -1)
return false;
if (!mLabels[mSelIndex].highlighted)
return false;
if (mCurrentCursorPos == mInitialCursorPos)
return false;
return true;
@ -993,14 +989,15 @@ bool LabelTrack::CopySelectedText()
return false;
const auto &labelStruct = mLabels[mSelIndex];
if (!labelStruct.highlighted)
return false;
int init = mInitialCursorPos;
int cur = mCurrentCursorPos;
if (init > cur)
std::swap(init, cur);
if (init == cur)
return false;
// data for copying
wxString data = labelStruct.title.Mid(init, cur-init);
@ -1043,12 +1040,9 @@ bool LabelTrack::PasteSelectedText(double sel0, double sel1)
auto &labelStruct = mLabels[mSelIndex];
auto &title = labelStruct.title;
int cur = mCurrentCursorPos, init = cur;
if (labelStruct.highlighted) {
init = mInitialCursorPos;
int cur = mCurrentCursorPos, init = mInitialCursorPos;
if (init > cur)
std::swap(init, cur);
}
left = title.Left(init);
if (cur < (int)title.Length())
right = title.Mid(cur);
@ -1493,20 +1487,9 @@ void LabelTrack::HandleTextDragRelease(const wxMouseEvent & evt)
if(evt.Dragging())
{
// if dragging happens in text box
// end dragging x position in pixels
// set flag to update current cursor position
mDragXPos = evt.m_x;
// for preventing dragging glygh from changing current cursor position
// set end dragging position to current cursor position
SetCurrentCursorPosition(mDragXPos);
// if it's an invalid dragging, disable displaying
if (mRightDragging) {
mDragXPos = -1;
mRightDragging = false;
}
if (!mRightDragging)
// Update drag end
SetCurrentCursorPosition(evt.m_x);
return;
}
@ -1573,20 +1556,41 @@ void LabelTrack::HandleClick(const wxMouseEvent & evt,
return;
}
// disable displaying if left button is down
if (evt.LeftDown())
mDragXPos = -1;
mSelIndex = OverATextBox(evt.m_x, evt.m_y);
if (mSelIndex != -1) {
auto &labelStruct = mLabels[mSelIndex];
*newSel = labelStruct.selectedRegion;
SetCurrentCursorPosition(evt.m_x);
// for preventing from resetting by shift+mouse left button
if (labelStruct.changeInitialMouseXPos)
if (evt.LeftDown()) {
// Find the NEW drag end
auto position = FindCurrentCursorPosition(evt.m_x);
// Anchor shift-drag at the farther end of the previous highlight
// that is farther from the click, on Mac, for consistency with
// its text editors, but on the others, re-use the previous
// anchor.
if (evt.ShiftDown()) {
#ifdef __WXMAC__
// Set the drag anchor at the end of the previous selection
// that is farther from the NEW drag end
if (abs(position - mCurrentCursorPos) >
abs(position - mInitialCursorPos))
mInitialCursorPos = mCurrentCursorPos;
#else
// mInitialCursorPos remains as before
#endif
}
else
mInitialCursorPos = position;
mCurrentCursorPos = position;
mDrawCursor = true;
mRightDragging = false;
}
else
// Actually this might be right or middle down
mRightDragging = true;
// reset the highlight indicator
wxRect highlightedRect;
@ -1600,27 +1604,7 @@ void LabelTrack::HandleClick(const wxMouseEvent & evt,
xpos1, labelStruct.y - mFontHeight / 2,
(int)(xpos2 - xpos1 + 0.5), mFontHeight
};
// reset when left button is down
if (evt.LeftDown())
labelStruct.highlighted = false;
// reset when right button is down outside text box
if (evt.RightDown())
{
if (!highlightedRect.Contains(evt.m_x, evt.m_y))
{
mCurrentCursorPos = mInitialCursorPos = 0;
labelStruct.highlighted = false;
}
}
// set changeInitialMouseXPos flag
labelStruct.changeInitialMouseXPos = true;
}
// disable displaying if right button is down outside text box
if (evt.RightDown()
&& !highlightedRect.Contains(evt.m_x, evt.m_y))
mDragXPos = -1;
// Middle click on GTK: paste from primary selection
#if defined(__WXGTK__) && (HAVE_GTK)
@ -1634,16 +1618,6 @@ void LabelTrack::HandleClick(const wxMouseEvent & evt,
*newSel = SelectedRegion(t, t);
}
#endif
// handle shift+mouse left button
if (evt.ShiftDown()) {
// if the mouse is clicked in text box, set flags
mDragXPos = evt.m_x;
// for preventing dragging glygh from changing current cursor position
// set end dragging position to current cursor position
SetCurrentCursorPosition(evt.m_x);
}
}
#if defined(__WXGTK__) && (HAVE_GTK)
@ -1732,9 +1706,8 @@ bool LabelTrack::OnKeyDown(SelectedRegion &newSel, wxKeyEvent & event)
if (len > 0)
{
// IF there are some highlighted letters, THEN DELETE them
if (labelStruct.highlighted) {
if (mInitialCursorPos != mCurrentCursorPos)
RemoveSelectedText();
}
else
{
// DELETE one letter
@ -1763,9 +1736,8 @@ bool LabelTrack::OnKeyDown(SelectedRegion &newSel, wxKeyEvent & event)
if (len > 0)
{
// if there are some highlighted letters, DELETE them
if (labelStruct.highlighted) {
if (mInitialCursorPos != mCurrentCursorPos)
RemoveSelectedText();
}
else
{
// DELETE one letter
@ -1789,11 +1761,9 @@ bool LabelTrack::OnKeyDown(SelectedRegion &newSel, wxKeyEvent & event)
// Move cursor to beginning of label
mCurrentCursorPos = 0;
if (mods == wxMOD_SHIFT)
mDragXPos = 0;
else {
mDragXPos = -1;
;
else
mInitialCursorPos = mCurrentCursorPos;
}
break;
case WXK_END:
@ -1801,11 +1771,9 @@ bool LabelTrack::OnKeyDown(SelectedRegion &newSel, wxKeyEvent & event)
// Move cursor to end of label
mCurrentCursorPos = (int)title.length();
if (mods == wxMOD_SHIFT)
mDragXPos = 0;
else {
mDragXPos = -1;
;
else
mInitialCursorPos = mCurrentCursorPos;
}
break;
case WXK_LEFT:
@ -1814,11 +1782,10 @@ bool LabelTrack::OnKeyDown(SelectedRegion &newSel, wxKeyEvent & event)
if (mCurrentCursorPos > 0) {
mCurrentCursorPos--;
if (mods == wxMOD_SHIFT)
mDragXPos = 0;
else {
mDragXPos = -1;
mInitialCursorPos = mCurrentCursorPos;
}
;
else
mInitialCursorPos = mCurrentCursorPos =
std::min(mInitialCursorPos, mCurrentCursorPos);
}
break;
@ -1828,11 +1795,10 @@ bool LabelTrack::OnKeyDown(SelectedRegion &newSel, wxKeyEvent & event)
if (mCurrentCursorPos < (int)title.length()) {
mCurrentCursorPos++;
if (mods == wxMOD_SHIFT)
mDragXPos = 0;
else {
mDragXPos = -1;
mInitialCursorPos = mCurrentCursorPos;
}
;
else
mInitialCursorPos = mCurrentCursorPos =
std::max(mInitialCursorPos, mCurrentCursorPos);
}
break;
@ -1984,9 +1950,8 @@ bool LabelTrack::OnChar(SelectedRegion &WXUNUSED(newSel), wxKeyEvent & event)
auto &title = labelStruct.title;
// Test if cursor is in the end of string or not
if (labelStruct.highlighted) {
if (mInitialCursorPos != mCurrentCursorPos)
RemoveSelectedText();
}
if (mCurrentCursorPos < (int)title.length()) {
// Get substring on the righthand side of cursor
@ -2048,9 +2013,6 @@ void LabelTrack::ShowContextMenu()
parent->PopupMenu(&menu, x, ls->y + (mIconHeight / 2) - 1);
}
// it's an invalid dragging event
SetWrongDragging(true);
}
void LabelTrack::OnContextMenu(wxCommandEvent & evt)
@ -2126,8 +2088,6 @@ void LabelTrack::RemoveSelectedText()
title = left + right;
mInitialCursorPos = mCurrentCursorPos = left.Length();
labelStruct.highlighted = false;
mDragXPos = -1;
}
void LabelTrack::Unselect()

View File

@ -96,8 +96,6 @@ public:
mutable int xText; /// Pixel position of left hand side of text box
mutable int y; /// Pixel position of label.
mutable bool highlighted; /// if the text is highlighted
mutable bool changeInitialMouseXPos; /// flag to change initial mouse X pos
bool updated; /// flag to tell if the label times were updated
};
@ -180,9 +178,6 @@ class AUDACITY_DLL_API LabelTrack final : public Track
bool PasteSelectedText(double sel0, double sel1);
static bool IsTextClipSupported();
// methods to set flags
void SetWrongDragging(bool rightFlag) { mRightDragging = rightFlag; }
void HandleClick(const wxMouseEvent & evt, const wxRect & r, const ZoomInfo &zoomInfo,
SelectedRegion *newSel);
bool HandleGlyphDragRelease(const wxMouseEvent & evt, wxRect & r, const ZoomInfo &zoomInfo,
@ -263,8 +258,6 @@ class AUDACITY_DLL_API LabelTrack final : public Track
static int mFontHeight;
int mCurrentCursorPos; /// current cursor position
int mInitialCursorPos; /// initial cursor position
int mDragXPos; /// end X pos of dragging
/// in text box
bool mRightDragging; /// flag to tell if it's a valid dragging
bool mDrawCursor; /// flag to tell if drawing the
@ -279,6 +272,7 @@ class AUDACITY_DLL_API LabelTrack final : public Track
void ComputeTextPosition(const wxRect & r, int index) const;
public:
int FindCurrentCursorPosition(int xPos);
void SetCurrentCursorPosition(int xPos);
private:

View File

@ -325,7 +325,7 @@ void AudacityProject::CreateMenusAndCommands()
AudioIONotBusyFlag | UnsavedChangesFlag);
c->AddItem(wxT("SaveAs"), _("Save Project &As..."), FN(OnSaveAs));
#ifdef USE_LIBVORBIS
c->AddItem(wxT("SaveCompressed"), _("Save Compressed Copy of Project..."), FN(OnSaveCompressed));
c->AddItem(wxT("SaveCompressed"), _("Sa&ve Compressed Copy of Project..."), FN(OnSaveCompressed));
#endif
c->AddItem(wxT("CheckDeps"), _("Chec&k Dependencies..."), FN(OnCheckDependencies));
@ -371,7 +371,7 @@ void AudacityProject::CreateMenusAndCommands()
AudioIONotBusyFlag | WaveTracksExistFlag,
AudioIONotBusyFlag | WaveTracksExistFlag);
#if defined(USE_MIDI)
c->AddItem(wxT("ExportMIDI"), _("Export MIDI..."), FN(OnExportMIDI),
c->AddItem(wxT("ExportMIDI"), _("Export MI&DI..."), FN(OnExportMIDI),
AudioIONotBusyFlag | NoteTracksSelectedFlag,
AudioIONotBusyFlag | NoteTracksSelectedFlag);
#endif
@ -733,7 +733,7 @@ void AudacityProject::CreateMenusAndCommands()
c->AddSeparator();
/* i18n-hint: (verb)*/
c->AddItem(wxT("ResetToolbars"), _("&Reset Toolbars"), FN(OnResetToolBars), 0, AlwaysEnabledFlag, AlwaysEnabledFlag);
c->AddItem(wxT("ResetToolbars"), _("Reset Toolb&ars"), FN(OnResetToolBars), 0, AlwaysEnabledFlag, AlwaysEnabledFlag);
c->EndSubMenu();
@ -776,7 +776,7 @@ void AudacityProject::CreateMenusAndCommands()
c->AddSeparator();
c->AddCheck(wxT("PinnedHead"), _("Pinned Recording/Playback Head"),
c->AddCheck(wxT("PinnedHead"), _("Pinned Recording/Playback &Head"),
FN(OnTogglePinnedHead), 0,
// Switching of scrolling on and off is permitted even during transport
AlwaysEnabledFlag, AlwaysEnabledFlag);

View File

@ -138,6 +138,7 @@ bool EffectChangePitch::SetAutomationParameters(EffectAutomationParameters & par
ReadAndVerifyDouble(Percentage);
m_dPercentChange = Percentage;
Calc_SemitonesChange_fromPercentChange();
return true;
}

View File

@ -9,7 +9,7 @@
#ifndef __AUDACITY_CONTRAST_DIALOG__
#define __AUDACITY_CONTRAST_DIALOG__
#include "widgets/wxPanelWrapper.h"
#include "../widgets/wxPanelWrapper.h"
class wxButton;
class wxSizer;

View File

@ -2782,7 +2782,7 @@ void AdornedRulerPanel::OnToggleScrubBar(/*wxCommandEvent&*/)
wxSize size { GetSize().GetWidth(), GetRulerHeight(mShowScrubbing) };
SetSize(size);
SetMinSize(size);
PostSizeEventToParent();
GetParent()->PostSizeEventToParent();
}
void AdornedRulerPanel::OnContextMenu(wxContextMenuEvent & WXUNUSED(event))
@ -2811,8 +2811,8 @@ void AdornedRulerPanel::UpdateButtonStates()
const auto label = state
// Label descibes the present state, not what the click does
// (which is, to toggle the state)
? _("Pinned play/record Head")
: _("Unpinned play/record Head");
? _("Pinned Record/Play head")
: _("Unpinned Record/Play head");
common(*pinButton, wxT("PinnedHead"), label);
}
}

View File

@ -9,7 +9,7 @@
#ifndef __AUDACITY_WXPANEL_WRAPPER__
#define __AUDACITY_WXPANEL_WRAPPER__
#include <MemoryX.h>
#include "../MemoryX.h"
#include <wx/panel.h>
#include <wx/dialog.h>