Hi Ferran,

You should follow the waveform renderers and overload
WaveformWidgetRendererAbstract::onSetTrack():
https://github.com/mixxxdj/mixxx/blob/master/src/waveform/renderers/glslwaveformrenderersignal.cpp#L218

This is called every time a track is loaded. BaseTrackPlayer signals are
hooked to WWaveformViewer::onTrackLoaded/Unloaded which calls
WaveformWidgetRenderer::setTrack which calls
WaveformRendererAbstract::onSetTrack for every renderer in the widget's
render stack.

Note that loadTexture then calls m_waveformRenderer->getTrackInfo() to get
the TrackPointer for the newly loaded track.
https://github.com/mixxxdj/mixxx/blob/master/src/waveform/renderers/glslwaveformrenderersignal.cpp#L86

You can use this to hook the cuesUpdated signal and to re-generate the cue
pixmaps for the track's current cues.

Cheers,
RJ

On Tue, Jan 13, 2015 at 10:46 AM, Ferran Pujol Camins <
ferranpujolcam...@gmail.com> wrote:

> Ok, so this is what I got now:
>
> WaveformRenderMark::setup connects BaseTrackPlayer::newTrackLoaded signal
> to a new WaveformRenderMark::slotTrackLoaded.
>
> Every time a track is loaded, WaveformRenderMark::slotTrackLoaded connects
> its TrackInfoObject::cuesUpdated signal to a new
> WaveformRenderMark::slotCuesUpdated, who updates the marks text.
>
> WaveformRenderMark::setup also checks if a track is already loaded in the
> player and if so, calls WaveformRenderMark::slotCuesUpdated in order to
> show the cue labels on a skin change.
>
> The problem I have is that I don't know where the instance of
> BaseTrackPlayer I should query is, neither how to acces it. I've seen
> BaseTrackPlayer pointers in Mixxx, SkinLoader and LegacySkinParser Classes.
> Where should I look at?
>
> 2015-01-12 20:40 GMT+01:00 RJ Ryan <russelljr...@gmail.com>:
>
>> On mobile, sorry for brevity. Setup is only done once at skin creation
>> time. The cue text can change at track load time or when user edits the
>> text e.g. via the track properties dialog. So you need to check if the text
>> has changed on every draw. (Or listen to track signals for cue updates)
>>
>> On Mon, Jan 12, 2015, 11:34 AM Ferran Pujol Camins <
>> ferranpujolcam...@gmail.com> wrote:
>>
>>> Also, I've further understood this code (thanks for your hints RJ!). I
>>> don't feel comfortable setting the text of the WaveformMarks in
>>> WaveformMarkRenderer. WaveformMarkRenderer already does it's job of
>>> painting whatever text a WaveformMark happens to have. Doesn't it make more
>>> sense to modify WaveformMarkSet::setup to construct the hotcue marks
>>> already with the desired text?
>>>
>>> It makes more sense to me, but I'm not 100% sure because I don't
>>> understand how information about cues reaches these classes: what are all
>>> those QDomNodes? ALso, what is the default mark?
>>>
>>> 2015-01-12 20:21 GMT+01:00 Ferran Pujol Camins <
>>> ferranpujolcam...@gmail.com>:
>>>
>>>> One question: if WaveformMark::setKeyAndIndex(const ConfigKey& key, int
>>>> i), is called a second time, doesn't this forget to deallocate the old
>>>> instance of ControlObjectThread?
>>>>
>>>> 2015-01-10 0:19 GMT+01:00 RJ Ryan <russelljr...@gmail.com>:
>>>>
>>>>> Hi Ferran,
>>>>>
>>>>> The waveforms are a little twisty-turny. Here are some hints to get
>>>>> you started:
>>>>>
>>>>> WaveformMark represents the skin's definition of what the hotcue
>>>>> should be rendered as (an image from file, an auto-generated image, the
>>>>> text to show, etc.). WaveformRenderMark is a WaveformRendererAbstract 
>>>>> class
>>>>> that takes a WaveformMark and draws it to the screen when its turn comes.
>>>>>
>>>>> A waveform widget has a stack of WaveformRendererAbstract classes in a
>>>>> list that are drawn one after the other -- they're like layers. A typical
>>>>> waveform widget's render stack looks like this:
>>>>>
>>>>> * background (WaveformRenderBackground)
>>>>> * end of track highlight (WaveformRendererEndOfTrack)
>>>>> * preroll drawing (WaveformRendererPreroll)
>>>>> * mark range (green loop highlight) rendering (WaveformRenderMarkRange)
>>>>> * signal rendering (the waveform itself -- a class named something
>>>>> like WaveforRenderXXXSignalXXX depending on the widget)
>>>>> * beat rendering (WaveformRenderBeat)
>>>>> * hotcue / cue / loop in-out point rendering (WaveformRenderMark)
>>>>>
>>>>> So WaveformRenderMark uses WaveformMark as a description of what to
>>>>> draw. WaveformMark doesn't have access to the track that's loaded while
>>>>> WaveformRenderMark can get access. Here's an example from
>>>>> WaveformRenderBeat:
>>>>>
>>>>>
>>>>> https://github.com/mixxxdj/mixxx/blob/master/src/waveform/renderers/waveformrenderbeat.cpp#L41
>>>>>
>>>>> One tricky bit is that WaveformRenderMark pre-generates a pixmap that
>>>>> is drawn during the render step as a performance optimization. In the draw
>>>>> method of WaveformRenderMark you should set the text of the currently
>>>>> loaded cue point's label (you can fetch the cues from the track with
>>>>> TrackInfoObject::getCues) on the WaveformMark (via some new method you
>>>>> add). If the label changed since the last render then you'll need to
>>>>> re-generate the pixmap.
>>>>>
>>>>> Hope that gets you started,
>>>>> RJ
>>>>>
>>>>> On Fri, Jan 9, 2015 at 6:02 PM, Ferran Pujol Camins <
>>>>> ferranpujolcam...@gmail.com> wrote:
>>>>>
>>>>>> Now I want the hotcue marks to show their cue's name. I see in
>>>>>> WaveformMark::setKeyAndIndex that m_text place marker is replaced by the
>>>>>> hotcue number so I could just append the cue's label there. But I have no
>>>>>> clue about how to bring the hotcue name to this function. Some quick
>>>>>> guidance with the waveform rendering system will help a lot :)
>>>>>>
>>>>>> 2015-01-09 20:31 GMT+01:00 Ferran Pujol Camins <
>>>>>> ferranpujolcam...@gmail.com>:
>>>>>>
>>>>>>> Thank you both I have a better picture now. :)
>>>>>>>
>>>>>>> 2015-01-09 19:55 GMT+01:00 RJ Ryan <russelljr...@gmail.com>:
>>>>>>>
>>>>>>>> This doc is a bit out of date now (doesn't cover
>>>>>>>> ControlObjectSlave) but it gives the overview of what the heck
>>>>>>>> ControlObject is used for in Mixxx:
>>>>>>>>
>>>>>>>> http://mixxx.org/wiki/doku.php/developer_guide_control
>>>>>>>>
>>>>>>>> See also: http://mixxx.org/wiki/doku.php/developer_guide
>>>>>>>>
>>>>>>>> On Fri, Jan 9, 2015 at 6:19 AM, Daniel Schürmann <
>>>>>>>> dasch...@mixxx.org> wrote:
>>>>>>>>
>>>>>>>>> Hi Ferran,
>>>>>>>>>
>>>>>>>>> do not know what exactly you need.
>>>>>>>>>
>>>>>>>>> ControlDoublePrivate is th container that holds the double data
>>>>>>>>> value for atomic read and writes (also on 32 bit targets).
>>>>>>>>> The ControlObject is the interface, you can use from your code
>>>>>>>>> that holds a reference to the ControlDoublePrivate.
>>>>>>>>>
>>>>>>>>> ControlObject should be used to create a new ControlDoublePrivate
>>>>>>>>> and should only be used from one object (You will find exceptions in 
>>>>>>>>> the
>>>>>>>>> legacy engine code)
>>>>>>>>>
>>>>>>>>> All other Objects should use the ControlObjectSlave to access the
>>>>>>>>> underlying ControlDoublePrivate.
>>>>>>>>>
>>>>>>>>> Hope that helps.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Kind regards,
>>>>>>>>>
>>>>>>>>> Daniel
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> 2015-01-09 11:16 GMT+01:00 Ferran Pujol Camins <
>>>>>>>>> ferranpujolcam...@gmail.com>:
>>>>>>>>>
>>>>>>>>>> Hello, could someone give me a short explanation about how
>>>>>>>>>> ControlObject and ControlDoublePrivate interact? I'm quite confused 
>>>>>>>>>> right
>>>>>>>>>> now and it would help me digest the code quicker.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>>> Dive into the World of Parallel Programming! The Go Parallel
>>>>>>>>>> Website,
>>>>>>>>>> sponsored by Intel and developed in partnership with Slashdot
>>>>>>>>>> Media, is your
>>>>>>>>>> hub for all things parallel software development, from weekly
>>>>>>>>>> thought
>>>>>>>>>> leadership blogs to news, videos, case studies, tutorials and
>>>>>>>>>> more. Take a
>>>>>>>>>> look and join the conversation now.
>>>>>>>>>> http://goparallel.sourceforge.net
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Get Mixxx, the #1 Free MP3 DJ Mixing software Today
>>>>>>>>>> http://mixxx.org
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Mixxx-devel mailing list
>>>>>>>>>> Mixxx-devel@lists.sourceforge.net
>>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/mixxx-devel
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> ------------------------------------------------------------------------------
>>>>>>>>> Dive into the World of Parallel Programming! The Go Parallel
>>>>>>>>> Website,
>>>>>>>>> sponsored by Intel and developed in partnership with Slashdot
>>>>>>>>> Media, is your
>>>>>>>>> hub for all things parallel software development, from weekly
>>>>>>>>> thought
>>>>>>>>> leadership blogs to news, videos, case studies, tutorials and
>>>>>>>>> more. Take a
>>>>>>>>> look and join the conversation now.
>>>>>>>>> http://goparallel.sourceforge.net
>>>>>>>>> _______________________________________________
>>>>>>>>> Get Mixxx, the #1 Free MP3 DJ Mixing software Today
>>>>>>>>> http://mixxx.org
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Mixxx-devel mailing list
>>>>>>>>> Mixxx-devel@lists.sourceforge.net
>>>>>>>>> https://lists.sourceforge.net/lists/listinfo/mixxx-devel
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Ferran Pujol Camins
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Ferran Pujol Camins
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Ferran Pujol Camins
>>>>
>>>
>>>
>>>
>>> --
>>> Ferran Pujol Camins
>>>
>>
>
>
> --
> Ferran Pujol Camins
>
------------------------------------------------------------------------------
New Year. New Location. New Benefits. New Data Center in Ashburn, VA.
GigeNET is offering a free month of service with a new server in Ashburn.
Choose from 2 high performing configs, both with 100TB of bandwidth.
Higher redundancy.Lower latency.Increased capacity.Completely compliant.
http://p.sf.net/sfu/gigenet
_______________________________________________
Get Mixxx, the #1 Free MP3 DJ Mixing software Today
http://mixxx.org


Mixxx-devel mailing list
Mixxx-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mixxx-devel

Reply via email to