Audacity  3.0.3
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 ()
 
- Public Member Functions inherited from TrackPanelNode
 TrackPanelNode ()
 
virtual ~TrackPanelNode ()=0
 
- Public Member Functions inherited from TrackPanelDrawable
virtual ~TrackPanelDrawable ()=0
 

Public Attributes

std::shared_ptr< TrackmpTrack
 
wxCoord mLeftOffset
 

Additional Inherited Members

- Public Types inherited from TrackPanelGroup
enum  Axis { Axis::X, Axis::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 1409 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 1410 of file TrackPanel.cpp.

1412  : mpTrack{ pTrack }, mLeftOffset{ leftOffset } {}

Member Function Documentation

◆ Children()

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

Implements TrackPanelGroup.

Definition at line 1413 of file TrackPanel.cpp.

1414  { return { Axis::X, Refinement{
1415  { rect.GetLeft(),
1416  TrackControls::Get( *mpTrack ).shared_from_this() },
1417  { rect.GetLeft() + kTrackInfoWidth,
1418  std::make_shared< ChannelGroup >( mpTrack, mLeftOffset ) }
1419  } }; }

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 1422 of file TrackPanel.cpp.

1424  {
1425  if ( iPass == TrackArtist::PassBorders ) {
1426  auto &dc = context.dc;
1427  dc.SetBrush(*wxTRANSPARENT_BRUSH);
1428  dc.SetPen(*wxBLACK_PEN);
1429 
1430  // border
1431  dc.DrawRectangle(
1432  rect.x, rect.y,
1433  rect.width - kShadowThickness, rect.height - kShadowThickness
1434  );
1435 
1436  // shadow
1437  // Stroke lines along bottom and right, which are slightly short at
1438  // bottom-left and top-right
1439  const auto right = rect.GetRight();
1440  const auto bottom = rect.GetBottom();
1441 
1442  // bottom
1443  AColor::Line(dc, rect.x + 2, bottom, right, bottom);
1444  // right
1445  AColor::Line(dc, right, rect.y + 2, right, bottom);
1446  }
1447  if ( iPass == TrackArtist::PassFocus ) {
1448  // Sometimes highlight is not drawn on backing bitmap. I thought
1449  // it was because FindFocus did not return the TrackPanel on Mac, but
1450  // when I removed that test, yielding this condition:
1451  // if (GetFocusedTrack() != NULL) {
1452  // the highlight was reportedly drawn even when something else
1453  // was the focus and no highlight should be drawn. -RBD
1454  const auto artist = TrackArtist::Get( context );
1455  auto &trackPanel = *artist->parent;
1456  auto &trackFocus = TrackFocus::Get( *trackPanel.GetProject() );
1457  if (trackFocus.Get() == mpTrack.get() &&
1458  wxWindow::FindFocus() == &trackPanel ) {
1460  wxRect theRect = rect;
1461  auto &dc = context.dc;
1462  dc.SetBrush(*wxTRANSPARENT_BRUSH);
1463 
1464  AColor::TrackFocusPen( &dc, 2 );
1465  dc.DrawRectangle(theRect);
1466  theRect.Deflate(1);
1467 
1468  AColor::TrackFocusPen( &dc, 1 );
1469  dc.DrawRectangle(theRect);
1470  theRect.Deflate(1);
1471 
1472  AColor::TrackFocusPen( &dc, 0 );
1473  dc.DrawRectangle(theRect);
1474  }
1475  }
1476  }

References TrackPanelDrawingContext::dc, 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 1478 of file TrackPanel.cpp.

1481  {
1482  if ( iPass == TrackArtist::PassBorders )
1483  return {
1484  rect.x - kBorderThickness,
1485  rect.y - kBorderThickness,
1486  rect.width + 2 * kBorderThickness + kShadowThickness,
1487  rect.height + 2 * kBorderThickness + kShadowThickness
1488  };
1489  else if ( iPass == TrackArtist::PassFocus ) {
1490  constexpr auto extra = kBorderThickness + 3;
1491  return {
1492  rect.x - extra,
1493  rect.y - extra,
1494  rect.width + 2 * extra + kShadowThickness,
1495  rect.height + 2 * extra + kShadowThickness
1496  };
1497  }
1498  else
1499  return rect;
1500  }

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

Member Data Documentation

◆ mLeftOffset

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

Definition at line 1503 of file TrackPanel.cpp.

◆ mpTrack

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

Definition at line 1502 of file TrackPanel.cpp.


The documentation for this struct was generated from the following file:
TrackPanelGroup::Refinement
std::vector< Child > Refinement
Definition: TrackPanelCell.h:64
TrackControls::Get
static TrackControls & Get(Track &track)
Definition: TrackControls.cpp:25
TrackArtist::PassBorders
@ PassBorders
Definition: TrackArtist.h:77
AColor::Line
static void Line(wxDC &dc, wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
Definition: AColor.cpp:112
kBorderThickness
@ kBorderThickness
Definition: ZoomInfo.h:28
AColor::TrackFocusPen
static void TrackFocusPen(wxDC *dc, int level)
Definition: AColor.cpp:400
kShadowThickness
@ kShadowThickness
Definition: ZoomInfo.h:29
TrackPanelDrawingContext::dc
wxDC & dc
Definition: TrackPanelDrawingContext.h:23
anonymous_namespace{TrackPanel.cpp}::LabeledChannelGroup::mpTrack
std::shared_ptr< Track > mpTrack
Definition: TrackPanel.cpp:1502
TrackPanelGroup::Axis::X
@ X
TrackArtist::Get
static TrackArtist * Get(TrackPanelDrawingContext &)
Definition: TrackArtist.cpp:78
TrackFocus::Get
Track * Get()
Definition: TrackPanelAx.cpp:755
kTrackInfoWidth
@ kTrackInfoWidth
Definition: ZoomInfo.h:36
TrackArtist::PassFocus
@ PassFocus
Definition: TrackArtist.h:81
anonymous_namespace{TrackPanel.cpp}::LabeledChannelGroup::mLeftOffset
wxCoord mLeftOffset
Definition: TrackPanel.cpp:1503