Difference between revisions of "Porting pushStyle(), popStyle(), and boolean() to Processing.js"

From CDOT Wiki
Jump to: navigation, search
m
 
(18 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
== Project Name ==
 
== Project Name ==
Porting pushStyle(), popStyle(), and boolean() to Processing.js
+
Porting Processing to Processing.js
  
 
== Project Description ==
 
== Project Description ==
[http://processingjs.org/ Processing.js] remains incomplete as a port of [http://processing.org/ Processing]. Among the features still to be implemented are the functions [http://processing.org/reference/pushStyle_.html ''pushStyle()''], [http://processing.org/reference/popStyle_.html ''popStyle()''], and [http://processing.org/reference/boolean_.html ''boolean()'']. The first two functions automatically save style information for later retrieval and reuse. The last "converts" arguments into a boolean value.
+
[http://processingjs.org/ Processing.js] remains incomplete as a port of [http://processing.org/ Processing]. The following functions are targeted:
 +
*[http://processing.org/reference/pushStyle_.html ''pushStyle()'']
 +
*[http://processing.org/reference/popStyle_.html ''popStyle()'']
 +
*[http://processing.org/reference/boolean_.html ''boolean()'']
 +
*[http://processing.org/reference/strokeCap_.html ''strokeCap()'']
 +
*[http://processing.org/reference/strokeJoin_.html ''strokeJoin()'']
 +
*[http://processing.org/reference/text_.html ''text()''] (bug fix)
 +
*[http://processing.org/reference/min_.html ''min()''] (bug fix)
 +
*[http://processing.org/reference/max_.html ''max()''] (bug fix)
 +
*[http://processing.org/reference/stringEquals_.html ''String::equals()'']
 +
*[http://processing.org/reference/nf_.html ''nf()''] (bug fix)
 +
*[http://processing.org/reference/int_.html ''int()''] (bug fix)
  
This project seeks to implement those three functions. The repository may be found [http://github.com/mlam19/processing-js here].
+
== Resources ==
 +
*[http://github.com/mlam19/processing-js github branch repository]
 +
*[http://processing-js.lighthouseapp.com/projects/41284-processingjs/overview Lighthouse issue tracking]
 +
*[https://wiki.mozilla.org/Education/Projects/ProcessingForTheWeb Processing for the Web @ Mozilla]
  
 
== Project Leader(s) ==
 
== Project Leader(s) ==
Line 14: Line 28:
 
== Project Details ==
 
== Project Details ==
 
===pushStyle() and popStyle()===
 
===pushStyle() and popStyle()===
The number of states saved is tracked by ''pushedStates''.
+
*The number of states saved is tracked by ''pushedStates''.
 
+
*''pushStyle()'' calls ''curContext.save()'' and increments ''pushedStates'' by one.
''pushStyle()'' calls ''curContext.save()'' and increments ''pushedStates'' by one.
+
*Excess pops are ignored.
 
 
''popStyle()'' checks if there are any saved states via ''pushedStates''. If there are none an error notice to the console or as a JavaScript alert, in an attempt to provide similar behaviour to Processing's implementation. If there are saved states, the function calls ''curContext.restore()'' and decrements ''pushedStates'' by one.
 
  
 
====Related Mozilla bugs====
 
====Related Mozilla bugs====
Line 25: Line 37:
  
 
===boolean()===
 
===boolean()===
 +
*Non-zero numeric values become ''true''
 +
**Bytes (0's and 1's) are interpreted as numeric values.
 +
*''null'' and ''undefine'' become ''false''.
 +
*Boolean arguments are returned as themselves.
 +
 +
===strokeCap()===
 +
*Modifies context.lineCap.
 +
*ROUND -> context.lineCap="round";
 +
*SQUARE -> context.lineCap="butt";
 +
*PROJECT -> context.lineCap="square";
 +
*Processing default (ROUND) set in '''''function''' init''.
 +
*'''''function''' size'' modified to respect previous settings.
 +
**Used to recreate context and reset settings, which overwrote the desired default.
 +
 +
===strokeJoin()===
 +
 +
===text()===
 +
*Partially implementation missing ability to take int, float, double, and byte arguments.
 +
*float and doubles rounded to thousandths digit.
 +
*.5 rounds down rather than up.
 +
 +
===int()===
 +
*JavaScript does not distinguish between bytes and ints, causing incomplete replication of Processing behaviour
 +
*Processing's ''PApplet.parseInt(String)'' and ''PApplet.parseInt(String[])'' handles doubles-as-Strings differently. In the former, doubles are 'floored' correctly, in the latter exceptions are thrown.
  
 
==Things to do==
 
==Things to do==
Line 32: Line 68:
 
!Status
 
!Status
 
!Assigned to
 
!Assigned to
 +
!Link
 
|-
 
|-
 
|Test cases for  ''pushStyle()'' and ''popStyle()''
 
|Test cases for  ''pushStyle()'' and ''popStyle()''
|In progress
+
|Done
|[[User:mlam19|Matthew Lam]] (but you can help too!)
+
|[[User:mlam19|Matthew Lam]]
 +
|[http://matrix.senecac.on.ca/~mlam19/processingjs/pushPopTest1.html Test page]
 
|-
 
|-
 
|Test cases for  ''boolean()''
 
|Test cases for  ''boolean()''
|In progress
+
|Done
|[[User:mlam19|Matthew Lam]] (but you can help too!)
+
|[[User:mlam19|Matthew Lam]]
 +
|[http://matrix.senecac.on.ca/~mlam19/processingjs/booleanTest1.html Test page]
 +
|-
 +
|Test cases for  ''strokeCap()''
 +
|Done
 +
|[[User:mlam19|Matthew Lam]]
 +
|[http://matrix.senecac.on.ca/~mlam19/processingjs/strokeCapTest1.html Test page]
 +
|-
 +
|Test cases for  ''strokeJoin()''
 +
|Done
 +
|[[User:mlam19|Matthew Lam]]
 +
|[http://matrix.senecac.on.ca/~mlam19/processingjs/strokeJoinTest1.html Test page]
 +
|-
 +
|Test cases for  ''text()''
 +
|Done
 +
|[[User:mlam19|Matthew Lam]]
 +
|[http://matrix.senecac.on.ca/~mlam19/processingjs/textTest1.html Test page]
 
|}
 
|}
  
Line 48: Line 102:
 
!Notes
 
!Notes
 
!Resources
 
!Resources
 +
|-
 +
|0.5
 +
|''min()'', ''max()'', ''nf()'', and ''int()'' enhanced. ''String::equals()'' implemented.
 +
|
 +
*[http://github.com/mlam19/processing-js/commit/2b829739c5a70322e384b1103bf0313e1935d045 ''int()'' GitHub commit]
 +
*[http://github.com/mlam19/processing-js/commit/6b5d56d6f9aa2d7e431164201b9aa8a007178d34 ''nf()'' GitHub commit]
 +
*[http://github.com/mlam19/processing-js/commit/c29df2b8c9cd68572ca1e01196306770fab14ff8 ''String::equals()'' GitHub commit]
 +
*[http://github.com/mlam19/processing-js/commit/541d520221006cd37df153fa656b7a657ff8025d ''min()'' and ''max()'' commit]
 +
|-
 +
|0.4
 +
|''text()'' implementation enhanced.
 +
|
 +
*[http://github.com/mlam19/processing-js/commit/b43a4854c31c27175edd4aa885bb431a79981daa Final GitHub commit]
 +
*[https://processing-js.lighthouseapp.com/projects/41284/tickets/191/a/382850/patch.diff Patch]
 +
|-
 +
|0.3
 +
|''strokeCap()'' and ''strokeJoin()'' ported.
 +
|[http://github.com/mlam19/processing-js/commit/e748d89186f033d33f829235b45d5ca0391be684 Final GitHub commit]
 +
|-
 +
|0.2
 +
|Bug fixes for ''pushStyle()'', ''popStyle()'', and ''boolean()''. Functions now functional.
 +
|[http://matrix.senecac.on.ca/~mlam19/processingjs/files/mlam19_procjs_0.2.diff.tar.gz Patch]
 
|-
 
|-
 
|0.1
 
|0.1
Line 58: Line 134:
 
!Date
 
!Date
 
!Notes
 
!Notes
 +
|-
 +
|Feb. 5, 2010
 +
|[http://wobblyretroaction.blogspot.com/2010/02/processingjs-int-and-release-05.html ''int()'' upgraded, and release 0.5 announcement]
 +
|-
 +
|Feb. 2, 2010
 +
|[http://wobblyretroaction.blogspot.com/2010/02/processingjs-nf.html ''nf()'' upgraded]
 +
|-
 +
|Jan. 31, 2010
 +
|[http://wobblyretroaction.blogspot.com/2010/01/processingjs-stringequals-or-how-i.html ''String::equals()'' completed]
 +
|-
 +
|Jan. 31, 2010
 +
|[http://wobblyretroaction.blogspot.com/2010/01/processingjs-improving-min-and-max.html ''min()'' and ''max()'' upgraded]
 +
|-
 +
|Jan. 20, 2010
 +
|[http://wobblyretroaction.blogspot.com/2010/01/dps911-project-processingjs-v04.html Release 0.4 announcement]
 +
|-
 +
|Jan. 14, 2010
 +
|[http://wobblyretroaction.blogspot.com/2010/01/2010-dps911-and-more-processingjs.html Project continuation blog]
 +
|-
 +
|Dec. 9, 2009
 +
|[http://wobblyretroaction.blogspot.com/2009/12/dps909-project-processingjs-v03.html Release 0.3 announcement].
 +
|-
 +
|Dec. 2, 2009
 +
|[http://wobblyretroaction.blogspot.com/2009/12/processingjs-strokejoin.html ''strokeJoin()'' completed].
 +
|-
 +
|Nov. 29, 2009
 +
|[http://wobblyretroaction.blogspot.com/2009/11/processingjs-strokecap.html ''strokeCap()'' completed].
 +
|-
 +
|Nov. 19, 2009
 +
|[http://wobblyretroaction.blogspot.com/2009/11/dps909-project-processingjs-v02.html Release 0.2 announcement].
 
|-
 
|-
 
|Oct. 19, 2009
 
|Oct. 19, 2009
|[http://wobblyretroaction.blogspot.com/2009/10/dps909-project-processingjs-v01.html Release 0.1 announcement].
+
|[http://wobblyretroaction.blogspot.com/2009/10/dps909-project-processingjs-v01.html Release 0.1 announcement].
 
|-
 
|-
 
|Oct. 12, 2009
 
|Oct. 12, 2009
Line 69: Line 175:
 
|-
 
|-
 
|Sept. 27, 2009
 
|Sept. 27, 2009
|BThe [http://wobblyretroaction.blogspot.com/2009/09/processingjs-plan-to-push-and-pop.html initial project proposal] has been posted. [http://github.com/mlam19/processing-js Repository] at github created.
+
|The [http://wobblyretroaction.blogspot.com/2009/09/processingjs-plan-to-push-and-pop.html initial project proposal] has been posted. [http://github.com/mlam19/processing-js Repository] at github created.
 
|}
 
|}

Latest revision as of 06:22, 5 February 2010

Project Name

Porting Processing to Processing.js

Project Description

Processing.js remains incomplete as a port of Processing. The following functions are targeted:

Resources

Project Leader(s)

Project Contributor(s)

Project Details

pushStyle() and popStyle()

  • The number of states saved is tracked by pushedStates.
  • pushStyle() calls curContext.save() and increments pushedStates by one.
  • Excess pops are ignored.

Related Mozilla bugs

  • #451165 - CanvasRenderingContext2D.fillStyle and strokeStyle accept invalid colours
    • pushStyle() and popStyle() use CanvasRenderingContext2D.save() and restore(). These functions save fillStyle and strokeStyle.

boolean()

  • Non-zero numeric values become true
    • Bytes (0's and 1's) are interpreted as numeric values.
  • null and undefine become false.
  • Boolean arguments are returned as themselves.

strokeCap()

  • Modifies context.lineCap.
  • ROUND -> context.lineCap="round";
  • SQUARE -> context.lineCap="butt";
  • PROJECT -> context.lineCap="square";
  • Processing default (ROUND) set in function init.
  • function size modified to respect previous settings.
    • Used to recreate context and reset settings, which overwrote the desired default.

strokeJoin()

text()

  • Partially implementation missing ability to take int, float, double, and byte arguments.
  • float and doubles rounded to thousandths digit.
  • .5 rounds down rather than up.

int()

  • JavaScript does not distinguish between bytes and ints, causing incomplete replication of Processing behaviour
  • Processing's PApplet.parseInt(String) and PApplet.parseInt(String[]) handles doubles-as-Strings differently. In the former, doubles are 'floored' correctly, in the latter exceptions are thrown.

Things to do

Description Status Assigned to Link
Test cases for pushStyle() and popStyle() Done Matthew Lam Test page
Test cases for boolean() Done Matthew Lam Test page
Test cases for strokeCap() Done Matthew Lam Test page
Test cases for strokeJoin() Done Matthew Lam Test page
Test cases for text() Done Matthew Lam Test page

Releases

Version Notes Resources
0.5 min(), max(), nf(), and int() enhanced. String::equals() implemented.
0.4 text() implementation enhanced.
0.3 strokeCap() and strokeJoin() ported. Final GitHub commit
0.2 Bug fixes for pushStyle(), popStyle(), and boolean(). Functions now functional. Patch
0.1 Basic functionality for pushStyle() and popStyle(). Totally untested code for boolean(). Patch

Project News

Date Notes
Feb. 5, 2010 int() upgraded, and release 0.5 announcement
Feb. 2, 2010 nf() upgraded
Jan. 31, 2010 String::equals() completed
Jan. 31, 2010 min() and max() upgraded
Jan. 20, 2010 Release 0.4 announcement
Jan. 14, 2010 Project continuation blog
Dec. 9, 2009 Release 0.3 announcement.
Dec. 2, 2009 strokeJoin() completed.
Nov. 29, 2009 strokeCap() completed.
Nov. 19, 2009 Release 0.2 announcement.
Oct. 19, 2009 Release 0.1 announcement.
Oct. 12, 2009 Project expanded to include boolean().
Sept. 28, 2009 Basic improvements allow the rudimentary Processing example to function in Processing.js.
Sept. 27, 2009 The initial project proposal has been posted. Repository at github created.