Audacity 3.2.0
Public Member Functions | Public Attributes | List of all members
anonymous_namespace{TrackPanel.cpp}::LabeledChannelGroup Struct Referencefinal
Inheritance diagram for anonymous_namespace{TrackPanel.cpp}::LabeledChannelGroup:
[legend]
Collaboration diagram for anonymous_namespace{TrackPanel.cpp}::LabeledChannelGroup:
[legend]

Public Member Functions

 LabeledChannelGroup (const std::shared_ptr< Track > &pTrack, wxCoord leftOffset)
 
Subdivision Children (const wxRect &rect) override
 
void Draw (TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass) override
 
wxRect DrawingArea (TrackPanelDrawingContext &, const wxRect &rect, const wxRect &, unsigned iPass) override
 
- Public Member Functions inherited from TrackPanelGroup
 TrackPanelGroup ()
 
virtual ~TrackPanelGroup ()
 
virtual Subdivision Children (const wxRect &rect)=0
 
- Public Member Functions inherited from TrackPanelNode
 TrackPanelNode ()
 
virtual ~TrackPanelNode ()=0
 
- Public Member Functions inherited from TrackPanelDrawable
virtual ~TrackPanelDrawable ()=0
 
virtual void Draw (TrackPanelDrawingContext &context, const wxRect &rect, unsigned iPass)
 
virtual wxRect DrawingArea (TrackPanelDrawingContext &context, const wxRect &rect, const wxRect &panelRect, unsigned iPass)
 

Public Attributes

const std::shared_ptr< TrackmpTrack
 
wxCoord mLeftOffset
 

Additional Inherited Members

- Public Types inherited from TrackPanelGroup
enum class  Axis { X , Y }
 
using Child = std::pair< wxCoord, std::shared_ptr< TrackPanelNode > >
 
using Refinement = std::vector< Child >
 
using Subdivision = std::pair< Axis, Refinement >
 
- Static Public Member Functions inherited from TrackPanelDrawable
static wxRect MaximizeWidth (const wxRect &rect, const wxRect &panelRect)
 
static wxRect MaximizeHeight (const wxRect &rect, const wxRect &panelRect)
 

Detailed Description

Definition at line 1321 of file TrackPanel.cpp.

Constructor & Destructor Documentation

◆ LabeledChannelGroup()

anonymous_namespace{TrackPanel.cpp}::LabeledChannelGroup::LabeledChannelGroup ( const std::shared_ptr< Track > &  pTrack,
wxCoord  leftOffset 
)
inline

Definition at line 1322 of file TrackPanel.cpp.

Member Function Documentation

◆ Children()

Subdivision anonymous_namespace{TrackPanel.cpp}::LabeledChannelGroup::Children ( const wxRect &  rect)
inlineoverridevirtual

Implements TrackPanelGroup.

Definition at line 1325 of file TrackPanel.cpp.

1326 { return { Axis::X, Refinement{
1327 { rect.GetLeft(),
1328 TrackControls::Get(*mpTrack).shared_from_this() },
1329 { rect.GetLeft() + kTrackInfoWidth,
1330 std::make_shared<ChannelStack>(mpTrack, mLeftOffset) }
1331 } }; }
@ kTrackInfoWidth
Definition: ZoomInfo.h:30
static TrackControls & Get(Track &track)
std::vector< Child > Refinement

References TrackControls::Get(), and kTrackInfoWidth.

Here is the call graph for this function:

◆ Draw()

void anonymous_namespace{TrackPanel.cpp}::LabeledChannelGroup::Draw ( TrackPanelDrawingContext context,
const wxRect &  rect,
unsigned  iPass 
)
inlineoverridevirtual

Draw a three-level highlight gradient around the focused track.

Reimplemented from TrackPanelDrawable.

Definition at line 1334 of file TrackPanel.cpp.

1336 {
1337 if (iPass == TrackArtist::PassBorders) {
1338 auto &dc = context.dc;
1339 dc.SetBrush(*wxTRANSPARENT_BRUSH);
1340 dc.SetPen(*wxBLACK_PEN);
1341
1342 // border
1343 dc.DrawRectangle(
1344 rect.x, rect.y,
1345 rect.width - kShadowThickness, rect.height - kShadowThickness
1346 );
1347
1348 // shadow
1349 if constexpr (kShadowThickness > 0)
1350 {
1351 // Stroke lines along bottom and right, which are slightly short at
1352 // bottom-left and top-right
1353 const auto right = rect.GetRight();
1354 const auto bottom = rect.GetBottom();
1355
1356 // bottom
1357 AColor::Line(dc, rect.x + 2, bottom, right, bottom);
1358 // right
1359 AColor::Line(dc, right, rect.y + 2, right, bottom);
1360 }
1361 }
1362 if (iPass == TrackArtist::PassFocus) {
1363 // Sometimes highlight is not drawn on backing bitmap. I thought
1364 // it was because FindFocus did not return the TrackPanel on Mac, but
1365 // when I removed that test, yielding this condition:
1366 // if (GetFocusedTrack() != NULL) {
1367 // the highlight was reportedly drawn even when something else
1368 // was the focus and no highlight should be drawn. -RBD
1369 const auto artist = TrackArtist::Get(context);
1370 auto &trackPanel = *artist->parent;
1371 auto &trackFocus = TrackFocus::Get( *trackPanel.GetProject() );
1372 if (trackFocus.Get() == mpTrack.get() &&
1373 wxWindow::FindFocus() == &trackPanel) {
1375 wxRect theRect = rect;
1376 auto &dc = context.dc;
1377 dc.SetBrush(*wxTRANSPARENT_BRUSH);
1378
1379 AColor::TrackFocusPen(&dc, 2);
1380 dc.DrawRectangle(theRect);
1381 theRect.Deflate(1);
1382
1383 AColor::TrackFocusPen(&dc, 1);
1384 dc.DrawRectangle(theRect);
1385 theRect.Deflate(1);
1386
1387 AColor::TrackFocusPen(&dc, 0);
1388 dc.DrawRectangle(theRect);
1389 }
1390 }
1391 }
@ kShadowThickness
Definition: ZoomInfo.h:23
static void Line(wxDC &dc, wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
Definition: AColor.cpp:194
static void TrackFocusPen(wxDC *dc, int level)
Definition: AColor.cpp:455
static TrackArtist * Get(TrackPanelDrawingContext &)
Definition: TrackArtist.cpp:81
Track * Get()
Definition: TrackFocus.cpp:156
std::unique_ptr< WindowPlacement > FindFocus()
Find the window that is accepting keyboard input, if any.
Definition: BasicUI.h:383

References TrackPanelDrawingContext::dc, BasicUI::FindFocus(), TrackFocus::Get(), TrackArtist::Get(), kShadowThickness, AColor::Line(), TrackArtist::PassBorders, TrackArtist::PassFocus, and AColor::TrackFocusPen().

Here is the call graph for this function:

◆ DrawingArea()

wxRect anonymous_namespace{TrackPanel.cpp}::LabeledChannelGroup::DrawingArea ( TrackPanelDrawingContext ,
const wxRect &  rect,
const wxRect &  ,
unsigned  iPass 
)
inlineoverridevirtual

Reimplemented from TrackPanelDrawable.

Definition at line 1393 of file TrackPanel.cpp.

1395 {
1396 if (iPass == TrackArtist::PassBorders)
1397 return {
1398 rect.x - kBorderThickness,
1399 rect.y - kBorderThickness,
1400 rect.width + 2 * kBorderThickness + kShadowThickness,
1401 rect.height + 2 * kBorderThickness + kShadowThickness
1402 };
1403 else if (iPass == TrackArtist::PassFocus) {
1404 constexpr auto extra = kBorderThickness + 3;
1405 return {
1406 rect.x - extra,
1407 rect.y - extra,
1408 rect.width + 2 * extra + kShadowThickness,
1409 rect.height + 2 * extra + kShadowThickness
1410 };
1411 }
1412 else
1413 return rect;
1414 }
@ kBorderThickness
Definition: ZoomInfo.h:22

References kBorderThickness, kShadowThickness, TrackArtist::PassBorders, and TrackArtist::PassFocus.

Member Data Documentation

◆ mLeftOffset

wxCoord anonymous_namespace{TrackPanel.cpp}::LabeledChannelGroup::mLeftOffset

Definition at line 1417 of file TrackPanel.cpp.

◆ mpTrack

const std::shared_ptr<Track> anonymous_namespace{TrackPanel.cpp}::LabeledChannelGroup::mpTrack

Definition at line 1416 of file TrackPanel.cpp.


The documentation for this struct was generated from the following file: