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
------------------------------------------------------------------------------
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.
www.gigenet.com
_______________________________________________
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