Thank you RJ, I have a first working version, however, WaveformRenderMark
now inherits from QObject. Who should its parent be?
2015-01-13 16:59 GMT+01:00 RJ Ryan <russelljr...@gmail.com>:
> 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
>>
>
>
--
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