<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
</head>
<body>
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Helvetica,sans-serif;" dir="ltr">
<p>Alright, thanks for the explanation :)</p>
<p><br>
</p>
<p>Best,</p>
<p>Christoph</p>
<div id="Signature">
<div name="divtagdefaultwrapper" style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:; margin:0">
<div><font size="2" color="#808080"></font></div>
</div>
</div>
</div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>Von:</b> Squeak-dev <squeak-dev-bounces@lists.squeakfoundation.org> im Auftrag von Chris Muller <asqueaker@gmail.com><br>
<b>Gesendet:</b> Dienstag, 10. September 2019 01:21:14<br>
<b>An:</b> The general-purpose Squeak developers list<br>
<b>Betreff:</b> Re: [squeak-dev] The Inbox: MorphicExtras-ct.263.mcz</font>
<div> </div>
</div>
<div>
<div dir="ltr">Hi Christoph,
<div><br>
</div>
<div>Thanks for regarding the ancestry as an important part of the code model too.  It absolutely is.  If your question is about the break in consecutiveness, it's absolutely fine, not a problem at all.</div>
<div><br>
</div>
<div>Overall, what is important, IMO, is to do our best to keep the ancestry as meaty and meaningful as we can.  Whether Dave designed it for this purpose or not, the new "Reparent" function on the Repository browser is very useful to employ before committing
 Inbox items for which feedback has been received, to trunk.  By reparenting to the original trunk version, the whole logical change is captured into one commit instead of spread across multiple commits.  If not, though, its just be sure every one of those
 interim version of the ancestry is present in the same repository, otherwise the tools will produce errors when diffing those versions...</div>
<div><br>
</div>
<div>Best,</div>
<div>  Chris</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Sat, Sep 7, 2019 at 5:51 AM Thiede, Christoph <<a href="mailto:Christoph.Thiede@student.hpi.uni-potsdam.de" target="_blank">Christoph.Thiede@student.hpi.uni-potsdam.de</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div id="gmail-m_-3960753534462266737gmail-m_2268501232360558934gmail-m_-4490955968826892680gmail-m_1613129322372344287divtagdefaultwrapper" style="font-size:12pt;color:rgb(0,0,0);font-family:Calibri,Helvetica,sans-serif,EmojiFont,"Apple Color Emoji","Segoe UI Emoji",NotoColorEmoji,"Segoe UI Symbol","Android Emoji",EmojiSymbols" dir="ltr">
<p>See HTML below, is that ancestry a problem?</p>
<p><br>
</p>
<p>Please also note I moved the FRMorph from the fun to the tools parts bin category. Would you agree with that?</p>
<br>
<div style="color:rgb(0,0,0)">
<div>
<hr style="display:inline-block;width:98%">
<div id="gmail-m_-3960753534462266737gmail-m_2268501232360558934gmail-m_-4490955968826892680gmail-m_1613129322372344287x_divRplyFwdMsg" dir="ltr">
<font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>Von:</b> Squeak-dev <<a href="mailto:squeak-dev-bounces@lists.squeakfoundation.org" target="_blank">squeak-dev-bounces@lists.squeakfoundation.org</a>> im Auftrag von
<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a> <<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>><br>
<b>Gesendet:</b> Samstag, 7. September 2019 12:44 Uhr<br>
<b>An:</b> <a href="mailto:squeak-dev@lists.squeakfoundation.org" target="_blank">
squeak-dev@lists.squeakfoundation.org</a><br>
<b>Betreff:</b> [squeak-dev] The Inbox: MorphicExtras-ct.263.mcz</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt">
<div class="gmail-m_-3960753534462266737gmail-m_2268501232360558934gmail-m_-4490955968826892680gmail-m_1613129322372344287PlainText">
A new version of MorphicExtras was added to project The Inbox:<br>
<a href="http://source.squeak.org/inbox/MorphicExtras-ct.263.mcz" id="gmail-m_-3960753534462266737gmail-m_2268501232360558934gmail-m_-4490955968826892680gmail-m_1613129322372344287LPlnk45502" target="_blank">http://source.squeak.org/inbox/MorphicExtras-ct.263.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: MorphicExtras-ct.263<br>
Author: ct<br>
Time: 7 September 2019, 12:35:29.653698 pm<br>
UUID: 7205ede8-7f4d-3842-bb5f-01738abfc5cb<br>
Ancestors: <span style="background-color:rgb(255,255,0)">MorphicExtras-ct.262</span><br>
<br>
Switch from preamble to postscript and from DateAndTime to TimeStamp<br>
<br>
=============== Diff against <span style="background-color:rgb(255,255,0)">MorphicExtras-mt.260</span> ===============<br>
<br>
Item was changed:<br>
  StringMorph subclass: #FrameRateMorph<br>
+        instanceVariableNames: 'lastDisplayTime framesSinceLastDisplay updateInterval mSecsPerFrame framesPerSec'<br>
-        instanceVariableNames: 'lastDisplayTime framesSinceLastDisplay'<br>
         classVariableNames: ''<br>
         poolDictionaries: ''<br>
         category: 'MorphicExtras-Demo'!<br>
<br>
Item was changed:<br>
  ----- Method: FrameRateMorph class>>descriptionForPartsBin (in category 'parts bin') -----<br>
  descriptionForPartsBin<br>
         ^ self partName:        'FrameRate' translatedNoop<br>
+                categories:             {'Tools' translatedNoop}<br>
-                categories:             {'Just for Fun' translatedNoop}<br>
                 documentation:  'A readout that allows you to monitor the frame rate of your system' translatedNoop!<br>
<br>
Item was added:<br>
+ ----- Method: FrameRateMorph>>framesPerSec (in category 'accessing') -----<br>
+ framesPerSec<br>
+ <br>
+        ^ framesPerSec!<br>
<br>
Item was changed:<br>
  ----- Method: FrameRateMorph>>initialize (in category 'initialization') -----<br>
  initialize<br>
  "initialize the state of the receiver"<br>
         super initialize.<br>
  ""<br>
+        lastDisplayTime := DateAndTime new.<br>
-        lastDisplayTime := 0.<br>
         framesSinceLastDisplay := 0.<br>
+        self updateInterval: 500 milliSeconds.<br>
         self font: (Preferences standardMenuFont emphasized: 1).<br>
  !<br>
<br>
Item was added:<br>
+ ----- Method: FrameRateMorph>>mSecsPerFrame (in category 'accessing') -----<br>
+ mSecsPerFrame<br>
+ <br>
+        ^ mSecsPerFrame!<br>
<br>
Item was changed:<br>
  ----- Method: FrameRateMorph>>step (in category 'stepping and presenter') -----<br>
  step<br>
         "Compute and display (every half second or so) the current framerate"<br>
  <br>
+        | now timePassed |<br>
-        | now mSecs mSecsPerFrame framesPerSec newContents |<br>
         framesSinceLastDisplay := framesSinceLastDisplay + 1.<br>
+        now := DateAndTime now.<br>
+        timePassed := now - lastDisplayTime.<br>
+        (timePassed > self updateInterval) ifTrue: <br>
+                [| mSecs |<br>
+                mSecs := timePassed asMilliSeconds.<br>
+                mSecsPerFrame := mSecs // framesSinceLastDisplay.<br>
-        now := Time millisecondClockValue.<br>
-        mSecs := now - lastDisplayTime.<br>
-        (mSecs > 500 or: [mSecs < 0 "clock wrap-around"]) ifTrue: <br>
-                [mSecsPerFrame := mSecs // framesSinceLastDisplay.<br>
                 framesPerSec := (framesSinceLastDisplay * 1000) // mSecs.<br>
+                self contents: ('{1} mSecs ({2} frame{3}/sec)'<br>
+                        format: {mSecsPerFrame. framesPerSec. framesPerSec = 1 ifTrue: [''] ifFalse: ['s']}).<br>
-                newContents := mSecsPerFrame printString, ' mSecs (', framesPerSec printString, ' frame', (framesPerSec = 1 ifTrue: [''] ifFalse: ['s']), '/sec)'.<br>
-                self contents: newContents.<br>
                 lastDisplayTime := now.<br>
                 framesSinceLastDisplay := 0]<br>
         ifFalse:<br>
                 ["Ensure at least one pixel is drawn per frame"<br>
                 Preferences higherPerformance ifTrue: [self invalidRect: (self position extent: 1@1)]]!<br>
<br>
Item was added:<br>
+ ----- Method: FrameRateMorph>>updateInterval (in category 'accessing') -----<br>
+ updateInterval<br>
+ <br>
+        ^ updateInterval!<br>
<br>
Item was added:<br>
+ ----- Method: FrameRateMorph>>updateInterval: (in category 'accessing') -----<br>
+ updateInterval: aNumber<br>
+ <br>
+        updateInterval := aNumber!<br>
<br>
Item was changed:<br>
+ (PackageInfo named: 'MorphicExtras') postscript: 'FrameRateMorph allSubInstances do: [:frm | | wasStepping |<br>
+        wasStepping := frm isStepping.<br>
+        wasStepping ifTrue: [frm stopStepping].<br>
+        frm<br>
+                instVarNamed: #lastDisplayTime<br>
+                        put: DateAndTime now;<br>
+                updateInterval: 500 milliSeconds.<br>
+        wasStepping ifTrue: [frm startStepping]].'!<br>
- (PackageInfo named: 'MorphicExtras') postscript: 'TrashCanMorph preserveTrash: Preferences preserveTrash.<br>
- TrashCanMorph slideDismissalsToTrash: Preferences slideDismissalsToTrash.<br>
- <br>
- Preferences removePreference: #preserveTrash.<br>
- Preferences removePreference: #slideDismissalsToTrash.'!<br>
<br>
<br>
</div>
</span></font></div>
</div>
</div>
<br>
</blockquote>
</div>
</div>
</body>
</html>