Check-in [1acb7ad7a5]

Login

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:New version of TIP #510 from René Zaumseil. Complete rewrite, with tkpath now included.
Downloads: Tarball | ZIP archive
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA3-256: 1acb7ad7a52ab9c7f1c61206c9c65767aa8b078896cc5fce5ddfb60e2cdd7a33
User & Date: fvogel 2018-11-30 21:32:50.534
Context
2018-12-03
07:59
merge wordsmithing branch "kbk-527-redaction" check-in: 5dab3d4c27 user: sebres tags: trunk
2018-11-30
21:32
New version of TIP #510 from René Zaumseil. Complete rewrite, with tkpath now included. check-in: 1acb7ad7a5 user: fvogel tags: trunk
2018-11-27
15:58
TIP 527 almost ready check-in: 54c0b81bab user: sebres tags: trunk
Changes
Unified Diff Ignore Whitespace Patch
Changes to index.json.
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
	"517":{"url":"./tip/517.md","keywords":"tk menu","created":"13-Sept-2018","post-history":"","state":"Final","tk-branch":"tip-517","tcl-version":"8.7","vote":"Done","type":"Project","title":"# TIP 517: Add -activerelief Configuration Option to the menu widget","author":["Francois Vogel <[email protected]>"],"is-jest":false},
	"516":{"url":"./tip/516.md","keywords":"Tcl, TclOO","state":"Final","type":"Project","author":["Donal K. Fellows <[email protected]>"],"vote-results":"4/0/5 accepted","votes-for":"DKF, JN, JD, AK","votes-against":"none","created":"7-Sept-2018","title":"# TIP 516: More OO Slot Operations","post-history":"","tcl-branch":"tip-516","vote":"Done","tcl-version":"8.7","votes-present":"BG, KBK, DGP, FV, SL","is-jest":false},
	"515":{"url":"./tip/515.md","state":"Final","type":"Project","author":["Jan Nijtmans <[email protected]>"],"vote-results":"8/0/1 accepted","votes-for":"DKF, KBK, JN, JD, DGP, FV, SL, AK","votes-against":"none","created":"7-Sept-2018","title":"# TIP 515: Level Value Reform","post-history":"","tcl-branch":"tip-515","vote":"Done","tcl-version":"8.7","votes-present":"BG","is-jest":false},
	"514":{"url":"./tip/514.md","keywords":"Tcl","created":"20-Aug-2018","post-history":"","state":"Final","tcl-branch":"tip-514","tcl-version":"8.7","vote":"Done","type":"Project","title":"# TIP 514: Platform differences in handling int/wide","author":["Jan Nijtmans <[email protected]>"],"is-jest":false},
	"513":{"url":"./tip/513.md","keywords":"Tcl,data structure","created":"02-Aug-2017","post-history":"","state":"Draft","implementation-url":"https://core.tcl.tk/tips/doc/trunk/attach/513/agendas.tcl","tcl-version":"8.7","vote":"Pending","type":"Project","title":"# TIP 513: Better support for 'agendas' as arrays, dictionaries or lists","author":["Florian Murr <[email protected]>"],"is-jest":false},
	"512":{"url":"./tip/512.md","keywords":"Tcl","created":"25-June-2018","post-history":"","state":"Final","tcl-branch":"tip-512","tcl-version":"8.7","vote":"Done","type":"Project","title":"# TIP 512: No stub for Tcl_SetExitProc()","author":["Jan Nijtmans <[email protected]>"],"is-jest":false},
	"511":{"url":"./tip/511.md","keywords":"Tcl,threads","state":"Accepted","type":"Project","author":["Christian Werner <[email protected]>"],"vote-results":"4/0/5 accepted","votes-for":"DKF, BG, KBK, JN, JD, SL","votes-against":"none","created":"14-June-2018","title":"# TIP 511: Implement Tcl_AsyncMarkFromSignal()","post-history":"","implementation-url":"https://www.androwish.org/index.html/info/40790af1e8e4ec9f","vote":"Done","tcl-version":"8.7","votes-present":"DGP, FV, AK","is-jest":false},
	"510":{"url":"./tip/510.md","":"might be to just co-distribute, just as TDBC is with Tcl","keywords":"Tk","state":"Draft","vote-summary":"Rejected 1/3/1","type":"Project","tk-branch":"tip-510","author":["René Zaumseil <[email protected]>"],"votes-against":"KBK, JN, FV","votes-for":"DKF","created":"5-Jun-2018","vote-comments":"code not yet ready, needs porting to macOS; alternate","title":"# TIP 510: Add Rbc to Tk","post-history":"","vote":"Done","tcl-version":"8.7","votes-present":"BG","is-jest":false},
	"509":{"url":"./tip/509.md","keywords":"Tcl,threads","state":"Final","type":"Project","author":["Frédéric Bonnet <[email protected]>"],"vote-results":"8/0/1 accepted","votes-for":"DKF, KBK, JN, JD, DGP, FV, SL, AK","votes-against":"none","created":"24-May-2018","title":"# TIP 509: Implement reentrant mutexes on all platforms","post-history":"","tcl-branch":"tip-509","vote":"Done","tcl-version":"8.7","votes-present":"BG","is-jest":false},
	"508":{"url":"./tip/508.md","keywords":"Tcl,array","state":"Final","type":"Project","author":["Frédéric Bonnet <[email protected]>"],"vote-results":"9/0/0 accepted","votes-for":"DKF, BG, KBK, JN, JD, DGP, FV, SL, AK","votes-against":"none","created":"13-May-2018","title":"# TIP 508: New subcommand [array default]","post-history":"","tcl-branch":"tip-508","vote":"Done","tcl-version":"8.7","votes-present":"none","is-jest":false},
	"507":{"url":"./tip/507.md","keywords":"Tk","created":"9-May-2018","post-history":"","state":"Draft","tk-branch":"tip-507","tcl-version":"8.7","vote":"","type":"Project","title":"# TIP 507: Include simple SVG support with nanosvg","author":["René Zaumseil <[email protected]>"],"is-jest":false},
	"506":{"url":"./tip/506.md","state":"Final","vote-summary":"Accepted 5/0/1","type":"Project","author":["Don Porter <[email protected]>"],"votes-for":"DKF, KBK, JN, DGP, SL","votes-against":"none","created":"30-Mar-2018","title":"# TIP 506: Purge RefCount Macros","post-history":"","vote":"Done","tcl-version":"8.7","tcl-branch":"tip-506","votes-present":"BG, FV","is-jest":false},
	"505":{"url":"./tip/505.md","state":"Final","type":"Project","author":["Don Porter <[email protected]>"],"vote-results":"8/0/1 accepted","votes-for":"DKF, KBK, JN, JD, DGP, FV, SL, AK","votes-against":"none","created":"26-Mar-2018","title":"# TIP 505: Make [lreplace] Accept All Out-of-Range Index Values","post-history":"","tcl-branch":"tip-505","vote":"Done","tcl-version":"8.6.9","votes-present":"BG","is-jest":false},
	"504":{"url":"./tip/504.md","keywords":"Tcl,string,insert","obsoletes":"475","created":"21-Mar-2018","post-history":"","state":"Draft","tcl-branch":"dgp-string-insert","tcl-version":"8.7","vote":"Pending","type":"Project","title":"# TIP 504: New subcommand [string insert]","author":["Don Porter <[email protected]>"],"is-jest":false},
	"503":{"url":"./tip/503.md","created":"05-Feb-2018","post-history":"","state":"Final","tcl-branch":"tip-503","tcl-version":"8.7","vote":"Done","type":"Project","title":"# TIP 503: End Tcl 8.3 Source Compatibility Support","author":["Don Porter <[email protected]>"],"is-jest":false},







|







12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
	"517":{"url":"./tip/517.md","keywords":"tk menu","created":"13-Sept-2018","post-history":"","state":"Final","tk-branch":"tip-517","tcl-version":"8.7","vote":"Done","type":"Project","title":"# TIP 517: Add -activerelief Configuration Option to the menu widget","author":["Francois Vogel <[email protected]>"],"is-jest":false},
	"516":{"url":"./tip/516.md","keywords":"Tcl, TclOO","state":"Final","type":"Project","author":["Donal K. Fellows <[email protected]>"],"vote-results":"4/0/5 accepted","votes-for":"DKF, JN, JD, AK","votes-against":"none","created":"7-Sept-2018","title":"# TIP 516: More OO Slot Operations","post-history":"","tcl-branch":"tip-516","vote":"Done","tcl-version":"8.7","votes-present":"BG, KBK, DGP, FV, SL","is-jest":false},
	"515":{"url":"./tip/515.md","state":"Final","type":"Project","author":["Jan Nijtmans <[email protected]>"],"vote-results":"8/0/1 accepted","votes-for":"DKF, KBK, JN, JD, DGP, FV, SL, AK","votes-against":"none","created":"7-Sept-2018","title":"# TIP 515: Level Value Reform","post-history":"","tcl-branch":"tip-515","vote":"Done","tcl-version":"8.7","votes-present":"BG","is-jest":false},
	"514":{"url":"./tip/514.md","keywords":"Tcl","created":"20-Aug-2018","post-history":"","state":"Final","tcl-branch":"tip-514","tcl-version":"8.7","vote":"Done","type":"Project","title":"# TIP 514: Platform differences in handling int/wide","author":["Jan Nijtmans <[email protected]>"],"is-jest":false},
	"513":{"url":"./tip/513.md","keywords":"Tcl,data structure","created":"02-Aug-2017","post-history":"","state":"Draft","implementation-url":"https://core.tcl.tk/tips/doc/trunk/attach/513/agendas.tcl","tcl-version":"8.7","vote":"Pending","type":"Project","title":"# TIP 513: Better support for 'agendas' as arrays, dictionaries or lists","author":["Florian Murr <[email protected]>"],"is-jest":false},
	"512":{"url":"./tip/512.md","keywords":"Tcl","created":"25-June-2018","post-history":"","state":"Final","tcl-branch":"tip-512","tcl-version":"8.7","vote":"Done","type":"Project","title":"# TIP 512: No stub for Tcl_SetExitProc()","author":["Jan Nijtmans <[email protected]>"],"is-jest":false},
	"511":{"url":"./tip/511.md","keywords":"Tcl,threads","state":"Accepted","type":"Project","author":["Christian Werner <[email protected]>"],"vote-results":"4/0/5 accepted","votes-for":"DKF, BG, KBK, JN, JD, SL","votes-against":"none","created":"14-June-2018","title":"# TIP 511: Implement Tcl_AsyncMarkFromSignal()","post-history":"","implementation-url":"https://www.androwish.org/index.html/info/40790af1e8e4ec9f","vote":"Done","tcl-version":"8.7","votes-present":"DGP, FV, AK","is-jest":false},
	"510":{"url":"./tip/510.md","":"might be to just co-distribute, just as TDBC is with Tcl","keywords":"Tk","state":"Draft","vote-summary":"Rejected 1/3/1","type":"Project","tk-branch":"tip-510","author":["René Zaumseil <[email protected]>"],"votes-against":"KBK, JN, FV","votes-for":"DKF","created":"5-Jun-2018","vote-comments":"code not yet ready, needs porting to macOS; alternate","title":"# TIP 510: Add Rbc and Tkpath widgets to Tk","post-history":"","vote":"Done","tcl-version":"8.7","votes-present":"BG","is-jest":false},
	"509":{"url":"./tip/509.md","keywords":"Tcl,threads","state":"Final","type":"Project","author":["Frédéric Bonnet <[email protected]>"],"vote-results":"8/0/1 accepted","votes-for":"DKF, KBK, JN, JD, DGP, FV, SL, AK","votes-against":"none","created":"24-May-2018","title":"# TIP 509: Implement reentrant mutexes on all platforms","post-history":"","tcl-branch":"tip-509","vote":"Done","tcl-version":"8.7","votes-present":"BG","is-jest":false},
	"508":{"url":"./tip/508.md","keywords":"Tcl,array","state":"Final","type":"Project","author":["Frédéric Bonnet <[email protected]>"],"vote-results":"9/0/0 accepted","votes-for":"DKF, BG, KBK, JN, JD, DGP, FV, SL, AK","votes-against":"none","created":"13-May-2018","title":"# TIP 508: New subcommand [array default]","post-history":"","tcl-branch":"tip-508","vote":"Done","tcl-version":"8.7","votes-present":"none","is-jest":false},
	"507":{"url":"./tip/507.md","keywords":"Tk","created":"9-May-2018","post-history":"","state":"Draft","tk-branch":"tip-507","tcl-version":"8.7","vote":"","type":"Project","title":"# TIP 507: Include simple SVG support with nanosvg","author":["René Zaumseil <[email protected]>"],"is-jest":false},
	"506":{"url":"./tip/506.md","state":"Final","vote-summary":"Accepted 5/0/1","type":"Project","author":["Don Porter <[email protected]>"],"votes-for":"DKF, KBK, JN, DGP, SL","votes-against":"none","created":"30-Mar-2018","title":"# TIP 506: Purge RefCount Macros","post-history":"","vote":"Done","tcl-version":"8.7","tcl-branch":"tip-506","votes-present":"BG, FV","is-jest":false},
	"505":{"url":"./tip/505.md","state":"Final","type":"Project","author":["Don Porter <[email protected]>"],"vote-results":"8/0/1 accepted","votes-for":"DKF, KBK, JN, JD, DGP, FV, SL, AK","votes-against":"none","created":"26-Mar-2018","title":"# TIP 505: Make [lreplace] Accept All Out-of-Range Index Values","post-history":"","tcl-branch":"tip-505","vote":"Done","tcl-version":"8.6.9","votes-present":"BG","is-jest":false},
	"504":{"url":"./tip/504.md","keywords":"Tcl,string,insert","obsoletes":"475","created":"21-Mar-2018","post-history":"","state":"Draft","tcl-branch":"dgp-string-insert","tcl-version":"8.7","vote":"Pending","type":"Project","title":"# TIP 504: New subcommand [string insert]","author":["Don Porter <[email protected]>"],"is-jest":false},
	"503":{"url":"./tip/503.md","created":"05-Feb-2018","post-history":"","state":"Final","tcl-branch":"tip-503","tcl-version":"8.7","vote":"Done","type":"Project","title":"# TIP 503: End Tcl 8.3 Source Compatibility Support","author":["Don Porter <[email protected]>"],"is-jest":false},
525
526
527
528
529
530
531
532
	"4":{"url":"./tip/4.md","created":"26-Oct-2000","post-history":"","state":"Draft","vote":"Pending","type":"Informative","title":"# TIP 4: Tcl Release and Distribution Philosophy","discussions-to":"news:comp.lang.tcl","author":["Brent Welch <[email protected]>","Donal K. Fellows <[email protected]>","Larry W. Virden <[email protected]>","Larry W. Virden <[email protected]>"],"is-jest":false},
	"3":{"url":"./tip/3.md","created":"14-Sep-2000","post-history":"","state":"Accepted","vote":"Done","type":"Process","title":"# TIP 3: TIP Format","author":["Andreas Kupries <[email protected]>","Donal K. Fellows <[email protected]>"],"is-jest":false},
	"2":{"url":"./tip/2.md","created":"12-Sep-2000","post-history":"","state":"Draft","vote":"Pending","type":"Process","title":"# TIP 2: TIP Guidelines","author":["Andreas Kupries <[email protected]>","Donal K. Fellows <[email protected]>","Don Porter <[email protected]>","Mo DeJong <[email protected]>","Larry W. Virden <[email protected]>","Kevin Kenny <[email protected]>"],"is-jest":false},
	"1":{"url":"./tip/1.md","created":"14-Sep-2000","post-history":"","state":"Active","vote":"No voting","type":"Informational","title":"# TIP 1: TIP Index","author":["TIP Editor <[email protected]>"],"is-jest":false},
	"0":{"url":"./tip/0.md","created":"11-Dec-2000","post-history":"","state":"Final","vote":"Done","type":"Process","title":"# TIP 0: Tcl Core Team Basic Rules","author":["John Ousterhout <[email protected]>"],"is-jest":false},
	"@min": 0,
	"@max": 527
}, "@timestamp": 1543334261}







|
525
526
527
528
529
530
531
532
	"4":{"url":"./tip/4.md","created":"26-Oct-2000","post-history":"","state":"Draft","vote":"Pending","type":"Informative","title":"# TIP 4: Tcl Release and Distribution Philosophy","discussions-to":"news:comp.lang.tcl","author":["Brent Welch <[email protected]>","Donal K. Fellows <[email protected]>","Larry W. Virden <[email protected]>","Larry W. Virden <[email protected]>"],"is-jest":false},
	"3":{"url":"./tip/3.md","created":"14-Sep-2000","post-history":"","state":"Accepted","vote":"Done","type":"Process","title":"# TIP 3: TIP Format","author":["Andreas Kupries <[email protected]>","Donal K. Fellows <[email protected]>"],"is-jest":false},
	"2":{"url":"./tip/2.md","created":"12-Sep-2000","post-history":"","state":"Draft","vote":"Pending","type":"Process","title":"# TIP 2: TIP Guidelines","author":["Andreas Kupries <[email protected]>","Donal K. Fellows <[email protected]>","Don Porter <[email protected]>","Mo DeJong <[email protected]>","Larry W. Virden <[email protected]>","Kevin Kenny <[email protected]>"],"is-jest":false},
	"1":{"url":"./tip/1.md","created":"14-Sep-2000","post-history":"","state":"Active","vote":"No voting","type":"Informational","title":"# TIP 1: TIP Index","author":["TIP Editor <[email protected]>"],"is-jest":false},
	"0":{"url":"./tip/0.md","created":"11-Dec-2000","post-history":"","state":"Final","vote":"Done","type":"Process","title":"# TIP 0: Tcl Core Team Basic Rules","author":["John Ousterhout <[email protected]>"],"is-jest":false},
	"@min": 0,
	"@max": 527
}, "@timestamp": 1543613497}
Changes to index.md.
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
<td valign='top'><a href='https://www.androwish.org/index.html/info/40790af1e8e4ec9f'>Link</a></td>
</tr>
<tr class='project projectdraft projectdraft87 project87'>
<td valign='top'><a href='./tip/510.md'>510</a></td>
<td valign='top'>Project</td>
<td valign='top'>8.7</td>
<td valign='top'>Draft</td>
<td valign='top'># TIP 510: Add Rbc to Tk</td>
<td valign='top'><a href='/tk/timeline?r=tip-510'>Link</a></td>
</tr>
<tr class='project projectfinal projectfinal87 project87'>
<td valign='top'><a href='./tip/509.md'>509</a></td>
<td valign='top'>Project</td>
<td valign='top'>8.7</td>
<td valign='top'>Final</td>







|







257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
<td valign='top'><a href='https://www.androwish.org/index.html/info/40790af1e8e4ec9f'>Link</a></td>
</tr>
<tr class='project projectdraft projectdraft87 project87'>
<td valign='top'><a href='./tip/510.md'>510</a></td>
<td valign='top'>Project</td>
<td valign='top'>8.7</td>
<td valign='top'>Draft</td>
<td valign='top'># TIP 510: Add Rbc and Tkpath widgets to Tk</td>
<td valign='top'><a href='/tk/timeline?r=tip-510'>Link</a></td>
</tr>
<tr class='project projectfinal projectfinal87 project87'>
<td valign='top'><a href='./tip/509.md'>509</a></td>
<td valign='top'>Project</td>
<td valign='top'>8.7</td>
<td valign='top'>Final</td>
Changes to tip/510.md.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

21


22
23

















24
25


26
27
28
29
30


31

32

33



34
35
36


37


38






39



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

67
68
69





























70
71
72
73
74

75

76
77
78

79
80
81
82
83






# TIP 510: Add Rbc to Tk
	Author:         René Zaumseil <[email protected]>
	State:          Draft
	Type:           Project
	Vote:           Done
	Created:        5-Jun-2018
	Post-History:   
	Keywords:       Tk
	Tcl-Version:    8.7
	Tk-Branch:      tip-510
	Vote-Summary:   Rejected 1/3/1
	Votes-For:      DKF
	Votes-Against:  KBK, JN, FV
	Votes-Present:  BG
	Vote-Comments:  code not yet ready, needs porting to macOS; alternate
	                might be to just co-distribute, just as TDBC is with Tcl
-----

# Abstract


*Rbc* aka "Refactored BLT Components" provides some widgets which are missing in *Tk*.


This TIP intends to add *Rbc* in the same way as *Ttk* to *Tk*.


















# Rationale



*Tk* has already adopted some of *BLT/Rbc* commands.
Still missing are the widgets.

*Rbc* is available on sourceforge and github, but the development is stalled.



Modernizing *Rbc* and including it in *Tk* will give some great new widgets.

Using the same approach like in *Ttk* will give results in very short time.

There is also less risk because *Rbc* is already used in different projects.




# Specification



C-source code will be put in `.../generic/rbc/`


Tcl-source  code will be put in `.../library/rbc/`






Test files will be put in `.../tests/rbc/`




The *Rbc* files will be added to the makefiles.
The call to the `Rbc_Init()` function will be added in tkWindow.c

## Platform Compatibility

Initially, there will not be support for macOS when not using X11 for
rendering. _This is an interim situation stemming from the Rbc
developers being unable to target that platform when writing code;
implementation there will be welcome and authorized under this TIP._

# Discussion

Which commands should be included?

- **vector**: needed for graph
- **graph**: curve display widget
- **stripchart**: 
- **barchart**:
- **busy**: not needed, because we already have **tk busy**
- **winop**: not needed; only functionality not duplicated is **winop snap**

Should there be a special switch to enable compiling and including *Rbc*?

Should we change *Rbc* to some other name to prevent name clashes?

Should we export a C-interface?


See also discussion at the [wiki](http://wiki.tcl.tk/55360).






























# Implementation

A patch implementing these changes will be available in the fossil
repository in the [tip-510 branch](https://core.tcl.tk/tk/timeline?r=tip-510).


Test/Documentation updates not yet done.


# Alternatives


- Rewrite new tk widgets with code of rbc

# Copyright

This document has been placed in the public domain.






|



















>
|
>
>
|

>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>


>
>
|
|

|

>
>
|
>
|
>
|
>
>
>



>
>
|
>
>
|
>
>
>
>
>
>
|
>
>
>

|
|

|

<
<
<
<
|
<

<
|
<
<
<
<
<
<

<
|
<
|
<
>



>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>


|


>
|
>



>
|




>
>
>
>
>
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87




88

89

90






91

92

93

94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# TIP 510: Add Rbc and Tkpath widgets to Tk
	Author:         René Zaumseil <[email protected]>
	State:          Draft
	Type:           Project
	Vote:           Done
	Created:        5-Jun-2018
	Post-History:   
	Keywords:       Tk
	Tcl-Version:    8.7
	Tk-Branch:      tip-510
	Vote-Summary:   Rejected 1/3/1
	Votes-For:      DKF
	Votes-Against:  KBK, JN, FV
	Votes-Present:  BG
	Vote-Comments:  code not yet ready, needs porting to macOS; alternate
	                might be to just co-distribute, just as TDBC is with Tcl
-----

# Abstract

[Rbc][] aka "Refactored [BLT][] Components" have graph widgets and Tk commands which are missing in *Tk*.

[Tkpath][] is a 2D-canvas like widget modelled after [SVG][].

This TIP intends to add the following command to Tk:

**rbc::graph**, **rbc::stripchart** and **rbc::barchart** as **graph**

> To get the original functionality a *-style* option will be added. This
option can only be set on creation time.

**rbc::vector** as **graph::vector**

> The vector is currently only used inside the graph widget. The namespace hidden version leaves room for a first class command with the same name.

**rbc::winop snap** as **tk snap**

> Only the snap functionality is needed here. The busy command already exists as "tk busy" :)

**tkp::canvas** as **path**

> The new path widget will contain the [SVG][] like items and an additional **window** item to include other windows. Support functions will be placed in the **::path** namespace.

# Rationale

## Rbc commands

*Tk* has already adopted some of [BLT][]/[Rbc][] commands.
Still missing are the above mentioned commands.

[Rbc][] is available on sourceforge and github, but the development is stalled.

[BLT][], the orignal source, is at sourceforge. The author G. Howlett makes sporadic changes. Then there are large times without activity. It is not possible to estimate when a new version will be ready.

Modernizing [Rbc][] and including it in *Tk* will give some great new widgets.
There is also less risk because [Rbc][] is already used in different projects.

## Tkpath

The original developer of [Tkpath][] passed away. There are some mirrors, but with no real development. More information could be found on <https://wiki.tcl-lang.org/page/tkpath>.

The intent of [Tkpath][] was to substitute the *Tk* canvas. This leads to problems with advanced features (matrix transformations). Therefore the new **path** widget will only contain [SVG][] like items. The only exception is the **window** item. This item is necessary to embed other widgets.

# Specification

## Files

- C-source code will be put in `.../generic/rbc/`
  - `rcb*.[ch]` graph widget and vector command
  - `tk*.[ch]` tkpath widget
- Tcl-source code will be put in `.../library/`
  - [`graph.tcl`](https://core.tcl.tk/tk/doc/tip-510/library/graph.tcl) graph widget bindings
  - [`path.tcl`](https://core.tcl.tk/tk/doc/tip-510/library/path.tcl) path widget helper function under **::path**
- Documentaion files will be put in `.../doc/`
  - [`graph.n.md`](https://core.tcl.tk/tk/doc/tip-510/doc/graph.n.md) graph widget documentation
  - [`vector.n.md`](https://core.tcl.tk/tk/doc/tip-510/doc/vector.n.md) graph::vector command documentation
  - [`path.n.md`](https://core.tcl.tk/tk/doc/tip-510/doc/path.n.md) path widget documentation
- Test files will be put in `.../tests/rbc/`
  - [`graph.test`](https://core.tcl.tk/tk/doc/tip-510/tests/rbc/graph.test) graph widget tests
  - [`graph_vector.test`](https://core.tcl.tk/tk/doc/tip-510/tests/rbc/graph_vector.test) graph::vector command tests
  - [`path.test`](https://core.tcl.tk/tk/doc/tip-510/tests/rbc/path.test) path widget tests

The new files are  added to the makefiles.
The calls to the initialization functions are in tkWindow.c

## ::oo::class widgets





The new widgets **graph** and **path** are implemented as **oo::class**. This will make it easy to extent the functionality. As an example see the file `.../library/graph.tcl` in which the method **binding** of the **graph** widget is implemented.



## C Interface








Alle new functionality is in the two header files [`rbcInt.h`](https://core.tcl.tk/tk/doc/tip-510/generic/rbc/rbcInt.h) and [`tkPathInt.h`]((https://core.tcl.tk/tk/doc/tip-510/generic/rbc/tkPathInt.h). No functionality is currently exported.

 

# Discussion

See also discussion at the [wiki](http://wiki.tcl.tk/55360).

A first voting was rejected, mostly because of the missing Mac implementation. See:

<http://code.activestate.com/lists/tcl-core/20357/>  
<http://code.activestate.com/lists/tcl-core/20368/>  

and with some analysis from Donal:

<http://code.activestate.com/lists/tcl-core/20384/>  

# Open issues

- Mac implementation of **graph** widget. May be borrow code from **path**
- Remove or change old code in `generic/rbc/rbc*` files <http://code.activestate.com/lists/tcl-core/20384/>
- Hardcoded usage of compiler and libraries in [`win/Makefile.in`](https://core.tcl.tk/tk/doc/tip-510/win/Makefile.in), [`win/makefile.vc`](https://core.tcl.tk/tk/doc/tip-510/win/makefile.vc) and [`unix/Makefile.in`](https://core.tcl.tk/tk/doc/tip-510/unix/Makefile.in) (search for "#RZ TODO").
- Add **path** files in Mac implementation. It works at least in [Androwish][].
- Which platforms should be used in **path**
  - SDL/AGG: platform independent, more work is needed using [`tkSDLAGGPath.cpp`](https://core.tcl.tk/tk/doc/tip-510/generic/rbc/tkSDLAGGPath.cpp). See in [Androwish][]
  - GDI+ on Windows => working with [`tkWinGDIPlusPath.cpp`](https://core.tcl.tk/tk/doc/tip-510/generic/rbc/`tkWinGDIPlusPath.cpp)
  - Cairo on unix => working with [`tkUnixCairoPath.c`](https://core.tcl.tk/tk/doc/tip-510/generic/rbc/tkUnixCairoPath.c)
  - For Mac see [`tkMacOSXPath.c`](https://core.tcl.tk/tk/doc/tip-510/generic/rbc/tkMacOSXPath.c)
- Provide demos
- Add more **path** tests
- Is it necessary to translate the documentation into man format?
- It is currently not possible to use unique abbreviations of slass method names p.e. "graph .g; .g conf" A workaround would be to add all those method names. May be this can be solved in tcl::oo directly?

Any help especially with the Mac implementation would be great!

And could please look someone with `configure` foo at the Makefile's

# Implementation

A patch implementing these changes is available in the fossil
repository in the [tip-510 branch](https://core.tcl.tk/tk/timeline?r=tip-510).

Test files are available in the .../tests/rbc/ directory.

Documentation is available in md-Format in the .../doc/ directory.

# Alternatives

- Wait on new [BLT][].
- Develop widgets in extensions.

# Copyright

This document has been placed in the public domain.

[Androwish]: <http://www.androwish.org/index.html/dir?ci=acc27dd8488dc770&name=jni/tkpath>
[BLT]: <https://sourceforge.net/projects/blt/>
[Rbc]: <https://sourceforge.net/projects/rbctoolkit/>
[SVG]: <http://www.w3.org/TR/SVG11/>
[Tkpath]: <https://sourceforge.net/projects/tclbitprint/>