https://wiki.inkscape.org/wiki/api.php?action=feedcontributions&user=Tavmjong&feedformat=atomInkscape Wiki - User contributions [en]2024-03-19T05:29:34ZUser contributionsMediaWiki 1.36.1https://wiki.inkscape.org/wiki/index.php?title=Summit2024_Rennes_Attendees&diff=122700Summit2024 Rennes Attendees2024-03-13T21:16:41Z<p>Tavmjong: /* Who is Attending? */</p>
<hr />
<div><br />
== Travel Support ==<br />
<br />
The Inkscape Project Leadership Committee has allocated $25,000 to support Inkscape community members travel expenses. This includes transportation, lodging, meals, and miscellaneous expenses.<br />
<br />
To ask for travel support, add your name below, and then contact Tavmjong (tavmjong@free.fr or via RocketChat) with a (very) short statement on what you have contributed to Inkscape in the past year and with what you plan to work on during the summit and LGM. It can be anything from promoting Inkscape via social media to software development.<br />
<br />
For planning purposes, include an estimate of expenses.<br />
<br />
All travel reimbursements <b>MUST</b> follow the [https://sfconservancy.org/projects/policies/conservancy-travel-policy.html SFC Travel Policy].<br />
<br />
== Who is Attending? ==<br />
<br />
Please add yourself to the list and then contact Tav about travel support.<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|+ List of Attendees<br />
|-<br />
! rowspan="2" | Who<br />
! rowspan="2" | Dates<br />
! colspan="2" | Arrival<br />
! colspan="2" | Departure<br />
! rowspan="2" | Hotel<br />
|-<br />
! Date/Time<br />
! Detail<br />
! Date/Time<br />
! Detail<br />
|-<br />
| Tavmjong Bah <br />
| 6 May - 12 May<br />
|<br />
| By car<br />
|<br />
| By car<br />
|<br />
|-<br />
| Marc Jeanmougin<br />
| TBD<br />
| <!-- arrival date + time --><br />
| Train<br />
| <!-- departure date + time --><br />
| Train<br />
| <!-- hotel --><br />
|-<br />
|Rafał Siejakowski<br />
|6 May – 9 May<br />
|<br />
|By air<br />
|<br />
|By air<br />
|<br />
|-<br />
| Sample Person<br />
| <!-- dates --><br />
| <!-- arrival date + time --><br />
| <!-- arrival details, e.g. flight number --><br />
| <!-- departure date + time --><br />
| <!-- departure details, e.g. flight number --><br />
| <!-- hotel --><br />
|-! Total<br />
|}<br />
<br />
TBD: "To Be Determined"<br />
<br />
The Inkscape board has approved travel reimbursements of up to $2500 per person (subject to a $25,000 cap). Requests for reimbursements are subject to the SFC travel policy. Pay attention, especially, to the requirements for documenting fare searches and buying tickets in advance.<br />
<br />
== Other ==<br />
<br />
Separate allocations for:<br />
* Inkscape dinner, participants and guests (500€).<br />
* Snacks, etc. (200€).<br />
* Venue: Free.</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Summit2024_Rennes_Attendees&diff=122699Summit2024 Rennes Attendees2024-03-13T21:15:50Z<p>Tavmjong: /* Who is Attending? */</p>
<hr />
<div><br />
== Travel Support ==<br />
<br />
The Inkscape Project Leadership Committee has allocated $25,000 to support Inkscape community members travel expenses. This includes transportation, lodging, meals, and miscellaneous expenses.<br />
<br />
To ask for travel support, add your name below, and then contact Tavmjong (tavmjong@free.fr or via RocketChat) with a (very) short statement on what you have contributed to Inkscape in the past year and with what you plan to work on during the summit and LGM. It can be anything from promoting Inkscape via social media to software development.<br />
<br />
For planning purposes, include an estimate of expenses.<br />
<br />
All travel reimbursements <b>MUST</b> follow the [https://sfconservancy.org/projects/policies/conservancy-travel-policy.html SFC Travel Policy].<br />
<br />
== Who is Attending? ==<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|+ List of Attendees<br />
|-<br />
! rowspan="2" | Who<br />
! rowspan="2" | Dates<br />
! colspan="2" | Arrival<br />
! colspan="2" | Departure<br />
! rowspan="2" | Hotel<br />
|-<br />
! Date/Time<br />
! Detail<br />
! Date/Time<br />
! Detail<br />
|-<br />
| Tavmjong Bah <br />
| 6 May - 12 May<br />
|<br />
| By car<br />
|<br />
| By car<br />
|<br />
|-<br />
| Marc Jeanmougin<br />
| TBD<br />
| <!-- arrival date + time --><br />
| Train<br />
| <!-- departure date + time --><br />
| Train<br />
| <!-- hotel --><br />
|-<br />
|Rafał Siejakowski<br />
|6 May – 9 May<br />
|<br />
|By air<br />
|<br />
|By air<br />
|<br />
|-<br />
| Sample Person<br />
| <!-- dates --><br />
| <!-- arrival date + time --><br />
| <!-- arrival details, e.g. flight number --><br />
| <!-- departure date + time --><br />
| <!-- departure details, e.g. flight number --><br />
| <!-- hotel --><br />
|-! Total<br />
|}<br />
<br />
TBD: "To Be Determined"<br />
<br />
The Inkscape board has approved travel reimbursements of up to $2500 per person (subject to a $25,000 cap). Requests for reimbursements are subject to the SFC travel policy. Pay attention, especially, to the requirements for documenting fare searches and buying tickets in advance.<br />
<br />
== Other ==<br />
<br />
Separate allocations for:<br />
* Inkscape dinner, participants and guests (500€).<br />
* Snacks, etc. (200€).<br />
* Venue: Free.</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Summit2024_Rennes_Attendees&diff=122683Summit2024 Rennes Attendees2024-03-10T11:33:48Z<p>Tavmjong: /* Travel Support */</p>
<hr />
<div><br />
== Travel Support ==<br />
<br />
The Inkscape Project Leadership Committee has allocated $25,000 to support Inkscape community members travel expenses. This includes transportation, lodging, meals, and miscellaneous expenses.<br />
<br />
To ask for travel support, add your name below, and then contact Tavmjong (tavmjong@free.fr or via RocketChat) with a (very) short statement on what you have contributed to Inkscape in the past year and with what you plan to work on during the summit and LGM. It can be anything from promoting Inkscape via social media to software development.<br />
<br />
For planning purposes, include an estimate of expenses.<br />
<br />
All travel reimbursements <b>MUST</b> follow the [https://sfconservancy.org/projects/policies/conservancy-travel-policy.html SFC Travel Policy].<br />
<br />
== Who is Attending? ==<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|+ List of Attendees<br />
|-<br />
! rowspan="2" | Who<br />
! rowspan="2" | Dates<br />
! rowspan="2" | Maximum Allocation<br />
! colspan="2" | Arrival<br />
! colspan="2" | Departure<br />
! rowspan="2" | Hotel<br />
|-<br />
! Date/Time<br />
! Detail<br />
! Date/Time<br />
! Detail<br />
|-<br />
| Tavmjong Bah <br />
| TBD<br />
| Per SFC Rules<br />
|<br />
| By car<br />
|<br />
| By car<br />
|<br />
|-<br />
| Marc Jeanmougin<br />
| TBD<br />
| TBD<br />
| <!-- arrival date + time --><br />
| Train<br />
| <!-- departure date + time --><br />
| Train<br />
| <!-- hotel --><br />
|-<br />
| Sample Person<br />
| <!-- dates --><br />
| TBD<br />
| <!-- arrival date + time --><br />
| <!-- arrival details, e.g. flight number --><br />
| <!-- departure date + time --><br />
| <!-- departure details, e.g. flight number --><br />
| <!-- hotel --><br />
|-! Total<br />
!<br />
!<br />
! $ TBD<br />
!<br />
!<br />
!<br />
!<br />
!<br />
|}<br />
<br />
TBD: "To Be Determined"<br />
<br />
<!-- The Inkscape board has approved travel reimbursements of up to $2000 per person. Note: participants require the formality of a board vote. --><br />
<br />
== Other ==<br />
<br />
Separate allocations for:<br />
* Inkscape dinner, participants and guests (500€).<br />
* Snacks, etc. (200€).<br />
* Venue: Free.</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Summit2024_Rennes_Attendees&diff=122682Summit2024 Rennes Attendees2024-03-10T11:29:06Z<p>Tavmjong: /* Who is Attending? */</p>
<hr />
<div><br />
== Travel Support ==<br />
<br />
The Inkscape Project Leadership Committee has allocated $25,000 to support Inkscape community members travel expenses. To ask for travel support, add your name below, and send an email to .... with a (very) short statement on what you have contributed to Inkscape in the past year and with what you plan to work on during the summit and LGM. It can be anything from promoting Inkscape via social media to software development. For planning purposes, include an estimate of expenses. All travel reimburesments must follow the [https://sfconservancy.org/projects/policies/conservancy-travel-policy.html SFC Travel Policy].<br />
<br />
== Who is Attending? ==<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|+ List of Attendees<br />
|-<br />
! rowspan="2" | Who<br />
! rowspan="2" | Dates<br />
! rowspan="2" | Maximum Allocation<br />
! colspan="2" | Arrival<br />
! colspan="2" | Departure<br />
! rowspan="2" | Hotel<br />
|-<br />
! Date/Time<br />
! Detail<br />
! Date/Time<br />
! Detail<br />
|-<br />
| Tavmjong Bah <br />
| TBD<br />
| Per SFC Rules<br />
|<br />
| By car<br />
|<br />
| By car<br />
|<br />
|-<br />
| Marc Jeanmougin<br />
| TBD<br />
| TBD<br />
| <!-- arrival date + time --><br />
| Train<br />
| <!-- departure date + time --><br />
| Train<br />
| <!-- hotel --><br />
|-<br />
| Sample Person<br />
| <!-- dates --><br />
| TBD<br />
| <!-- arrival date + time --><br />
| <!-- arrival details, e.g. flight number --><br />
| <!-- departure date + time --><br />
| <!-- departure details, e.g. flight number --><br />
| <!-- hotel --><br />
|-! Total<br />
!<br />
!<br />
! $ TBD<br />
!<br />
!<br />
!<br />
!<br />
!<br />
|}<br />
<br />
TBD: "To Be Determined"<br />
<br />
<!-- The Inkscape board has approved travel reimbursements of up to $2000 per person. Note: participants require the formality of a board vote. --><br />
<br />
== Other ==<br />
<br />
Separate allocations for:<br />
* Inkscape dinner, participants and guests (500€).<br />
* Snacks, etc. (200€).<br />
* Venue: Free.</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Inkscape_Summit_2024_Rennes&diff=122681Inkscape Summit 2024 Rennes2024-03-10T11:26:00Z<p>Tavmjong: </p>
<hr />
<div><br />
This page details the planning of Inkscape's 2024 Summit in Rennes, France, May 6th to May 8th. It is just prior to LGM which is from May 9 to May 12th.<br />
<br />
Old: [[Hackfest2023 Bensberg]] [[Hackfest2019 Saarbrücken]], [[Hackfest2019 SCALE]], [[Hackfest2018 Kiel]], [[Hackfest2018 LGM]], [[Hackfest2018]], [[Hackfest2017]], [[Hackfest2016]], [[Hackfest2015]].<br />
<br />
= Inkscape Summit: Rennes, France =<br />
<br />
==Description==<br />
<br />
A gathering of Inkscapers! We will work on Inkscape, website, outreach, bugs, new features, and packaging; in fact anything that can benefit from Inkscapers being physically in the same space.<br />
<br />
The summit will take place before (and continue informally through) the [https://libregraphicsmeeting.org/2024/ 2024 LGM (Libre Graphics Meeting)].<br />
<br />
==Rennes==<br />
<br />
Rennes is a city about two hours by train west of Paris.<br />
<br />
* [https://en.wikipedia.org/wiki/Rennes Rennes on Wikipedia]<br />
* [https://www.tourisme-rennes.com/en Tourism (official)]<br />
<br />
==Venue==<br />
<br />
The Summit will take place at Activdesign, 4A rue du Bignon (yes). It's an art school that teaches Inkscape, Krita, Blender, and Godot.<br />
<br />
==LGM==<br />
<br />
Thursday, 9th of May through Sunday, 12th of May. [https://libregraphicsmeeting.org/2024/program.html Program]<br />
<br />
==Catering==<br />
<br />
Around Activdesign there is one bakery and supermarket.<br />
<br />
Activdesign have a little kitchen with microwave, fridge, coffee machine, tea, and few dishes.<br />
<br />
==Facilities==<br />
<br />
TO BE UPDATED<br />
* Wireless (yes)<br />
* Europlug type C and F.<br />
* LCD projector (no more, it's more TV or second monitor)<br />
* White board (yes)<br />
* Café, Tea, micro-waves, water (yes)<br />
<br />
<br />
==Nearby Amenities==<br />
<br />
The center is at 20 min in bus.<br />
<br />
==Accommodations==<br />
<br />
In the center of the city you have some hostels with ** or *****.<br />
Near Activdesign there is an ibis budget. Maybe a one or two shared AirBnB's.<br />
<br />
Hostels :<br />
<br />
Near LGM place (S-E of Rennes) :<br />
<br />
F1Hotel : about 40€ / night, up to 3 guests per room : <nowiki>https://all.accor.com/hotel/2312/index.en.shtml</nowiki><br />
<br />
Hotel Kyriad : about 45€/ night : <nowiki>https://rennes-sud-chantepie.kyriad.com/en-us/</nowiki><br />
<br />
B&B hotel : about 60€ / night, up to 2 guests per room : <nowiki>https://www.hotel-bb.com/en/hotel/rennes-sud-chantepie?arrival_date=05/09/2024&departure_date=05/12/2024&r1_ad=2&testClick=false&Gclic=B&wh_token=2975e487-5673-4565-ad74-2cd9f01b0143-178703-4406&utm_source=hotelfinder&utm_medium=metasearch&utm_campaign=fr_conversion_gha_paid_rennes-sud-chantepie</nowiki><br />
<br />
Brit hotel : about 70-80€ / night, up to 2 guests per room : <nowiki>https://hotel-rennes-castel.brithotel.com/rooms-hotel?action=moteur_resa&checkindate=09%2F05%2F2024&checkoutdate=12%2F05%2F2024&partid=88&nb_adt=2&curcode=EUR&desktop=&ghftotalprice=263.92&ghfusercountry=FR&googlesite=localuniversal&isrobot=false&bookingSource=GoogleCPC&utm_campaign=Google_360&campaignid=19409624839&utm_source=GoogleHotel&utm_medium=cpc&utm_content=11542&nb_adt=2&isHotelCampaign=true&gclid=CjwKCAiA3JCvBhA8EiwA4kujZs9qda8muPvTU1xEceiri-x319k_NAIfrujCXTYTv_OPlIjLhWpBkBoCrxAQAvD_BwE#resa</nowiki><br />
<br />
<br />
We are just near Chantepie city, which have some available hotels too<br />
<br />
Downtown :<br />
<br />
Youth Hostel, might be collective rooms, but really cheap : <nowiki>https://book.octorate.com/octobook/site/reservation/result.xhtml?checkin=2024-05-09&pax=2&codice=424789&checkout=2024-05-12&referer=freebookinglinks#</nowiki><br />
<br />
Adagio Access ApartHotel, about 50€ / night, have kitchen included : <nowiki>https://www.adagio-city.com/gb/hotel-8398-aparthotel-adagio-access-rennes-centre/index.shtml</nowiki><br />
<br />
Appart Hôtel - Séjours & Affaires Rennes de Bretagne, about 60€/night : <nowiki>https://www.sejours-affaires.com/uk/hotel-residence-aparthotel-rennes-29.html</nowiki><br />
<br />
Le victoria - about 60-70€ / night : <nowiki>https://www.hotel-levictoria.com/en/</nowiki><br />
<br />
Be aware that since covid-time, breakfast are not included in prices anymore and that they might be quite expensive. We will try to make coffee available as soon as possible in the morning for those who would like to share with other LGMers.<br />
<br />
==Summit Dinner==<br />
<br />
An informal dinner will be held on ?.<br />
Lot of choice of restaurant : japonese, breton, italian. All are very good. Maybe is depending on the number. Japonese restaurant is quite little and the marocco is bigger and also very good. The breton are plenty but the good one have to be booked.<br />
<br />
==Attendance==<br />
<br />
Anybody interested in Inkscape is welcome to attend. Funding support for travel expenses is based active participation on the Inkscape community. See the [[Summit2024 Rennes Attendees]] page for more details.<br />
<br />
==Summit Topics and Schedule==<br />
<br />
A schedule will be developed based on input from attendees and the Inkscape community. See the [[Summit2024 Rennes Topics]] page for further details.<br />
<br />
==Helpers==<br />
<br />
The following folk have offered to assist with organization work, in limited capacities:<br />
<br />
* You<br />
* And you?<br />
* Tav<br />
* Elisa<br />
<br />
[[Category:Hackfest]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Inkscape_Summit_2024_Rennes&diff=122678Inkscape Summit 2024 Rennes2024-03-05T17:21:18Z<p>Tavmjong: /* Accomidations */</p>
<hr />
<div><br />
This page details the planning of Inkscape's <span style="color:darkred">PROPOSED</span> 2024 Summit in Rennes, France, May 6th to May 8th. It is just prior to LGM which is from May 9 to May 12th.<br />
<br />
Old: [[Hackfest2023 Bensberg]] [[Hackfest2019 Saarbrücken]], [[Hackfest2019 SCALE]], [[Hackfest2018 Kiel]], [[Hackfest2018 LGM]], [[Hackfest2018]], [[Hackfest2017]], [[Hackfest2016]], [[Hackfest2015]].<br />
<br />
= Inkscape Summit: Rennes, France =<br />
<br />
==Description==<br />
<br />
A gathering of Inkscapers! We will work on Inkscape, website, outreach, bugs, new features, and packaging; in fact anything that can benefit from Inkscapers being physically in the same space.<br />
<br />
The summit will take place before (and continue informally through) the [https://libregraphicsmeeting.org/2024/ 2024 LGM conference].<br />
<br />
==Rennes==<br />
<br />
Rennes is a city about two hours by train west of Paris.<br />
<br />
* [https://en.wikipedia.org/wiki/Rennes Rennes on Wikipedia]<br />
* [https://www.tourisme-rennes.com/en Tourism (official)]<br />
<br />
==Venue==<br />
<br />
TO BE VERIFIED<br />
<br />
The Summit will take place at Activdesign, 4A rue du Bignon. It's an art school who teach Inkscape, Krita, Blender and Godot.<br />
<br />
==LGM==<br />
<br />
Thursday, 9th of May through Sunday, 12th of May. [https://libregraphicsmeeting.org/2024/program.html Program]<br />
<br />
==Catering==<br />
<br />
?<br />
<br />
==Facilities==<br />
<br />
TO BE UPDATED<br />
* Wireless<br />
* Europlug type C and F.<br />
* LCD projector<br />
* White board<br />
* Café, Tea, micro-waves, water<br />
<br />
<br />
==Nearby Amenities==<br />
<br />
The center is at 20 min in bus.<br />
<br />
==Accommodations==<br />
<br />
In the center of the city you have some hostels with ** or *****.<br />
Near Activdesign there is an ibis budget. Maybe a one or two shared AirBnB's.<br />
<br />
==Summit Dinner==<br />
<br />
An informal dinner will be held on ?.<br />
Lot of choice of restaurant : japonese, breton, italian, marocco. All are very good. Maybe is depending on the number. Japonese restaurant is quite little and the marocco is bigger and also very good. The breton are plenty but the good one have to be booked.<br />
<br />
==Attendance==<br />
<br />
Anybody interested in Inkscape is welcome to attend. Funding support for travel expenses is based active participation on the Inkscape community. See the [[Summit2024 Rennes Attendees]] page for more details.<br />
<br />
==Summit Topics and Schedule==<br />
<br />
A schedule will be developed based on input from attendees and the Inkscape community. See the [[Summit2024 Rennes Topics]] page for further details.<br />
<br />
==Helpers==<br />
<br />
The following folk have offered to assist with organization work, in limited capacities:<br />
<br />
* You<br />
* And you?<br />
* Tav<br />
<br />
[[Category:Hackfest]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Inkscape_Summit_2024_Rennes&diff=122677Inkscape Summit 2024 Rennes2024-03-05T16:52:46Z<p>Tavmjong: /* Venue */</p>
<hr />
<div><br />
This page details the planning of Inkscape's <span style="color:darkred">PROPOSED</span> 2024 Summit in Rennes, France, May 6th to May 8th. It is just prior to LGM which is from May 9 to May 12th.<br />
<br />
Old: [[Hackfest2023 Bensberg]] [[Hackfest2019 Saarbrücken]], [[Hackfest2019 SCALE]], [[Hackfest2018 Kiel]], [[Hackfest2018 LGM]], [[Hackfest2018]], [[Hackfest2017]], [[Hackfest2016]], [[Hackfest2015]].<br />
<br />
= Inkscape Summit: Rennes, France =<br />
<br />
==Description==<br />
<br />
A gathering of Inkscapers! We will work on Inkscape, website, outreach, bugs, new features, and packaging; in fact anything that can benefit from Inkscapers being physically in the same space.<br />
<br />
The summit will take place before (and continue informally through) the [https://libregraphicsmeeting.org/2024/ 2024 LGM conference].<br />
<br />
==Rennes==<br />
<br />
Rennes is a city about two hours by train west of Paris.<br />
<br />
* [https://en.wikipedia.org/wiki/Rennes Rennes on Wikipedia]<br />
* [https://www.tourisme-rennes.com/en Tourism (official)]<br />
<br />
==Venue==<br />
<br />
TO BE VERIFIED<br />
<br />
The Summit will take place at Activdesign, 4A rue du Bignon. It's an art school who teach Inkscape, Krita, Blender and Godot.<br />
<br />
==LGM==<br />
<br />
Thursday, 9th of May through Sunday, 12th of May. [https://libregraphicsmeeting.org/2024/program.html Program]<br />
<br />
==Catering==<br />
<br />
?<br />
<br />
==Facilities==<br />
<br />
TO BE UPDATED<br />
* Wireless<br />
* Europlug type C and F.<br />
* LCD projector<br />
* White board<br />
* Café, Tea, micro-waves, water<br />
<br />
<br />
==Nearby Amenities==<br />
<br />
The center is at 20 min in bus.<br />
<br />
==Accomidations==<br />
<br />
In the center of the city you have some hostels with ** or *****.<br />
Near Activdesign there is an ibis budget. Maybe a one or two shared AirBnB's.<br />
<br />
==Summit Dinner==<br />
<br />
An informal dinner will be held on ?.<br />
Lot of choice of restaurant : japonese, breton, italian, marocco. All are very good. Maybe is depending on the number. Japonese restaurant is quite little and the marocco is bigger and also very good. The breton are plenty but the good one have to be booked.<br />
<br />
==Attendance==<br />
<br />
Anybody interested in Inkscape is welcome to attend. Funding support for travel expenses is based active participation on the Inkscape community. See the [[Summit2024 Rennes Attendees]] page for more details.<br />
<br />
==Summit Topics and Schedule==<br />
<br />
A schedule will be developed based on input from attendees and the Inkscape community. See the [[Summit2024 Rennes Topics]] page for further details.<br />
<br />
==Helpers==<br />
<br />
The following folk have offered to assist with organization work, in limited capacities:<br />
<br />
* You<br />
* And you?<br />
* Tav<br />
<br />
[[Category:Hackfest]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Inkscape_Summit_2024_Rennes&diff=122676Inkscape Summit 2024 Rennes2024-03-05T16:52:30Z<p>Tavmjong: /* LGM */</p>
<hr />
<div><br />
This page details the planning of Inkscape's <span style="color:darkred">PROPOSED</span> 2024 Summit in Rennes, France, May 6th to May 8th. It is just prior to LGM which is from May 9 to May 12th.<br />
<br />
Old: [[Hackfest2023 Bensberg]] [[Hackfest2019 Saarbrücken]], [[Hackfest2019 SCALE]], [[Hackfest2018 Kiel]], [[Hackfest2018 LGM]], [[Hackfest2018]], [[Hackfest2017]], [[Hackfest2016]], [[Hackfest2015]].<br />
<br />
= Inkscape Summit: Rennes, France =<br />
<br />
==Description==<br />
<br />
A gathering of Inkscapers! We will work on Inkscape, website, outreach, bugs, new features, and packaging; in fact anything that can benefit from Inkscapers being physically in the same space.<br />
<br />
The summit will take place before (and continue informally through) the [https://libregraphicsmeeting.org/2024/ 2024 LGM conference].<br />
<br />
==Rennes==<br />
<br />
Rennes is a city about two hours by train west of Paris.<br />
<br />
* [https://en.wikipedia.org/wiki/Rennes Rennes on Wikipedia]<br />
* [https://www.tourisme-rennes.com/en Tourism (official)]<br />
<br />
==Venue==<br />
<br />
TO BE VERIFIED<br />
<br />
The hackfest will take place at Activdesign, 4A rue du Bignon. It's an art school who teach Inkscape, Krita, Blender and Godot.<br />
<br />
==LGM==<br />
<br />
Thursday, 9th of May through Sunday, 12th of May. [https://libregraphicsmeeting.org/2024/program.html Program]<br />
<br />
==Catering==<br />
<br />
?<br />
<br />
==Facilities==<br />
<br />
TO BE UPDATED<br />
* Wireless<br />
* Europlug type C and F.<br />
* LCD projector<br />
* White board<br />
* Café, Tea, micro-waves, water<br />
<br />
<br />
==Nearby Amenities==<br />
<br />
The center is at 20 min in bus.<br />
<br />
==Accomidations==<br />
<br />
In the center of the city you have some hostels with ** or *****.<br />
Near Activdesign there is an ibis budget. Maybe a one or two shared AirBnB's.<br />
<br />
==Summit Dinner==<br />
<br />
An informal dinner will be held on ?.<br />
Lot of choice of restaurant : japonese, breton, italian, marocco. All are very good. Maybe is depending on the number. Japonese restaurant is quite little and the marocco is bigger and also very good. The breton are plenty but the good one have to be booked.<br />
<br />
==Attendance==<br />
<br />
Anybody interested in Inkscape is welcome to attend. Funding support for travel expenses is based active participation on the Inkscape community. See the [[Summit2024 Rennes Attendees]] page for more details.<br />
<br />
==Summit Topics and Schedule==<br />
<br />
A schedule will be developed based on input from attendees and the Inkscape community. See the [[Summit2024 Rennes Topics]] page for further details.<br />
<br />
==Helpers==<br />
<br />
The following folk have offered to assist with organization work, in limited capacities:<br />
<br />
* You<br />
* And you?<br />
* Tav<br />
<br />
[[Category:Hackfest]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Inkscape_Summit_2024_Rennes&diff=122675Inkscape Summit 2024 Rennes2024-03-05T16:51:06Z<p>Tavmjong: /* Hackfest Dinner */</p>
<hr />
<div><br />
This page details the planning of Inkscape's <span style="color:darkred">PROPOSED</span> 2024 Summit in Rennes, France, May 6th to May 8th. It is just prior to LGM which is from May 9 to May 12th.<br />
<br />
Old: [[Hackfest2023 Bensberg]] [[Hackfest2019 Saarbrücken]], [[Hackfest2019 SCALE]], [[Hackfest2018 Kiel]], [[Hackfest2018 LGM]], [[Hackfest2018]], [[Hackfest2017]], [[Hackfest2016]], [[Hackfest2015]].<br />
<br />
= Inkscape Summit: Rennes, France =<br />
<br />
==Description==<br />
<br />
A gathering of Inkscapers! We will work on Inkscape, website, outreach, bugs, new features, and packaging; in fact anything that can benefit from Inkscapers being physically in the same space.<br />
<br />
The summit will take place before (and continue informally through) the [https://libregraphicsmeeting.org/2024/ 2024 LGM conference].<br />
<br />
==Rennes==<br />
<br />
Rennes is a city about two hours by train west of Paris.<br />
<br />
* [https://en.wikipedia.org/wiki/Rennes Rennes on Wikipedia]<br />
* [https://www.tourisme-rennes.com/en Tourism (official)]<br />
<br />
==Venue==<br />
<br />
TO BE VERIFIED<br />
<br />
The hackfest will take place at Activdesign, 4A rue du Bignon. It's an art school who teach Inkscape, Krita, Blender and Godot.<br />
<br />
==LGM==<br />
<br />
Tuesday, 9th of May through Friday, 12th of May.<br />
<br />
==Catering==<br />
<br />
?<br />
<br />
==Facilities==<br />
<br />
TO BE UPDATED<br />
* Wireless<br />
* Europlug type C and F.<br />
* LCD projector<br />
* White board<br />
* Café, Tea, micro-waves, water<br />
<br />
<br />
==Nearby Amenities==<br />
<br />
The center is at 20 min in bus.<br />
<br />
==Accomidations==<br />
<br />
In the center of the city you have some hostels with ** or *****.<br />
Near Activdesign there is an ibis budget. Maybe a one or two shared AirBnB's.<br />
<br />
==Summit Dinner==<br />
<br />
An informal dinner will be held on ?.<br />
Lot of choice of restaurant : japonese, breton, italian, marocco. All are very good. Maybe is depending on the number. Japonese restaurant is quite little and the marocco is bigger and also very good. The breton are plenty but the good one have to be booked.<br />
<br />
==Attendance==<br />
<br />
Anybody interested in Inkscape is welcome to attend. Funding support for travel expenses is based active participation on the Inkscape community. See the [[Summit2024 Rennes Attendees]] page for more details.<br />
<br />
==Summit Topics and Schedule==<br />
<br />
A schedule will be developed based on input from attendees and the Inkscape community. See the [[Summit2024 Rennes Topics]] page for further details.<br />
<br />
==Helpers==<br />
<br />
The following folk have offered to assist with organization work, in limited capacities:<br />
<br />
* You<br />
* And you?<br />
* Tav<br />
<br />
[[Category:Hackfest]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Inkscape_Summit_2024_Rennes&diff=122674Inkscape Summit 2024 Rennes2024-03-05T16:50:51Z<p>Tavmjong: /* Hackfest Topics and Schedule */</p>
<hr />
<div><br />
This page details the planning of Inkscape's <span style="color:darkred">PROPOSED</span> 2024 Summit in Rennes, France, May 6th to May 8th. It is just prior to LGM which is from May 9 to May 12th.<br />
<br />
Old: [[Hackfest2023 Bensberg]] [[Hackfest2019 Saarbrücken]], [[Hackfest2019 SCALE]], [[Hackfest2018 Kiel]], [[Hackfest2018 LGM]], [[Hackfest2018]], [[Hackfest2017]], [[Hackfest2016]], [[Hackfest2015]].<br />
<br />
= Inkscape Summit: Rennes, France =<br />
<br />
==Description==<br />
<br />
A gathering of Inkscapers! We will work on Inkscape, website, outreach, bugs, new features, and packaging; in fact anything that can benefit from Inkscapers being physically in the same space.<br />
<br />
The summit will take place before (and continue informally through) the [https://libregraphicsmeeting.org/2024/ 2024 LGM conference].<br />
<br />
==Rennes==<br />
<br />
Rennes is a city about two hours by train west of Paris.<br />
<br />
* [https://en.wikipedia.org/wiki/Rennes Rennes on Wikipedia]<br />
* [https://www.tourisme-rennes.com/en Tourism (official)]<br />
<br />
==Venue==<br />
<br />
TO BE VERIFIED<br />
<br />
The hackfest will take place at Activdesign, 4A rue du Bignon. It's an art school who teach Inkscape, Krita, Blender and Godot.<br />
<br />
==LGM==<br />
<br />
Tuesday, 9th of May through Friday, 12th of May.<br />
<br />
==Catering==<br />
<br />
?<br />
<br />
==Facilities==<br />
<br />
TO BE UPDATED<br />
* Wireless<br />
* Europlug type C and F.<br />
* LCD projector<br />
* White board<br />
* Café, Tea, micro-waves, water<br />
<br />
<br />
==Nearby Amenities==<br />
<br />
The center is at 20 min in bus.<br />
<br />
==Accomidations==<br />
<br />
In the center of the city you have some hostels with ** or *****.<br />
Near Activdesign there is an ibis budget. Maybe a one or two shared AirBnB's.<br />
<br />
==Hackfest Dinner==<br />
<br />
An informal dinner will be held on ?.<br />
Lot of choice of restaurant : japonese, breton, italian, marocco. All are very good. Maybe is depending on the number. Japonese restaurant is quite little and the marocco is bigger and also very good. The breton are plenty but the good one have to be booked.<br />
<br />
==Attendance==<br />
<br />
Anybody interested in Inkscape is welcome to attend. Funding support for travel expenses is based active participation on the Inkscape community. See the [[Summit2024 Rennes Attendees]] page for more details.<br />
<br />
==Summit Topics and Schedule==<br />
<br />
A schedule will be developed based on input from attendees and the Inkscape community. See the [[Summit2024 Rennes Topics]] page for further details.<br />
<br />
==Helpers==<br />
<br />
The following folk have offered to assist with organization work, in limited capacities:<br />
<br />
* You<br />
* And you?<br />
* Tav<br />
<br />
[[Category:Hackfest]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Inkscape_Summit_2024_Rennes&diff=122673Inkscape Summit 2024 Rennes2024-03-05T16:50:22Z<p>Tavmjong: /* Attendance */</p>
<hr />
<div><br />
This page details the planning of Inkscape's <span style="color:darkred">PROPOSED</span> 2024 Summit in Rennes, France, May 6th to May 8th. It is just prior to LGM which is from May 9 to May 12th.<br />
<br />
Old: [[Hackfest2023 Bensberg]] [[Hackfest2019 Saarbrücken]], [[Hackfest2019 SCALE]], [[Hackfest2018 Kiel]], [[Hackfest2018 LGM]], [[Hackfest2018]], [[Hackfest2017]], [[Hackfest2016]], [[Hackfest2015]].<br />
<br />
= Inkscape Summit: Rennes, France =<br />
<br />
==Description==<br />
<br />
A gathering of Inkscapers! We will work on Inkscape, website, outreach, bugs, new features, and packaging; in fact anything that can benefit from Inkscapers being physically in the same space.<br />
<br />
The summit will take place before (and continue informally through) the [https://libregraphicsmeeting.org/2024/ 2024 LGM conference].<br />
<br />
==Rennes==<br />
<br />
Rennes is a city about two hours by train west of Paris.<br />
<br />
* [https://en.wikipedia.org/wiki/Rennes Rennes on Wikipedia]<br />
* [https://www.tourisme-rennes.com/en Tourism (official)]<br />
<br />
==Venue==<br />
<br />
TO BE VERIFIED<br />
<br />
The hackfest will take place at Activdesign, 4A rue du Bignon. It's an art school who teach Inkscape, Krita, Blender and Godot.<br />
<br />
==LGM==<br />
<br />
Tuesday, 9th of May through Friday, 12th of May.<br />
<br />
==Catering==<br />
<br />
?<br />
<br />
==Facilities==<br />
<br />
TO BE UPDATED<br />
* Wireless<br />
* Europlug type C and F.<br />
* LCD projector<br />
* White board<br />
* Café, Tea, micro-waves, water<br />
<br />
<br />
==Nearby Amenities==<br />
<br />
The center is at 20 min in bus.<br />
<br />
==Accomidations==<br />
<br />
In the center of the city you have some hostels with ** or *****.<br />
Near Activdesign there is an ibis budget. Maybe a one or two shared AirBnB's.<br />
<br />
==Hackfest Dinner==<br />
<br />
An informal dinner will be held on ?.<br />
Lot of choice of restaurant : japonese, breton, italian, marocco. All are very good. Maybe is depending on the number. Japonese restaurant is quite little and the marocco is bigger and also very good. The breton are plenty but the good one have to be booked.<br />
<br />
==Attendance==<br />
<br />
Anybody interested in Inkscape is welcome to attend. Funding support for travel expenses is based active participation on the Inkscape community. See the [[Summit2024 Rennes Attendees]] page for more details.<br />
<br />
==Hackfest Topics and Schedule==<br />
<br />
A schedule will be developed based on input from attendees and the Inkscape community. See the [[Hackfest2024 Rennes Topics]] page for further details.<br />
<br />
==Helpers==<br />
<br />
The following folk have offered to assist with organization work, in limited capacities:<br />
<br />
* You<br />
* And you?<br />
* Tav<br />
<br />
[[Category:Hackfest]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Summit2024_Rennes_Attendees&diff=122672Summit2024 Rennes Attendees2024-03-05T16:49:20Z<p>Tavmjong: Tavmjong moved page Hackfest2024 Rennes Attendees to Summit2024 Rennes Attendees without leaving a redirect: Proper name of event.</p>
<hr />
<div><br />
== Travel Support ==<br />
<br />
The Inkscape Project Leadership Committee has allocated $25,000 to support Inkscape community members travel expenses. To ask for travel support, add your name below, and send an email to .... with a (very) short statement on what you have contributed to Inkscape in the past year and with what you plan to work on during the summit and LGM. It can be anything from promoting Inkscape via social media to software development. For planning purposes, include an estimate of expenses. All travel reimburesments must follow the [https://sfconservancy.org/projects/policies/conservancy-travel-policy.html SFC Travel Policy].<br />
<br />
== Who is Attending? ==<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|+ List of Attendees<br />
|-<br />
! rowspan="2" | Who<br />
! rowspan="2" | Dates<br />
! rowspan="2" | Maximum Allocation<br />
! colspan="2" | Arrival<br />
! colspan="2" | Departure<br />
! rowspan="2" | Hotel<br />
|-<br />
! Date/Time<br />
! Detail<br />
! Date/Time<br />
! Detail<br />
|-<br />
| Tavmjong Bah <br />
| TBD<br />
| Per SFC Rules<br />
|<br />
| By car<br />
|<br />
| By car<br />
|<br />
|-<br />
| Marc Jeanmougin<br />
| TBD<br />
| TBD<br />
| <!-- arrival date + time --><br />
| Train<br />
| <!-- departure date + time --><br />
| Train<br />
| <!-- hotel --><br />
|-<br />
| Sample Person<br />
| <!-- dates --><br />
| TBD<br />
| <!-- arrival date + time --><br />
| <!-- arrival details, e.g. flight number --><br />
| <!-- departure date + time --><br />
| <!-- departure details, e.g. flight number --><br />
| <!-- hotel --><br />
|-! Total<br />
!<br />
!<br />
! $ TBD<br />
!<br />
!<br />
!<br />
!<br />
!<br />
|}<br />
<br />
TBD: "To Be Determined"<br />
<br />
<!-- The Inkscape board has approved travel reimbursements of up to $2000 per person. Note: participants require the formality of a board vote. --><br />
<br />
Separate allocations for:<br />
* Inkscape dinner, participants and guests (500€).<br />
* Snacks, etc. (100€).<br />
* Venue: Free.<br />
<br />
<sup>1</sup> Requires formality of board vote.</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Summit2024_Rennes_Attendees&diff=122671Summit2024 Rennes Attendees2024-03-05T16:48:31Z<p>Tavmjong: Created page with " == Travel Support == The Inkscape Project Leadership Committee has allocated $25,000 to support Inkscape community members travel expenses. To ask for travel support, add yo..."</p>
<hr />
<div><br />
== Travel Support ==<br />
<br />
The Inkscape Project Leadership Committee has allocated $25,000 to support Inkscape community members travel expenses. To ask for travel support, add your name below, and send an email to .... with a (very) short statement on what you have contributed to Inkscape in the past year and with what you plan to work on during the summit and LGM. It can be anything from promoting Inkscape via social media to software development. For planning purposes, include an estimate of expenses. All travel reimburesments must follow the [https://sfconservancy.org/projects/policies/conservancy-travel-policy.html SFC Travel Policy].<br />
<br />
== Who is Attending? ==<br />
<br />
{| class="wikitable" style="text-align: center;"<br />
|+ List of Attendees<br />
|-<br />
! rowspan="2" | Who<br />
! rowspan="2" | Dates<br />
! rowspan="2" | Maximum Allocation<br />
! colspan="2" | Arrival<br />
! colspan="2" | Departure<br />
! rowspan="2" | Hotel<br />
|-<br />
! Date/Time<br />
! Detail<br />
! Date/Time<br />
! Detail<br />
|-<br />
| Tavmjong Bah <br />
| TBD<br />
| Per SFC Rules<br />
|<br />
| By car<br />
|<br />
| By car<br />
|<br />
|-<br />
| Marc Jeanmougin<br />
| TBD<br />
| TBD<br />
| <!-- arrival date + time --><br />
| Train<br />
| <!-- departure date + time --><br />
| Train<br />
| <!-- hotel --><br />
|-<br />
| Sample Person<br />
| <!-- dates --><br />
| TBD<br />
| <!-- arrival date + time --><br />
| <!-- arrival details, e.g. flight number --><br />
| <!-- departure date + time --><br />
| <!-- departure details, e.g. flight number --><br />
| <!-- hotel --><br />
|-! Total<br />
!<br />
!<br />
! $ TBD<br />
!<br />
!<br />
!<br />
!<br />
!<br />
|}<br />
<br />
TBD: "To Be Determined"<br />
<br />
<!-- The Inkscape board has approved travel reimbursements of up to $2000 per person. Note: participants require the formality of a board vote. --><br />
<br />
Separate allocations for:<br />
* Inkscape dinner, participants and guests (500€).<br />
* Snacks, etc. (100€).<br />
* Venue: Free.<br />
<br />
<sup>1</sup> Requires formality of board vote.</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Inkscape_Summit_2024_Rennes&diff=122670Inkscape Summit 2024 Rennes2024-03-05T16:39:03Z<p>Tavmjong: Created page with " This page details the planning of Inkscape's <span style="color:darkred">PROPOSED</span> 2024 Summit in Rennes, France, May 6th to May 8th. It is just prior to LGM which is f..."</p>
<hr />
<div><br />
This page details the planning of Inkscape's <span style="color:darkred">PROPOSED</span> 2024 Summit in Rennes, France, May 6th to May 8th. It is just prior to LGM which is from May 9 to May 12th.<br />
<br />
Old: [[Hackfest2023 Bensberg]] [[Hackfest2019 Saarbrücken]], [[Hackfest2019 SCALE]], [[Hackfest2018 Kiel]], [[Hackfest2018 LGM]], [[Hackfest2018]], [[Hackfest2017]], [[Hackfest2016]], [[Hackfest2015]].<br />
<br />
= Inkscape Summit: Rennes, France =<br />
<br />
==Description==<br />
<br />
A gathering of Inkscapers! We will work on Inkscape, website, outreach, bugs, new features, and packaging; in fact anything that can benefit from Inkscapers being physically in the same space.<br />
<br />
The summit will take place before (and continue informally through) the [https://libregraphicsmeeting.org/2024/ 2024 LGM conference].<br />
<br />
==Rennes==<br />
<br />
Rennes is a city about two hours by train west of Paris.<br />
<br />
* [https://en.wikipedia.org/wiki/Rennes Rennes on Wikipedia]<br />
* [https://www.tourisme-rennes.com/en Tourism (official)]<br />
<br />
==Venue==<br />
<br />
TO BE VERIFIED<br />
<br />
The hackfest will take place at Activdesign, 4A rue du Bignon. It's an art school who teach Inkscape, Krita, Blender and Godot.<br />
<br />
==LGM==<br />
<br />
Tuesday, 9th of May through Friday, 12th of May.<br />
<br />
==Catering==<br />
<br />
?<br />
<br />
==Facilities==<br />
<br />
TO BE UPDATED<br />
* Wireless<br />
* Europlug type C and F.<br />
* LCD projector<br />
* White board<br />
* Café, Tea, micro-waves, water<br />
<br />
<br />
==Nearby Amenities==<br />
<br />
The center is at 20 min in bus.<br />
<br />
==Accomidations==<br />
<br />
In the center of the city you have some hostels with ** or *****.<br />
Near Activdesign there is an ibis budget. Maybe a one or two shared AirBnB's.<br />
<br />
==Hackfest Dinner==<br />
<br />
An informal dinner will be held on ?.<br />
Lot of choice of restaurant : japonese, breton, italian, marocco. All are very good. Maybe is depending on the number. Japonese restaurant is quite little and the marocco is bigger and also very good. The breton are plenty but the good one have to be booked.<br />
<br />
==Attendance==<br />
<br />
Anybody interested in Inkscape is welcome to attend. Funding support for travel expenses is based active participation on the Inkscape community. See the [[Hackfest2024 Rennes Attendees]] page for more details.<br />
<br />
==Hackfest Topics and Schedule==<br />
<br />
A schedule will be developed based on input from attendees and the Inkscape community. See the [[Hackfest2024 Rennes Topics]] page for further details.<br />
<br />
==Helpers==<br />
<br />
The following folk have offered to assist with organization work, in limited capacities:<br />
<br />
* You<br />
* And you?<br />
* Tav<br />
<br />
[[Category:Hackfest]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Tracking_Dependencies&diff=122659Tracking Dependencies2024-02-26T10:19:02Z<p>Tavmjong: /* Distros */</p>
<hr />
<div>== Compilers ==<br />
<br />
* Version 1.0 requires a C++11 compiler.<br />
* Version 1.1 requires a C++17 compiler.<br />
* Version 1.4 requires a C++20 compiler.<br />
<br />
See [[c++11]], [[c++17]], and [[C++20]].<br />
<br />
== Libs ==<br />
<br />
C++ bindings are not included, since their required versions match those of the C counterparts.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Library<br />
! v 0.92<br />
! v 1.0<br />
! v 1.1<br />
! v 1.2<br />
! v 1.3<br />
! master<br />
! gtk4<br />
|-<br />
| Boehm-GC<br />
| 7.2<br />
| 7.2<br />
| 7.2<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| Cairo<br />
| 1.14<br />
| 1.14 (1.15.4 required for PDF links)<br />
| 1.16*<br />
| 1.16<br />
| 1.16<br />
|<br />
| 1.16**<br />
|-<br />
| double-conversion [https://github.com/google/double-conversion]<br/>''(lib2geom dependency)''<br />
| ''(not required)''<br />
| any<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| FreeType<br />
|<br />
|<br />
| 2.9* (Required for Variable fonts)<br />
| 2.9<br />
| 2.9<br />
|<br />
|<br />
|-<br />
| GDL<br />
| N/A<br />(3.4)<br />
| 3.4<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
|-<br />
| Glib<br />
| 2.28<br />
| 2.48<br />
| 2.56 or 2.62*<br />
| 2.64<br />
| 2.64<br />
|<br />
| 2.68**<br />
|-<br />
| GTK+<br />
| 2.24<br />(3.8)<br />
| 3.22<br />
| 3.24*<br />
| 3.24<br />
| 3.24<br />
|<br />
| 4.12<sup>+</sup><br />
|-<br />
| GNU Scientific Library<br />
| ?<br />
| ?<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| HarfBuzz<br />
| ?<br />
| ?<br />
| 2.2*<br />
| 2.6<br />
| 2.6<br />
| 2.6.5*<br />
|<br />
|-<br />
| libsigc++<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
|<br />
|<br />
|<br />
| 3.0**<br />
|-<br />
| libSoup<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libpotrace<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxml<br />
| ''2.6.11*''<br />
| ''2.6.11*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxslt<br />
| ''1.0.15*''<br />
| ''1.0.15*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| lcms<br />
| 1.13<br />
| 2.2<br />
| 2.2 (2.9*)<br />
| 2.9*<br />
| 2.9*<br />
|<br />
|<br />
|-<br />
| Pango<br />
| 1.24<br />
| 1.24 (1.41.1 required for variable fonts)<br />
| 1.42*<br />
| 1.44<br />
| 1.44 (HarfBuzz shaping)<br />
|<br />
| 2.48**<br />
|-<br />
| Poppler<br />
| 0.20.0<br />
| 0.20.0<br />
| 0.29 (0.71*)<br />
| 0.29 (0.71*)<br />
| 0.71*<br />
|<br />
|<br />
|-<br />
| [https://formulae.brew.sh/formula/gtk-mac-integration gtk-mac-integration]<br>[https://www.macports.org/ports.php?by=library&substr=gtk-osx-application-gtk3 gtk-osx-application-gtk3]<br />
| N/A<br />
| 2.0.8 ([[CompilingMacOsX|macOS only]])<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|}<br />
<br />
''* Tentative dependency''<br />
<br />
* Pango 1.42.2 requires Harfbuzz 1.4.2<br />
* Pango 1.44.0 requires Glib 2.59.2 and Harfbuzz 2.0. 1.44 exposes hb_font directly.<br />
* Pango 1.45.1 requires Glib 2.60<br />
* Pango 1.48.4 has vertical upright marks fix.<br />
* Harfbuzz 4.1 changes glyph positioning for upright vertical text when font does not have vertical metrics (from glyph touching to of cell to being centered in cell).<br />
<br />
''** Gtkmm4 requires API changed Glibmm, Cairomm, and Pangomm. In particular, enums use child namespaces in newer libraries (Cairo::FORMAT_ARGB32 -> Cairo::Surface::Format::ARGB32).''<br />
<br />
''<sup>+</sup> Decision at 5 Nov 2023 developer's meeting. Gtk4 4.10.1 has an important scrolling bug fix.''<br />
<br />
== Distros ==<br />
<br />
Note: This table is not relevant to (non-fink) MacOS X, where we ship the desired version with Inkscape.<br />
<br />
"Inkscape" column is default or distro version / oldest that builds - latest that builds. If no latest is given then that means trunk is expected to build on the given platform.<br />
<br />
e.g. for a distro that ships with 0.48 but should support building of trunk you might get:<br />
0.48 / 0.47-<br />
<br />
'''General rules:'''<br />
* Support latest Debian Stable (as of feature freeze) [https://www.debian.org/distrib/packages Debian packages]<br />
* Support latest Ubuntu LTS (as of feature freeze) [https://packages.ubuntu.com/ Ubuntu packages]<br />
**e.g. Considering Inkscape 1.2, the latest Ubuntu LTS at '''feature freeze time''' (around February 2022) would have been Ubuntu 20.04. The latest LTS at release time (around May 2022), though, will be Ubuntu 22.04. Therefore, according to the rule, we should support Ubuntu 20.04 LTS as the minimum version.<br />
** ''Note: For gtkmm4: Jammy: no package, Kinetic: 4.8, Lunar: 4.10, Mantic: 4.10''<br />
<br />
* Support last two Fedora releases (as of feature freeze) [https://packages.fedoraproject.org/ Fedora packages]<br />
* Don't break ''point'' releases.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Distro<br />
! Inkscape<br />
! gcc<sup>#</sup><br />
! clang<sup>#</sup><br />
! cairo<br />
! cairomm<br />
! freetype<br />
! glib<br />
! glibmm<br />
! gtk+<br />
! gtkmm<br />
! harfbuzz<br />
! pango<br />
! poppler<br />
! gdl<br />
! lcms2<br />
! libsigc++<br />
! libgc <!-- Fedora rpm: gc --><br />
! libsoup<br />
|-<br />
| Windows MSYS2 (2021-04-14)<br/>([https://github.com/Alexpux/MINGW-packages mingw-w64 packages] from MSYS2 project)<br />
<!-- see http://quodlibet.duckdns.org/msys2/base for list of latest package versions --><br />
| 1.0.2<br />
| 10.2.0<br />
| 11.0.0<br />
| 1.17.4<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.68.1<br />
| 2.66.0<br />
| 3.24.27<br />
| 3.24.3<br />
| 2.8.0<br />
| 1.48.4<br />
| 20.12.1<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.6<br />
| 8.0.4 <!-- mingw-w64-gc --><br />
| 2.72.0<br />
|-<br />
| Debian 11 (Bullseye, oldstable) <small>EOL 2026</small><br />
| 1.0.2<br />
| 10.2.1<br />
| 13.0.1<br />
| 1.16<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.66.8<br />
| 2.64.2<br />
| 3.24.24<br />
| 3.24.2<br />
| 2.7.4<br />
| 1.46.2<br />
| 20.09.0<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.4<br />
| 8.0.4<br />
| 2.72.0<br />
|-<br />
| Debian 12 (Bookworm, stable) <small>EOL 2028?</small><br />
| 1.2.2<br />
| 12.2.0<br />
| 15.0.6<br />
| 1.16.0<br />
| 1.12.1<br />
| 2.10.4<br />
| 2.74.5<br />
| 2.74.0<br />
| 3.24.36<br />4.8.3<br />
| 3.24.7<br />4.8.0<br />
| 6.0.0<br />
| 1.50.12<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.1<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.03<br />3.2.2<br />
|-<br />
| Ubuntu 22.04 LTS (Jammy Jellyfish) <small>EOL 2027-04</small><br />
| 1.1.2<br />
| 12.3.0<br />
| 15.0.7<br />
| 1.16.0<br />
| 1.12.2<br />
| 2.11.1<br />
| 2.72.1<br />
| 2.66.2<br />
| 3.24.33<br />4.6.2<br />
| 3.24.5<br />no libgtkmm-4.0<br />
| 2.7.4<br />
| 1.50.6<br />
| 22.02.0<br />
| 3.40.0<br />
| 2.12-rc1<br />
| 2.10.4<br />
| 8.0.6<br />
| 2.74.2<br />3.0.5<br />
|-<br />
| Ubuntu 23.10 (Mantic)<br />
| 1.2.2<br />
| 13.2.0<br />
| 16.0.0<br />(17.0.2)<br />
| 1.14.4<br />1.16.0<br />
| 1.14.4<br />1.16.2<br />
| 2.13.1<br />
| 2.78.0<br />
| 2.66.6<br />2.78.0<br />
| 3.24.38<br />4.12.2<br />
| 3.24.8<br />4.10.0<br />
| 8.0.1<br />
| 1.51.0<br />2.50.1<br />
| 23.08.0<br />
| 3.40.0<br />
| 2.14.2<br />
| 2.12.0<br />3.4.0<br />
| 8.2.4<br />
| 2.74.3<br />3.4.2<br />
|}<br />
<sup>#</sup>Debian and Ubuntu offer multiple gcc and clang versions, latest available version listed.<br />
<br />
* Agreed to at Saarbrücken hackfest.<br />
<br />
== Getting and Installing Source packages ==<br />
<br />
See [https://inkscape.org/develop/getting-started/ Getting Started]<br />
<br />
== Optional Dependencies ==<br />
<br />
Inkscape will still compile without these, but some features may be missing if they are absent during compilation:<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Library<br />
! scope="col"| Needed for<br />
! scope="col"| Default<br />
|-<br />
|aspell<br />
|Dictionaries for spell checking<br />
|On<br />
|-<br />
|libcdr<br />
|Open Corel Draw files<br />
|On<br />
|-<br />
|gettext/msgformat<br />
|Translation support<br />
|On<br />
|-<br />
|gtest/gmock<br />
|Automatted testing<br />
|Off<br />
|-<br />
|gspell<br />
|Spell checking<br />
|On<br />
|-<br />
|imagemagick<br />
|Bitmap editing extensions, bitmap import resolution<br />
|On<br />
|-<br />
|jpeg<br />
|jpeg import?<br />
|On<br />
|-<br />
|OpenMP<br />
|Multi-threaded filter rendering<br />
|On<br />
|-<br />
|scour<br />
|Save as Optimized SVG<br />
|(not needed during compiling, Python)<br />
|-<br />
|libvisio<br />
|Open Visio Files, use Visio stencils<br />
|On<br />
|-<br />
|libwpg<br />
|Open WordPerfect Graphics<br />
|On<br />
|-<br />
|}<br />
<br />
<br />
<br />
[[Category:About Inkscape]]<br />
[[Category:Developer Documentation]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Google_Summer_of_Code&diff=122658Google Summer of Code2024-02-10T14:11:40Z<p>Tavmjong: /* P6. Refactoring */</p>
<hr />
<div><div style="max-width:70em; margin-left: auto; margin-right: auto"><br />
= Welcome to Inkscape! =<br />
<br />
For quite a few years Inkscape has been successfully participating in [http://code.google.com/soc/ Google Summer of Code].<br />
<br />
Google has opened up the program to students AND beginners to Open Source who are 18 years are older. Projects can be medium size (~175 hours) or large size (~350 hours). Finish times are flexible, 12 to 22 weeks (with agreement of mentor).<br />
<br />
GSoC is a program where Google funds the development of specific features in open source software by university students and other new to open source. You don't need to be a Computer Science student to apply. Features to be developed are picked by Inkscape administrators from the pool of proposals submitted by applicants.<br />
<br />
We've mentored about half a dozen students a year since GSoC started. Many students enjoyed their work and continue to be involved; perhaps your mentor will be a past GSoC student! We have a high rate of acceptance of student code into the core codebase. Indeed, GSoC projects have been a key source of some of Inkscape's best features in the past several releases.<br />
<br />
If you are interested in joining us this summer, it is time to get your proposal ready. You can choose a proposal from our list of suggestions or come up with one of your own. In either either case, you '''must''' give us a detailed outline of what you plan to do. It is '''highly''' recommended that you discuss your idea as early as possible with Inkscape developers. They not only can give you guidance as you flesh out your proposal but ultimately you must convince them that you can do the work planned in the time allotted. '''If you have not discussed your proposal with Inkscape developers before you apply, your application will be rejected!'''<br />
<br />
= Candidate Applications =<br />
<br />
* Google program information:<br />
** [https://summerofcode.withgoogle.com/ Home page].<br />
** Summer of Code Application form. Applications open at 18:00 UTC on March 18th, 2024. -> https://developers.google.com/open-source/gsoc/timeline<br />
<br />
* Inkscape-specific information:<br />
** [[SOC Application Template]].<br />
** [[Roadmap | Inkscape Roadmap]] - to see our overall objectives.<br />
** [[Projects | Inkscape Development Project Ideas]] - broader list of development ideas.<br />
** [[SOC Writing Project Proposals]] - some guidelines for proposals.<br />
** [[SOC Selection Criteria]] - how we rate applications.<br />
<br />
'''Candidate Applications for GSoC 2024 must be submitted to the GSoC site by 18:00 UTC on April 2nd 2024.'''<br />
<br />
= The "two patches" rule =<br />
<br />
We require two patches from each potential GSoC student, before accepting the student for GSoC participation (it is the same requirement as for obtaining rights to commit changes to the code repository).<br />
<br />
The reason for this requirement is that you can show us that you have succeeded in building Inkscape on your PC, and that you have understood a little piece of Inkscape's code and are able to improve it. <br />
Inkscape is a large project, and you really should not try to understand all the code. Many (all?) developers know only parts of the program code!<br />
You can join our [https://inkscape.org/community/discussion/ IRC] channel or [https://chat.inkscape.org/channel/team_devel Rocket Chat] and ask developers for help.<br />
<br />
== Suggested "easy" bug fixes or improvements ==<br />
<br />
To get you started on Inkscape development, you can find (probably) easy-to-fix bugs or small improvements that require very little knowledge of the whole program by searching our [https://gitlab.com/inkscape/inkscape/issues/ bug-tracker] for bugs tagged with 'easy-fix'.<br />
<br />
= Performance Evaluation =<br />
<br />
GSoC has two formal evaluation points, at the ''mid-term'' and at the end. These evaluations determine if you receive the stipend from Google. In order to receive a pass for the evaluations you will need to show adequate progress toward your project's goals.<br />
<br />
To help you meet your goals and so that your mentor can better evaluate your progress you need to:<br />
<br />
* Have frequent, public discussions of your progress. (Don't rely on just your mentor for advice.)<br />
* Have a public Inkscape branch for your code to which you commit regularly.<br />
* Give weekly status reports.<br />
<br />
For the final pass, you will normally be required to merge your code into Inkscape trunk.<br />
<br />
Remember: ''we want you to succeed!''<br />
<br />
= Suggested Project Ideas =<br />
<br />
The following is a list of formal project suggestions, but do not feel limited to only these - some of our best contributions have been unique ideas that students had in mind from other sources!<br />
<br />
See also [[Development Project Ideas]], [[Refactoring projects]], [[Projects]], and https://blueprints.launchpad.net/inkscape/<br />
<br />
==P5. UI-Free Inkscape ==<br />
<br />
* Estimation of difficulty: Difficult - Long (350h)<br />
* Potential mentors: Marc Jeanmougin<br />
* Programming skills: C++, CMake<br />
* Prerequisites: Minimal knowledge of build systems. Experience with GtkMM helpful.<br />
<br />
<u>Detailed Description</u><br />
Inkscape currently builds with X11 and gtk and a lot of graphical dependencies. But since it is allowed to run in commandline, and there are controlled environments (servers) that use it to convert svg to png and to perform actions, there should be no need to force it to build with those. The main goal of this project is to add a WITH_GUI compilation flag that when OFF, does *not* link Inkscape with any graphical dependency. While much work has been done towards this goal, much remains to be done. DONE <s>As a next step, Inkscape's "verbs" which are mostly GUI dependent (even if there is no reason to be) need to be converted to Gio::Actions.</s> More work needs to be done to separate out hidden GUI dependencies that remain after the Verb to Action transition.<br />
<br />
<u>Use cases</u><br />
* Server installs, scripts<br />
<br />
==P6. Refactoring==<br />
* Estimation of difficulty: Moderate - Short or Long depending on scope (175h or 350h)<br />
* Potential mentors: Tavmjong Bah<br />
* Programming skills: C++<br />
* Prerequisites: proficient C++.<br />
<br />
<u>Detailed Description</u><br />
Inkscape began life as the C program Sodipodi. Sodipodi was mostly the work of one person who had a clear vision of how the code should work. A major motivation of the Inkscape fork was to allow others to easily contribute to development. This resulted in rapid development but at a cost: the code has become much messier and now lacks a clear vision. This project is to work on refactoring the code. Refactoring can take many forms. It could be creating a better directory structure with README's that describe the purpose and function of the code in each directory. This would include rewriting code to reduce dependencies across directories (which would help, for example, in achieving a headless version of Inkscape). It could be the continued transition from C to C++ which often results in major reductions in the number of code lines. Or it could be identifying and eliminating redundant code.<br />
<br />
A particularly ambitious project would be to replace the Garbage Collector by smart pointers.<br />
<br />
Refactoring is an important skill of which many books have been written. Here's a chance to gain valuable experience!<br />
<br />
See https://wiki.inkscape.org/wiki/index.php/Refactoring_projects for some ideas of projects.<br />
<br />
==P8. Add Text and Image Support to Live Path Effect System ==<br />
* Estimation of difficulty: Hard - Short (175h)<br />
* Potential mentors: Jabier Arraiza (Spanish, English(not native))<br />
* Programming skills: C++<br />
* Prerequisites: Experience managing bitmaps<br />
<u>Detailed Description</u><br />
Live Path Effects are non destructive effects applied to paths and shapes standalone or inside a group.<br /> <br />
This is done keepeng a reference to the original data to reaply when needed.<br /><br />
But ignore text and image elements.<br /><br />
Things to do:<br />
* Study add image, text, both and maybe others SVG elements to the LPE system.<br />
* Create/adapt minimun one LPE for each new type of element acepted as reference. Suggestion Perspective-Envelope.<br />
<u>Use cases</u><br />
* Apply live effects to images and text based in C++ code in a non destructive way even in groups with mixed elements types.<br />
<br />
==P9. Path Library Improvements ==<br />
* Estimation of difficulty: Hard - Long (350h)<br />
* Potential mentors: Tavmjong Bah, KK<br />
* Programming skills: C++<br />
* Prerequisites: Strong math skills, specifically in geometry.<br />
<u>Detailed Description</u><br />
Inkscape relies on two geometry libraries for path manipulations: lib2geom and livarot. lib2geom is a generic modern library written specifically with Inkscape in mind. lib2geom is missing some functionality that Inkscape requires and that is found in livarot. This project is to move that functionality into lib2geom (or into separate files) using lib2geom path descriptions. A 2020 GSoC student did a significant amount of work understanding and documenting the issues involved. This project would be to build on his work.<br />
<br />
Specifically, the functionality needed is<br />
* Path offset/inset functions.<br />
* Path simplify.<br />
* Stroke to path function.<br />
* Line scanning (used for flowing text into a shape).<br />
<br />
==P11. Improvements to Paint Server Dialog ==<br />
<br />
* Estimation of difficulty: Easy to Medium - Short (175h)<br />
* Potential mentors: Tavmjong<br />
* Programming skills: C++<br />
* Prerequisites: Some knowledge of GTK and CSS.<br />
<u>Detailed Description</u><br />
The ''Paint Server Dialog'' allows a user to visually select a pattern or hatch to use in painting the ''fill'' or ''stroke'' of an object. This project would be to expand the dialog to cover gradients, meshes, and solid colors as well as make other improvements to the dialog. Interaction with the Inkscape's ''UX'' team will be required.<br />
<br />
== P13. Node-based filter editor ==<br />
<br />
*Estimation of difficulty: Hard - Long (350h)<br />
* Potential mentors: Mc<br />
* Programming skills: C++<br />
* Prerequisites: Minimal knowledge of build systems<br />
<br />
<u>Detailed Description:</u> The filter editor is kind of hard to understand and master based on its current UI. Using a node-based tool for it, such as what can be done with https://notabug.org/grindhold/libgtkflow would help people create and master the filter primitives easier.<br />
<br />
[https://gitlab.com/inkscape/ux/-/issues/40 '''Full poposal''']<br />
==P14. Cached styles for inkex==<br />
<br />
*Estimation of difficulty: Medium - Short (175h)<br />
*Potential mentors: Jonathan<br />
* Programming skills: Python, CSS<br />
* Prerequisites: minimal knowledge of test-driven development<br />
<br />
<u>Detailed Description:</u> When inkex, the Python library behind Inkscape's extension system, computes styles, this is relatively slow, especially for documents with either many style sheets or documents with many elements / highly nested documents. This is because for each element, the XPATH of each CSS rule is computed, and then it is checked whether the current element is in the XPATH result. Then, the same computation is repeated for the parent. Since Python is not very fast itself, such inefficiencies quickly make style evaluation unusable for big documents.<br />
<br />
With this project, we would explore ways to speed up those computations, mainly using caching and more intelligent ways of evaluating CSS rules. Some approaches might be taken from [https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/ a recent firefox refactoring].<br />
<br />
Ideally, the caching will be tuned to support read-only (export), read-heavy (modify path), write-heavy (generate from path) and write-only (import) extensions, which have different caching needs.<br />
<br />
The work should be done in a test-driven development approach.<br />
<br />
== P15. Import and Export extensions ==<br />
<br />
*Estimation of difficulty: Flexible, usually easy to medium, Short or Long depending on scope (175h or 350h)<br />
*Potential mentors: Jonathan<br />
* Programming skills: Python, Ability to read technical documents, depending on the format: some reverse engineering<br />
* Prerequisites: minimal knowledge of test-driven development<br />
<br />
<u>Detailed Description:</u> Inkscape is alway looking to improve compatibility! Some ideas of relevant file formats - each of them more than enough for one GSoC:*Refactor our '''DXF input and output''' extensions, and expand support towards binary DXF<br />
*Write an as-complete-as-possible '''EPS export''', circumventing the internal information loss in ghostscript (EPS is still relevant for scientific papers, but more and more tools are dropping support, so this is a chance to grab market share - the results of Adobe Distiller are much better than ghostscript's...)<br />
*Rewrite the '''XAML importer''' in Python (currenly XSLT) to match the capabilities of the new XAML exporter (i.e. support for different target frameworks, better text support...) - would have to select carefully what to support (drawing primitives) and what not (control elements) - the boundary is not as clear-cut as it seems.<br />
* Update the '''Synfig export''' to support the latest Synfig developments<br />
* '''Import or export of TikZ'''. There are a few abandoned extensions out there (from which we can borrow), but it's very widely used in science - both import and export could serve an important function in the scientific workflow.<br />
*'''Import of the proprietary fileformats''' of Affinity Design, Vectornator, Vectorstyler (especially the last two seem in their infancy and users at some point will sit on a bunch of files that they can't open anymore because their SAAS model wasn't profitable) .<br />
*'''Import of CGM''' - old, but ISO standardized. Was supported once and dropped when the uniconvertor extension was removed for 1.0.<br />
* '''Python based EMF / WMF importer -''' the current (core Inkscape) C extension is unmaintained and Python would probably be the right way to get more collaboration on it. A lot of public archives sit on mountains of EMF files. Note that the Document Foundation recently did a lot of work properly importing those files, so we can learn from them / maybe even join forces...<br />
*your favorite file format? - also have a look here: https://office.inkscape.org/nextcloud/index.php/s/Tq6cdDDGay6taCw<br />
==P16. Gcodetools refactoring and documentation==<br />
<br />
*Estimation of difficulty: Easy- Short or Long depending on scope (175h or 350h)<br />
*Potential mentors: Jonathan<br />
* Programming skills: Python<br />
* Prerequisites: Maker background / familiarity with the Maker community<br />
<br />
<u>Detailed Description:</u> [https://gitlab.com/inkscape/extras/extensions-gcodetools/ Gcodetools] is a set of Inkscape extensions that deal with reading and creating Gcode files, mostly for use in laser cutters or plotters. For this project, ideally someone with a Makerspace background will<br />
#query maker spaces on their needs regarding gcodetools,<br />
#implement those needs together with unit tests,<br />
# improve the test coverage of Gcodetools,<br />
#write proper documentation for it. (doesn't really exist at the moment).<br />
==P17. Packing / Nesting as an Inkscape extension==<br />
<br />
*Estimation of difficulty: Medium, Short or Long depending on scope (175h or 350h)<br />
*Potential mentors: Jonathan<br />
* Programming skills: Python<br />
* Prerequisites: Computational geometry<br />
<br />
<u>Detailed Description:</u> In this project, a set of packing / nesting algorithms will be implemented:<br />
*[https://en.wikipedia.org/wiki/Cutting_stock_problem Linear nesting] is not too useful in SVG, but might be a good place to get acquainted with the problem. 2D cutting stock problem would be very interesting to have and would work great with the new multipage functionality.<br />
*For efficient packing of free form objects, we might just re-implement [https://github.com/Jack000/SVGnest SVGNest] in Python. There are probably some more recent research papers which would be interesting to implement as a comparison.<br />
<br />
== P18. Improving UX of Node tool and Bezier tool ==<br />
*Estimation of difficulty: Medium - Hard, Short or Long depending on scope (175h or 350h)<br />
*Potential mentors: Tav, ??<br />
* Programming skills: C++,<br />
*Prerequisites: Computational geometry<br />
<br />
<u>Detailed Description:</u> This project would improve workflow of editing of geometry of paths. Combining strengths of Pen tool and Node tool with modifiers and new behaviors. This improvement should benefit pro users but also beginners. Good example of this implementation is in blenders new pen tool.<br />
<br />
'''[https://gitlab.com/inkscape/ux/-/issues/5 Full Proposal here]'''[[File:Imageasdasd.png|thumb|184x184px]]<br />
<br />
== P19. Improving UI of Live path effects ==<br />
*Estimation of difficulty: Medium- Hard, Short or Long depending on scope (175h or 350h)<br />
*Potential mentors: Mike, jabier ,??<br />
* Programming skills: GTK 4, C++<br />
*Prerequisites: Front end UI , familiarity with Live path effects<br />
[[File:Imageasdasda qrq.png|thumb|146x146px]]<br />
<br />
<u>Detailed Description:</u> This project Should implement Proposed UI clean up of Controls . LPE controls shoulbe be more user freindly and predictive,<br />
<br />
[https://gitlab.com/inkscape/ux/-/issues/?sort=popularity&state=opened&label_name%5B%5D=Dialog%3A%3ALPE&first_page_size=100 '''Full Proposed designs''']<br />
<br />
<br />
== P20. Recolor Artwork ==<br />
* Estimation of difficulty: Variable - Short (90h or 175h)<br />
* Potential mentors: Adam Belis ?<br />
* Programming skills: usually C++<br />
* Prerequisites: <br />
<br />
<u>Detailed Description</u><br />
An easy and convenient way how to change any color from the selection. Useful for experimenting and tweaking colors.<br />
<br />
<br />
[https://gitlab.com/inkscape/inbox/-/issues/6095 '''Full proposal Here''']<br />
<br />
<br />
<u>Use cases</u><br />
* Amaze us!<br />
<br />
==Pxx. Your project ==<br />
* Estimation of difficulty: Variable - Short or Long (175h or 350h)<br />
* Potential mentors: Marc Jeanmougin<br />
* Programming skills: usually C++<br />
* Prerequisites: good ideas<br />
<br />
<u>Detailed Description</u><br />
The most successful GSoC we had in the past were students coming with their own past, use cases and ideas for Inkscape. Many basic tools like 3d cubes or connectors you can see in Inkscape now have been brought by brilliant people (like you) with ideas. If we think that your project fits with Inkscape (ie: has its place with a vector graphic editor), we can help you refining your ideas and help bring shiny new stuff to life!<br />
<br />
<u>Use cases</u><br />
* Amaze us!<br />
<br />
= Successful SOC Projects from Previous Years =<br />
* 2005<br />
** Connectors<br />
** Inkboard<br />
** [http://www.openclipart.org/ Open Clip Art Library (OCAL)] Interface<br />
** DXF Import / Export<br />
* [[Google Summer of Code 2006|2006]]<br />
** Support for SVG Filters<br />
** Filter Effects<br />
** PDF export<br />
** Inkboard Protocol Spec / Lib Conversion<br />
* [[Google Summer of Code 2007|2007]]<br />
** Text Style Improvements<br />
** PDF import<br />
** Live Path Effects<br />
** 3D Box Tool<br />
** UI for SVG Filter Effects<br />
** Raster Functionality<br />
** Importing from, and Exporting to, a remote ccHost instance<br />
* [[Google Summer of Code 2008|2008]]<br />
** SVG Fonts support<br />
** 2Geom refactoring project - port most geometry code to 2Geom<br />
** lib2geom: interactive applications showing off the power of lib2geom<br />
** Tech drawing abilities<br />
** A test suite<br />
* 2009<br />
** [[GSoC2009 Node Tool Rewrite|Node tool rewrite]]<br />
** D-Bus scripting API<br />
** Connector tool improvements<br />
** ICC/CMYK workflow<br />
* 2010<br />
** Cairo-based rendering<br />
** C++ification of SP Layer<br />
* 2011<br />
** Rendering caching<br />
** Javascript support improvements<br />
** CSS support improvements<br />
* 2012<br />
** Usibility Improvements for Guides<br />
** [[Tiling tool|On-canvas support for Tessellations]]<br />
** Creating python bindings for lib2geom<br />
* [[Google Summer of Code 2013|2013]]<br />
** Recolor Tool<br />
** Improved Units Support<br />
** Electronics CAD Support<br />
** New From Templates Dialog<br />
** New Raster to Vector Algorithm<br />
* 2014<br />
** Better Support for SVG Paints<br />
** Robust Boolean and Stroking Operations for 2Geom<br />
* 2016<br />
** [[GSoC 2016 Better data structure for selections|Better data structure for selections]]<br />
** [[Style Editor|CSS Style Sheet Editor]]<br />
* 2017<br />
** SVG 2 Text Support<br />
** Better CSS Style Sheet Support<br />
* 2019<br />
** Mesh gradient and hatches polyfills. Paint server dialog.<br />
* 2020<br />
** [https://gitlab.com/vanntile/inkscape-gsoc-2020 New dialog system.]<br />
** [https://gitlab.com/rathod-sahaab/gsoc-2020-inkscape Command palette dialog.]<br />
** Path operations.<br />
* 2021<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/3420 On canvas marker editing.]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/3328 Verbs to Gio::Actions.]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/3294 On canvas alignment snapping.]<br />
* 2022<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/4692 Tab Structure.]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/4694 Font Collections.]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/4756 Modernizing Memory Management.]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/4504 OCR Support.]<br />
* 2023<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/5335 GTK4 toolbar port preparation]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/5624 Customizable Appearance of Canvas Controls]<br />
<br />
[[Category:Developer Documentation]]<br />
</div></div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Google_Summer_of_Code&diff=122657Google Summer of Code2024-02-10T14:10:42Z<p>Tavmjong: /* P1. Better CSS Style Sheet Support */</p>
<hr />
<div><div style="max-width:70em; margin-left: auto; margin-right: auto"><br />
= Welcome to Inkscape! =<br />
<br />
For quite a few years Inkscape has been successfully participating in [http://code.google.com/soc/ Google Summer of Code].<br />
<br />
Google has opened up the program to students AND beginners to Open Source who are 18 years are older. Projects can be medium size (~175 hours) or large size (~350 hours). Finish times are flexible, 12 to 22 weeks (with agreement of mentor).<br />
<br />
GSoC is a program where Google funds the development of specific features in open source software by university students and other new to open source. You don't need to be a Computer Science student to apply. Features to be developed are picked by Inkscape administrators from the pool of proposals submitted by applicants.<br />
<br />
We've mentored about half a dozen students a year since GSoC started. Many students enjoyed their work and continue to be involved; perhaps your mentor will be a past GSoC student! We have a high rate of acceptance of student code into the core codebase. Indeed, GSoC projects have been a key source of some of Inkscape's best features in the past several releases.<br />
<br />
If you are interested in joining us this summer, it is time to get your proposal ready. You can choose a proposal from our list of suggestions or come up with one of your own. In either either case, you '''must''' give us a detailed outline of what you plan to do. It is '''highly''' recommended that you discuss your idea as early as possible with Inkscape developers. They not only can give you guidance as you flesh out your proposal but ultimately you must convince them that you can do the work planned in the time allotted. '''If you have not discussed your proposal with Inkscape developers before you apply, your application will be rejected!'''<br />
<br />
= Candidate Applications =<br />
<br />
* Google program information:<br />
** [https://summerofcode.withgoogle.com/ Home page].<br />
** Summer of Code Application form. Applications open at 18:00 UTC on March 18th, 2024. -> https://developers.google.com/open-source/gsoc/timeline<br />
<br />
* Inkscape-specific information:<br />
** [[SOC Application Template]].<br />
** [[Roadmap | Inkscape Roadmap]] - to see our overall objectives.<br />
** [[Projects | Inkscape Development Project Ideas]] - broader list of development ideas.<br />
** [[SOC Writing Project Proposals]] - some guidelines for proposals.<br />
** [[SOC Selection Criteria]] - how we rate applications.<br />
<br />
'''Candidate Applications for GSoC 2024 must be submitted to the GSoC site by 18:00 UTC on April 2nd 2024.'''<br />
<br />
= The "two patches" rule =<br />
<br />
We require two patches from each potential GSoC student, before accepting the student for GSoC participation (it is the same requirement as for obtaining rights to commit changes to the code repository).<br />
<br />
The reason for this requirement is that you can show us that you have succeeded in building Inkscape on your PC, and that you have understood a little piece of Inkscape's code and are able to improve it. <br />
Inkscape is a large project, and you really should not try to understand all the code. Many (all?) developers know only parts of the program code!<br />
You can join our [https://inkscape.org/community/discussion/ IRC] channel or [https://chat.inkscape.org/channel/team_devel Rocket Chat] and ask developers for help.<br />
<br />
== Suggested "easy" bug fixes or improvements ==<br />
<br />
To get you started on Inkscape development, you can find (probably) easy-to-fix bugs or small improvements that require very little knowledge of the whole program by searching our [https://gitlab.com/inkscape/inkscape/issues/ bug-tracker] for bugs tagged with 'easy-fix'.<br />
<br />
= Performance Evaluation =<br />
<br />
GSoC has two formal evaluation points, at the ''mid-term'' and at the end. These evaluations determine if you receive the stipend from Google. In order to receive a pass for the evaluations you will need to show adequate progress toward your project's goals.<br />
<br />
To help you meet your goals and so that your mentor can better evaluate your progress you need to:<br />
<br />
* Have frequent, public discussions of your progress. (Don't rely on just your mentor for advice.)<br />
* Have a public Inkscape branch for your code to which you commit regularly.<br />
* Give weekly status reports.<br />
<br />
For the final pass, you will normally be required to merge your code into Inkscape trunk.<br />
<br />
Remember: ''we want you to succeed!''<br />
<br />
= Suggested Project Ideas =<br />
<br />
The following is a list of formal project suggestions, but do not feel limited to only these - some of our best contributions have been unique ideas that students had in mind from other sources!<br />
<br />
See also [[Development Project Ideas]], [[Refactoring projects]], [[Projects]], and https://blueprints.launchpad.net/inkscape/<br />
<br />
==P5. UI-Free Inkscape ==<br />
<br />
* Estimation of difficulty: Difficult - Long (350h)<br />
* Potential mentors: Marc Jeanmougin<br />
* Programming skills: C++, CMake<br />
* Prerequisites: Minimal knowledge of build systems. Experience with GtkMM helpful.<br />
<br />
<u>Detailed Description</u><br />
Inkscape currently builds with X11 and gtk and a lot of graphical dependencies. But since it is allowed to run in commandline, and there are controlled environments (servers) that use it to convert svg to png and to perform actions, there should be no need to force it to build with those. The main goal of this project is to add a WITH_GUI compilation flag that when OFF, does *not* link Inkscape with any graphical dependency. While much work has been done towards this goal, much remains to be done. DONE <s>As a next step, Inkscape's "verbs" which are mostly GUI dependent (even if there is no reason to be) need to be converted to Gio::Actions.</s> More work needs to be done to separate out hidden GUI dependencies that remain after the Verb to Action transition.<br />
<br />
<u>Use cases</u><br />
* Server installs, scripts<br />
<br />
==P6. Refactoring==<br />
* Estimation of difficulty: Moderate - Short or Long depending on scope (175h or 350h)<br />
* Potential mentors: Tavmjong Bah<br />
* Programming skills: C++<br />
* Prerequisites: proficient C++.<br />
<br />
<u>Detailed Description</u><br />
Inkscape began life as the C program Sodipodi. Sodipodi was mostly the work of one person who had a clear vision of how the code should work. A major motivation of the Inkscape fork was to allow others to easily contribute to development. This resulted in rapid development but at a cost: the code has become much messier and now lacks a clear vision. This project is to work on refactoring the code. Refactoring can take many forms. It could be creating a better directory structure with README's that describe the purpose and function of the code in each directory. This would include rewriting code to reduce dependencies across directories (which would help, for example, in achieving a headless version of Inkscape). It could be the continued transition from C to C++ which often results in major reductions in the number of code lines. Or it could be identifying and eliminating redundant code. Refactoring is an important skill of which many books have been written. Here's a chance to gain valuable experience!<br />
<br />
See https://wiki.inkscape.org/wiki/index.php/Refactoring_projects for some ideas of projects.<br />
<br />
==P8. Add Text and Image Support to Live Path Effect System ==<br />
* Estimation of difficulty: Hard - Short (175h)<br />
* Potential mentors: Jabier Arraiza (Spanish, English(not native))<br />
* Programming skills: C++<br />
* Prerequisites: Experience managing bitmaps<br />
<u>Detailed Description</u><br />
Live Path Effects are non destructive effects applied to paths and shapes standalone or inside a group.<br /> <br />
This is done keepeng a reference to the original data to reaply when needed.<br /><br />
But ignore text and image elements.<br /><br />
Things to do:<br />
* Study add image, text, both and maybe others SVG elements to the LPE system.<br />
* Create/adapt minimun one LPE for each new type of element acepted as reference. Suggestion Perspective-Envelope.<br />
<u>Use cases</u><br />
* Apply live effects to images and text based in C++ code in a non destructive way even in groups with mixed elements types.<br />
<br />
==P9. Path Library Improvements ==<br />
* Estimation of difficulty: Hard - Long (350h)<br />
* Potential mentors: Tavmjong Bah, KK<br />
* Programming skills: C++<br />
* Prerequisites: Strong math skills, specifically in geometry.<br />
<u>Detailed Description</u><br />
Inkscape relies on two geometry libraries for path manipulations: lib2geom and livarot. lib2geom is a generic modern library written specifically with Inkscape in mind. lib2geom is missing some functionality that Inkscape requires and that is found in livarot. This project is to move that functionality into lib2geom (or into separate files) using lib2geom path descriptions. A 2020 GSoC student did a significant amount of work understanding and documenting the issues involved. This project would be to build on his work.<br />
<br />
Specifically, the functionality needed is<br />
* Path offset/inset functions.<br />
* Path simplify.<br />
* Stroke to path function.<br />
* Line scanning (used for flowing text into a shape).<br />
<br />
==P11. Improvements to Paint Server Dialog ==<br />
<br />
* Estimation of difficulty: Easy to Medium - Short (175h)<br />
* Potential mentors: Tavmjong<br />
* Programming skills: C++<br />
* Prerequisites: Some knowledge of GTK and CSS.<br />
<u>Detailed Description</u><br />
The ''Paint Server Dialog'' allows a user to visually select a pattern or hatch to use in painting the ''fill'' or ''stroke'' of an object. This project would be to expand the dialog to cover gradients, meshes, and solid colors as well as make other improvements to the dialog. Interaction with the Inkscape's ''UX'' team will be required.<br />
<br />
== P13. Node-based filter editor ==<br />
<br />
*Estimation of difficulty: Hard - Long (350h)<br />
* Potential mentors: Mc<br />
* Programming skills: C++<br />
* Prerequisites: Minimal knowledge of build systems<br />
<br />
<u>Detailed Description:</u> The filter editor is kind of hard to understand and master based on its current UI. Using a node-based tool for it, such as what can be done with https://notabug.org/grindhold/libgtkflow would help people create and master the filter primitives easier.<br />
<br />
[https://gitlab.com/inkscape/ux/-/issues/40 '''Full poposal''']<br />
==P14. Cached styles for inkex==<br />
<br />
*Estimation of difficulty: Medium - Short (175h)<br />
*Potential mentors: Jonathan<br />
* Programming skills: Python, CSS<br />
* Prerequisites: minimal knowledge of test-driven development<br />
<br />
<u>Detailed Description:</u> When inkex, the Python library behind Inkscape's extension system, computes styles, this is relatively slow, especially for documents with either many style sheets or documents with many elements / highly nested documents. This is because for each element, the XPATH of each CSS rule is computed, and then it is checked whether the current element is in the XPATH result. Then, the same computation is repeated for the parent. Since Python is not very fast itself, such inefficiencies quickly make style evaluation unusable for big documents.<br />
<br />
With this project, we would explore ways to speed up those computations, mainly using caching and more intelligent ways of evaluating CSS rules. Some approaches might be taken from [https://hacks.mozilla.org/2017/08/inside-a-super-fast-css-engine-quantum-css-aka-stylo/ a recent firefox refactoring].<br />
<br />
Ideally, the caching will be tuned to support read-only (export), read-heavy (modify path), write-heavy (generate from path) and write-only (import) extensions, which have different caching needs.<br />
<br />
The work should be done in a test-driven development approach.<br />
<br />
== P15. Import and Export extensions ==<br />
<br />
*Estimation of difficulty: Flexible, usually easy to medium, Short or Long depending on scope (175h or 350h)<br />
*Potential mentors: Jonathan<br />
* Programming skills: Python, Ability to read technical documents, depending on the format: some reverse engineering<br />
* Prerequisites: minimal knowledge of test-driven development<br />
<br />
<u>Detailed Description:</u> Inkscape is alway looking to improve compatibility! Some ideas of relevant file formats - each of them more than enough for one GSoC:*Refactor our '''DXF input and output''' extensions, and expand support towards binary DXF<br />
*Write an as-complete-as-possible '''EPS export''', circumventing the internal information loss in ghostscript (EPS is still relevant for scientific papers, but more and more tools are dropping support, so this is a chance to grab market share - the results of Adobe Distiller are much better than ghostscript's...)<br />
*Rewrite the '''XAML importer''' in Python (currenly XSLT) to match the capabilities of the new XAML exporter (i.e. support for different target frameworks, better text support...) - would have to select carefully what to support (drawing primitives) and what not (control elements) - the boundary is not as clear-cut as it seems.<br />
* Update the '''Synfig export''' to support the latest Synfig developments<br />
* '''Import or export of TikZ'''. There are a few abandoned extensions out there (from which we can borrow), but it's very widely used in science - both import and export could serve an important function in the scientific workflow.<br />
*'''Import of the proprietary fileformats''' of Affinity Design, Vectornator, Vectorstyler (especially the last two seem in their infancy and users at some point will sit on a bunch of files that they can't open anymore because their SAAS model wasn't profitable) .<br />
*'''Import of CGM''' - old, but ISO standardized. Was supported once and dropped when the uniconvertor extension was removed for 1.0.<br />
* '''Python based EMF / WMF importer -''' the current (core Inkscape) C extension is unmaintained and Python would probably be the right way to get more collaboration on it. A lot of public archives sit on mountains of EMF files. Note that the Document Foundation recently did a lot of work properly importing those files, so we can learn from them / maybe even join forces...<br />
*your favorite file format? - also have a look here: https://office.inkscape.org/nextcloud/index.php/s/Tq6cdDDGay6taCw<br />
==P16. Gcodetools refactoring and documentation==<br />
<br />
*Estimation of difficulty: Easy- Short or Long depending on scope (175h or 350h)<br />
*Potential mentors: Jonathan<br />
* Programming skills: Python<br />
* Prerequisites: Maker background / familiarity with the Maker community<br />
<br />
<u>Detailed Description:</u> [https://gitlab.com/inkscape/extras/extensions-gcodetools/ Gcodetools] is a set of Inkscape extensions that deal with reading and creating Gcode files, mostly for use in laser cutters or plotters. For this project, ideally someone with a Makerspace background will<br />
#query maker spaces on their needs regarding gcodetools,<br />
#implement those needs together with unit tests,<br />
# improve the test coverage of Gcodetools,<br />
#write proper documentation for it. (doesn't really exist at the moment).<br />
==P17. Packing / Nesting as an Inkscape extension==<br />
<br />
*Estimation of difficulty: Medium, Short or Long depending on scope (175h or 350h)<br />
*Potential mentors: Jonathan<br />
* Programming skills: Python<br />
* Prerequisites: Computational geometry<br />
<br />
<u>Detailed Description:</u> In this project, a set of packing / nesting algorithms will be implemented:<br />
*[https://en.wikipedia.org/wiki/Cutting_stock_problem Linear nesting] is not too useful in SVG, but might be a good place to get acquainted with the problem. 2D cutting stock problem would be very interesting to have and would work great with the new multipage functionality.<br />
*For efficient packing of free form objects, we might just re-implement [https://github.com/Jack000/SVGnest SVGNest] in Python. There are probably some more recent research papers which would be interesting to implement as a comparison.<br />
<br />
== P18. Improving UX of Node tool and Bezier tool ==<br />
*Estimation of difficulty: Medium - Hard, Short or Long depending on scope (175h or 350h)<br />
*Potential mentors: Tav, ??<br />
* Programming skills: C++,<br />
*Prerequisites: Computational geometry<br />
<br />
<u>Detailed Description:</u> This project would improve workflow of editing of geometry of paths. Combining strengths of Pen tool and Node tool with modifiers and new behaviors. This improvement should benefit pro users but also beginners. Good example of this implementation is in blenders new pen tool.<br />
<br />
'''[https://gitlab.com/inkscape/ux/-/issues/5 Full Proposal here]'''[[File:Imageasdasd.png|thumb|184x184px]]<br />
<br />
== P19. Improving UI of Live path effects ==<br />
*Estimation of difficulty: Medium- Hard, Short or Long depending on scope (175h or 350h)<br />
*Potential mentors: Mike, jabier ,??<br />
* Programming skills: GTK 4, C++<br />
*Prerequisites: Front end UI , familiarity with Live path effects<br />
[[File:Imageasdasda qrq.png|thumb|146x146px]]<br />
<br />
<u>Detailed Description:</u> This project Should implement Proposed UI clean up of Controls . LPE controls shoulbe be more user freindly and predictive,<br />
<br />
[https://gitlab.com/inkscape/ux/-/issues/?sort=popularity&state=opened&label_name%5B%5D=Dialog%3A%3ALPE&first_page_size=100 '''Full Proposed designs''']<br />
<br />
<br />
== P20. Recolor Artwork ==<br />
* Estimation of difficulty: Variable - Short (90h or 175h)<br />
* Potential mentors: Adam Belis ?<br />
* Programming skills: usually C++<br />
* Prerequisites: <br />
<br />
<u>Detailed Description</u><br />
An easy and convenient way how to change any color from the selection. Useful for experimenting and tweaking colors.<br />
<br />
<br />
[https://gitlab.com/inkscape/inbox/-/issues/6095 '''Full proposal Here''']<br />
<br />
<br />
<u>Use cases</u><br />
* Amaze us!<br />
<br />
==Pxx. Your project ==<br />
* Estimation of difficulty: Variable - Short or Long (175h or 350h)<br />
* Potential mentors: Marc Jeanmougin<br />
* Programming skills: usually C++<br />
* Prerequisites: good ideas<br />
<br />
<u>Detailed Description</u><br />
The most successful GSoC we had in the past were students coming with their own past, use cases and ideas for Inkscape. Many basic tools like 3d cubes or connectors you can see in Inkscape now have been brought by brilliant people (like you) with ideas. If we think that your project fits with Inkscape (ie: has its place with a vector graphic editor), we can help you refining your ideas and help bring shiny new stuff to life!<br />
<br />
<u>Use cases</u><br />
* Amaze us!<br />
<br />
= Successful SOC Projects from Previous Years =<br />
* 2005<br />
** Connectors<br />
** Inkboard<br />
** [http://www.openclipart.org/ Open Clip Art Library (OCAL)] Interface<br />
** DXF Import / Export<br />
* [[Google Summer of Code 2006|2006]]<br />
** Support for SVG Filters<br />
** Filter Effects<br />
** PDF export<br />
** Inkboard Protocol Spec / Lib Conversion<br />
* [[Google Summer of Code 2007|2007]]<br />
** Text Style Improvements<br />
** PDF import<br />
** Live Path Effects<br />
** 3D Box Tool<br />
** UI for SVG Filter Effects<br />
** Raster Functionality<br />
** Importing from, and Exporting to, a remote ccHost instance<br />
* [[Google Summer of Code 2008|2008]]<br />
** SVG Fonts support<br />
** 2Geom refactoring project - port most geometry code to 2Geom<br />
** lib2geom: interactive applications showing off the power of lib2geom<br />
** Tech drawing abilities<br />
** A test suite<br />
* 2009<br />
** [[GSoC2009 Node Tool Rewrite|Node tool rewrite]]<br />
** D-Bus scripting API<br />
** Connector tool improvements<br />
** ICC/CMYK workflow<br />
* 2010<br />
** Cairo-based rendering<br />
** C++ification of SP Layer<br />
* 2011<br />
** Rendering caching<br />
** Javascript support improvements<br />
** CSS support improvements<br />
* 2012<br />
** Usibility Improvements for Guides<br />
** [[Tiling tool|On-canvas support for Tessellations]]<br />
** Creating python bindings for lib2geom<br />
* [[Google Summer of Code 2013|2013]]<br />
** Recolor Tool<br />
** Improved Units Support<br />
** Electronics CAD Support<br />
** New From Templates Dialog<br />
** New Raster to Vector Algorithm<br />
* 2014<br />
** Better Support for SVG Paints<br />
** Robust Boolean and Stroking Operations for 2Geom<br />
* 2016<br />
** [[GSoC 2016 Better data structure for selections|Better data structure for selections]]<br />
** [[Style Editor|CSS Style Sheet Editor]]<br />
* 2017<br />
** SVG 2 Text Support<br />
** Better CSS Style Sheet Support<br />
* 2019<br />
** Mesh gradient and hatches polyfills. Paint server dialog.<br />
* 2020<br />
** [https://gitlab.com/vanntile/inkscape-gsoc-2020 New dialog system.]<br />
** [https://gitlab.com/rathod-sahaab/gsoc-2020-inkscape Command palette dialog.]<br />
** Path operations.<br />
* 2021<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/3420 On canvas marker editing.]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/3328 Verbs to Gio::Actions.]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/3294 On canvas alignment snapping.]<br />
* 2022<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/4692 Tab Structure.]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/4694 Font Collections.]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/4756 Modernizing Memory Management.]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/4504 OCR Support.]<br />
* 2023<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/5335 GTK4 toolbar port preparation]<br />
** [https://gitlab.com/inkscape/inkscape/-/merge_requests/5624 Customizable Appearance of Canvas Controls]<br />
<br />
[[Category:Developer Documentation]]<br />
</div></div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Tracking_Dependencies&diff=122619Tracking Dependencies2023-11-06T14:09:29Z<p>Tavmjong: /* Libs */</p>
<hr />
<div>== Compilers ==<br />
<br />
* Version 1.0 requires a C++11 compiler.<br />
* Version 1.1 requires a C++17 compiler.<br />
* Version 1.4 requires a C++20 compiler.<br />
<br />
See [[c++11]], [[c++17]], and [[C++20]].<br />
<br />
== Libs ==<br />
<br />
C++ bindings are not included, since their required versions match those of the C counterparts.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Library<br />
! v 0.92<br />
! v 1.0<br />
! v 1.1<br />
! v 1.2<br />
! v 1.3<br />
! master<br />
! gtk4<br />
|-<br />
| Boehm-GC<br />
| 7.2<br />
| 7.2<br />
| 7.2<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| Cairo<br />
| 1.14<br />
| 1.14 (1.15.4 required for PDF links)<br />
| 1.16*<br />
| 1.16<br />
| 1.16<br />
|<br />
| 1.16**<br />
|-<br />
| double-conversion [https://github.com/google/double-conversion]<br/>''(lib2geom dependency)''<br />
| ''(not required)''<br />
| any<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| FreeType<br />
|<br />
|<br />
| 2.9* (Required for Variable fonts)<br />
| 2.9<br />
| 2.9<br />
|<br />
|<br />
|-<br />
| GDL<br />
| N/A<br />(3.4)<br />
| 3.4<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
|-<br />
| Glib<br />
| 2.28<br />
| 2.48<br />
| 2.56 or 2.62*<br />
| 2.64<br />
| 2.64<br />
|<br />
| 2.68**<br />
|-<br />
| GTK+<br />
| 2.24<br />(3.8)<br />
| 3.22<br />
| 3.24*<br />
| 3.24<br />
| 3.24<br />
|<br />
| 4.12<sup>+</sup><br />
|-<br />
| GNU Scientific Library<br />
| ?<br />
| ?<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| HarfBuzz<br />
| ?<br />
| ?<br />
| 2.2*<br />
| 2.6<br />
| 2.6<br />
| 2.6.5*<br />
|<br />
|-<br />
| libsigc++<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
|<br />
|<br />
|<br />
| 3.0**<br />
|-<br />
| libSoup<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libpotrace<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxml<br />
| ''2.6.11*''<br />
| ''2.6.11*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxslt<br />
| ''1.0.15*''<br />
| ''1.0.15*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| lcms<br />
| 1.13<br />
| 2.2<br />
| 2.2 (2.9*)<br />
| 2.9*<br />
| 2.9*<br />
|<br />
|<br />
|-<br />
| Pango<br />
| 1.24<br />
| 1.24 (1.41.1 required for variable fonts)<br />
| 1.42*<br />
| 1.44<br />
| 1.44 (HarfBuzz shaping)<br />
|<br />
| 2.48**<br />
|-<br />
| Poppler<br />
| 0.20.0<br />
| 0.20.0<br />
| 0.29 (0.71*)<br />
| 0.29 (0.71*)<br />
| 0.71*<br />
|<br />
|<br />
|-<br />
| [https://formulae.brew.sh/formula/gtk-mac-integration gtk-mac-integration]<br>[https://www.macports.org/ports.php?by=library&substr=gtk-osx-application-gtk3 gtk-osx-application-gtk3]<br />
| N/A<br />
| 2.0.8 ([[CompilingMacOsX|macOS only]])<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|}<br />
<br />
''* Tentative dependency''<br />
<br />
* Pango 1.42.2 requires Harfbuzz 1.4.2<br />
* Pango 1.44.0 requires Glib 2.59.2 and Harfbuzz 2.0. 1.44 exposes hb_font directly.<br />
* Pango 1.45.1 requires Glib 2.60<br />
* Pango 1.48.4 has vertical upright marks fix.<br />
* Harfbuzz 4.1 changes glyph positioning for upright vertical text when font does not have vertical metrics (from glyph touching to of cell to being centered in cell).<br />
<br />
''** Gtkmm4 requires API changed Glibmm, Cairomm, and Pangomm. In particular, enums use child namespaces in newer libraries (Cairo::FORMAT_ARGB32 -> Cairo::Surface::Format::ARGB32).''<br />
<br />
''<sup>+</sup> Decision at 5 Nov 2023 developer's meeting. Gtk4 4.10.1 has an important scrolling bug fix.''<br />
<br />
== Distros ==<br />
<br />
Note: This table is not relevant to (non-fink) MacOS X, where we ship the desired version with Inkscape.<br />
<br />
"Inkscape" column is default or distro version / oldest that builds - latest that builds. If no latest is given then that means trunk is expected to build on the given platform.<br />
<br />
e.g. for a distro that ships with 0.48 but should support building of trunk you might get:<br />
0.48 / 0.47-<br />
<br />
'''General rules:'''<br />
* Support latest Debian Stable (as of feature freeze) [https://www.debian.org/distrib/packages Debian packages]<br />
* Support latest Ubuntu LTS (as of feature freeze) [https://packages.ubuntu.com/ Ubuntu packages]<br />
**e.g. Considering Inkscape 1.2, the latest Ubuntu LTS at '''feature freeze time''' (around February 2022) would have been Ubuntu 20.04. The latest LTS at release time (around May 2022), though, will be Ubuntu 22.04. Therefore, according to the rule, we should support Ubuntu 20.04 LTS as the minimum version.<br />
** ''Note: For gtkmm4: Jammy: no package, Kinetic: 4.8, Lunar: 4.10, Mantic: 4.10''<br />
<br />
* Support last two Fedora releases (as of feature freeze) [https://packages.fedoraproject.org/ Fedora packages]<br />
* Don't break ''point'' releases.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Distro<br />
! Inkscape<br />
! gcc<sup>#</sup><br />
! clang<sup>#</sup><br />
! cairo<br />
! cairomm<br />
! freetype<br />
! glib<br />
! glibmm<br />
! gtk+<br />
! gtkmm<br />
! harfbuzz<br />
! pango<br />
! poppler<br />
! gdl<br />
! lcms2<br />
! libsigc++<br />
! libgc <!-- Fedora rpm: gc --><br />
! libsoup<br />
|-<br />
| Windows MSYS2 (2021-04-14)<br/>([https://github.com/Alexpux/MINGW-packages mingw-w64 packages] from MSYS2 project)<br />
<!-- see http://quodlibet.duckdns.org/msys2/base for list of latest package versions --><br />
| 1.0.2<br />
| 10.2.0<br />
| 11.0.0<br />
| 1.17.4<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.68.1<br />
| 2.66.0<br />
| 3.24.27<br />
| 3.24.3<br />
| 2.8.0<br />
| 1.48.4<br />
| 20.12.1<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.6<br />
| 8.0.4 <!-- mingw-w64-gc --><br />
| 2.72.0<br />
|-<br />
| Debian 11 (Bullseye, oldstable) <small>EOL 2026</small><br />
| 1.0.2<br />
| 10.2.1<br />
| 13.0.1<br />
| 1.16<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.66.8<br />
| 2.64.2<br />
| 3.24.24<br />
| 3.24.2<br />
| 2.7.4<br />
| 1.46.2<br />
| 20.09.0<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.4<br />
| 8.0.4<br />
| 2.72.0<br />
|-<br />
| Debian 12 (Bookworm, stable) <small>EOL 2028?</small><br />
| 1.2.2<br />
| 12.2.0<br />
| 15.0.6<br />
| 1.16.0<br />
| 1.12.1<br />
| 2.10.4<br />
| 2.74.5<br />
| 2.74.0<br />
| 3.24.36<br />4.8.3<br />
| 3.24.7<br />4.8.0<br />
| 6.0.0<br />
| 1.50.12<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.1<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.03<br />3.2.2<br />
|-<br />
| Ubuntu 22.04 LTS (Jammy Jellyfish) <small>EOL 2027-04</small><br />
| 1.1.2<br />
| 12.3.0<br />
| 15.0.7<br />
| 1.16.0<br />
| 1.12.2<br />
| 2.11.1<br />
| 2.72.1<br />
| 2.66.2<br />
| 3.24.33<br />4.6.2<br />
| 3.24.5<br />no libgtkmm-4.0<br />
| 2.7.4<br />
| 1.50.6<br />
| 22.02.0<br />
| 3.40.0<br />
| 2.12-rc1<br />
| 2.10.4<br />
| 8.0.6<br />
| 2.74.2<br />3.0.5<br />
|-<br />
| Ubuntu 23.04 (Lunar)<br />
| 1.2.2<br />
| 13.1.0<br />
| 16.0.0<br />
| 1.14.4<br />1.16.0<br />
| 1.14.4<br />1.16.2<br />
| 2.12.1<br />
| 2.76.0<br />
| 2.66.6<br />
| 3.24.37<br />4.10.1<br />
| 3.24.7<br />4.10.0<br />
| 6.0.0<br />
| 1.50.12<br />2.50.1<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.2<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.3<br />3.4.0<br />
|}<br />
<sup>#</sup>Debian and Ubuntu offer multiple gcc and clang versions, latest available version listed.<br />
<br />
* Agreed to at Saarbrücken hackfest.<br />
<br />
== Getting and Installing Source packages ==<br />
<br />
See [https://inkscape.org/develop/getting-started/ Getting Started]<br />
<br />
== Optional Dependencies ==<br />
<br />
Inkscape will still compile without these, but some features may be missing if they are absent during compilation:<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Library<br />
! scope="col"| Needed for<br />
! scope="col"| Default<br />
|-<br />
|aspell<br />
|Dictionaries for spell checking<br />
|On<br />
|-<br />
|libcdr<br />
|Open Corel Draw files<br />
|On<br />
|-<br />
|gettext/msgformat<br />
|Translation support<br />
|On<br />
|-<br />
|gtest/gmock<br />
|Automatted testing<br />
|Off<br />
|-<br />
|gspell<br />
|Spell checking<br />
|On<br />
|-<br />
|imagemagick<br />
|Bitmap editing extensions, bitmap import resolution<br />
|On<br />
|-<br />
|jpeg<br />
|jpeg import?<br />
|On<br />
|-<br />
|OpenMP<br />
|Multi-threaded filter rendering<br />
|On<br />
|-<br />
|scour<br />
|Save as Optimized SVG<br />
|(not needed during compiling, Python)<br />
|-<br />
|libvisio<br />
|Open Visio Files, use Visio stencils<br />
|On<br />
|-<br />
|libwpg<br />
|Open WordPerfect Graphics<br />
|On<br />
|-<br />
|}<br />
<br />
<br />
<br />
[[Category:About Inkscape]]<br />
[[Category:Developer Documentation]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Filenames&diff=122568Filenames2023-10-10T11:15:36Z<p>Tavmjong: Created page with "Filenames should be std::strings but presented as Glib::ustings (UTF8) in GUI elements. Glib has functions to convert back and forth. All Glib file utility functions take and..."</p>
<hr />
<div>Filenames should be std::strings but presented as Glib::ustings (UTF8) in GUI elements. Glib has functions to convert back and forth. All Glib file utility functions take and return std::strings (other than those converting between types). We use these functions throughout our code, often ignoring implicit conversions between std::string and Glib::ustring (or UTF8 encoded and not-encoded strings of type char*).<br />
<br />
== Gtk4 Changes ==<br />
<br />
Gtk4 makes several changes that impact our use of strings:<br />
<br />
=== Use of Glib::StdStringView and Glib::UStringView ===<br />
<br />
Many functions take these types as arguments. It's an error to mix them.<br />
<br />
# Glib::StdStringView : Different from std::string_view in that only holds null-terminated strings. One can pass in a Glib::ustring via Glib::ustring::c_str().<br />
# Glib::UStringView : UTF8 encoded string. One can pass in a std::string using std::string::c_str().<br />
<br />
=== Return Gio::File rather than filenames (std::strings) in File dialogs ===<br />
<br />
Gio::Files handle std::string/Glib::ustrings properly. We should be using them and have some code that already does.<br />
<br />
== Updating Our Code ==<br />
<br />
This is quite messy. Our code file handling code is divided over many file:<br />
<br />
* src/file.h: Several file opening functions (that should be removed). Calls document_new in inkscape-application.h. Also contains Import dialog (should be moved). Calls Extension::Open.<br />
* src/inkscape-application.h: Functions for opening documents and creating windows. Calls ink_file_new, ink_file_open(data), ink_file_open(Gio::File) in io/file.h.<br />
* src/io/file.h: Functions ink_file_new, ink_file_open. Calls SPDocument::createNewDoc() or SPDocument::createNewDocFromMem() in src/document.h<br />
* src/document.h: Functions for creating documents by first creating the XML via calling sp_rper_read_file(filename, SP_SVG_NS_URI), sp_repr_document_new("svg:svg"), sp_repr_read_mem(char const* buffer...)<br />
* src/xml/repr.h (repr-io.cpp): Functions that use libxml2 to extract out the XML tree from files.<br />
<br />
* src/extension/internal/xxx: Functions to open various file types.<br />
* src/extension/internal.svg.h: Open SVG files: calls functions in src/document.h.<br />
<br />
* src/io/sys.h: Various functions that assume filenames are in UTF8. Most functions in this file should be removed.</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Builder_Files&diff=122563Builder Files2023-10-05T08:28:44Z<p>Tavmjong: /* Input File: save as true_false.txt */</p>
<hr />
<div><br />
<br />
Gtk allows one to define the UI interface using "Builder" files. "Builder" files are XML files that describe widget layout, menus, etc.<br />
<br />
Builder files should end with .ui but many of ours end with .glade as the UI creater program Glade was used to create them. Glade works only with Gtk3. Cambalache is a Glade replacement that works with both Gtk3 and Gtk4.<br />
<br />
== Tools ==<br />
<br />
=== gtk-builder-tool===<br />
<br />
Allows one to simplify or examine Gtk3 builder files. Using the simplify option over our builder files results in:<br />
<br />
* Changing "True" to "1", "False" to "0"<br />
* Changing '"' to &amp;quot; and <nowiki>'''</nowiki> to &amp;apos;.<br />
* Removing properties with default values, e.g.:<br />
** "can-focus" == False<br />
** "label-xalign" == 0<br />
** "receives-default" == False<br />
** "expand" == False<br />
** "fill" == True<br />
** "position" == 0<br />
** "xalign" == 0.5<br />
* Removing unneeded <packing>...</packing> (where all properties are default).<br />
* Removing <child><placeholder/></child> and <placeholder/><br />
* Moving &lt;!-- n-columns=x n-rows=y --&gt; comment to before <child>.<br />
* Replacing underscores by hyphens in property names.<br />
<br />
gtk-builder-tool does not understand the "child" property (in GtkScrolledWindow, GtkViewPort).<br />
<br />
One can use a script to restore "True", "False", (without touching the 'active' property in ComboBox's). It also restores quotes and ampersands in strings (to avoid breaking translations). See below.<br />
<br />
=== gtk4-builder-tool ===<br />
<br />
In addition to the uses of gtk-builder-tool, gtk4-bulder-tool has a --3to4 option that converts gtk3 builder files to gtk4 builder files, the conversion is not perfect. In particular, it does not remove properties it doesn't recognize.<br />
<br />
Using the 'simplify' mode without --3to4 (after using gtk-builder-tool):<br />
<br />
* Changes translatable="true" or "yes" to translatable="1".<br />
* Strips many comments.<br />
<br />
Using the 'simplify' mode with --3to4 results in:<br />
<br />
* Replacing &lt;requires lib="gtk+" version="3.24"/&gt; with &lt;requires lib="gtk" version="4.0"/&gt;<br />
* Changes &lt;attribute name='xxx'... to &lt;attribute name=&quot;xxx&quot;...<br />
* Removing the property "visible" when its value is "True" (widgets are visible by default in Gtk4).<br />
* Replacing the property "can-focus" with value "True" by the property "focusable" with value 1.<br />
* Removing &lt;packing&gt;...&lt;/packing&gt; for GtkBox.<br />
* Replacing &lt;object&gt;...&lt;/object&gt;&lt;packing&gt;...&lt;/packing&gt; by &lt;object&gt;...&lt;layout&gt;...&lt;/layout&gt;&lt;/object&gt; for GtkGrid.<br />
* Changing &lt;child&gt;...&lt;/child&gt; to &lt;property name=&quot;child&quot;&gt;...&lt;/property&gt; for child of GtkFlowBoxChild and GtkViewPort.<br />
* Changing the property "margin" to the four properties "margin-start", "margin-end", "margin-top", and "margin-bottom".<br />
* Adding the property "draw-value" with value 1 for GtkScale.<br />
* Adding the property "visible" with value 0 to GtkFlowBoxChild.<br />
<br />
Properties not supported in Gtk4 and not replaced:<br />
<br />
* GtkAspectFrame::label-xalign<br />
* GtkAspectFrame::shadow-type<br />
* GtkBox::double-buffered<br />
* GtkBox::events<br />
* GtkBox::no-show-all<br />
* GtkButton::always-show-image<br />
* GtkButtonBox::can-focus<br />
* GtkButtonBox::hexpand<br />
* GtkButtonBox::layout-style<br />
* GtkButtonBox::visible<br />
* GtkButton::can-default<br />
* GtkButton::image<br />
* GtkButton::image-position<br />
* GtkButton::no-show-all<br />
* GtkButton::relief<br />
* GtkButton::use-stock<br />
* GtkCellRendererPixbuf::stock_size<br />
* GtkCheckButton::image<br />
* GtkCheckButton::no-show-all<br />
* GtkDialog::gravity<br />
* GtkDialog::has-resize-grip<br />
* GtkDialog::skip-taskbar-hint<br />
* GtkDialog::type-hint<br />
* GtkDialog::type_hint<br />
* GtkDialog::window-position<br />
* GtkEntry::caps-lock-warning<br />
* GtkEntry::no_show_all<br />
* GtkEventBox::can-focus<br />
* GtkEventBox::can_focus<br />
* GtkEventBox::halign<br />
* GtkEventBox::hexpand<br />
* GtkEventBox::name<br />
* GtkEventBox::no-show-all<br />
* GtkEventBox::valign<br />
* GtkEventBox::visible<br />
* GtkEventBox::visible-window<br />
* GtkExpander::label-fill<br />
* GtkFlowBox::no-show-all<br />
* GtkFrame::shadow-type<br />
* GtkGrid::no-show-all<br />
* GtkImage::no-show-all<br />
* GtkImage::stock<br />
* GtkLabel::no-show-all<br />
* GtkLabel::no_show_all<br />
* GtkLabel::ypad<br />
* GtkLinkButton::relief<br />
* GtkMenuButton::draw-indicator<br />
* GtkMenuButton::image<br />
* GtkMenuButton::no-show-all<br />
* GtkMenuButton::popup<br />
* GtkMenuButton::relief<br />
* GtkMenuButton::use-popover<br />
* GtkMenu::can-focus<br />
* GtkMenuItem::can-focus<br />
* GtkMenuItem::use-underline<br />
* GtkMenuItem::visible<br />
* GtkMenu::reserve-toggle-size<br />
* GtkMenu::visible<br />
* GtkModelButton::action-name<br />
* GtkModelButton::action-target<br />
* GtkModelButton::can-focus<br />
* GtkModelButton::halign<br />
* GtkModelButton::inverted<br />
* GtkModelButton::receives-default<br />
* GtkModelButton::visible<br />
* GtkNotebook::double-buffered<br />
* GtkNotebook::no-show-all<br />
* GtkPopover::constrain-to<br />
* GtkPopover::no-show-all<br />
* GtkPopover::relative-to<br />
* GtkPopover::transitions-enabled<br />
* GtkRadioMenuItem::can-focus<br />
* GtkRadioMenuItem::draw-as-radio<br />
* GtkRadioMenuItem::group<br />
* GtkRadioMenuItem::use-underline<br />
* GtkRadioMenuItem::visible<br />
* GtkScrolledWindow::double-buffered<br />
* GtkScrolledWindow::no-show-all<br />
* GtkScrolledWindow::shadow-type<br />
* GtkScrolledWindow::shadow_type<br />
* GtkScrolledWindow::window-placement-set<br />
* GtkSearchEntry::can-default<br />
* GtkSearchEntry::caps-lock-warning<br />
* GtkSearchEntry::completion<br />
* GtkSearchEntry::is-focus<br />
* GtkSearchEntry::primary-icon-activatable<br />
* GtkSearchEntry::primary-icon-name<br />
* GtkSearchEntry::primary-icon-sensitive<br />
* GtkSeparatorMenuItem::can-focus<br />
* GtkSeparatorMenuItem::margin-bottom<br />
* GtkSeparatorMenuItem::margin-top<br />
* GtkSeparatorMenuItem::visible<br />
* GtkSpinButton::caps-lock-warning<br />
* GtkSpinButton::input-purpose<br />
* GtkSpinner::active<br />
* GtkToggleButton::always-show-image<br />
* GtkToggleButton::image<br />
* GtkToggleButton::no-show-all<br />
* GtkToggleButton::relief<br />
* GtkToggleButton::use-action-appearance<br />
* GtkToolItem::can-focus<br />
* GtkToolItem::visible<br />
* GtkTreeView::no_show_all<br />
* GtkViewport::shadow-type<br />
* GtkWindow::can_default<br />
* GtkWindow::gravity<br />
* GtkWindow::is_focus<br />
* GtkWindow::urgency_hint<br />
* GtkWindow::window-position<br />
* GtkWindow::window_position<br />
<br />
== Restore "True"/"False"/quotes/ampersands. ==<br />
<br />
=== Perl Script ===<br />
<pre><br />
#!/usr/bin/perl<br />
<br />
# Restore use of True (instead of '1') and False (instead of '0') after<br />
# using gtk-builder-tool or gtk4-builder-tool.<br />
<br />
use strict;<br />
use warnings;<br />
use File::Copy;<br />
<br />
open my $true_false, '<', "true_false.txt" or die "Cannot read true_false.txt";<br />
chomp (my @properties = <$true_false>);<br />
<br />
my $pattern = "";<br />
foreach (@properties) {<br />
$pattern = $pattern . "\"";<br />
$pattern = $pattern . $_;<br />
$pattern = $pattern . "\"";<br />
$pattern = $pattern. "|";<br />
}<br />
chop $pattern;<br />
#print $pattern . "\n";<br />
<br />
my $file = $ARGV[0];<br />
#print $file . "\n";<br />
<br />
my $file_out = $file . "_out";<br />
open my $input, '<', $file or die "Cannot open $file";<br />
open my $output, '>', $file_out or die "Cannot open $file_out";<br />
<br />
my $class = "";<br />
while (my $line = <$input>) {<br />
<br />
# Track current class<br />
if ($line =~ m/class=\"(.*?)\"/) {<br />
$class = $1;<br />
# print "Class: " . $class . "\n";<br />
}<br />
<br />
# For gtk4-builder-tool<br />
$line =~ s/translatable=\"1\"/translatable=\"yes\"/;<br />
$line =~ s/translatable=\"0\"/translatable=\"no\"/;<br />
<br />
if ($line =~ m/($pattern)/) {<br />
# print $line;<br />
if ($line =~ m/active/ and $class =~ m/ComboBox/) {<br />
# Don't change 'active' property to True/False for ComboBox or ComboBoxText<br />
# print "FOUND COMBOBOX WITH ACTIVE\n";<br />
} else {<br />
$line =~ s/>0</>False</;<br />
$line =~ s/>1</>True</;<br />
}<br />
# print $line;<br />
}<br />
$line =~ s/&amp;quot;/\"/g; # This is improper... but it would effect translations.<br />
$line =~ s/&amp;apos;/\'/g;<br />
print $output $line;<br />
}<br />
<br />
close $input;<br />
close $output;<br />
move ($file_out, $file) or die "Couldn't move $file_out to $file!";<br />
</pre><br />
<br />
=== Input File: save as true_false.txt ===<br />
<pre><br />
accepts-tab<br />
activate-on-single-click<br />
activates-default<br />
active<br />
always-show-image<br />
can-default<br />
can-focus<br />
caps-lock-warning<br />
column-homogeneous<br />
cursor-visible<br />
destroy-with-parent<br />
double-buffered<br />
draw-as-radio<br />
draw-indicator<br />
draw-value<br />
editable<br />
enable-popup<br />
enable-search<br />
expand<br />
fill<br />
fixed-height-mode<br />
focus-on-click<br />
has-default<br />
has-entry<br />
has-focus<br />
has-frame<br />
has-origin<br />
has-resize-grip<br />
has-tooltip<br />
headers-clickable<br />
headers-visible<br />
hexpand<br />
homogeneous<br />
hover-selection<br />
inline-completion<br />
inverted<br />
is-focus<br />
label-fill<br />
modal<br />
no-show-all<br />
numeric<br />
overlay-scrolling<br />
pass-through<br />
popup-set-width<br />
position-set<br />
primary-icon-activatable<br />
primary-icon-sensitive<br />
propagate-natural-height<br />
propagate-natural-width<br />
receives-default<br />
reserve-toggle-size<br />
resizable<br />
resize<br />
resize-toplevel<br />
reveal-child<br />
row-homogeneous<br />
search-mode-enabled<br />
secondary-use-markup<br />
selectable<br />
sensitive<br />
show-border<br />
show-expanders<br />
show-fill-level<br />
show-text<br />
shrink<br />
single-line-mode<br />
skip-taskbar-hint<br />
sort-indicator<br />
tab-expand<br />
tab-fill<br />
transitions-enabled<br />
urgency-hint<br />
use-action-appearance<br />
use-fallback<br />
use-markup<br />
use-popover<br />
use-stock<br />
use-underline<br />
vexpand<br />
visible<br />
visible-window<br />
wide-handle<br />
window-placement-set<br />
wrap<br />
</pre><br />
<br />
===Perl program that moves button images from top of file to inside button, compatible with both Gtk3 and Gtk4.===<br />
<br />
<pre><br />
#!/usr/bin/perl<br />
<br />
# Move button images from top of file to inside button.<br />
# Tavmjong Bah<br />
<br />
use strict;<br />
use warnings;<br />
use v5.10;<br />
<br />
use File::Copy;<br />
use XML::LibXML;<br />
use Text::Diff;<br />
<br />
my @files = <*>;<br />
<br />
my $flip_flop = 0;<br />
<br />
foreach my $file (@files) {<br />
if ($file =~ ".ui\$" or $file =~ ".glade\$") {<br />
<br />
my $file_out = $file . "_out";<br />
<br />
my $dom = XML::LibXML->load_xml(location => $file);<br />
<br />
# Find GtkButton's<br />
foreach my $object ($dom->findnodes('//object[@class = "GtkButton"]')) {<br />
<br />
# See if button has 'image' and 'label' properties.<br />
my ($property_image) = $object->findnodes('./property[@name = "image"]');<br />
my ($property_label) = $object->findnodes('./property[@name = "label"]');<br />
<br />
# If button has 'image' property.<br />
if (defined($property_image)) {<br />
# Find corresponding image element.<br />
my $image = $property_image->to_literal();<br />
my ($gtk_image) = $dom->findnodes("//object[\@id = \"$image\"]");<br />
# my $gtk_image = $dom->getElementById("xml:$image");<br />
<br />
# If we found image element.<br />
if (defined($gtk_image)) {<br />
<br />
# Remove 'image' property'.<br />
$property_image->unbindNode();<br />
<br />
# Add child to object.<br />
my $child = $dom->createElement('child');<br />
$object->appendChild($child);<br />
<br />
if (defined($property_label)) {<br />
# We have both 'image' and 'label', need to create box.<br />
say "Button with both image and label! ", $file;<br />
<br />
# Add box<br />
my $box = $dom->createElement('object');<br />
$box->{class} = "GtkBox";<br />
$child->appendChild($box);<br />
<br />
# Add/move image<br />
my $child_image = $dom->createElement('child');<br />
$child_image->appendChild($gtk_image);<br />
$box->appendChild($child_image);<br />
<br />
# Add label and move 'label' property.<br />
my $child_label = $dom->createElement('child');<br />
$box->appendChild($child_label);<br />
<br />
my $object_label = $dom->createElement('object');<br />
$object_label->{class} = "GtkLabel";<br />
$object_label->appendChild($property_label);<br />
$child_label->appendChild($object_label);<br />
<br />
# Make visible (Gtk3)<br />
my $property_visible = $dom->createElement('property');<br />
$property_visible->{name} = "visible";<br />
$property_visible->appendText('True');<br />
$object_label->appendChild($property_visible);<br />
<br />
# my $class = $dom->createAttribute('class', 'GtkBox');<br />
} else {<br />
# Only have image; move image to child.<br />
$child->appendChild($gtk_image);<br />
}<br />
} else {<br />
say "Warning, could not find $image in $file";<br />
}<br />
}<br />
}<br />
<br />
# Make it possible to pretty print by removing empty text nodes.<br />
foreach ($dom->findnodes('//text()')) {<br />
$_->parentNode->removeChild($_) unless /\S/;<br />
}<br />
<br />
# say $dom->toString(1);<br />
$dom->toFile($file_out, 1);<br />
<br />
# say "DIFF =============================================";<br />
# my $diffs = diff "$file" => "$file_out";<br />
# print $diffs;<br />
move ($file_out, $file);<br />
}<br />
}<br />
</pre></div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Tracking_Dependencies&diff=122555Tracking Dependencies2023-09-27T12:15:24Z<p>Tavmjong: /* Compilers */</p>
<hr />
<div>== Compilers ==<br />
<br />
* Version 1.0 requires a C++11 compiler.<br />
* Version 1.1 requires a C++17 compiler.<br />
* Version 1.4 requires a C++20 compiler.<br />
<br />
See [[c++11]], [[c++17]], and [[C++20]].<br />
<br />
== Libs ==<br />
<br />
C++ bindings are not included, since their required versions match those of the C counterparts.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Library<br />
! v 0.92<br />
! v 1.0<br />
! v 1.1<br />
! v 1.2<br />
! v 1.3<br />
! master<br />
! gtk4<br />
|-<br />
| Boehm-GC<br />
| 7.2<br />
| 7.2<br />
| 7.2<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| Cairo<br />
| 1.14<br />
| 1.14 (1.15.4 required for PDF links)<br />
| 1.16*<br />
| 1.16<br />
| 1.16<br />
|<br />
| 1.16**<br />
|-<br />
| double-conversion [https://github.com/google/double-conversion]<br/>''(lib2geom dependency)''<br />
| ''(not required)''<br />
| any<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| FreeType<br />
|<br />
|<br />
| 2.9* (Required for Variable fonts)<br />
| 2.9<br />
| 2.9<br />
|<br />
|<br />
|-<br />
| GDL<br />
| N/A<br />(3.4)<br />
| 3.4<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
|-<br />
| Glib<br />
| 2.28<br />
| 2.48<br />
| 2.56 or 2.62*<br />
| 2.64<br />
| 2.64<br />
|<br />
| 2.68**<br />
|-<br />
| GTK+<br />
| 2.24<br />(3.8)<br />
| 3.22<br />
| 3.24*<br />
| 3.24<br />
| 3.24<br />
|<br />
| 4.10.1** +<br />
|-<br />
| GNU Scientific Library<br />
| ?<br />
| ?<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| HarfBuzz<br />
| ?<br />
| ?<br />
| 2.2*<br />
| 2.6<br />
| 2.6<br />
| 2.6.5*<br />
|<br />
|-<br />
| libsigc++<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
|<br />
|<br />
|<br />
| 3.0**<br />
|-<br />
| libSoup<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libpotrace<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxml<br />
| ''2.6.11*''<br />
| ''2.6.11*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxslt<br />
| ''1.0.15*''<br />
| ''1.0.15*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| lcms<br />
| 1.13<br />
| 2.2<br />
| 2.2 (2.9*)<br />
| 2.9*<br />
| 2.9*<br />
|<br />
|<br />
|-<br />
| Pango<br />
| 1.24<br />
| 1.24 (1.41.1 required for variable fonts)<br />
| 1.42*<br />
| 1.44<br />
| 1.44 (HarfBuzz shaping)<br />
|<br />
| 2.48**<br />
|-<br />
| Poppler<br />
| 0.20.0<br />
| 0.20.0<br />
| 0.29 (0.71*)<br />
| 0.29 (0.71*)<br />
| 0.71*<br />
|<br />
|<br />
|-<br />
| [https://formulae.brew.sh/formula/gtk-mac-integration gtk-mac-integration]<br>[https://www.macports.org/ports.php?by=library&substr=gtk-osx-application-gtk3 gtk-osx-application-gtk3]<br />
| N/A<br />
| 2.0.8 ([[CompilingMacOsX|macOS only]])<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|}<br />
<br />
''* Tentative dependency''<br />
<br />
* Pango 1.42.2 requires Harfbuzz 1.4.2<br />
* Pango 1.44.0 requires Glib 2.59.2 and Harfbuzz 2.0. 1.44 exposes hb_font directly.<br />
* Pango 1.45.1 requires Glib 2.60<br />
* Pango 1.48.4 has vertical upright marks fix.<br />
* Harfbuzz 4.1 changes glyph positioning for upright vertical text when font does not have vertical metrics (from glyph touching to of cell to being centered in cell).<br />
<br />
''** Gtkmm4 requires API changed Glibmm, Cairomm, and Pangomm. In particular, enums use child namespaces in newer libraries (Cairo::FORMAT_ARGB32 -> Cairo::Surface::Format::ARGB32).''<br />
<br />
''+ Gtk4 4.10.1 has an important scrolling bug fix.''<br />
<br />
== Distros ==<br />
<br />
Note: This table is not relevant to (non-fink) MacOS X, where we ship the desired version with Inkscape.<br />
<br />
"Inkscape" column is default or distro version / oldest that builds - latest that builds. If no latest is given then that means trunk is expected to build on the given platform.<br />
<br />
e.g. for a distro that ships with 0.48 but should support building of trunk you might get:<br />
0.48 / 0.47-<br />
<br />
'''General rules:'''<br />
* Support latest Debian Stable (as of feature freeze) [https://www.debian.org/distrib/packages Debian packages]<br />
* Support latest Ubuntu LTS (as of feature freeze) [https://packages.ubuntu.com/ Ubuntu packages]<br />
**e.g. Considering Inkscape 1.2, the latest Ubuntu LTS at '''feature freeze time''' (around February 2022) would have been Ubuntu 20.04. The latest LTS at release time (around May 2022), though, will be Ubuntu 22.04. Therefore, according to the rule, we should support Ubuntu 20.04 LTS as the minimum version.<br />
** ''Note: For gtkmm4: Jammy: no package, Kinetic: 4.8, Lunar: 4.10, Mantic: 4.10''<br />
<br />
* Support last two Fedora releases (as of feature freeze) [https://packages.fedoraproject.org/ Fedora packages]<br />
* Don't break ''point'' releases.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Distro<br />
! Inkscape<br />
! gcc<sup>#</sup><br />
! clang<sup>#</sup><br />
! cairo<br />
! cairomm<br />
! freetype<br />
! glib<br />
! glibmm<br />
! gtk+<br />
! gtkmm<br />
! harfbuzz<br />
! pango<br />
! poppler<br />
! gdl<br />
! lcms2<br />
! libsigc++<br />
! libgc <!-- Fedora rpm: gc --><br />
! libsoup<br />
|-<br />
| Windows MSYS2 (2021-04-14)<br/>([https://github.com/Alexpux/MINGW-packages mingw-w64 packages] from MSYS2 project)<br />
<!-- see http://quodlibet.duckdns.org/msys2/base for list of latest package versions --><br />
| 1.0.2<br />
| 10.2.0<br />
| 11.0.0<br />
| 1.17.4<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.68.1<br />
| 2.66.0<br />
| 3.24.27<br />
| 3.24.3<br />
| 2.8.0<br />
| 1.48.4<br />
| 20.12.1<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.6<br />
| 8.0.4 <!-- mingw-w64-gc --><br />
| 2.72.0<br />
|-<br />
| Debian 11 (Bullseye, oldstable) <small>EOL 2026</small><br />
| 1.0.2<br />
| 10.2.1<br />
| 13.0.1<br />
| 1.16<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.66.8<br />
| 2.64.2<br />
| 3.24.24<br />
| 3.24.2<br />
| 2.7.4<br />
| 1.46.2<br />
| 20.09.0<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.4<br />
| 8.0.4<br />
| 2.72.0<br />
|-<br />
| Debian 12 (Bookworm, stable) <small>EOL 2028?</small><br />
| 1.2.2<br />
| 12.2.0<br />
| 15.0.6<br />
| 1.16.0<br />
| 1.12.1<br />
| 2.10.4<br />
| 2.74.5<br />
| 2.74.0<br />
| 3.24.36<br />4.8.3<br />
| 3.24.7<br />4.8.0<br />
| 6.0.0<br />
| 1.50.12<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.1<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.03<br />3.2.2<br />
|-<br />
| Ubuntu 22.04 LTS (Jammy Jellyfish) <small>EOL 2027-04</small><br />
| 1.1.2<br />
| 12.3.0<br />
| 15.0.7<br />
| 1.16.0<br />
| 1.12.2<br />
| 2.11.1<br />
| 2.72.1<br />
| 2.66.2<br />
| 3.24.33<br />4.6.2<br />
| 3.24.5<br />no libgtkmm-4.0<br />
| 2.7.4<br />
| 1.50.6<br />
| 22.02.0<br />
| 3.40.0<br />
| 2.12-rc1<br />
| 2.10.4<br />
| 8.0.6<br />
| 2.74.2<br />3.0.5<br />
|-<br />
| Ubuntu 23.04 (Lunar)<br />
| 1.2.2<br />
| 13.1.0<br />
| 16.0.0<br />
| 1.14.4<br />1.16.0<br />
| 1.14.4<br />1.16.2<br />
| 2.12.1<br />
| 2.76.0<br />
| 2.66.6<br />
| 3.24.37<br />4.10.1<br />
| 3.24.7<br />4.10.0<br />
| 6.0.0<br />
| 1.50.12<br />2.50.1<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.2<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.3<br />3.4.0<br />
|}<br />
<sup>#</sup>Debian and Ubuntu offer multiple gcc and clang versions, latest available version listed.<br />
<br />
* Agreed to at Saarbrücken hackfest.<br />
<br />
== Getting and Installing Source packages ==<br />
<br />
See [https://inkscape.org/develop/getting-started/ Getting Started]<br />
<br />
== Optional Dependencies ==<br />
<br />
Inkscape will still compile without these, but some features may be missing if they are absent during compilation:<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Library<br />
! scope="col"| Needed for<br />
! scope="col"| Default<br />
|-<br />
|aspell<br />
|Dictionaries for spell checking<br />
|On<br />
|-<br />
|libcdr<br />
|Open Corel Draw files<br />
|On<br />
|-<br />
|gettext/msgformat<br />
|Translation support<br />
|On<br />
|-<br />
|gtest/gmock<br />
|Automatted testing<br />
|Off<br />
|-<br />
|gspell<br />
|Spell checking<br />
|On<br />
|-<br />
|imagemagick<br />
|Bitmap editing extensions, bitmap import resolution<br />
|On<br />
|-<br />
|jpeg<br />
|jpeg import?<br />
|On<br />
|-<br />
|OpenMP<br />
|Multi-threaded filter rendering<br />
|On<br />
|-<br />
|scour<br />
|Save as Optimized SVG<br />
|(not needed during compiling, Python)<br />
|-<br />
|libvisio<br />
|Open Visio Files, use Visio stencils<br />
|On<br />
|-<br />
|libwpg<br />
|Open WordPerfect Graphics<br />
|On<br />
|-<br />
|}<br />
<br />
<br />
<br />
[[Category:About Inkscape]]<br />
[[Category:Developer Documentation]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=C%2B%2B20&diff=122554C++202023-09-27T12:00:32Z<p>Tavmjong: </p>
<hr />
<div><br />
See also [[C++11]], [[C++17]].<br />
<br />
Some things that will be interesting to use once C++20 is common:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Feature !! Since !! Can use? !! GCC !! Apple Clang !! Comment<br />
|-<br />
| <code>std::span</code> || C++20 || style="background: lightgreen;" | from 1.4 || 10 || 11.0.3 || Handle buffers like standard library containers without risk of overflow.<br />
|-<br />
| <code>std::format</code> || C++20 || style="background: pink;" | || 13 || N/A || Better and more efficient formatting of strings. [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html Text Formatting]<br />
|-<br />
| <code>std::lerp</code> || C++20 || style="background: lightgreen;" | from 1.4 || 9 || 11.0.3 || Linear interpolation. (ui/tools/pencil-tool.cpp)<br />
|-<br />
| <code>std::bit_floor</code> || C++20 || style="background: lightgreen;" | from 1.4 || 9/10 || 11.0.3/13.0.0 || Compute floor(log2(x)). (helper/mathfns.h)<br />
|-<br />
| <code>Concepts</code> || C++20 || from 1.4? || 6/10 || 12.0.0 Partial || Safer templating. (ui/controller.h)<br />
|-<br />
| <code>Coroutines</code> || C++20 || || 10 || 10.0.1 Partial || Simpler asynchronous code. (trace/trace.cpp)<br />
|-<br />
| <code>std::make_unique_for_overwrite</code> || C++20 || style="background: pink;" | || 11 || N/A || Don't zero arrays allocated using std::make_unique. (util/pool.cpp)<br />
|-<br />
| <code>Ranges</code> || C++20 || from 1.4? || || ? || for (init; decl : expr). (ui/dialog/swatches.cpp)<br />
|-<br />
| <code>[https://stackoverflow.com/a/60244416/5075760 Structural templates]</code> || C++20 || from 1.4? || || Partial || Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp)<br />
|-<br />
| <code>Mathematical Constants</code>|| C++20 || || 10 || 12.0.5 || Constants like std::numbers::pi. <br />
|}<br />
<br />
As of 6 September 2023, the CI runners for:<br />
* Linux:<br />
** appimage:linux GNU 10.5 (Building on "oldest supported Ubuntu LTS release", we must wait until April 2025 to use a newer GNU version!) Note: Gtkmm4 is not available in Ubuntu 20.04 or 22.04!<br />
** inkscape:linux GNU 11.4.0<br />
* Windows<br />
** inkscape:windows:build Gnu 13.1.0<br />
** inkscape:windows:dist Same as above.<br />
* macOS:<br />
** inkscape::macos:arm Apple Clang 13.1.6<br />
** inkscape:macos:x64: Apple Clang 14.0.0.<br />
<br />
<br />
We strive to support lastest Debian stable and latest Ubuntu LTS. But this may not be possible for a gtk4 based release. Ideally, we would target gtkmm4 4.10 as it has a critical scrolling bug fix.<br />
{| class="wikitable"<br />
|-<br />
! Distro || gcc || clang || gtkmm4<br />
|-<br />
| Debian 12 (Bookworm, stable) || 12.2.0 || 15.0.6 || 4.8.3<br />
|-<br />
| Ubuntu 22.04 (Jammy Jellyfish) || 12.3.0 || 15.0.7 || Not packaged!<br />
|-<br />
| Ubuntu 23.04 (Lunar) || 13.1.0 || 16.0.0 || 4.10.1<br />
|}<br />
<br />
Errors and Deprecated items that we use:<br />
* error: call of overloaded ‘lerp(double, double&, double&)’ is ambiguous (ui/knot/knot-holder-entity.cpp)<br />
* warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 [-Wdeprecated] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0806r2.html<br />
* warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=C%2B%2B20&diff=122553C++202023-09-17T12:38:22Z<p>Tavmjong: </p>
<hr />
<div><br />
See also [[C++11]], [[C++17]].<br />
<br />
Some things that will be interesting to use once C++20 is common:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Feature !! Since !! Can use? !! GCC !! Apple Clang !! Comment<br />
|-<br />
| <code>std::span</code> || C++20 || style="background: lightgreen;" | from 1.3? || 10 || 11.0.3 || Handle buffers like standard library containers without risk of overflow.<br />
|-<br />
| <code>std::format</code> || C++20 || style="background: pink;" | || 13 || N/A || Better and more efficient formatting of strings. [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html Text Formatting]<br />
|-<br />
| <code>std::lerp</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9 || 11.0.3 || Linear interpolation. (ui/tools/pencil-tool.cpp)<br />
|-<br />
| <code>std::bit_floor</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9/10 || 11.0.3/13.0.0 || Compute floor(log2(x)). (helper/mathfns.h)<br />
|-<br />
| <code>Concepts</code> || C++20 || from 1.4? || 6/10 || 12.0.0 Partial || Safer templating. (ui/controller.h)<br />
|-<br />
| <code>Coroutines</code> || C++20 || || 10 || 10.0.1 Partial || Simpler asynchronous code. (trace/trace.cpp)<br />
|-<br />
| <code>std::make_unique_for_overwrite</code> || C++20 || style="background: pink;" | || 11 || N/A || Don't zero arrays allocated using std::make_unique. (util/pool.cpp)<br />
|-<br />
| <code>Ranges</code> || C++20 || from 1.4? || || ? || for (init; decl : expr). (ui/dialog/swatches.cpp)<br />
|-<br />
| <code>[https://stackoverflow.com/a/60244416/5075760 Structural templates]</code> || C++20 || from 1.4? || || Partial || Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp)<br />
|-<br />
| <code>Mathematical Constants</code>|| C++20 || || 10 || 12.0.5 || Constants like std::numbers::pi. <br />
|}<br />
<br />
As of 6 September 2023, the CI runners for:<br />
* Linux:<br />
** appimage:linux GNU 10.5 (Building on "oldest supported Ubuntu LTS release", we must wait until April 2025 to use a newer GNU version!) Note: Gtkmm4 is not available in Ubuntu 20.04 or 22.04!<br />
** inkscape:linux GNU 11.4.0<br />
* Windows<br />
** inkscape:windows:build Gnu 13.1.0<br />
** inkscape:windows:dist Same as above.<br />
* macOS:<br />
** inkscape::macos:arm Apple Clang 13.1.6<br />
** inkscape:macos:x64: Apple Clang 14.0.0.<br />
<br />
<br />
We strive to support lastest Debian stable and latest Ubuntu LTS. But this may not be possible for a gtk4 based release. Ideally, we would target gtkmm4 4.10 as it has a critical scrolling bug fix.<br />
{| class="wikitable"<br />
|-<br />
! Distro || gcc || clang || gtkmm4<br />
|-<br />
| Debian 12 (Bookworm, stable) || 12.2.0 || 15.0.6 || 4.8.3<br />
|-<br />
| Ubuntu 22.04 (Jammy Jellyfish) || 12.3.0 || 15.0.7 || Not packaged!<br />
|-<br />
| Ubuntu 23.04 (Lunar) || 13.1.0 || 16.0.0 || 4.10.1<br />
|}<br />
<br />
Errors and Deprecated items that we use:<br />
* error: call of overloaded ‘lerp(double, double&, double&)’ is ambiguous (ui/knot/knot-holder-entity.cpp)<br />
* warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 [-Wdeprecated] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0806r2.html<br />
* warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Tracking_Dependencies&diff=122552Tracking Dependencies2023-09-17T12:16:44Z<p>Tavmjong: /* Distros */</p>
<hr />
<div>== Compilers ==<br />
<br />
Version 1.0 requires a C++11 compiler.<br />
Version 1.1 requires a C++17 compiler.<br />
<br />
See [[c++11]], [[c++17]], and [[C++20]].<br />
<br />
== Libs ==<br />
<br />
C++ bindings are not included, since their required versions match those of the C counterparts.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Library<br />
! v 0.92<br />
! v 1.0<br />
! v 1.1<br />
! v 1.2<br />
! v 1.3<br />
! master<br />
! gtk4<br />
|-<br />
| Boehm-GC<br />
| 7.2<br />
| 7.2<br />
| 7.2<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| Cairo<br />
| 1.14<br />
| 1.14 (1.15.4 required for PDF links)<br />
| 1.16*<br />
| 1.16<br />
| 1.16<br />
|<br />
| 1.16**<br />
|-<br />
| double-conversion [https://github.com/google/double-conversion]<br/>''(lib2geom dependency)''<br />
| ''(not required)''<br />
| any<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| FreeType<br />
|<br />
|<br />
| 2.9* (Required for Variable fonts)<br />
| 2.9<br />
| 2.9<br />
|<br />
|<br />
|-<br />
| GDL<br />
| N/A<br />(3.4)<br />
| 3.4<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
|-<br />
| Glib<br />
| 2.28<br />
| 2.48<br />
| 2.56 or 2.62*<br />
| 2.64<br />
| 2.64<br />
|<br />
| 2.68**<br />
|-<br />
| GTK+<br />
| 2.24<br />(3.8)<br />
| 3.22<br />
| 3.24*<br />
| 3.24<br />
| 3.24<br />
|<br />
| 4.10.1** +<br />
|-<br />
| GNU Scientific Library<br />
| ?<br />
| ?<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| HarfBuzz<br />
| ?<br />
| ?<br />
| 2.2*<br />
| 2.6<br />
| 2.6<br />
| 2.6.5*<br />
|<br />
|-<br />
| libsigc++<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
|<br />
|<br />
|<br />
| 3.0**<br />
|-<br />
| libSoup<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libpotrace<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxml<br />
| ''2.6.11*''<br />
| ''2.6.11*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxslt<br />
| ''1.0.15*''<br />
| ''1.0.15*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| lcms<br />
| 1.13<br />
| 2.2<br />
| 2.2 (2.9*)<br />
| 2.9*<br />
| 2.9*<br />
|<br />
|<br />
|-<br />
| Pango<br />
| 1.24<br />
| 1.24 (1.41.1 required for variable fonts)<br />
| 1.42*<br />
| 1.44<br />
| 1.44 (HarfBuzz shaping)<br />
|<br />
| 2.48**<br />
|-<br />
| Poppler<br />
| 0.20.0<br />
| 0.20.0<br />
| 0.29 (0.71*)<br />
| 0.29 (0.71*)<br />
| 0.71*<br />
|<br />
|<br />
|-<br />
| [https://formulae.brew.sh/formula/gtk-mac-integration gtk-mac-integration]<br>[https://www.macports.org/ports.php?by=library&substr=gtk-osx-application-gtk3 gtk-osx-application-gtk3]<br />
| N/A<br />
| 2.0.8 ([[CompilingMacOsX|macOS only]])<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|}<br />
<br />
''* Tentative dependency''<br />
<br />
* Pango 1.42.2 requires Harfbuzz 1.4.2<br />
* Pango 1.44.0 requires Glib 2.59.2 and Harfbuzz 2.0. 1.44 exposes hb_font directly.<br />
* Pango 1.45.1 requires Glib 2.60<br />
* Pango 1.48.4 has vertical upright marks fix.<br />
* Harfbuzz 4.1 changes glyph positioning for upright vertical text when font does not have vertical metrics (from glyph touching to of cell to being centered in cell).<br />
<br />
''** Gtkmm4 requires API changed Glibmm, Cairomm, and Pangomm. In particular, enums use child namespaces in newer libraries (Cairo::FORMAT_ARGB32 -> Cairo::Surface::Format::ARGB32).''<br />
<br />
''+ Gtk4 4.10.1 has an important scrolling bug fix.''<br />
<br />
== Distros ==<br />
<br />
Note: This table is not relevant to (non-fink) MacOS X, where we ship the desired version with Inkscape.<br />
<br />
"Inkscape" column is default or distro version / oldest that builds - latest that builds. If no latest is given then that means trunk is expected to build on the given platform.<br />
<br />
e.g. for a distro that ships with 0.48 but should support building of trunk you might get:<br />
0.48 / 0.47-<br />
<br />
'''General rules:'''<br />
* Support latest Debian Stable (as of feature freeze) [https://www.debian.org/distrib/packages Debian packages]<br />
* Support latest Ubuntu LTS (as of feature freeze) [https://packages.ubuntu.com/ Ubuntu packages]<br />
**e.g. Considering Inkscape 1.2, the latest Ubuntu LTS at '''feature freeze time''' (around February 2022) would have been Ubuntu 20.04. The latest LTS at release time (around May 2022), though, will be Ubuntu 22.04. Therefore, according to the rule, we should support Ubuntu 20.04 LTS as the minimum version.<br />
** ''Note: For gtkmm4: Jammy: no package, Kinetic: 4.8, Lunar: 4.10, Mantic: 4.10''<br />
<br />
* Support last two Fedora releases (as of feature freeze) [https://packages.fedoraproject.org/ Fedora packages]<br />
* Don't break ''point'' releases.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Distro<br />
! Inkscape<br />
! gcc<sup>#</sup><br />
! clang<sup>#</sup><br />
! cairo<br />
! cairomm<br />
! freetype<br />
! glib<br />
! glibmm<br />
! gtk+<br />
! gtkmm<br />
! harfbuzz<br />
! pango<br />
! poppler<br />
! gdl<br />
! lcms2<br />
! libsigc++<br />
! libgc <!-- Fedora rpm: gc --><br />
! libsoup<br />
|-<br />
| Windows MSYS2 (2021-04-14)<br/>([https://github.com/Alexpux/MINGW-packages mingw-w64 packages] from MSYS2 project)<br />
<!-- see http://quodlibet.duckdns.org/msys2/base for list of latest package versions --><br />
| 1.0.2<br />
| 10.2.0<br />
| 11.0.0<br />
| 1.17.4<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.68.1<br />
| 2.66.0<br />
| 3.24.27<br />
| 3.24.3<br />
| 2.8.0<br />
| 1.48.4<br />
| 20.12.1<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.6<br />
| 8.0.4 <!-- mingw-w64-gc --><br />
| 2.72.0<br />
|-<br />
| Debian 11 (Bullseye, oldstable) <small>EOL 2026</small><br />
| 1.0.2<br />
| 10.2.1<br />
| 13.0.1<br />
| 1.16<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.66.8<br />
| 2.64.2<br />
| 3.24.24<br />
| 3.24.2<br />
| 2.7.4<br />
| 1.46.2<br />
| 20.09.0<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.4<br />
| 8.0.4<br />
| 2.72.0<br />
|-<br />
| Debian 12 (Bookworm, stable) <small>EOL 2028?</small><br />
| 1.2.2<br />
| 12.2.0<br />
| 15.0.6<br />
| 1.16.0<br />
| 1.12.1<br />
| 2.10.4<br />
| 2.74.5<br />
| 2.74.0<br />
| 3.24.36<br />4.8.3<br />
| 3.24.7<br />4.8.0<br />
| 6.0.0<br />
| 1.50.12<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.1<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.03<br />3.2.2<br />
|-<br />
| Ubuntu 22.04 LTS (Jammy Jellyfish) <small>EOL 2027-04</small><br />
| 1.1.2<br />
| 12.3.0<br />
| 15.0.7<br />
| 1.16.0<br />
| 1.12.2<br />
| 2.11.1<br />
| 2.72.1<br />
| 2.66.2<br />
| 3.24.33<br />4.6.2<br />
| 3.24.5<br />no libgtkmm-4.0<br />
| 2.7.4<br />
| 1.50.6<br />
| 22.02.0<br />
| 3.40.0<br />
| 2.12-rc1<br />
| 2.10.4<br />
| 8.0.6<br />
| 2.74.2<br />3.0.5<br />
|-<br />
| Ubuntu 23.04 (Lunar)<br />
| 1.2.2<br />
| 13.1.0<br />
| 16.0.0<br />
| 1.14.4<br />1.16.0<br />
| 1.14.4<br />1.16.2<br />
| 2.12.1<br />
| 2.76.0<br />
| 2.66.6<br />
| 3.24.37<br />4.10.1<br />
| 3.24.7<br />4.10.0<br />
| 6.0.0<br />
| 1.50.12<br />2.50.1<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.2<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.3<br />3.4.0<br />
|}<br />
<sup>#</sup>Debian and Ubuntu offer multiple gcc and clang versions, latest available version listed.<br />
<br />
* Agreed to at Saarbrücken hackfest.<br />
<br />
== Getting and Installing Source packages ==<br />
<br />
See [https://inkscape.org/develop/getting-started/ Getting Started]<br />
<br />
== Optional Dependencies ==<br />
<br />
Inkscape will still compile without these, but some features may be missing if they are absent during compilation:<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Library<br />
! scope="col"| Needed for<br />
! scope="col"| Default<br />
|-<br />
|aspell<br />
|Dictionaries for spell checking<br />
|On<br />
|-<br />
|libcdr<br />
|Open Corel Draw files<br />
|On<br />
|-<br />
|gettext/msgformat<br />
|Translation support<br />
|On<br />
|-<br />
|gtest/gmock<br />
|Automatted testing<br />
|Off<br />
|-<br />
|gspell<br />
|Spell checking<br />
|On<br />
|-<br />
|imagemagick<br />
|Bitmap editing extensions, bitmap import resolution<br />
|On<br />
|-<br />
|jpeg<br />
|jpeg import?<br />
|On<br />
|-<br />
|OpenMP<br />
|Multi-threaded filter rendering<br />
|On<br />
|-<br />
|scour<br />
|Save as Optimized SVG<br />
|(not needed during compiling, Python)<br />
|-<br />
|libvisio<br />
|Open Visio Files, use Visio stencils<br />
|On<br />
|-<br />
|libwpg<br />
|Open WordPerfect Graphics<br />
|On<br />
|-<br />
|}<br />
<br />
<br />
<br />
[[Category:About Inkscape]]<br />
[[Category:Developer Documentation]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=C%2B%2B20&diff=122551C++202023-09-17T07:05:41Z<p>Tavmjong: </p>
<hr />
<div><br />
See also [[C++11]], [[C++17]].<br />
<br />
Some things that will be interesting to use once C++20 is common:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Feature !! Since !! Can use? !! GCC !! Apple Clang !! Comment<br />
|-<br />
| <code>std::span</code> || C++20 || style="background: lightgreen;" | from 1.3? || 10 || 11.0.3 || Handle buffers like standard library containers without risk of overflow.<br />
|-<br />
| <code>std::format</code> || C++20 || style="background: pink;" | || 13 || N/A || Better and more efficient formatting of strings. [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html Text Formatting]<br />
|-<br />
| <code>std::lerp</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9 || 11.0.3 || Linear interpolation. (ui/tools/pencil-tool.cpp)<br />
|-<br />
| <code>std::bit_floor</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9/10 || 11.0.3/13.0.0 || Compute floor(log2(x)). (helper/mathfns.h)<br />
|-<br />
| <code>Concepts</code> || C++20 || from 1.4? || 6/10 || 12.0.0 Partial || Safer templating. (ui/controller.h)<br />
|-<br />
| <code>Coroutines</code> || C++20 || || 10 || 10.0.1 Partial || Simpler asynchronous code. (trace/trace.cpp)<br />
|-<br />
| <code>std::make_unique_for_overwrite</code> || C++20 || style="background: pink;" | || 11 || N/A || Don't zero arrays allocated using std::make_unique. (util/pool.cpp)<br />
|-<br />
| <code>Ranges</code> || C++20 || from 1.4? || || ? || for (init; decl : expr). (ui/dialog/swatches.cpp)<br />
|-<br />
| <code>[https://stackoverflow.com/a/60244416/5075760 Structural templates]</code> || C++20 || from 1.4? || || Partial || Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp)<br />
|-<br />
| <code>Mathematical Constants</code>|| C++20 || || 10 || 12.0.5 || Constants like std::numbers::pi. <br />
|}<br />
<br />
As of 6 September 2023, the CI runners for:<br />
* Linux:<br />
** appimage:linux GNU 10.5 (Building on "oldest supported Ubuntu LTS release", we must wait until April 2025 to use a newer GNU version!) Note: Gtkmm4 is not available in Ubuntu 20.04 or 22.04!<br />
** inkscape:linux GNU 11.4.0<br />
* Windows<br />
** inkscape:windows:build Gnu 13.1.0<br />
** inkscape:windows:dist Same as above.<br />
* macOS:<br />
** inkscape::macos:arm Apple Clang 13.1.6<br />
** inkscape:macos:x64: Apple Clang 14.0.0.<br />
<br />
Errors and Deprecated items that we use:<br />
* error: call of overloaded ‘lerp(double, double&, double&)’ is ambiguous (ui/knot/knot-holder-entity.cpp)<br />
* warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 [-Wdeprecated] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0806r2.html<br />
* warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=C%2B%2B20&diff=122546C++202023-09-06T12:26:51Z<p>Tavmjong: </p>
<hr />
<div><br />
See also [[C++11]], [[C++17]].<br />
<br />
Some things that will be interesting to use once C++20 is common:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Feature !! Since !! Can use? !! GCC !! Apple Clang !! Comment<br />
|-<br />
| <code>std::span</code> || C++20 || style="background: lightgreen;" | from 1.3? || 10 || 11.0.3 || Handle buffers like standard library containers without risk of overflow.<br />
|-<br />
| <code>std::format</code> || C++20 || style="background: pink;" | || 13 || N/A || Better and more efficient formatting of strings. [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html Text Formatting]<br />
|-<br />
| <code>std::lerp</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9 || 11.0.3 || Linear interpolation. (ui/tools/pencil-tool.cpp)<br />
|-<br />
| <code>std::bit_floor</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9/10 || 11.0.3/13.0.0 || Compute floor(log2(x)). (helper/mathfns.h)<br />
|-<br />
| <code>Concepts</code> || C++20 || from 1.4? || 6/10 || 12.0.0 Partial || Safer templating. (ui/controller.h)<br />
|-<br />
| <code>Coroutines</code> || C++20 || || 10 || 10.0.1 Partial || Simpler asynchronous code. (trace/trace.cpp)<br />
|-<br />
| <code>std::make_unique_for_overwrite</code> || C++20 || style="background: pink;" | || 11 || N/A || Don't zero arrays allocated using std::make_unique. (util/pool.cpp)<br />
|-<br />
| <code>Ranges</code> || C++20 || from 1.4? || || ? || for (init; decl : expr). (ui/dialog/swatches.cpp)<br />
|-<br />
| <code>[https://stackoverflow.com/a/60244416/5075760 Structural templates]</code> || C++20 || from 1.4? || || Partial || Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp)<br />
|-<br />
| <code>Mathematical Constants</code>|| C++20 || || 10 || 12.0.5 || Constants like std::numbers::pi. <br />
|}<br />
<br />
As of 6 September 2023, the CI runners for:<br />
* Linux:<br />
** appimage:linux GNU 10.5 (Building on "oldest supported Ubuntu LTS release", we must wait until April 2025 to use a newer GNU version!) <br />
** inkscape:linux GNU 11.4.0<br />
* Windows<br />
** inkscape:windows:build Gnu 13.1.0<br />
** inkscape:windows:dist Same as above.<br />
* macOS:<br />
** inkscape::macos:arm Apple Clang 13.1.6<br />
** inkscape:macos:x64: Apple Clang 14.0.0.<br />
<br />
Errors and Deprecated items that we use:<br />
* error: call of overloaded ‘lerp(double, double&, double&)’ is ambiguous (ui/knot/knot-holder-entity.cpp)<br />
* warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 [-Wdeprecated] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0806r2.html<br />
* warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=C%2B%2B20&diff=122545C++202023-09-06T11:45:52Z<p>Tavmjong: </p>
<hr />
<div><br />
See also [[C++11]], [[C++17]].<br />
<br />
Some things that will be interesting to use once C++20 is common:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Feature !! Since !! Can use? !! GCC !! Apple Clang !! Comment<br />
|-<br />
| <code>std::span</code> || C++20 || style="background: lightgreen;" | from 1.3? || 10 || 11.0.3 || Handle buffers like standard library containers without risk of overflow.<br />
|-<br />
| <code>std::format</code> || C++20 || style="background: pink;" | || 13 || N/A || Better and more efficient formatting of strings. [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html Text Formatting]<br />
|-<br />
| <code>std::lerp</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9 || 11.0.3 || Linear interpolation. (ui/tools/pencil-tool.cpp)<br />
|-<br />
| <code>std::bit_floor</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9/10 || 11.0.3/13.0.0 || Compute floor(log2(x)). (helper/mathfns.h)<br />
|-<br />
| <code>Concepts</code> || C++20 || from 1.4? || 6/10 || 12.0.0 Partial || Safer templating. (ui/controller.h)<br />
|-<br />
| <code>Coroutines</code> || C++20 || || 10 || 10.0.1 Partial || Simpler asynchronous code. (trace/trace.cpp)<br />
|-<br />
| <code>std::make_unique_for_overwrite</code> || C++20 || style="background: pink;" | || 11 || N/A || Don't zero arrays allocated using std::make_unique. (util/pool.cpp)<br />
|-<br />
| <code>Ranges</code> || C++20 || from 1.4? || || ? || for (init; decl : expr). (ui/dialog/swatches.cpp)<br />
|-<br />
| <code>[https://stackoverflow.com/a/60244416/5075760 Structural templates]</code> || C++20 || from 1.4? || || Partial || Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp)<br />
|-<br />
| <code>Mathematical Constants</code>|| C++20 || || 10 || 12.0.5 || Constants like std::numbers::pi. <br />
|}<br />
<br />
As of 1 September 2023, the CI runners for:<br />
* Linux:<br />
** appimage:linux GNU 9.4.0 (Using Ubuntu 20.04) We can use 10.5 with Ubuntu 20.04. If we stick to building on the "oldest supported Ubuntu LTS release", we must wait until April 2025 to use a newer GNU version! <br />
** inkscape:linux GNU 11.4.0<br />
* Windows<br />
** inkscape:windows:build Gnu 13.1.0<br />
** inkscape:windows:dist Same as above.<br />
* macOS:<br />
** inkscape::macos:arm Apple Clang 13.1.6<br />
** inkscape:macos:x64: Apple Clang 14.0.0.<br />
<br />
Errors and Deprecated items that we use:<br />
* error: call of overloaded ‘lerp(double, double&, double&)’ is ambiguous (ui/knot/knot-holder-entity.cpp)<br />
* warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 [-Wdeprecated] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0806r2.html<br />
* warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=C%2B%2B20&diff=122544C++202023-09-06T09:19:21Z<p>Tavmjong: </p>
<hr />
<div><br />
See also [[C++11]], [[C++17]].<br />
<br />
Some things that will be interesting to use once C++20 is common:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Feature !! Since !! Can use? !! GCC !! Apple Clang !! Comment<br />
|-<br />
| <code>std::span</code> || C++20 || style="background: lightgreen;" | from 1.3? || 10 || 11.0.3 || Handle buffers like standard library containers without risk of overflow.<br />
|-<br />
| <code>std::format</code> || C++20 || style="background: pink;" | || 13 || N/A || Better and more efficient formatting of strings. [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html Text Formatting]<br />
|-<br />
| <code>std::lerp</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9 || 11.0.3 || Linear interpolation. (ui/tools/pencil-tool.cpp)<br />
|-<br />
| <code>std::bit_floor</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9/10 || 11.0.3/13.0.0 || Compute floor(log2(x)). (helper/mathfns.h)<br />
|-<br />
| <code>Concepts</code> || C++20 || from 1.4? || 6/10 || 12.0.0 Partial || Safer templating. (ui/controller.h)<br />
|-<br />
| <code>Coroutines</code> || C++20 || || 10 || 10.0.1 Partial || Simpler asynchronous code. (trace/trace.cpp)<br />
|-<br />
| <code>std::make_unique_for_overwrite</code> || C++20 || style="background: pink;" | || 11 || N/A || Don't zero arrays allocated using std::make_unique. (util/pool.cpp)<br />
|-<br />
| <code>Ranges</code> || C++20 || from 1.4? || || ? || for (init; decl : expr). (ui/dialog/swatches.cpp)<br />
|-<br />
| <code>[https://stackoverflow.com/a/60244416/5075760 Structural templates]</code> || C++20 || from 1.4? || || Partial || Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp)<br />
|-<br />
| <code>Mathematical Constants</code>|| C++20 || || 10 || 12.0.5 || Constants like std::numbers::pi. <br />
|}<br />
<br />
As of 1 September 2023, the CI runners for:<br />
* Linux:<br />
** appimage:linux GNU 9.4.0 (Using Ubuntu 20.04)<br />
** inkscape:linux GNU 11.4.0<br />
* Windows<br />
** inkscape:windows:build Gnu 13.1.0<br />
** inkscape:windows:dist Same as above.<br />
* macOS:<br />
** inkscape::macos:arm Apple Clang 13.1.6<br />
** inkscape:macos:x64: Apple Clang 14.0.0.<br />
<br />
Errors and Deprecated items that we use:<br />
* error: call of overloaded ‘lerp(double, double&, double&)’ is ambiguous (ui/knot/knot-holder-entity.cpp)<br />
* warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 [-Wdeprecated] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0806r2.html<br />
* warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=C%2B%2B20&diff=122543C++202023-09-04T07:12:02Z<p>Tavmjong: </p>
<hr />
<div><br />
See also [[C++11]], [[C++17]].<br />
<br />
Some things that will be interesting to use once C++20 is common:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Feature !! Since !! Can use? !! GCC !! Apple Clang !! Comment<br />
|-<br />
| <code>std::span</code> || C++20 || style="background: lightgreen;" | from 1.3? || 10 || 11.0.3 || Handle buffers like standard library containers without risk of overflow.<br />
|-<br />
| <code>std::format</code> || C++20 || style="background: pink;" | || 13 || N/A || Better and more efficient formatting of strings. [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html Text Formatting]<br />
|-<br />
| <code>std::lerp</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9 || 11.0.3 || Linear interpolation. (ui/tools/pencil-tool.cpp)<br />
|-<br />
| <code>std::bit_floor</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9/10 || 11.0.3/13.0.0 || Compute floor(log2(x)). (helper/mathfns.h)<br />
|-<br />
| <code>Concepts</code> || C++20 || from 1.4? || 6/10 || 12.0.0 Partial || Safer templating. (ui/controller.h)<br />
|-<br />
| <code>Coroutines</code> || C++20 || || 10 || 10.0.1 Partial || Simpler asynchronous code. (trace/trace.cpp)<br />
|-<br />
| <code>std::make_unique_for_overwrite</code> || C++20 || style="background: pink;" | || 11 || N/A || Don't zero arrays allocated using std::make_unique. (util/pool.cpp)<br />
|-<br />
| <code>Ranges</code> || C++20 || from 1.4? || || ? || for (init; decl : expr). (ui/dialog/swatches.cpp)<br />
|-<br />
| <code>[https://stackoverflow.com/a/60244416/5075760 Structural templates]</code> || C++20 || from 1.4? || || Partial || Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp)<br />
|}<br />
<br />
As of 1 September 2023, the CI runners for:<br />
* Linux:<br />
** appimage:linux GNU 9.4.0 (Using Ubuntu 20.04)<br />
** inkscape:linux GNU 11.4.0<br />
* Windows<br />
** inkscape:windows:build Gnu 13.1.0<br />
** inkscape:windows:dist Same as above.<br />
* macOS:<br />
** inkscape::macos:arm Apple Clang 13.1.6<br />
** inkscape:macos:x64: Apple Clang 14.0.0.<br />
<br />
Errors and Deprecated items that we use:<br />
* error: call of overloaded ‘lerp(double, double&, double&)’ is ambiguous (ui/knot/knot-holder-entity.cpp)<br />
* warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 [-Wdeprecated] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0806r2.html<br />
* warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=C%2B%2B20&diff=122542C++202023-09-03T15:30:05Z<p>Tavmjong: </p>
<hr />
<div><br />
See also [[C++11]], [[C++17]].<br />
<br />
Some things that will be interesting to use once C++20 is common:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Feature !! Since !! Can use? !! GCC !! Apple Clang !! Comment<br />
|-<br />
| <code>std::span</code> || C++20 || style="background: lightgreen;" | from 1.3? || 10 || 11.0.3 || Handle buffers like standard library containers without risk of overflow.<br />
|-<br />
| <code>std::format</code> || C++20 || style="background: pink;" | || 13 || N/A || Better and more efficient formatting of strings. [https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html Text Formatting]<br />
|-<br />
| <code>std::lerp</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9 || 11.0.3 || Linear interpolation. (ui/tools/pencil-tool.cpp)<br />
|-<br />
| <code>std::bit_floor</code> || C++20 || style="background: lightgreen;" | from 1.4? || 9/10 || 11.0.3/13.0.0 || Compute floor(log2(x)). (helper/mathfns.h)<br />
|-<br />
| <code>Concepts</code> || C++20 || from 1.4? || 6/10 || 12.0.0 Partial || Safer templating. (ui/controller.h)<br />
|-<br />
| <code>Coroutines</code> || C++20 || || 10 || 10.0.1 Partial || Simpler asynchronous code. (trace/trace.cpp)<br />
|-<br />
| <code>std::make_unique_for_overwrite</code> || C++20 || style="background: pink;" | || 11 || N/A || Don't zero arrays allocated using std::make_unique. (util/pool.cpp)<br />
|-<br />
| <code>Ranges</code> || C++20 || from 1.4? || || ? || for (init; decl : expr). (ui/dialog/swatches.cpp)<br />
|-<br />
| <code>[https://stackoverflow.com/a/60244416/5075760 Structural templates]</code> || C++20 || from 1.4? || || Partial || Allow instances of arbitrary literal classes as template parameters. (display/drawing.cpp)<br />
|}<br />
<br />
As of 1 September 2023, the CI runners for:<br />
* Linux:<br />
** appimage:linux GNU 9.4.0<br />
** inkscape:linux GNU 11.4.0<br />
* Windows<br />
** inkscape:windows:build Gnu 13.1.0<br />
** inkscape:windows:dist (ming64) ?<br />
* macOS:<br />
** inkscape::macos:arm Apple Clang 13.1.6<br />
** inkscape:macos:x64: Apple Clang 14.0.0.<br />
<br />
Errors and Deprecated items that we use:<br />
* error: call of overloaded ‘lerp(double, double&, double&)’ is ambiguous (ui/knot/knot-holder-entity.cpp)<br />
* warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20 [-Wdeprecated] https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0806r2.html<br />
* warning: bitwise operation between different enumeration types ‘Box3D::Axis’ and ‘Box3D::FrontOrRear’ is deprecated [-Wdeprecated-enum-enum-conversion]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Tracking_Dependencies&diff=122539Tracking Dependencies2023-09-01T16:17:38Z<p>Tavmjong: </p>
<hr />
<div>== Compilers ==<br />
<br />
Version 1.0 requires a C++11 compiler.<br />
Version 1.1 requires a C++17 compiler.<br />
<br />
See [[c++11]], [[c++17]], and [[C++20]].<br />
<br />
== Libs ==<br />
<br />
C++ bindings are not included, since their required versions match those of the C counterparts.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Library<br />
! v 0.92<br />
! v 1.0<br />
! v 1.1<br />
! v 1.2<br />
! v 1.3<br />
! master<br />
! gtk4<br />
|-<br />
| Boehm-GC<br />
| 7.2<br />
| 7.2<br />
| 7.2<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| Cairo<br />
| 1.14<br />
| 1.14 (1.15.4 required for PDF links)<br />
| 1.16*<br />
| 1.16<br />
| 1.16<br />
|<br />
| 1.16**<br />
|-<br />
| double-conversion [https://github.com/google/double-conversion]<br/>''(lib2geom dependency)''<br />
| ''(not required)''<br />
| any<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| FreeType<br />
|<br />
|<br />
| 2.9* (Required for Variable fonts)<br />
| 2.9<br />
| 2.9<br />
|<br />
|<br />
|-<br />
| GDL<br />
| N/A<br />(3.4)<br />
| 3.4<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
|-<br />
| Glib<br />
| 2.28<br />
| 2.48<br />
| 2.56 or 2.62*<br />
| 2.64<br />
| 2.64<br />
|<br />
| 2.68**<br />
|-<br />
| GTK+<br />
| 2.24<br />(3.8)<br />
| 3.22<br />
| 3.24*<br />
| 3.24<br />
| 3.24<br />
|<br />
| 4.10.1** +<br />
|-<br />
| GNU Scientific Library<br />
| ?<br />
| ?<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| HarfBuzz<br />
| ?<br />
| ?<br />
| 2.2*<br />
| 2.6<br />
| 2.6<br />
| 2.6.5*<br />
|<br />
|-<br />
| libsigc++<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
|<br />
|<br />
|<br />
| 3.0**<br />
|-<br />
| libSoup<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libpotrace<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxml<br />
| ''2.6.11*''<br />
| ''2.6.11*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxslt<br />
| ''1.0.15*''<br />
| ''1.0.15*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| lcms<br />
| 1.13<br />
| 2.2<br />
| 2.2 (2.9*)<br />
| 2.9*<br />
| 2.9*<br />
|<br />
|<br />
|-<br />
| Pango<br />
| 1.24<br />
| 1.24 (1.41.1 required for variable fonts)<br />
| 1.42*<br />
| 1.44<br />
| 1.44 (HarfBuzz shaping)<br />
|<br />
| 2.48**<br />
|-<br />
| Poppler<br />
| 0.20.0<br />
| 0.20.0<br />
| 0.29 (0.71*)<br />
| 0.29 (0.71*)<br />
| 0.71*<br />
|<br />
|<br />
|-<br />
| [https://formulae.brew.sh/formula/gtk-mac-integration gtk-mac-integration]<br>[https://www.macports.org/ports.php?by=library&substr=gtk-osx-application-gtk3 gtk-osx-application-gtk3]<br />
| N/A<br />
| 2.0.8 ([[CompilingMacOsX|macOS only]])<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|}<br />
<br />
''* Tentative dependency''<br />
<br />
* Pango 1.42.2 requires Harfbuzz 1.4.2<br />
* Pango 1.44.0 requires Glib 2.59.2 and Harfbuzz 2.0. 1.44 exposes hb_font directly.<br />
* Pango 1.45.1 requires Glib 2.60<br />
* Pango 1.48.4 has vertical upright marks fix.<br />
* Harfbuzz 4.1 changes glyph positioning for upright vertical text when font does not have vertical metrics (from glyph touching to of cell to being centered in cell).<br />
<br />
''** Gtkmm4 requires API changed Glibmm, Cairomm, and Pangomm. In particular, enums use child namespaces in newer libraries (Cairo::FORMAT_ARGB32 -> Cairo::Surface::Format::ARGB32).''<br />
<br />
''+ Gtk4 4.10.1 has an important scrolling bug fix.''<br />
<br />
== Distros ==<br />
<br />
Note: This table is not relevant to (non-fink) MacOS X, where we ship the desired version with Inkscape.<br />
<br />
"Inkscape" column is default or distro version / oldest that builds - latest that builds. If no latest is given then that means trunk is expected to build on the given platform.<br />
<br />
e.g. for a distro that ships with 0.48 but should support building of trunk you might get:<br />
0.48 / 0.47-<br />
<br />
'''General rules:'''<br />
* Support latest Debian Stable (as of feature freeze) [https://www.debian.org/distrib/packages Debian packages]<br />
* Support latest Ubuntu LTS (as of feature freeze) [https://packages.ubuntu.com/ Ubuntu packages]<br />
**e.g. Considering Inkscape 1.2, the latest Ubuntu LTS at '''feature freeze time''' (around February 2022) would have been Ubuntu 20.04. The latest LTS at release time (around May 2022), though, will be Ubuntu 22.04. Therefore, according to the rule, we should support Ubuntu 20.04 LTS as the minimum version.<br />
** ''Note: For gtkmm4: Jammy: no package, Kinetic: 4.8, Lunar: 4.10, Mantic: 4.10''<br />
<br />
* Support last two Fedora releases (as of feature freeze) [https://packages.fedoraproject.org/ Fedora packages]<br />
* Don't break ''point'' releases.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Distro<br />
! Inkscape<br />
! gcc<br />
! clang<br />
! cairo<br />
! cairomm<br />
! freetype<br />
! glib<br />
! glibmm<br />
! gtk+<br />
! gtkmm<br />
! harfbuzz<br />
! pango<br />
! poppler<br />
! gdl<br />
! lcms2<br />
! libsigc++<br />
! libgc <!-- Fedora rpm: gc --><br />
! libsoup<br />
|-<br />
| Windows MSYS2 (2021-04-14)<br/>([https://github.com/Alexpux/MINGW-packages mingw-w64 packages] from MSYS2 project)<br />
<!-- see http://quodlibet.duckdns.org/msys2/base for list of latest package versions --><br />
| 1.0.2<br />
| 10.2.0<br />
| 11.0.0<br />
| 1.17.4<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.68.1<br />
| 2.66.0<br />
| 3.24.27<br />
| 3.24.3<br />
| 2.8.0<br />
| 1.48.4<br />
| 20.12.1<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.6<br />
| 8.0.4 <!-- mingw-w64-gc --><br />
| 2.72.0<br />
|-<br />
| Debian 11 (Bullseye, oldstable) <small>EOL 2026</small><br />
| 1.0.2<br />
| 10.2.1<br />
| 11.0<br />
| 1.16<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.66.8<br />
| 2.64.2<br />
| 3.24.24<br />
| 3.24.2<br />
| 2.7.4<br />
| 1.46.2<br />
| 20.09.0<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.4<br />
| 8.0.4<br />
| 2.72.0<br />
|-<br />
| Debian 12 (Bookworm, stable) <small>EOL 2028?</small><br />
| 1.2.2<br />
| 10.4.0<br />
| 13.0.1<br />
| 1.16.0<br />
| 1.12.1<br />
| 2.10.4<br />
| 2.74.5<br />
| 2.74.0<br />
| 3.24.36<br />4.8.3<br />
| 3.24.7<br />4.8.0<br />
| 6.0.0<br />
| 1.50.12<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.1<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.03<br />3.2.2<br />
|-<br />
| Ubuntu 22.04 LTS (Jammy Jellyfish) <small>EOL 2027-04</small><br />
| 1.1.2<br />
| 12.1.0<br />
| 14.0.0<br />
| 1.16.0<br />
| 1.12.2<br />
| 2.11.1<br />
| 2.72.1<br />
| 2.66.2<br />
| 3.24.33<br />4.6.2<br />
| 3.24.5<br />no libgtkmm-4.0<br />
| 2.7.4<br />
| 1.50.6<br />
| 22.02.0<br />
| 3.40.0<br />
| 2.12-rc1<br />
| 2.10.4<br />
| 8.0.6<br />
| 2.74.2<br />3.0.5<br />
|-<br />
| Ubuntu 23.04 (Lunar)<br />
| 1.2.2<br />
| 10.5.0<br />
| 16.0.0<br />
| 1.14.4<br />1.16.0<br />
| 1.14.4<br />1.16.2<br />
| 2.12.1<br />
| 2.76.0<br />
| 2.66.6<br />
| 3.24.37<br />4.10.1<br />
| 3.24.7<br />4.10.0<br />
| 6.0.0<br />
| 1.50.12<br />2.50.1<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.2<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.3<br />3.4.0<br />
|}<br />
<br />
* Agreed to at Saarbrücken hackfest.<br />
<br />
== Getting and Installing Source packages ==<br />
<br />
See [https://inkscape.org/develop/getting-started/ Getting Started]<br />
<br />
== Optional Dependencies ==<br />
<br />
Inkscape will still compile without these, but some features may be missing if they are absent during compilation:<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Library<br />
! scope="col"| Needed for<br />
! scope="col"| Default<br />
|-<br />
|aspell<br />
|Dictionaries for spell checking<br />
|On<br />
|-<br />
|libcdr<br />
|Open Corel Draw files<br />
|On<br />
|-<br />
|gettext/msgformat<br />
|Translation support<br />
|On<br />
|-<br />
|gtest/gmock<br />
|Automatted testing<br />
|Off<br />
|-<br />
|gspell<br />
|Spell checking<br />
|On<br />
|-<br />
|imagemagick<br />
|Bitmap editing extensions, bitmap import resolution<br />
|On<br />
|-<br />
|jpeg<br />
|jpeg import?<br />
|On<br />
|-<br />
|OpenMP<br />
|Multi-threaded filter rendering<br />
|On<br />
|-<br />
|scour<br />
|Save as Optimized SVG<br />
|(not needed during compiling, Python)<br />
|-<br />
|libvisio<br />
|Open Visio Files, use Visio stencils<br />
|On<br />
|-<br />
|libwpg<br />
|Open WordPerfect Graphics<br />
|On<br />
|-<br />
|}<br />
<br />
<br />
<br />
[[Category:About Inkscape]]<br />
[[Category:Developer Documentation]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=C%2B%2B20&diff=122538C++202023-09-01T16:06:48Z<p>Tavmjong: </p>
<hr />
<div><br />
See also [[C++11]], [[C++17]].<br />
<br />
Some things that will be interesting to use once C++20 is common:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Feature !! Since !! Can use? !! Apple Clang !! Comment<br />
|-<br />
| <code>std::span</code> || C++20 || style="background: lightgreen;" | from 1.3? || 11.0.3 || Handle buffers like standard library containers without risk of overflow.<br />
|-<br />
| <code>std::format</code> || C++20 || style="background: pink;" | || N/A || Better and more efficient formatting of strings.<br />
|-<br />
| <code>std::lerp</code> || C++20 || style="background: lightgreen;" | from 1.4? || 11.0.3 || Linear interpolation. (ui/tools/pencil-tool.cpp)<br />
|-<br />
| <code>std::bit_floor</code> || C++20 || style="background: lightgreen;" | from 1.4? || 11.0.3/13.0.0 || (helper/mathfns.h)<br />
|-<br />
| <code>Concepts</code> || C++20 || from 1.4? || 12.0.0 Partial || Safer templating. (ui/controller.h)<br />
|-<br />
| <code>Coroutines</code> || C++20 || || 10.0.1 Partial || (trace/trace.cpp)<br />
|-<br />
| <code>std::make_unique_for_overwrite</code> || C++20 || style="background: pink;" | || N/A || (util/pool.cpp)<br />
|-<br />
| <code>Ranges</code> || C++20 || from 1.4? || ? || for (init; decl : expr). (ui/dialog/swatches.cpp)<br />
|-<br />
| <code>Structural Templates</code> || C++20 || from 1.4? || ? || (display/drawing.cpp)<br />
|}<br />
<br />
As of 1 September 2023, the CI runners for MacOS are using Apple Clang 13.1.6 (ARM) and Apple Clang 14.0.0 (Intel64).</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=C%2B%2B20&diff=122537C++202023-09-01T15:07:43Z<p>Tavmjong: </p>
<hr />
<div><br />
See also [[C++11]], [[C++17]].<br />
<br />
Some things that will be interesting to use once C++20 is common:<br />
<br />
{| class="wikitable"<br />
|-<br />
! Feature !! Since !! Can use? !! Comment<br />
|-<br />
| <code>std::span</code> || C++20 || style="background: lightgreen;" | from 1.3? || Handle buffers like standard library containers without risk of overflow. (OK on MacOS)<br />
|-<br />
| <code>std::format</code>|| C++20 || style="background: lightgreen;" | from 1.4? || Better and more efficient formatting of strings.<br />
|-<br />
| <code>std::lerp</code> || C++20 || from 1.4? || Linear interpolation.<br />
|-<br />
| <code>std::bit_floor</code> || C++20 || from 1.4? || <br />
|-<br />
| <code>Concepts</code || C++20 || from 1.4? || Safer templating.<br />
|-<br />
| <code>std::make_unique_for_overwrite</code> || C++20 || from 1.4? ||<br />
|-<br />
| <code>Ranges</code> || C++20 || from 1.4? ||<br />
|-<br />
| <code>Structural Templates</code> || C++20 || from 1.4? ||<br />
|}</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Builder_Files&diff=122535Builder Files2023-08-22T10:01:24Z<p>Tavmjong: /* Tools */</p>
<hr />
<div><br />
<br />
Gtk allows one to define the UI interface using "Builder" files. "Builder" files are XML files that describe widget layout, menus, etc.<br />
<br />
Builder files should end with .ui but many of ours end with .glade as the UI creater program Glade was used to create them. Glade works only with Gtk3. Cambalache is a Glade replacement that works with both Gtk3 and Gtk4.<br />
<br />
== Tools ==<br />
<br />
=== gtk-builder-tool===<br />
<br />
Allows one to simplify or examine Gtk3 builder files. Using the simplify option over our builder files results in:<br />
<br />
* Changing "True" to "1", "False" to "0"<br />
* Changing '"' to &amp;quot; and <nowiki>'''</nowiki> to &amp;apos;.<br />
* Removing properties with default values, e.g.:<br />
** "can-focus" == False<br />
** "label-xalign" == 0<br />
** "receives-default" == False<br />
** "expand" == False<br />
** "fill" == True<br />
** "position" == 0<br />
** "xalign" == 0.5<br />
* Removing unneeded <packing>...</packing> (where all properties are default).<br />
* Removing <child><placeholder/></child> and <placeholder/><br />
* Moving &lt;!-- n-columns=x n-rows=y --&gt; comment to before <child>.<br />
* Replacing underscores by hyphens in property names.<br />
<br />
gtk-builder-tool does not understand the "child" property (in GtkScrolledWindow, GtkViewPort).<br />
<br />
One can use a script to restore "True", "False", (without touching the 'active' property in ComboBox's). It also restores quotes and ampersands in strings (to avoid breaking translations). See below.<br />
<br />
=== gtk4-builder-tool ===<br />
<br />
In addition to the uses of gtk-builder-tool, gtk4-bulder-tool has a --3to4 option that converts gtk3 builder files to gtk4 builder files, the conversion is not perfect. In particular, it does not remove properties it doesn't recognize.<br />
<br />
Using the 'simplify' mode without --3to4 (after using gtk-builder-tool):<br />
<br />
* Changes translatable="true" or "yes" to translatable="1".<br />
* Strips many comments.<br />
<br />
Using the 'simplify' mode with --3to4 results in:<br />
<br />
* Replacing &lt;requires lib="gtk+" version="3.24"/&gt; with &lt;requires lib="gtk" version="4.0"/&gt;<br />
* Changes &lt;attribute name='xxx'... to &lt;attribute name=&quot;xxx&quot;...<br />
* Removing the property "visible" when its value is "True" (widgets are visible by default in Gtk4).<br />
* Replacing the property "can-focus" with value "True" by the property "focusable" with value 1.<br />
* Removing &lt;packing&gt;...&lt;/packing&gt; for GtkBox.<br />
* Replacing &lt;object&gt;...&lt;/object&gt;&lt;packing&gt;...&lt;/packing&gt; by &lt;object&gt;...&lt;layout&gt;...&lt;/layout&gt;&lt;/object&gt; for GtkGrid.<br />
* Changing &lt;child&gt;...&lt;/child&gt; to &lt;property name=&quot;child&quot;&gt;...&lt;/property&gt; for child of GtkFlowBoxChild and GtkViewPort.<br />
* Changing the property "margin" to the four properties "margin-start", "margin-end", "margin-top", and "margin-bottom".<br />
* Adding the property "draw-value" with value 1 for GtkScale.<br />
* Adding the property "visible" with value 0 to GtkFlowBoxChild.<br />
<br />
Properties not supported in Gtk4 and not replaced:<br />
<br />
* GtkAspectFrame::label-xalign<br />
* GtkAspectFrame::shadow-type<br />
* GtkBox::double-buffered<br />
* GtkBox::events<br />
* GtkBox::no-show-all<br />
* GtkButton::always-show-image<br />
* GtkButtonBox::can-focus<br />
* GtkButtonBox::hexpand<br />
* GtkButtonBox::layout-style<br />
* GtkButtonBox::visible<br />
* GtkButton::can-default<br />
* GtkButton::image<br />
* GtkButton::image-position<br />
* GtkButton::no-show-all<br />
* GtkButton::relief<br />
* GtkButton::use-stock<br />
* GtkCellRendererPixbuf::stock_size<br />
* GtkCheckButton::image<br />
* GtkCheckButton::no-show-all<br />
* GtkDialog::gravity<br />
* GtkDialog::has-resize-grip<br />
* GtkDialog::skip-taskbar-hint<br />
* GtkDialog::type-hint<br />
* GtkDialog::type_hint<br />
* GtkDialog::window-position<br />
* GtkEntry::caps-lock-warning<br />
* GtkEntry::no_show_all<br />
* GtkEventBox::can-focus<br />
* GtkEventBox::can_focus<br />
* GtkEventBox::halign<br />
* GtkEventBox::hexpand<br />
* GtkEventBox::name<br />
* GtkEventBox::no-show-all<br />
* GtkEventBox::valign<br />
* GtkEventBox::visible<br />
* GtkEventBox::visible-window<br />
* GtkExpander::label-fill<br />
* GtkFlowBox::no-show-all<br />
* GtkFrame::shadow-type<br />
* GtkGrid::no-show-all<br />
* GtkImage::no-show-all<br />
* GtkImage::stock<br />
* GtkLabel::no-show-all<br />
* GtkLabel::no_show_all<br />
* GtkLabel::ypad<br />
* GtkLinkButton::relief<br />
* GtkMenuButton::draw-indicator<br />
* GtkMenuButton::image<br />
* GtkMenuButton::no-show-all<br />
* GtkMenuButton::popup<br />
* GtkMenuButton::relief<br />
* GtkMenuButton::use-popover<br />
* GtkMenu::can-focus<br />
* GtkMenuItem::can-focus<br />
* GtkMenuItem::use-underline<br />
* GtkMenuItem::visible<br />
* GtkMenu::reserve-toggle-size<br />
* GtkMenu::visible<br />
* GtkModelButton::action-name<br />
* GtkModelButton::action-target<br />
* GtkModelButton::can-focus<br />
* GtkModelButton::halign<br />
* GtkModelButton::inverted<br />
* GtkModelButton::receives-default<br />
* GtkModelButton::visible<br />
* GtkNotebook::double-buffered<br />
* GtkNotebook::no-show-all<br />
* GtkPopover::constrain-to<br />
* GtkPopover::no-show-all<br />
* GtkPopover::relative-to<br />
* GtkPopover::transitions-enabled<br />
* GtkRadioMenuItem::can-focus<br />
* GtkRadioMenuItem::draw-as-radio<br />
* GtkRadioMenuItem::group<br />
* GtkRadioMenuItem::use-underline<br />
* GtkRadioMenuItem::visible<br />
* GtkScrolledWindow::double-buffered<br />
* GtkScrolledWindow::no-show-all<br />
* GtkScrolledWindow::shadow-type<br />
* GtkScrolledWindow::shadow_type<br />
* GtkScrolledWindow::window-placement-set<br />
* GtkSearchEntry::can-default<br />
* GtkSearchEntry::caps-lock-warning<br />
* GtkSearchEntry::completion<br />
* GtkSearchEntry::is-focus<br />
* GtkSearchEntry::primary-icon-activatable<br />
* GtkSearchEntry::primary-icon-name<br />
* GtkSearchEntry::primary-icon-sensitive<br />
* GtkSeparatorMenuItem::can-focus<br />
* GtkSeparatorMenuItem::margin-bottom<br />
* GtkSeparatorMenuItem::margin-top<br />
* GtkSeparatorMenuItem::visible<br />
* GtkSpinButton::caps-lock-warning<br />
* GtkSpinButton::input-purpose<br />
* GtkSpinner::active<br />
* GtkToggleButton::always-show-image<br />
* GtkToggleButton::image<br />
* GtkToggleButton::no-show-all<br />
* GtkToggleButton::relief<br />
* GtkToggleButton::use-action-appearance<br />
* GtkToolItem::can-focus<br />
* GtkToolItem::visible<br />
* GtkTreeView::no_show_all<br />
* GtkViewport::shadow-type<br />
* GtkWindow::can_default<br />
* GtkWindow::gravity<br />
* GtkWindow::is_focus<br />
* GtkWindow::urgency_hint<br />
* GtkWindow::window-position<br />
* GtkWindow::window_position<br />
<br />
== Restore "True"/"False"/quotes/ampersands. ==<br />
<br />
=== Perl Script ===<br />
<pre><br />
#!/usr/bin/perl<br />
<br />
# Restore use of True (instead of '1') and False (instead of '0') after<br />
# using gtk-builder-tool or gtk4-builder-tool.<br />
<br />
use strict;<br />
use warnings;<br />
use File::Copy;<br />
<br />
open my $true_false, '<', "true_false.txt" or die "Cannot read true_false.txt";<br />
chomp (my @properties = <$true_false>);<br />
<br />
my $pattern = "";<br />
foreach (@properties) {<br />
$pattern = $pattern . "\"";<br />
$pattern = $pattern . $_;<br />
$pattern = $pattern . "\"";<br />
$pattern = $pattern. "|";<br />
}<br />
chop $pattern;<br />
#print $pattern . "\n";<br />
<br />
my $file = $ARGV[0];<br />
#print $file . "\n";<br />
<br />
my $file_out = $file . "_out";<br />
open my $input, '<', $file or die "Cannot open $file";<br />
open my $output, '>', $file_out or die "Cannot open $file_out";<br />
<br />
my $class = "";<br />
while (my $line = <$input>) {<br />
<br />
# Track current class<br />
if ($line =~ m/class=\"(.*?)\"/) {<br />
$class = $1;<br />
# print "Class: " . $class . "\n";<br />
}<br />
<br />
# For gtk4-builder-tool<br />
$line =~ s/translatable=\"1\"/translatable=\"yes\"/;<br />
$line =~ s/translatable=\"0\"/translatable=\"no\"/;<br />
<br />
if ($line =~ m/($pattern)/) {<br />
# print $line;<br />
if ($line =~ m/active/ and $class =~ m/ComboBox/) {<br />
# Don't change 'active' property to True/False for ComboBox or ComboBoxText<br />
# print "FOUND COMBOBOX WITH ACTIVE\n";<br />
} else {<br />
$line =~ s/>0</>False</;<br />
$line =~ s/>1</>True</;<br />
}<br />
# print $line;<br />
}<br />
$line =~ s/&amp;quot;/\"/g; # This is improper... but it would effect translations.<br />
$line =~ s/&amp;apos;/\'/g;<br />
print $output $line;<br />
}<br />
<br />
close $input;<br />
close $output;<br />
move ($file_out, $file) or die "Couldn't move $file_out to $file!";<br />
</pre><br />
<br />
=== Input File: save as true_false.txt ===<br />
<pre><br />
accepts-tab<br />
activate-on-single-click<br />
activates-default<br />
active<br />
always-show-image<br />
can-default<br />
can-focus<br />
caps-lock-warning<br />
column-homogeneous<br />
cursor-visible<br />
destroy-with-parent<br />
double-buffered<br />
draw-as-radio<br />
draw-indicator<br />
draw-value<br />
editable<br />
enable-popup<br />
enable-search<br />
expand<br />
fill<br />
fixed-height-mode<br />
focus-on-click<br />
has-default<br />
has-entry<br />
has-focus<br />
has-frame<br />
has-origin<br />
has-resize-grip<br />
has-tooltip<br />
headers-clickable<br />
headers-visible<br />
hexpand<br />
homogeneous<br />
hover-selection<br />
inline-completion<br />
inverted<br />
is-focus<br />
label-fill<br />
modal<br />
no-show-all<br />
numeric<br />
overlay-scrolling<br />
pass-through<br />
popup-set-width<br />
position-set<br />
primary-icon-activatable<br />
primary-icon-sensitive<br />
propagate-natural-height<br />
propagate-natural-width<br />
receives-default<br />
reserve-toggle-size<br />
resizable<br />
resize<br />
resize-toplevel<br />
reveal-child<br />
row-homogeneous<br />
search-mode-enabled<br />
secondary-use-markup<br />
selectable<br />
sensitive<br />
show-border<br />
show-expanders<br />
show-fill-level<br />
show-text<br />
shrink<br />
single-line-mode<br />
skip-taskbar-hint<br />
sort-indicator<br />
tab-expand<br />
tab-fill<br />
transitions-enabled<br />
urgency-hint<br />
use-action-appearance<br />
use-fallback<br />
use-markup<br />
use-popover<br />
use-stock<br />
use-underline<br />
vexpand<br />
visible<br />
visible-window<br />
wide-handle<br />
window-placement-set<br />
wrap<br />
</pre></div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Builder_Files&diff=122534Builder Files2023-08-21T08:34:48Z<p>Tavmjong: /* gtk-builder-tool */</p>
<hr />
<div><br />
<br />
Gtk allows one to define the UI interface using "Builder" files. "Builder" files are XML files that describe widget layout, menus, etc.<br />
<br />
Builder files should end with .ui but many of ours end with .glade as the UI creater program Glade was used to create them. Glade works only with Gtk3. Cambalache is a Glade replacement that works with both Gtk3 and Gtk4.<br />
<br />
== Tools ==<br />
<br />
=== gtk-builder-tool===<br />
<br />
Allows one to simplify or examine Gtk3 builder files. Using the simplify option over our builder files results in:<br />
<br />
* Changing "True" to "1", "False" to "0"<br />
* Changing '"' to &amp;quot; and <nowiki>'''</nowiki> to &amp;apos;.<br />
* Removing properties with default values, e.g.:<br />
** "can-focus" == False<br />
** "label-xalign" == 0<br />
** "receives-default" == False<br />
** "expand" == False<br />
** "fill" == True<br />
** "position" == 0<br />
** "xalign" == 0.5<br />
* Removing unneeded <packing>...</packing> (where all properties are default).<br />
* Removing <child><placeholder/></child> and <placeholder/><br />
* Moving &lt;!-- n-columns=x n-rows=y --&gt; comment to before <child>.<br />
* Replacing underscores by hyphens in property names.<br />
<br />
gtk-builder-tool does not understand the "child" property (in GtkScrolledWindow, GtkViewPort).<br />
<br />
One can use a script to restore "True", "False", '"', and <nowiki>'''</nowiki> (the latter to avoid changing translatable strings). It works except for the property 'active' which can be a boolean (CheckButton) or an 'int' (ComboBox).<br />
<br />
=== gtk4-builder-tool ===<br />
<br />
In addition to the uses of gtk-builder-tool, gtk4-bulder-tool has a --3to4 option that converts gtk3 builder files to gtk4 builder files, the conversion is not perfect. In particular, it does not remove properties it doesn't recognize.<br />
<br />
Using the 'simplify' mode without --3to4 (after using gtk-builder-tool):<br />
<br />
* Changes translatable="true" or "yes" to translatable="1".<br />
* Strips many comments.<br />
<br />
Using the 'simplify' mode with --3to4 results in:<br />
<br />
* Replacing &lt;requires lib="gtk+" version="3.24"/&gt; with &lt;requires lib="gtk" version="4.0"/&gt;<br />
* Changes &lt;attribute name='xxx'... to &lt;attribute name=&quot;xxx&quot;...<br />
* Removing the property "visible" when its value is "True" (widgets are visible by default in Gtk4).<br />
* Replacing the property "can-focus" with value "True" by the property "focusable" with value 1.<br />
* Removing &lt;packing&gt;...&lt;/packing&gt; for GtkBox.<br />
* Replacing &lt;object&gt;...&lt;/object&gt;&lt;packing&gt;...&lt;/packing&gt; by &lt;object&gt;...&lt;layout&gt;...&lt;/layout&gt;&lt;/object&gt; for GtkGrid.<br />
* Changing &lt;child&gt;...&lt;/child&gt; to &lt;property name=&quot;child&quot;&gt;...&lt;/property&gt; for child of GtkFlowBoxChild and GtkViewPort.<br />
* Changing the property "margin" to the four properties "margin-start", "margin-end", "margin-top", and "margin-bottom".<br />
* Adding the property "draw-value" with value 1 for GtkScale.<br />
* Adding the property "visible" with value 0 to GtkFlowBoxChild.<br />
<br />
Properties not supported in Gtk4 and not replaced:<br />
<br />
* GtkAspectFrame::label-xalign<br />
* GtkAspectFrame::shadow-type<br />
* GtkBox::double-buffered<br />
* GtkBox::events<br />
* GtkBox::no-show-all<br />
* GtkButton::always-show-image<br />
* GtkButtonBox::can-focus<br />
* GtkButtonBox::hexpand<br />
* GtkButtonBox::layout-style<br />
* GtkButtonBox::visible<br />
* GtkButton::can-default<br />
* GtkButton::image<br />
* GtkButton::image-position<br />
* GtkButton::no-show-all<br />
* GtkButton::relief<br />
* GtkButton::use-stock<br />
* GtkCellRendererPixbuf::stock_size<br />
* GtkCheckButton::image<br />
* GtkCheckButton::no-show-all<br />
* GtkDialog::gravity<br />
* GtkDialog::has-resize-grip<br />
* GtkDialog::skip-taskbar-hint<br />
* GtkDialog::type-hint<br />
* GtkDialog::type_hint<br />
* GtkDialog::window-position<br />
* GtkEntry::caps-lock-warning<br />
* GtkEntry::no_show_all<br />
* GtkEventBox::can-focus<br />
* GtkEventBox::can_focus<br />
* GtkEventBox::halign<br />
* GtkEventBox::hexpand<br />
* GtkEventBox::name<br />
* GtkEventBox::no-show-all<br />
* GtkEventBox::valign<br />
* GtkEventBox::visible<br />
* GtkEventBox::visible-window<br />
* GtkExpander::label-fill<br />
* GtkFlowBox::no-show-all<br />
* GtkFrame::shadow-type<br />
* GtkGrid::no-show-all<br />
* GtkImage::no-show-all<br />
* GtkImage::stock<br />
* GtkLabel::no-show-all<br />
* GtkLabel::no_show_all<br />
* GtkLabel::ypad<br />
* GtkLinkButton::relief<br />
* GtkMenuButton::draw-indicator<br />
* GtkMenuButton::image<br />
* GtkMenuButton::no-show-all<br />
* GtkMenuButton::popup<br />
* GtkMenuButton::relief<br />
* GtkMenuButton::use-popover<br />
* GtkMenu::can-focus<br />
* GtkMenuItem::can-focus<br />
* GtkMenuItem::use-underline<br />
* GtkMenuItem::visible<br />
* GtkMenu::reserve-toggle-size<br />
* GtkMenu::visible<br />
* GtkModelButton::action-name<br />
* GtkModelButton::action-target<br />
* GtkModelButton::can-focus<br />
* GtkModelButton::halign<br />
* GtkModelButton::inverted<br />
* GtkModelButton::receives-default<br />
* GtkModelButton::visible<br />
* GtkNotebook::double-buffered<br />
* GtkNotebook::no-show-all<br />
* GtkPopover::constrain-to<br />
* GtkPopover::no-show-all<br />
* GtkPopover::relative-to<br />
* GtkPopover::transitions-enabled<br />
* GtkRadioMenuItem::can-focus<br />
* GtkRadioMenuItem::draw-as-radio<br />
* GtkRadioMenuItem::group<br />
* GtkRadioMenuItem::use-underline<br />
* GtkRadioMenuItem::visible<br />
* GtkScrolledWindow::double-buffered<br />
* GtkScrolledWindow::no-show-all<br />
* GtkScrolledWindow::shadow-type<br />
* GtkScrolledWindow::shadow_type<br />
* GtkScrolledWindow::window-placement-set<br />
* GtkSearchEntry::can-default<br />
* GtkSearchEntry::caps-lock-warning<br />
* GtkSearchEntry::completion<br />
* GtkSearchEntry::is-focus<br />
* GtkSearchEntry::primary-icon-activatable<br />
* GtkSearchEntry::primary-icon-name<br />
* GtkSearchEntry::primary-icon-sensitive<br />
* GtkSeparatorMenuItem::can-focus<br />
* GtkSeparatorMenuItem::margin-bottom<br />
* GtkSeparatorMenuItem::margin-top<br />
* GtkSeparatorMenuItem::visible<br />
* GtkSpinButton::caps-lock-warning<br />
* GtkSpinButton::input-purpose<br />
* GtkSpinner::active<br />
* GtkToggleButton::always-show-image<br />
* GtkToggleButton::image<br />
* GtkToggleButton::no-show-all<br />
* GtkToggleButton::relief<br />
* GtkToggleButton::use-action-appearance<br />
* GtkToolItem::can-focus<br />
* GtkToolItem::visible<br />
* GtkTreeView::no_show_all<br />
* GtkViewport::shadow-type<br />
* GtkWindow::can_default<br />
* GtkWindow::gravity<br />
* GtkWindow::is_focus<br />
* GtkWindow::urgency_hint<br />
* GtkWindow::window-position<br />
* GtkWindow::window_position</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Tracking_Dependencies&diff=122533Tracking Dependencies2023-08-18T11:29:18Z<p>Tavmjong: /* Distros */</p>
<hr />
<div>== Compilers ==<br />
<br />
Version 1.0 requires a C++11 compiler.<br />
Version 1.1 requires a C++17 compiler.<br />
<br />
See [[c++11]] and [[c++17]].<br />
<br />
== Libs ==<br />
<br />
C++ bindings are not included, since their required versions match those of the C counterparts.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Library<br />
! v 0.92<br />
! v 1.0<br />
! v 1.1<br />
! v 1.2<br />
! v 1.3<br />
! master<br />
! gtk4<br />
|-<br />
| Boehm-GC<br />
| 7.2<br />
| 7.2<br />
| 7.2<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| Cairo<br />
| 1.14<br />
| 1.14 (1.15.4 required for PDF links)<br />
| 1.16*<br />
| 1.16<br />
| 1.16<br />
|<br />
| 1.16**<br />
|-<br />
| double-conversion [https://github.com/google/double-conversion]<br/>''(lib2geom dependency)''<br />
| ''(not required)''<br />
| any<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| FreeType<br />
|<br />
|<br />
| 2.9* (Required for Variable fonts)<br />
| 2.9<br />
| 2.9<br />
|<br />
|<br />
|-<br />
| GDL<br />
| N/A<br />(3.4)<br />
| 3.4<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
|-<br />
| Glib<br />
| 2.28<br />
| 2.48<br />
| 2.56 or 2.62*<br />
| 2.64<br />
| 2.64<br />
|<br />
| 2.68**<br />
|-<br />
| GTK+<br />
| 2.24<br />(3.8)<br />
| 3.22<br />
| 3.24*<br />
| 3.24<br />
| 3.24<br />
|<br />
| 4.10.1** +<br />
|-<br />
| GNU Scientific Library<br />
| ?<br />
| ?<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| HarfBuzz<br />
| ?<br />
| ?<br />
| 2.2*<br />
| 2.6<br />
| 2.6<br />
| 2.6.5*<br />
|<br />
|-<br />
| libsigc++<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
|<br />
|<br />
|<br />
| 3.0**<br />
|-<br />
| libSoup<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libpotrace<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxml<br />
| ''2.6.11*''<br />
| ''2.6.11*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxslt<br />
| ''1.0.15*''<br />
| ''1.0.15*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| lcms<br />
| 1.13<br />
| 2.2<br />
| 2.2 (2.9*)<br />
| 2.9*<br />
| 2.9*<br />
|<br />
|<br />
|-<br />
| Pango<br />
| 1.24<br />
| 1.24 (1.41.1 required for variable fonts)<br />
| 1.42*<br />
| 1.44<br />
| 1.44 (HarfBuzz shaping)<br />
|<br />
| 2.48**<br />
|-<br />
| Poppler<br />
| 0.20.0<br />
| 0.20.0<br />
| 0.29 (0.71*)<br />
| 0.29 (0.71*)<br />
| 0.71*<br />
|<br />
|<br />
|-<br />
| [https://formulae.brew.sh/formula/gtk-mac-integration gtk-mac-integration]<br>[https://www.macports.org/ports.php?by=library&substr=gtk-osx-application-gtk3 gtk-osx-application-gtk3]<br />
| N/A<br />
| 2.0.8 ([[CompilingMacOsX|macOS only]])<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|}<br />
<br />
''* Tentative dependency''<br />
<br />
* Pango 1.42.2 requires Harfbuzz 1.4.2<br />
* Pango 1.44.0 requires Glib 2.59.2 and Harfbuzz 2.0. 1.44 exposes hb_font directly.<br />
* Pango 1.45.1 requires Glib 2.60<br />
* Pango 1.48.4 has vertical upright marks fix.<br />
* Harfbuzz 4.1 changes glyph positioning for upright vertical text when font does not have vertical metrics (from glyph touching to of cell to being centered in cell).<br />
<br />
''** Gtkmm4 requires API changed Glibmm, Cairomm, and Pangomm. In particular, enums use child namespaces in newer libraries (Cairo::FORMAT_ARGB32 -> Cairo::Surface::Format::ARGB32).''<br />
<br />
''+ Gtk4 4.10.1 has an important scrolling bug fix.''<br />
<br />
== Distros ==<br />
<br />
Note: This table is not relevant to (non-fink) MacOS X, where we ship the desired version with Inkscape.<br />
<br />
"Inkscape" column is default or distro version / oldest that builds - latest that builds. If no latest is given then that means trunk is expected to build on the given platform.<br />
<br />
e.g. for a distro that ships with 0.48 but should support building of trunk you might get:<br />
0.48 / 0.47-<br />
<br />
'''General rules:'''<br />
* Support latest Debian Stable (as of feature freeze) [https://www.debian.org/distrib/packages Debian packages]<br />
* Support latest Ubuntu LTS (as of feature freeze) [https://packages.ubuntu.com/ Ubuntu packages]<br />
**e.g. Considering Inkscape 1.2, the latest Ubuntu LTS at '''feature freeze time''' (around February 2022) would have been Ubuntu 20.04. The latest LTS at release time (around May 2022), though, will be Ubuntu 22.04. Therefore, according to the rule, we should support Ubuntu 20.04 LTS as the minimum version.<br />
** ''Note: For gtkmm4: Jammy: no package, Kinetic: 4.8, Lunar: 4.10, Mantic: 4.10''<br />
<br />
* Support last two Fedora releases (as of feature freeze) [https://packages.fedoraproject.org/ Fedora packages]<br />
* Don't break ''point'' releases.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Distro<br />
! Inkscape<br />
! gcc<br />
! clang<br />
! cairo<br />
! cairomm<br />
! freetype<br />
! glib<br />
! glibmm<br />
! gtk+<br />
! gtkmm<br />
! harfbuzz<br />
! pango<br />
! poppler<br />
! gdl<br />
! lcms2<br />
! libsigc++<br />
! libgc <!-- Fedora rpm: gc --><br />
! libsoup<br />
|-<br />
| Windows MSYS2 (2021-04-14)<br/>([https://github.com/Alexpux/MINGW-packages mingw-w64 packages] from MSYS2 project)<br />
<!-- see http://quodlibet.duckdns.org/msys2/base for list of latest package versions --><br />
| 1.0.2<br />
| 10.2.0<br />
| 11.0.0<br />
| 1.17.4<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.68.1<br />
| 2.66.0<br />
| 3.24.27<br />
| 3.24.3<br />
| 2.8.0<br />
| 1.48.4<br />
| 20.12.1<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.6<br />
| 8.0.4 <!-- mingw-w64-gc --><br />
| 2.72.0<br />
|-<br />
| Debian 11 (Bullseye, oldstable) <small>EOL 2026</small><br />
| 1.0.2<br />
| 10.2.1<br />
| 11.0<br />
| 1.16<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.66.8<br />
| 2.64.2<br />
| 3.24.24<br />
| 3.24.2<br />
| 2.7.4<br />
| 1.46.2<br />
| 20.09.0<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.4<br />
| 8.0.4<br />
| 2.72.0<br />
|-<br />
| Debian 12 (Bookworm, stable) <small>EOL 2028?</small><br />
| 1.2.2<br />
| 10.4.0<br />
| 13.0.1<br />
| 1.16.0<br />
| 1.12.1<br />
| 2.10.4<br />
| 2.74.5<br />
| 2.74.0<br />
| 3.24.36<br />4.8.3<br />
| 3.24.7<br />4.8.0<br />
| 6.0.0<br />
| 1.50.12<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.1<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.03<br />3.2.2<br />
|-<br />
| Ubuntu 22.04 LTS (Jammy Jellyfish) <small>EOL 2027-04</small><br />
| 1.1.2<br />
| 12.1.0<br />
| 14.0.0<br />
| 1.16.0<br />
| 1.12.2<br />
| 2.11.1<br />
| 2.72.1<br />
| 2.66.2<br />
| 3.24.33<br />4.6.2<br />
| 3.24.5<br />no libgtkmm-4.0<br />
| 2.7.4<br />
| 1.50.6<br />
| 22.02.0<br />
| 3.40.0<br />
| 2.12-rc1<br />
| 2.10.4<br />
| 8.0.6<br />
| 2.74.2<br />3.0.5<br />
|-<br />
| Ubuntu 23.04 (Lunar)<br />
| 1.2.2<br />
| 10.5.0<br />
| 16.0.0<br />
| 1.14.4<br />1.16.0<br />
| 1.14.4<br />1.16.2<br />
| 2.12.1<br />
| 2.76.0<br />
| 2.66.6<br />
| 3.24.37<br />4.10.1<br />
| 3.24.7<br />4.10.0<br />
| 6.0.0<br />
| 1.50.12<br />2.50.1<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.2<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.3<br />3.4.0<br />
|}<br />
<br />
* Agreed to at Saarbrücken hackfest.<br />
<br />
== Getting and Installing Source packages ==<br />
<br />
See [https://inkscape.org/develop/getting-started/ Getting Started]<br />
<br />
== Optional Dependencies ==<br />
<br />
Inkscape will still compile without these, but some features may be missing if they are absent during compilation:<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Library<br />
! scope="col"| Needed for<br />
! scope="col"| Default<br />
|-<br />
|aspell<br />
|Dictionaries for spell checking<br />
|On<br />
|-<br />
|libcdr<br />
|Open Corel Draw files<br />
|On<br />
|-<br />
|gettext/msgformat<br />
|Translation support<br />
|On<br />
|-<br />
|gtest/gmock<br />
|Automatted testing<br />
|Off<br />
|-<br />
|gspell<br />
|Spell checking<br />
|On<br />
|-<br />
|imagemagick<br />
|Bitmap editing extensions, bitmap import resolution<br />
|On<br />
|-<br />
|jpeg<br />
|jpeg import?<br />
|On<br />
|-<br />
|OpenMP<br />
|Multi-threaded filter rendering<br />
|On<br />
|-<br />
|scour<br />
|Save as Optimized SVG<br />
|(not needed during compiling, Python)<br />
|-<br />
|libvisio<br />
|Open Visio Files, use Visio stencils<br />
|On<br />
|-<br />
|libwpg<br />
|Open WordPerfect Graphics<br />
|On<br />
|-<br />
|}<br />
<br />
<br />
<br />
[[Category:About Inkscape]]<br />
[[Category:Developer Documentation]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Builder_Files&diff=122532Builder Files2023-08-18T08:37:29Z<p>Tavmjong: /* gtk-builder-tool */</p>
<hr />
<div><br />
<br />
Gtk allows one to define the UI interface using "Builder" files. "Builder" files are XML files that describe widget layout, menus, etc.<br />
<br />
Builder files should end with .ui but many of ours end with .glade as the UI creater program Glade was used to create them. Glade works only with Gtk3. Cambalache is a Glade replacement that works with both Gtk3 and Gtk4.<br />
<br />
== Tools ==<br />
<br />
=== gtk-builder-tool===<br />
<br />
Allows one to simplify or examine Gtk3 builder files. Using the simplify option over our builder files results in:<br />
<br />
* Changing "True" to "1", "False" to "0"<br />
* Changing '"' to &amp;quot; and <nowiki>'''</nowiki> to &amp;apos;.<br />
* Removing properties with default values, e.g.:<br />
** "can-focus" == False<br />
** "label-xalign" == 0<br />
** "receives-default" == False<br />
** "expand" == False<br />
** "fill" == True<br />
** "position" == 0<br />
* Removing unneeded <packing>...</packing> (where all properties are default).<br />
* Removing <child><placeholder/></child> and <placeholder/><br />
* Moving &lt;!-- n-columns=x n-rows=y --&gt; comment to before <child>.<br />
* Replacing underscores by hyphens in property names.<br />
<br />
gtk-builder-tool does not understand the "child" property (in GtkScrolledWindow, GtkViewPort).<br />
<br />
gtk-builder-tool also removes two necessary 'xalign' properties in widget-new-from-template.ui and one from inkscape-about.glade. (It seems to happen when the value is '0.5'.)<br />
<br />
One can use a script to restore "True", "False", '"', and <nowiki>'''</nowiki> (the latter to avoid changing translatable strings). It works except for the property 'active' which can be a boolean (CheckButton) or an 'int' (ComboBox).<br />
<br />
=== gtk4-builder-tool ===<br />
<br />
In addition to the uses of gtk-builder-tool, gtk4-bulder-tool has a --3to4 option that converts gtk3 builder files to gtk4 builder files, the conversion is not perfect. In particular, it does not remove properties it doesn't recognize.<br />
<br />
Using the 'simplify' mode without --3to4 (after using gtk-builder-tool):<br />
<br />
* Changes translatable="true" or "yes" to translatable="1".<br />
* Strips many comments.<br />
<br />
Using the 'simplify' mode with --3to4 results in:<br />
<br />
* Replacing &lt;requires lib="gtk+" version="3.24"/&gt; with &lt;requires lib="gtk" version="4.0"/&gt;<br />
* Changes &lt;attribute name='xxx'... to &lt;attribute name=&quot;xxx&quot;...<br />
* Removing the property "visible" when its value is "True" (widgets are visible by default in Gtk4).<br />
* Replacing the property "can-focus" with value "True" by the property "focusable" with value 1.<br />
* Removing &lt;packing&gt;...&lt;/packing&gt; for GtkBox.<br />
* Replacing &lt;object&gt;...&lt;/object&gt;&lt;packing&gt;...&lt;/packing&gt; by &lt;object&gt;...&lt;layout&gt;...&lt;/layout&gt;&lt;/object&gt; for GtkGrid.<br />
* Changing &lt;child&gt;...&lt;/child&gt; to &lt;property name=&quot;child&quot;&gt;...&lt;/property&gt; for child of GtkFlowBoxChild and GtkViewPort.<br />
* Changing the property "margin" to the four properties "margin-start", "margin-end", "margin-top", and "margin-bottom".<br />
* Adding the property "draw-value" with value 1 for GtkScale.<br />
* Adding the property "visible" with value 0 to GtkFlowBoxChild.<br />
<br />
Properties not supported in Gtk4 and not replaced:<br />
<br />
* GtkAspectFrame::label-xalign<br />
* GtkAspectFrame::shadow-type<br />
* GtkBox::double-buffered<br />
* GtkBox::events<br />
* GtkBox::no-show-all<br />
* GtkButton::always-show-image<br />
* GtkButtonBox::can-focus<br />
* GtkButtonBox::hexpand<br />
* GtkButtonBox::layout-style<br />
* GtkButtonBox::visible<br />
* GtkButton::can-default<br />
* GtkButton::image<br />
* GtkButton::image-position<br />
* GtkButton::no-show-all<br />
* GtkButton::relief<br />
* GtkButton::use-stock<br />
* GtkCellRendererPixbuf::stock_size<br />
* GtkCheckButton::image<br />
* GtkCheckButton::no-show-all<br />
* GtkDialog::gravity<br />
* GtkDialog::has-resize-grip<br />
* GtkDialog::skip-taskbar-hint<br />
* GtkDialog::type-hint<br />
* GtkDialog::type_hint<br />
* GtkDialog::window-position<br />
* GtkEntry::caps-lock-warning<br />
* GtkEntry::no_show_all<br />
* GtkEventBox::can-focus<br />
* GtkEventBox::can_focus<br />
* GtkEventBox::halign<br />
* GtkEventBox::hexpand<br />
* GtkEventBox::name<br />
* GtkEventBox::no-show-all<br />
* GtkEventBox::valign<br />
* GtkEventBox::visible<br />
* GtkEventBox::visible-window<br />
* GtkExpander::label-fill<br />
* GtkFlowBox::no-show-all<br />
* GtkFrame::shadow-type<br />
* GtkGrid::no-show-all<br />
* GtkImage::no-show-all<br />
* GtkImage::stock<br />
* GtkLabel::no-show-all<br />
* GtkLabel::no_show_all<br />
* GtkLabel::ypad<br />
* GtkLinkButton::relief<br />
* GtkMenuButton::draw-indicator<br />
* GtkMenuButton::image<br />
* GtkMenuButton::no-show-all<br />
* GtkMenuButton::popup<br />
* GtkMenuButton::relief<br />
* GtkMenuButton::use-popover<br />
* GtkMenu::can-focus<br />
* GtkMenuItem::can-focus<br />
* GtkMenuItem::use-underline<br />
* GtkMenuItem::visible<br />
* GtkMenu::reserve-toggle-size<br />
* GtkMenu::visible<br />
* GtkModelButton::action-name<br />
* GtkModelButton::action-target<br />
* GtkModelButton::can-focus<br />
* GtkModelButton::halign<br />
* GtkModelButton::inverted<br />
* GtkModelButton::receives-default<br />
* GtkModelButton::visible<br />
* GtkNotebook::double-buffered<br />
* GtkNotebook::no-show-all<br />
* GtkPopover::constrain-to<br />
* GtkPopover::no-show-all<br />
* GtkPopover::relative-to<br />
* GtkPopover::transitions-enabled<br />
* GtkRadioMenuItem::can-focus<br />
* GtkRadioMenuItem::draw-as-radio<br />
* GtkRadioMenuItem::group<br />
* GtkRadioMenuItem::use-underline<br />
* GtkRadioMenuItem::visible<br />
* GtkScrolledWindow::double-buffered<br />
* GtkScrolledWindow::no-show-all<br />
* GtkScrolledWindow::shadow-type<br />
* GtkScrolledWindow::shadow_type<br />
* GtkScrolledWindow::window-placement-set<br />
* GtkSearchEntry::can-default<br />
* GtkSearchEntry::caps-lock-warning<br />
* GtkSearchEntry::completion<br />
* GtkSearchEntry::is-focus<br />
* GtkSearchEntry::primary-icon-activatable<br />
* GtkSearchEntry::primary-icon-name<br />
* GtkSearchEntry::primary-icon-sensitive<br />
* GtkSeparatorMenuItem::can-focus<br />
* GtkSeparatorMenuItem::margin-bottom<br />
* GtkSeparatorMenuItem::margin-top<br />
* GtkSeparatorMenuItem::visible<br />
* GtkSpinButton::caps-lock-warning<br />
* GtkSpinButton::input-purpose<br />
* GtkSpinner::active<br />
* GtkToggleButton::always-show-image<br />
* GtkToggleButton::image<br />
* GtkToggleButton::no-show-all<br />
* GtkToggleButton::relief<br />
* GtkToggleButton::use-action-appearance<br />
* GtkToolItem::can-focus<br />
* GtkToolItem::visible<br />
* GtkTreeView::no_show_all<br />
* GtkViewport::shadow-type<br />
* GtkWindow::can_default<br />
* GtkWindow::gravity<br />
* GtkWindow::is_focus<br />
* GtkWindow::urgency_hint<br />
* GtkWindow::window-position<br />
* GtkWindow::window_position</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Builder_Files&diff=122531Builder Files2023-08-18T08:21:52Z<p>Tavmjong: /* gtk4-builder-tool */</p>
<hr />
<div><br />
<br />
Gtk allows one to define the UI interface using "Builder" files. "Builder" files are XML files that describe widget layout, menus, etc.<br />
<br />
Builder files should end with .ui but many of ours end with .glade as the UI creater program Glade was used to create them. Glade works only with Gtk3. Cambalache is a Glade replacement that works with both Gtk3 and Gtk4.<br />
<br />
== Tools ==<br />
<br />
=== gtk-builder-tool===<br />
<br />
Allows one to simplify or examine Gtk3 builder files. Using the simplify option over our builder files results in:<br />
<br />
* Changing "True" to "1", "False" to "0"<br />
* Changing '"' to &amp;quot; and <nowiki>'''</nowiki> to &amp;apos;.<br />
* Removing properties with default values, e.g.:<br />
** "can-focus" == False<br />
** "label-xalign" == 0<br />
** "receives-default" == False<br />
** "expand" == False<br />
** "fill" == True<br />
** "position" == 0<br />
* Removing unneeded <packing>...</packing> (where all properties are default).<br />
* Removing <child><placeholder/></child> and <placeholder/><br />
* Moving &lt;!-- n-columns=x n-rows=y --&gt; comment to before <child>.<br />
* Replacing underscores by hyphens in property names.<br />
<br />
gtk-builder-tool does not understand the "child" property (in GtkScrolledWindow, GtkViewPort).<br />
<br />
gtk-builder-tool also removes a few necessary 'xalign' properties.<br />
<br />
One can use a script to restore "True", "False", '"', and <nowiki>'''</nowiki> (the latter to avoid changing translatable strings). It works except for the property 'active' which can be a boolean (CheckButton) or an 'int' (ComboBox).<br />
<br />
=== gtk4-builder-tool ===<br />
<br />
In addition to the uses of gtk-builder-tool, gtk4-bulder-tool has a --3to4 option that converts gtk3 builder files to gtk4 builder files, the conversion is not perfect. In particular, it does not remove properties it doesn't recognize.<br />
<br />
Using the 'simplify' mode without --3to4 (after using gtk-builder-tool):<br />
<br />
* Changes translatable="true" or "yes" to translatable="1".<br />
* Strips many comments.<br />
<br />
Using the 'simplify' mode with --3to4 results in:<br />
<br />
* Replacing &lt;requires lib="gtk+" version="3.24"/&gt; with &lt;requires lib="gtk" version="4.0"/&gt;<br />
* Changes &lt;attribute name='xxx'... to &lt;attribute name=&quot;xxx&quot;...<br />
* Removing the property "visible" when its value is "True" (widgets are visible by default in Gtk4).<br />
* Replacing the property "can-focus" with value "True" by the property "focusable" with value 1.<br />
* Removing &lt;packing&gt;...&lt;/packing&gt; for GtkBox.<br />
* Replacing &lt;object&gt;...&lt;/object&gt;&lt;packing&gt;...&lt;/packing&gt; by &lt;object&gt;...&lt;layout&gt;...&lt;/layout&gt;&lt;/object&gt; for GtkGrid.<br />
* Changing &lt;child&gt;...&lt;/child&gt; to &lt;property name=&quot;child&quot;&gt;...&lt;/property&gt; for child of GtkFlowBoxChild and GtkViewPort.<br />
* Changing the property "margin" to the four properties "margin-start", "margin-end", "margin-top", and "margin-bottom".<br />
* Adding the property "draw-value" with value 1 for GtkScale.<br />
* Adding the property "visible" with value 0 to GtkFlowBoxChild.<br />
<br />
Properties not supported in Gtk4 and not replaced:<br />
<br />
* GtkAspectFrame::label-xalign<br />
* GtkAspectFrame::shadow-type<br />
* GtkBox::double-buffered<br />
* GtkBox::events<br />
* GtkBox::no-show-all<br />
* GtkButton::always-show-image<br />
* GtkButtonBox::can-focus<br />
* GtkButtonBox::hexpand<br />
* GtkButtonBox::layout-style<br />
* GtkButtonBox::visible<br />
* GtkButton::can-default<br />
* GtkButton::image<br />
* GtkButton::image-position<br />
* GtkButton::no-show-all<br />
* GtkButton::relief<br />
* GtkButton::use-stock<br />
* GtkCellRendererPixbuf::stock_size<br />
* GtkCheckButton::image<br />
* GtkCheckButton::no-show-all<br />
* GtkDialog::gravity<br />
* GtkDialog::has-resize-grip<br />
* GtkDialog::skip-taskbar-hint<br />
* GtkDialog::type-hint<br />
* GtkDialog::type_hint<br />
* GtkDialog::window-position<br />
* GtkEntry::caps-lock-warning<br />
* GtkEntry::no_show_all<br />
* GtkEventBox::can-focus<br />
* GtkEventBox::can_focus<br />
* GtkEventBox::halign<br />
* GtkEventBox::hexpand<br />
* GtkEventBox::name<br />
* GtkEventBox::no-show-all<br />
* GtkEventBox::valign<br />
* GtkEventBox::visible<br />
* GtkEventBox::visible-window<br />
* GtkExpander::label-fill<br />
* GtkFlowBox::no-show-all<br />
* GtkFrame::shadow-type<br />
* GtkGrid::no-show-all<br />
* GtkImage::no-show-all<br />
* GtkImage::stock<br />
* GtkLabel::no-show-all<br />
* GtkLabel::no_show_all<br />
* GtkLabel::ypad<br />
* GtkLinkButton::relief<br />
* GtkMenuButton::draw-indicator<br />
* GtkMenuButton::image<br />
* GtkMenuButton::no-show-all<br />
* GtkMenuButton::popup<br />
* GtkMenuButton::relief<br />
* GtkMenuButton::use-popover<br />
* GtkMenu::can-focus<br />
* GtkMenuItem::can-focus<br />
* GtkMenuItem::use-underline<br />
* GtkMenuItem::visible<br />
* GtkMenu::reserve-toggle-size<br />
* GtkMenu::visible<br />
* GtkModelButton::action-name<br />
* GtkModelButton::action-target<br />
* GtkModelButton::can-focus<br />
* GtkModelButton::halign<br />
* GtkModelButton::inverted<br />
* GtkModelButton::receives-default<br />
* GtkModelButton::visible<br />
* GtkNotebook::double-buffered<br />
* GtkNotebook::no-show-all<br />
* GtkPopover::constrain-to<br />
* GtkPopover::no-show-all<br />
* GtkPopover::relative-to<br />
* GtkPopover::transitions-enabled<br />
* GtkRadioMenuItem::can-focus<br />
* GtkRadioMenuItem::draw-as-radio<br />
* GtkRadioMenuItem::group<br />
* GtkRadioMenuItem::use-underline<br />
* GtkRadioMenuItem::visible<br />
* GtkScrolledWindow::double-buffered<br />
* GtkScrolledWindow::no-show-all<br />
* GtkScrolledWindow::shadow-type<br />
* GtkScrolledWindow::shadow_type<br />
* GtkScrolledWindow::window-placement-set<br />
* GtkSearchEntry::can-default<br />
* GtkSearchEntry::caps-lock-warning<br />
* GtkSearchEntry::completion<br />
* GtkSearchEntry::is-focus<br />
* GtkSearchEntry::primary-icon-activatable<br />
* GtkSearchEntry::primary-icon-name<br />
* GtkSearchEntry::primary-icon-sensitive<br />
* GtkSeparatorMenuItem::can-focus<br />
* GtkSeparatorMenuItem::margin-bottom<br />
* GtkSeparatorMenuItem::margin-top<br />
* GtkSeparatorMenuItem::visible<br />
* GtkSpinButton::caps-lock-warning<br />
* GtkSpinButton::input-purpose<br />
* GtkSpinner::active<br />
* GtkToggleButton::always-show-image<br />
* GtkToggleButton::image<br />
* GtkToggleButton::no-show-all<br />
* GtkToggleButton::relief<br />
* GtkToggleButton::use-action-appearance<br />
* GtkToolItem::can-focus<br />
* GtkToolItem::visible<br />
* GtkTreeView::no_show_all<br />
* GtkViewport::shadow-type<br />
* GtkWindow::can_default<br />
* GtkWindow::gravity<br />
* GtkWindow::is_focus<br />
* GtkWindow::urgency_hint<br />
* GtkWindow::window-position<br />
* GtkWindow::window_position</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Builder_Files&diff=122530Builder Files2023-08-18T07:24:05Z<p>Tavmjong: /* gtk-builder-tool */</p>
<hr />
<div><br />
<br />
Gtk allows one to define the UI interface using "Builder" files. "Builder" files are XML files that describe widget layout, menus, etc.<br />
<br />
Builder files should end with .ui but many of ours end with .glade as the UI creater program Glade was used to create them. Glade works only with Gtk3. Cambalache is a Glade replacement that works with both Gtk3 and Gtk4.<br />
<br />
== Tools ==<br />
<br />
=== gtk-builder-tool===<br />
<br />
Allows one to simplify or examine Gtk3 builder files. Using the simplify option over our builder files results in:<br />
<br />
* Changing "True" to "1", "False" to "0"<br />
* Changing '"' to &amp;quot; and <nowiki>'''</nowiki> to &amp;apos;.<br />
* Removing properties with default values, e.g.:<br />
** "can-focus" == False<br />
** "label-xalign" == 0<br />
** "receives-default" == False<br />
** "expand" == False<br />
** "fill" == True<br />
** "position" == 0<br />
* Removing unneeded <packing>...</packing> (where all properties are default).<br />
* Removing <child><placeholder/></child> and <placeholder/><br />
* Moving &lt;!-- n-columns=x n-rows=y --&gt; comment to before <child>.<br />
* Replacing underscores by hyphens in property names.<br />
<br />
gtk-builder-tool does not understand the "child" property (in GtkScrolledWindow, GtkViewPort).<br />
<br />
gtk-builder-tool also removes a few necessary 'xalign' properties.<br />
<br />
One can use a script to restore "True", "False", '"', and <nowiki>'''</nowiki> (the latter to avoid changing translatable strings). It works except for the property 'active' which can be a boolean (CheckButton) or an 'int' (ComboBox).<br />
<br />
=== gtk4-builder-tool ===<br />
<br />
In addition to the uses of gtk-builder-tool, gtk4-bulder-tool has a --3to4 option that converts gtk3 builder files to gtk4 builder files, the conversion is not perfect. In particular, it does not remove properties it doesn't recognize.<br />
<br />
Using the --3to4 results in:<br />
<br />
* Replacing &lt;requires lib="gtk+" version="3.24"/&gt; with &lt;requires lib="gtk" version="4.0"/&gt;<br />
* Changes &lt;attribute name='xxx'... to &lt;attribute name=&quot;xxx&quot;...<br />
* Removing the property "visible" when its value is "True" (widgets are visible by default in Gtk4).<br />
* Replacing the property "can-focus" with value "True" by the property "focusable" with value 1.<br />
* Removing &lt;packing&gt;...&lt;/packing&gt; for GtkBox.<br />
* Replacing &lt;object&gt;...&lt;/object&gt;&lt;packing&gt;...&lt;/packing&gt; by &lt;object&gt;...&lt;layout&gt;...&lt;/layout&gt;&lt;/object&gt; for GtkGrid.<br />
* Changing &lt;child&gt;...&lt;/child&gt; to &lt;property name=&quot;child&quot;&gt;...&lt;/property&gt; for child of GtkFlowBoxChild and GtkViewPort.<br />
* Changing the property "margin" to the four properties "margin-start", "margin-end", "margin-top", and "margin-bottom".<br />
* Adding the property "draw-value" with value 1 for GtkScale.<br />
* Adding the property "visible" with value 0 to GtkFlowBoxChild.<br />
<br />
Properties not supported in Gtk4 and not replaced:<br />
<br />
* GtkAspectFrame::label-xalign<br />
* GtkAspectFrame::shadow-type<br />
* GtkBox::double-buffered<br />
* GtkBox::events<br />
* GtkBox::no-show-all<br />
* GtkButton::always-show-image<br />
* GtkButtonBox::can-focus<br />
* GtkButtonBox::hexpand<br />
* GtkButtonBox::layout-style<br />
* GtkButtonBox::visible<br />
* GtkButton::can-default<br />
* GtkButton::image<br />
* GtkButton::image-position<br />
* GtkButton::no-show-all<br />
* GtkButton::relief<br />
* GtkButton::use-stock<br />
* GtkCellRendererPixbuf::stock_size<br />
* GtkCheckButton::image<br />
* GtkCheckButton::no-show-all<br />
* GtkDialog::gravity<br />
* GtkDialog::has-resize-grip<br />
* GtkDialog::skip-taskbar-hint<br />
* GtkDialog::type-hint<br />
* GtkDialog::type_hint<br />
* GtkDialog::window-position<br />
* GtkEntry::caps-lock-warning<br />
* GtkEntry::no_show_all<br />
* GtkEventBox::can-focus<br />
* GtkEventBox::can_focus<br />
* GtkEventBox::halign<br />
* GtkEventBox::hexpand<br />
* GtkEventBox::name<br />
* GtkEventBox::no-show-all<br />
* GtkEventBox::valign<br />
* GtkEventBox::visible<br />
* GtkEventBox::visible-window<br />
* GtkExpander::label-fill<br />
* GtkFlowBox::no-show-all<br />
* GtkFrame::shadow-type<br />
* GtkGrid::no-show-all<br />
* GtkImage::no-show-all<br />
* GtkImage::stock<br />
* GtkLabel::no-show-all<br />
* GtkLabel::no_show_all<br />
* GtkLabel::ypad<br />
* GtkLinkButton::relief<br />
* GtkMenuButton::draw-indicator<br />
* GtkMenuButton::image<br />
* GtkMenuButton::no-show-all<br />
* GtkMenuButton::popup<br />
* GtkMenuButton::relief<br />
* GtkMenuButton::use-popover<br />
* GtkMenu::can-focus<br />
* GtkMenuItem::can-focus<br />
* GtkMenuItem::use-underline<br />
* GtkMenuItem::visible<br />
* GtkMenu::reserve-toggle-size<br />
* GtkMenu::visible<br />
* GtkModelButton::action-name<br />
* GtkModelButton::action-target<br />
* GtkModelButton::can-focus<br />
* GtkModelButton::halign<br />
* GtkModelButton::inverted<br />
* GtkModelButton::receives-default<br />
* GtkModelButton::visible<br />
* GtkNotebook::double-buffered<br />
* GtkNotebook::no-show-all<br />
* GtkPopover::constrain-to<br />
* GtkPopover::no-show-all<br />
* GtkPopover::relative-to<br />
* GtkPopover::transitions-enabled<br />
* GtkRadioMenuItem::can-focus<br />
* GtkRadioMenuItem::draw-as-radio<br />
* GtkRadioMenuItem::group<br />
* GtkRadioMenuItem::use-underline<br />
* GtkRadioMenuItem::visible<br />
* GtkScrolledWindow::double-buffered<br />
* GtkScrolledWindow::no-show-all<br />
* GtkScrolledWindow::shadow-type<br />
* GtkScrolledWindow::shadow_type<br />
* GtkScrolledWindow::window-placement-set<br />
* GtkSearchEntry::can-default<br />
* GtkSearchEntry::caps-lock-warning<br />
* GtkSearchEntry::completion<br />
* GtkSearchEntry::is-focus<br />
* GtkSearchEntry::primary-icon-activatable<br />
* GtkSearchEntry::primary-icon-name<br />
* GtkSearchEntry::primary-icon-sensitive<br />
* GtkSeparatorMenuItem::can-focus<br />
* GtkSeparatorMenuItem::margin-bottom<br />
* GtkSeparatorMenuItem::margin-top<br />
* GtkSeparatorMenuItem::visible<br />
* GtkSpinButton::caps-lock-warning<br />
* GtkSpinButton::input-purpose<br />
* GtkSpinner::active<br />
* GtkToggleButton::always-show-image<br />
* GtkToggleButton::image<br />
* GtkToggleButton::no-show-all<br />
* GtkToggleButton::relief<br />
* GtkToggleButton::use-action-appearance<br />
* GtkToolItem::can-focus<br />
* GtkToolItem::visible<br />
* GtkTreeView::no_show_all<br />
* GtkViewport::shadow-type<br />
* GtkWindow::can_default<br />
* GtkWindow::gravity<br />
* GtkWindow::is_focus<br />
* GtkWindow::urgency_hint<br />
* GtkWindow::window-position<br />
* GtkWindow::window_position</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Builder_Files&diff=122529Builder Files2023-08-18T07:23:21Z<p>Tavmjong: /* gtk-builder-tool */</p>
<hr />
<div><br />
<br />
Gtk allows one to define the UI interface using "Builder" files. "Builder" files are XML files that describe widget layout, menus, etc.<br />
<br />
Builder files should end with .ui but many of ours end with .glade as the UI creater program Glade was used to create them. Glade works only with Gtk3. Cambalache is a Glade replacement that works with both Gtk3 and Gtk4.<br />
<br />
== Tools ==<br />
<br />
=== gtk-builder-tool===<br />
<br />
Allows one to simplify or examine Gtk3 builder files. Using the simplify option over our builder files results in:<br />
<br />
* Changing "True" to "1", "False" to "0"<br />
* Changing '"' to &amp;quot; and <nowiki>'''</nowiki> to &apos;.<br />
* Removing properties with default values, e.g.:<br />
** "can-focus" == False<br />
** "label-xalign" == 0<br />
** "receives-default" == False<br />
** "expand" == False<br />
** "fill" == True<br />
** "position" == 0<br />
* Removing unneeded <packing>...</packing> (where all properties are default).<br />
* Removing <child><placeholder/></child> and <placeholder/><br />
* Moving &lt;!-- n-columns=x n-rows=y --&gt; comment to before <child>.<br />
* Replacing underscores by hyphens in property names.<br />
<br />
gtk-builder-tool does not understand the "child" property (in GtkScrolledWindow, GtkViewPort).<br />
<br />
gtk-builder-tool also removes a few necessary 'xalign' properties.<br />
<br />
One can use a script to restore "True", "False", '"', and <nowiki>'''</nowiki> (the latter to avoid changing translatable strings). It works except for the property 'active' which can be a boolean (CheckButton) or an 'int' (ComboBox).<br />
<br />
=== gtk4-builder-tool ===<br />
<br />
In addition to the uses of gtk-builder-tool, gtk4-bulder-tool has a --3to4 option that converts gtk3 builder files to gtk4 builder files, the conversion is not perfect. In particular, it does not remove properties it doesn't recognize.<br />
<br />
Using the --3to4 results in:<br />
<br />
* Replacing &lt;requires lib="gtk+" version="3.24"/&gt; with &lt;requires lib="gtk" version="4.0"/&gt;<br />
* Changes &lt;attribute name='xxx'... to &lt;attribute name=&quot;xxx&quot;...<br />
* Removing the property "visible" when its value is "True" (widgets are visible by default in Gtk4).<br />
* Replacing the property "can-focus" with value "True" by the property "focusable" with value 1.<br />
* Removing &lt;packing&gt;...&lt;/packing&gt; for GtkBox.<br />
* Replacing &lt;object&gt;...&lt;/object&gt;&lt;packing&gt;...&lt;/packing&gt; by &lt;object&gt;...&lt;layout&gt;...&lt;/layout&gt;&lt;/object&gt; for GtkGrid.<br />
* Changing &lt;child&gt;...&lt;/child&gt; to &lt;property name=&quot;child&quot;&gt;...&lt;/property&gt; for child of GtkFlowBoxChild and GtkViewPort.<br />
* Changing the property "margin" to the four properties "margin-start", "margin-end", "margin-top", and "margin-bottom".<br />
* Adding the property "draw-value" with value 1 for GtkScale.<br />
* Adding the property "visible" with value 0 to GtkFlowBoxChild.<br />
<br />
Properties not supported in Gtk4 and not replaced:<br />
<br />
* GtkAspectFrame::label-xalign<br />
* GtkAspectFrame::shadow-type<br />
* GtkBox::double-buffered<br />
* GtkBox::events<br />
* GtkBox::no-show-all<br />
* GtkButton::always-show-image<br />
* GtkButtonBox::can-focus<br />
* GtkButtonBox::hexpand<br />
* GtkButtonBox::layout-style<br />
* GtkButtonBox::visible<br />
* GtkButton::can-default<br />
* GtkButton::image<br />
* GtkButton::image-position<br />
* GtkButton::no-show-all<br />
* GtkButton::relief<br />
* GtkButton::use-stock<br />
* GtkCellRendererPixbuf::stock_size<br />
* GtkCheckButton::image<br />
* GtkCheckButton::no-show-all<br />
* GtkDialog::gravity<br />
* GtkDialog::has-resize-grip<br />
* GtkDialog::skip-taskbar-hint<br />
* GtkDialog::type-hint<br />
* GtkDialog::type_hint<br />
* GtkDialog::window-position<br />
* GtkEntry::caps-lock-warning<br />
* GtkEntry::no_show_all<br />
* GtkEventBox::can-focus<br />
* GtkEventBox::can_focus<br />
* GtkEventBox::halign<br />
* GtkEventBox::hexpand<br />
* GtkEventBox::name<br />
* GtkEventBox::no-show-all<br />
* GtkEventBox::valign<br />
* GtkEventBox::visible<br />
* GtkEventBox::visible-window<br />
* GtkExpander::label-fill<br />
* GtkFlowBox::no-show-all<br />
* GtkFrame::shadow-type<br />
* GtkGrid::no-show-all<br />
* GtkImage::no-show-all<br />
* GtkImage::stock<br />
* GtkLabel::no-show-all<br />
* GtkLabel::no_show_all<br />
* GtkLabel::ypad<br />
* GtkLinkButton::relief<br />
* GtkMenuButton::draw-indicator<br />
* GtkMenuButton::image<br />
* GtkMenuButton::no-show-all<br />
* GtkMenuButton::popup<br />
* GtkMenuButton::relief<br />
* GtkMenuButton::use-popover<br />
* GtkMenu::can-focus<br />
* GtkMenuItem::can-focus<br />
* GtkMenuItem::use-underline<br />
* GtkMenuItem::visible<br />
* GtkMenu::reserve-toggle-size<br />
* GtkMenu::visible<br />
* GtkModelButton::action-name<br />
* GtkModelButton::action-target<br />
* GtkModelButton::can-focus<br />
* GtkModelButton::halign<br />
* GtkModelButton::inverted<br />
* GtkModelButton::receives-default<br />
* GtkModelButton::visible<br />
* GtkNotebook::double-buffered<br />
* GtkNotebook::no-show-all<br />
* GtkPopover::constrain-to<br />
* GtkPopover::no-show-all<br />
* GtkPopover::relative-to<br />
* GtkPopover::transitions-enabled<br />
* GtkRadioMenuItem::can-focus<br />
* GtkRadioMenuItem::draw-as-radio<br />
* GtkRadioMenuItem::group<br />
* GtkRadioMenuItem::use-underline<br />
* GtkRadioMenuItem::visible<br />
* GtkScrolledWindow::double-buffered<br />
* GtkScrolledWindow::no-show-all<br />
* GtkScrolledWindow::shadow-type<br />
* GtkScrolledWindow::shadow_type<br />
* GtkScrolledWindow::window-placement-set<br />
* GtkSearchEntry::can-default<br />
* GtkSearchEntry::caps-lock-warning<br />
* GtkSearchEntry::completion<br />
* GtkSearchEntry::is-focus<br />
* GtkSearchEntry::primary-icon-activatable<br />
* GtkSearchEntry::primary-icon-name<br />
* GtkSearchEntry::primary-icon-sensitive<br />
* GtkSeparatorMenuItem::can-focus<br />
* GtkSeparatorMenuItem::margin-bottom<br />
* GtkSeparatorMenuItem::margin-top<br />
* GtkSeparatorMenuItem::visible<br />
* GtkSpinButton::caps-lock-warning<br />
* GtkSpinButton::input-purpose<br />
* GtkSpinner::active<br />
* GtkToggleButton::always-show-image<br />
* GtkToggleButton::image<br />
* GtkToggleButton::no-show-all<br />
* GtkToggleButton::relief<br />
* GtkToggleButton::use-action-appearance<br />
* GtkToolItem::can-focus<br />
* GtkToolItem::visible<br />
* GtkTreeView::no_show_all<br />
* GtkViewport::shadow-type<br />
* GtkWindow::can_default<br />
* GtkWindow::gravity<br />
* GtkWindow::is_focus<br />
* GtkWindow::urgency_hint<br />
* GtkWindow::window-position<br />
* GtkWindow::window_position</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Builder_Files&diff=122528Builder Files2023-08-18T07:22:41Z<p>Tavmjong: /* Tools */</p>
<hr />
<div><br />
<br />
Gtk allows one to define the UI interface using "Builder" files. "Builder" files are XML files that describe widget layout, menus, etc.<br />
<br />
Builder files should end with .ui but many of ours end with .glade as the UI creater program Glade was used to create them. Glade works only with Gtk3. Cambalache is a Glade replacement that works with both Gtk3 and Gtk4.<br />
<br />
== Tools ==<br />
<br />
=== gtk-builder-tool===<br />
<br />
Allows one to simplify or examine Gtk3 builder files. Using the simplify option over our builder files results in:<br />
<br />
* Changing "True" to "1", "False" to "0"<br />
* Changing '"' to &amp;quot; and <nowiki>'''</nowiki> to &apos'.<br />
* Removing properties with default values, e.g.:<br />
** "can-focus" == False<br />
** "label-xalign" == 0<br />
** "receives-default" == False<br />
** "expand" == False<br />
** "fill" == True<br />
** "position" == 0<br />
* Removing unneeded <packing>...</packing> (where all properties are default).<br />
* Removing <child><placeholder/></child> and <placeholder/><br />
* Moving &lt;!-- n-columns=x n-rows=y --&gt; comment to before <child>.<br />
* Replacing underscores by hyphens in property names.<br />
<br />
gtk-builder-tool does not understand the "child" property (in GtkScrolledWindow, GtkViewPort).<br />
<br />
gtk-builder-tool also removes a few necessary 'xalign' properties.<br />
<br />
One can use a script to restore "True", "False", '"', and <nowiki>'''</nowiki> (the latter to avoid changing translatable strings). It works except for the property 'active' which can be a boolean (CheckButton) or an 'int' (ComboBox).<br />
<br />
=== gtk4-builder-tool ===<br />
<br />
In addition to the uses of gtk-builder-tool, gtk4-bulder-tool has a --3to4 option that converts gtk3 builder files to gtk4 builder files, the conversion is not perfect. In particular, it does not remove properties it doesn't recognize.<br />
<br />
Using the --3to4 results in:<br />
<br />
* Replacing &lt;requires lib="gtk+" version="3.24"/&gt; with &lt;requires lib="gtk" version="4.0"/&gt;<br />
* Changes &lt;attribute name='xxx'... to &lt;attribute name=&quot;xxx&quot;...<br />
* Removing the property "visible" when its value is "True" (widgets are visible by default in Gtk4).<br />
* Replacing the property "can-focus" with value "True" by the property "focusable" with value 1.<br />
* Removing &lt;packing&gt;...&lt;/packing&gt; for GtkBox.<br />
* Replacing &lt;object&gt;...&lt;/object&gt;&lt;packing&gt;...&lt;/packing&gt; by &lt;object&gt;...&lt;layout&gt;...&lt;/layout&gt;&lt;/object&gt; for GtkGrid.<br />
* Changing &lt;child&gt;...&lt;/child&gt; to &lt;property name=&quot;child&quot;&gt;...&lt;/property&gt; for child of GtkFlowBoxChild and GtkViewPort.<br />
* Changing the property "margin" to the four properties "margin-start", "margin-end", "margin-top", and "margin-bottom".<br />
* Adding the property "draw-value" with value 1 for GtkScale.<br />
* Adding the property "visible" with value 0 to GtkFlowBoxChild.<br />
<br />
Properties not supported in Gtk4 and not replaced:<br />
<br />
* GtkAspectFrame::label-xalign<br />
* GtkAspectFrame::shadow-type<br />
* GtkBox::double-buffered<br />
* GtkBox::events<br />
* GtkBox::no-show-all<br />
* GtkButton::always-show-image<br />
* GtkButtonBox::can-focus<br />
* GtkButtonBox::hexpand<br />
* GtkButtonBox::layout-style<br />
* GtkButtonBox::visible<br />
* GtkButton::can-default<br />
* GtkButton::image<br />
* GtkButton::image-position<br />
* GtkButton::no-show-all<br />
* GtkButton::relief<br />
* GtkButton::use-stock<br />
* GtkCellRendererPixbuf::stock_size<br />
* GtkCheckButton::image<br />
* GtkCheckButton::no-show-all<br />
* GtkDialog::gravity<br />
* GtkDialog::has-resize-grip<br />
* GtkDialog::skip-taskbar-hint<br />
* GtkDialog::type-hint<br />
* GtkDialog::type_hint<br />
* GtkDialog::window-position<br />
* GtkEntry::caps-lock-warning<br />
* GtkEntry::no_show_all<br />
* GtkEventBox::can-focus<br />
* GtkEventBox::can_focus<br />
* GtkEventBox::halign<br />
* GtkEventBox::hexpand<br />
* GtkEventBox::name<br />
* GtkEventBox::no-show-all<br />
* GtkEventBox::valign<br />
* GtkEventBox::visible<br />
* GtkEventBox::visible-window<br />
* GtkExpander::label-fill<br />
* GtkFlowBox::no-show-all<br />
* GtkFrame::shadow-type<br />
* GtkGrid::no-show-all<br />
* GtkImage::no-show-all<br />
* GtkImage::stock<br />
* GtkLabel::no-show-all<br />
* GtkLabel::no_show_all<br />
* GtkLabel::ypad<br />
* GtkLinkButton::relief<br />
* GtkMenuButton::draw-indicator<br />
* GtkMenuButton::image<br />
* GtkMenuButton::no-show-all<br />
* GtkMenuButton::popup<br />
* GtkMenuButton::relief<br />
* GtkMenuButton::use-popover<br />
* GtkMenu::can-focus<br />
* GtkMenuItem::can-focus<br />
* GtkMenuItem::use-underline<br />
* GtkMenuItem::visible<br />
* GtkMenu::reserve-toggle-size<br />
* GtkMenu::visible<br />
* GtkModelButton::action-name<br />
* GtkModelButton::action-target<br />
* GtkModelButton::can-focus<br />
* GtkModelButton::halign<br />
* GtkModelButton::inverted<br />
* GtkModelButton::receives-default<br />
* GtkModelButton::visible<br />
* GtkNotebook::double-buffered<br />
* GtkNotebook::no-show-all<br />
* GtkPopover::constrain-to<br />
* GtkPopover::no-show-all<br />
* GtkPopover::relative-to<br />
* GtkPopover::transitions-enabled<br />
* GtkRadioMenuItem::can-focus<br />
* GtkRadioMenuItem::draw-as-radio<br />
* GtkRadioMenuItem::group<br />
* GtkRadioMenuItem::use-underline<br />
* GtkRadioMenuItem::visible<br />
* GtkScrolledWindow::double-buffered<br />
* GtkScrolledWindow::no-show-all<br />
* GtkScrolledWindow::shadow-type<br />
* GtkScrolledWindow::shadow_type<br />
* GtkScrolledWindow::window-placement-set<br />
* GtkSearchEntry::can-default<br />
* GtkSearchEntry::caps-lock-warning<br />
* GtkSearchEntry::completion<br />
* GtkSearchEntry::is-focus<br />
* GtkSearchEntry::primary-icon-activatable<br />
* GtkSearchEntry::primary-icon-name<br />
* GtkSearchEntry::primary-icon-sensitive<br />
* GtkSeparatorMenuItem::can-focus<br />
* GtkSeparatorMenuItem::margin-bottom<br />
* GtkSeparatorMenuItem::margin-top<br />
* GtkSeparatorMenuItem::visible<br />
* GtkSpinButton::caps-lock-warning<br />
* GtkSpinButton::input-purpose<br />
* GtkSpinner::active<br />
* GtkToggleButton::always-show-image<br />
* GtkToggleButton::image<br />
* GtkToggleButton::no-show-all<br />
* GtkToggleButton::relief<br />
* GtkToggleButton::use-action-appearance<br />
* GtkToolItem::can-focus<br />
* GtkToolItem::visible<br />
* GtkTreeView::no_show_all<br />
* GtkViewport::shadow-type<br />
* GtkWindow::can_default<br />
* GtkWindow::gravity<br />
* GtkWindow::is_focus<br />
* GtkWindow::urgency_hint<br />
* GtkWindow::window-position<br />
* GtkWindow::window_position</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Builder_Files&diff=122527Builder Files2023-08-17T17:00:43Z<p>Tavmjong: /* Tools */</p>
<hr />
<div><br />
<br />
Gtk allows one to define the UI interface using "Builder" files. "Builder" files are XML files that describe widget layout, menus, etc.<br />
<br />
Builder files should end with .ui but many of ours end with .glade as the UI creater program Glade was used to create them. Glade works only with Gtk3. Cambalache is a Glade replacement that works with both Gtk3 and Gtk4.<br />
<br />
== Tools ==<br />
<br />
=== gtk-builder-tool===<br />
<br />
Allows one to simplify or examine Gtk3 builder files. Using the simplify option over our builder files results in:<br />
<br />
* Changing "True" to "1", "False" to "0"<br />
* Changing '"' to &amp;quot; and <nowiki>'''</nowiki> to &apos'.<br />
* Removing properties with default values, e.g.:<br />
** "can-focus" == False<br />
** "label-xalign" == 0<br />
** "receives-default" == False<br />
** "expand" == False<br />
** "fill" == True<br />
** "position" == 0<br />
* Removing unneeded <packing>...</packing> (where all properties are default).<br />
* Removing <child><placeholder/></child> and <placeholder/><br />
* Moving &lt;!-- n-columns=x n-rows=y --&gt; comment to before <child>.<br />
* Replacing underscores by hyphens in property names.<br />
<br />
gtk-builder-tool does not understand the "child" property (in GtkScrolledWindow, GtkViewPort).<br />
<br />
gtk-builder-tool also removes a few necessary 'xalign' properties.<br />
<br />
=== gtk4-builder-tool ===<br />
<br />
In addition to the uses of gtk-builder-tool, gtk4-bulder-tool has a --3to4 option that converts gtk3 builder files to gtk4 builder files, the conversion is not perfect. In particular, it does not remove properties it doesn't recognize.<br />
<br />
Using the --3to4 results in:<br />
<br />
* Replacing &lt;requires lib="gtk+" version="3.24"/&gt; with &lt;requires lib="gtk" version="4.0"/&gt;<br />
* Changes &lt;attribute name='xxx'... to &lt;attribute name=&quot;xxx&quot;...<br />
* Removing the property "visible" when its value is "True" (widgets are visible by default in Gtk4).<br />
* Replacing the property "can-focus" with value "True" by the property "focusable" with value 1.<br />
* Removing &lt;packing&gt;...&lt;/packing&gt; for GtkBox.<br />
* Replacing &lt;object&gt;...&lt;/object&gt;&lt;packing&gt;...&lt;/packing&gt; by &lt;object&gt;...&lt;layout&gt;...&lt;/layout&gt;&lt;/object&gt; for GtkGrid.<br />
* Changing &lt;child&gt;...&lt;/child&gt; to &lt;property name=&quot;child&quot;&gt;...&lt;/property&gt; for child of GtkFlowBoxChild and GtkViewPort.<br />
* Changing the property "margin" to the four properties "margin-start", "margin-end", "margin-top", and "margin-bottom".<br />
* Adding the property "draw-value" with value 1 for GtkScale.<br />
* Adding the property "visible" with value 0 to GtkFlowBoxChild.<br />
<br />
Properties not supported in Gtk4 and not replaced:<br />
<br />
* GtkAspectFrame::label-xalign<br />
* GtkAspectFrame::shadow-type<br />
* GtkBox::double-buffered<br />
* GtkBox::events<br />
* GtkBox::no-show-all<br />
* GtkButton::always-show-image<br />
* GtkButtonBox::can-focus<br />
* GtkButtonBox::hexpand<br />
* GtkButtonBox::layout-style<br />
* GtkButtonBox::visible<br />
* GtkButton::can-default<br />
* GtkButton::image<br />
* GtkButton::image-position<br />
* GtkButton::no-show-all<br />
* GtkButton::relief<br />
* GtkButton::use-stock<br />
* GtkCellRendererPixbuf::stock_size<br />
* GtkCheckButton::image<br />
* GtkCheckButton::no-show-all<br />
* GtkDialog::gravity<br />
* GtkDialog::has-resize-grip<br />
* GtkDialog::skip-taskbar-hint<br />
* GtkDialog::type-hint<br />
* GtkDialog::type_hint<br />
* GtkDialog::window-position<br />
* GtkEntry::caps-lock-warning<br />
* GtkEntry::no_show_all<br />
* GtkEventBox::can-focus<br />
* GtkEventBox::can_focus<br />
* GtkEventBox::halign<br />
* GtkEventBox::hexpand<br />
* GtkEventBox::name<br />
* GtkEventBox::no-show-all<br />
* GtkEventBox::valign<br />
* GtkEventBox::visible<br />
* GtkEventBox::visible-window<br />
* GtkExpander::label-fill<br />
* GtkFlowBox::no-show-all<br />
* GtkFrame::shadow-type<br />
* GtkGrid::no-show-all<br />
* GtkImage::no-show-all<br />
* GtkImage::stock<br />
* GtkLabel::no-show-all<br />
* GtkLabel::no_show_all<br />
* GtkLabel::ypad<br />
* GtkLinkButton::relief<br />
* GtkMenuButton::draw-indicator<br />
* GtkMenuButton::image<br />
* GtkMenuButton::no-show-all<br />
* GtkMenuButton::popup<br />
* GtkMenuButton::relief<br />
* GtkMenuButton::use-popover<br />
* GtkMenu::can-focus<br />
* GtkMenuItem::can-focus<br />
* GtkMenuItem::use-underline<br />
* GtkMenuItem::visible<br />
* GtkMenu::reserve-toggle-size<br />
* GtkMenu::visible<br />
* GtkModelButton::action-name<br />
* GtkModelButton::action-target<br />
* GtkModelButton::can-focus<br />
* GtkModelButton::halign<br />
* GtkModelButton::inverted<br />
* GtkModelButton::receives-default<br />
* GtkModelButton::visible<br />
* GtkNotebook::double-buffered<br />
* GtkNotebook::no-show-all<br />
* GtkPopover::constrain-to<br />
* GtkPopover::no-show-all<br />
* GtkPopover::relative-to<br />
* GtkPopover::transitions-enabled<br />
* GtkRadioMenuItem::can-focus<br />
* GtkRadioMenuItem::draw-as-radio<br />
* GtkRadioMenuItem::group<br />
* GtkRadioMenuItem::use-underline<br />
* GtkRadioMenuItem::visible<br />
* GtkScrolledWindow::double-buffered<br />
* GtkScrolledWindow::no-show-all<br />
* GtkScrolledWindow::shadow-type<br />
* GtkScrolledWindow::shadow_type<br />
* GtkScrolledWindow::window-placement-set<br />
* GtkSearchEntry::can-default<br />
* GtkSearchEntry::caps-lock-warning<br />
* GtkSearchEntry::completion<br />
* GtkSearchEntry::is-focus<br />
* GtkSearchEntry::primary-icon-activatable<br />
* GtkSearchEntry::primary-icon-name<br />
* GtkSearchEntry::primary-icon-sensitive<br />
* GtkSeparatorMenuItem::can-focus<br />
* GtkSeparatorMenuItem::margin-bottom<br />
* GtkSeparatorMenuItem::margin-top<br />
* GtkSeparatorMenuItem::visible<br />
* GtkSpinButton::caps-lock-warning<br />
* GtkSpinButton::input-purpose<br />
* GtkSpinner::active<br />
* GtkToggleButton::always-show-image<br />
* GtkToggleButton::image<br />
* GtkToggleButton::no-show-all<br />
* GtkToggleButton::relief<br />
* GtkToggleButton::use-action-appearance<br />
* GtkToolItem::can-focus<br />
* GtkToolItem::visible<br />
* GtkTreeView::no_show_all<br />
* GtkViewport::shadow-type<br />
* GtkWindow::can_default<br />
* GtkWindow::gravity<br />
* GtkWindow::is_focus<br />
* GtkWindow::urgency_hint<br />
* GtkWindow::window-position<br />
* GtkWindow::window_position</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Builder_Files&diff=122526Builder Files2023-08-17T12:55:58Z<p>Tavmjong: Created page with " Gtk allows one to define the UI interface using "Builder" files. "Builder" files are XML files that describe widget layout, menus, etc. Builder files should end with .ui bu..."</p>
<hr />
<div><br />
<br />
Gtk allows one to define the UI interface using "Builder" files. "Builder" files are XML files that describe widget layout, menus, etc.<br />
<br />
Builder files should end with .ui but many of ours end with .glade as the UI creater program Glade was used to create them. Glade works only with Gtk3. Cambalache is a Glade replacement that works with both Gtk3 and Gtk4.<br />
<br />
== Tools ==<br />
<br />
=== gtk-builder-tool===<br />
<br />
Allows one to simplify or examine Gtk3 builder files. Using the simplify option over our builder files results in:<br />
<br />
* Changing "True" to "1", "False" to "0"<br />
* Changing '"' to &amp;quot;.<br />
* Removing properties with default values, e.g.:<br />
** "can-focus" == False<br />
** "label-xalign" == 0<br />
** "receives-default" == False<br />
** "expand" == False<br />
** "fill" == True<br />
** "position" == 0<br />
* Removing unneeded <packing>...</packing> (where all properties are default).<br />
* Removing <child><placeholder/></child> and <placeholder/><br />
* Moving &lt;!-- n-columns=x n-rows=y --&gt; comment to before <child>.<br />
* Replacing underscores by hyphens in property names.<br />
<br />
gtk-builder-tool does not understand the "child" property (in GtkScrolledWindow, GtkViewPort).<br />
<br />
=== gtk4-builder-tool ===<br />
<br />
In addition to the uses of gtk-builder-tool, gtk4-bulder-tool has a --3to4 option that converts gtk3 builder files to gtk4 builder files, the conversion is not perfect. In particular, it does not remove properties it doesn't recognize.<br />
<br />
Using the --3to4 results in:<br />
<br />
* Replacing &lt;requires lib="gtk+" version="3.24"/&gt; with &lt;requires lib="gtk" version="4.0"/&gt;<br />
* Changes &lt;attribute name='xxx'... to &lt;attribute name=&quot;xxx&quot;...<br />
* Removing the property "visible" when its value is "True" (widgets are visible by default in Gtk4).<br />
* Replacing the property "can-focus" with value "True" by the property "focusable" with value 1.<br />
* Removing &lt;packing&gt;...&lt;/packing&gt; for GtkBox.<br />
* Replacing &lt;object&gt;...&lt;/object&gt;&lt;packing&gt;...&lt;/packing&gt; by &lt;object&gt;...&lt;layout&gt;...&lt;/layout&gt;&lt;/object&gt; for GtkGrid.<br />
* Changing &lt;child&gt;...&lt;/child&gt; to &lt;property name=&quot;child&quot;&gt;...&lt;/property&gt; for child of GtkFlowBoxChild and GtkViewPort.<br />
* Changing the property "margin" to the four properties "margin-start", "margin-end", "margin-top", and "margin-bottom".<br />
* Adding the property "draw-value" with value 1 for GtkScale.<br />
* Adding the property "visible" with value 0 to GtkFlowBoxChild.<br />
<br />
Properties not supported in Gtk4 and not replaced:<br />
<br />
* GtkAspectFrame::label-xalign<br />
* GtkAspectFrame::shadow-type<br />
* GtkBox::double-buffered<br />
* GtkBox::events<br />
* GtkBox::no-show-all<br />
* GtkButton::always-show-image<br />
* GtkButtonBox::can-focus<br />
* GtkButtonBox::hexpand<br />
* GtkButtonBox::layout-style<br />
* GtkButtonBox::visible<br />
* GtkButton::can-default<br />
* GtkButton::image<br />
* GtkButton::image-position<br />
* GtkButton::no-show-all<br />
* GtkButton::relief<br />
* GtkButton::use-stock<br />
* GtkCellRendererPixbuf::stock_size<br />
* GtkCheckButton::image<br />
* GtkCheckButton::no-show-all<br />
* GtkDialog::gravity<br />
* GtkDialog::has-resize-grip<br />
* GtkDialog::skip-taskbar-hint<br />
* GtkDialog::type-hint<br />
* GtkDialog::type_hint<br />
* GtkDialog::window-position<br />
* GtkEntry::caps-lock-warning<br />
* GtkEntry::no_show_all<br />
* GtkEventBox::can-focus<br />
* GtkEventBox::can_focus<br />
* GtkEventBox::halign<br />
* GtkEventBox::hexpand<br />
* GtkEventBox::name<br />
* GtkEventBox::no-show-all<br />
* GtkEventBox::valign<br />
* GtkEventBox::visible<br />
* GtkEventBox::visible-window<br />
* GtkExpander::label-fill<br />
* GtkFlowBox::no-show-all<br />
* GtkFrame::shadow-type<br />
* GtkGrid::no-show-all<br />
* GtkImage::no-show-all<br />
* GtkImage::stock<br />
* GtkLabel::no-show-all<br />
* GtkLabel::no_show_all<br />
* GtkLabel::ypad<br />
* GtkLinkButton::relief<br />
* GtkMenuButton::draw-indicator<br />
* GtkMenuButton::image<br />
* GtkMenuButton::no-show-all<br />
* GtkMenuButton::popup<br />
* GtkMenuButton::relief<br />
* GtkMenuButton::use-popover<br />
* GtkMenu::can-focus<br />
* GtkMenuItem::can-focus<br />
* GtkMenuItem::use-underline<br />
* GtkMenuItem::visible<br />
* GtkMenu::reserve-toggle-size<br />
* GtkMenu::visible<br />
* GtkModelButton::action-name<br />
* GtkModelButton::action-target<br />
* GtkModelButton::can-focus<br />
* GtkModelButton::halign<br />
* GtkModelButton::inverted<br />
* GtkModelButton::receives-default<br />
* GtkModelButton::visible<br />
* GtkNotebook::double-buffered<br />
* GtkNotebook::no-show-all<br />
* GtkPopover::constrain-to<br />
* GtkPopover::no-show-all<br />
* GtkPopover::relative-to<br />
* GtkPopover::transitions-enabled<br />
* GtkRadioMenuItem::can-focus<br />
* GtkRadioMenuItem::draw-as-radio<br />
* GtkRadioMenuItem::group<br />
* GtkRadioMenuItem::use-underline<br />
* GtkRadioMenuItem::visible<br />
* GtkScrolledWindow::double-buffered<br />
* GtkScrolledWindow::no-show-all<br />
* GtkScrolledWindow::shadow-type<br />
* GtkScrolledWindow::shadow_type<br />
* GtkScrolledWindow::window-placement-set<br />
* GtkSearchEntry::can-default<br />
* GtkSearchEntry::caps-lock-warning<br />
* GtkSearchEntry::completion<br />
* GtkSearchEntry::is-focus<br />
* GtkSearchEntry::primary-icon-activatable<br />
* GtkSearchEntry::primary-icon-name<br />
* GtkSearchEntry::primary-icon-sensitive<br />
* GtkSeparatorMenuItem::can-focus<br />
* GtkSeparatorMenuItem::margin-bottom<br />
* GtkSeparatorMenuItem::margin-top<br />
* GtkSeparatorMenuItem::visible<br />
* GtkSpinButton::caps-lock-warning<br />
* GtkSpinButton::input-purpose<br />
* GtkSpinner::active<br />
* GtkToggleButton::always-show-image<br />
* GtkToggleButton::image<br />
* GtkToggleButton::no-show-all<br />
* GtkToggleButton::relief<br />
* GtkToggleButton::use-action-appearance<br />
* GtkToolItem::can-focus<br />
* GtkToolItem::visible<br />
* GtkTreeView::no_show_all<br />
* GtkViewport::shadow-type<br />
* GtkWindow::can_default<br />
* GtkWindow::gravity<br />
* GtkWindow::is_focus<br />
* GtkWindow::urgency_hint<br />
* GtkWindow::window-position<br />
* GtkWindow::window_position</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Tracking_Dependencies&diff=122448Tracking Dependencies2023-06-26T08:18:23Z<p>Tavmjong: /* Distros */</p>
<hr />
<div>== Compilers ==<br />
<br />
Version 1.0 requires a C++11 compiler.<br />
Version 1.1 requires a C++17 compiler.<br />
<br />
See [[c++11]] and [[c++17]].<br />
<br />
== Libs ==<br />
<br />
C++ bindings are not included, since their required versions match those of the C counterparts.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Library<br />
! v 0.92<br />
! v 1.0<br />
! v 1.1<br />
! v 1.2<br />
! v 1.3<br />
! master<br />
! gtk4<br />
|-<br />
| Boehm-GC<br />
| 7.2<br />
| 7.2<br />
| 7.2<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| Cairo<br />
| 1.14<br />
| 1.14 (1.15.4 required for PDF links)<br />
| 1.16*<br />
| 1.16<br />
| 1.16<br />
|<br />
| 1.16**<br />
|-<br />
| double-conversion [https://github.com/google/double-conversion]<br/>''(lib2geom dependency)''<br />
| ''(not required)''<br />
| any<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| FreeType<br />
|<br />
|<br />
| 2.9* (Required for Variable fonts)<br />
| 2.9<br />
| 2.9<br />
|<br />
|<br />
|-<br />
| GDL<br />
| N/A<br />(3.4)<br />
| 3.4<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
|-<br />
| Glib<br />
| 2.28<br />
| 2.48<br />
| 2.56 or 2.62*<br />
| 2.64<br />
| 2.64<br />
|<br />
| 2.68**<br />
|-<br />
| GTK+<br />
| 2.24<br />(3.8)<br />
| 3.22<br />
| 3.24*<br />
| 3.24<br />
| 3.24<br />
|<br />
| 4.10.1** +<br />
|-<br />
| GNU Scientific Library<br />
| ?<br />
| ?<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| HarfBuzz<br />
| ?<br />
| ?<br />
| 2.2*<br />
| 2.6<br />
| 2.6<br />
| 2.6.5*<br />
|<br />
|-<br />
| libsigc++<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
|<br />
|<br />
|<br />
| 3.0**<br />
|-<br />
| libSoup<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libpotrace<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxml<br />
| ''2.6.11*''<br />
| ''2.6.11*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxslt<br />
| ''1.0.15*''<br />
| ''1.0.15*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| lcms<br />
| 1.13<br />
| 2.2<br />
| 2.2 (2.9*)<br />
| 2.9*<br />
| 2.9*<br />
|<br />
|<br />
|-<br />
| Pango<br />
| 1.24<br />
| 1.24 (1.41.1 required for variable fonts)<br />
| 1.42*<br />
| 1.44<br />
| 1.44 (HarfBuzz shaping)<br />
|<br />
| 2.48**<br />
|-<br />
| Poppler<br />
| 0.20.0<br />
| 0.20.0<br />
| 0.29 (0.71*)<br />
| 0.29 (0.71*)<br />
| 0.71*<br />
|<br />
|<br />
|-<br />
| [https://formulae.brew.sh/formula/gtk-mac-integration gtk-mac-integration]<br>[https://www.macports.org/ports.php?by=library&substr=gtk-osx-application-gtk3 gtk-osx-application-gtk3]<br />
| N/A<br />
| 2.0.8 ([[CompilingMacOsX|macOS only]])<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|}<br />
<br />
''* Tentative dependency''<br />
<br />
* Pango 1.42.2 requires Harfbuzz 1.4.2<br />
* Pango 1.44.0 requires Glib 2.59.2 and Harfbuzz 2.0. 1.44 exposes hb_font directly.<br />
* Pango 1.45.1 requires Glib 2.60<br />
* Pango 1.48.4 has vertical upright marks fix.<br />
* Harfbuzz 4.1 changes glyph positioning for upright vertical text when font does not have vertical metrics (from glyph touching to of cell to being centered in cell).<br />
<br />
''** Gtkmm4 requires API changed Glibmm, Cairomm, and Pangomm. In particular, enums use child namespaces in newer libraries (Cairo::FORMAT_ARGB32 -> Cairo::Surface::Format::ARGB32).''<br />
<br />
''+ Gtk4 4.10.1 has an important scrolling bug fix.''<br />
<br />
== Distros ==<br />
<br />
Note: This table is not relevant to (non-fink) MacOS X, where we ship the desired version with Inkscape.<br />
<br />
"Inkscape" column is default or distro version / oldest that builds - latest that builds. If no latest is given then that means trunk is expected to build on the given platform.<br />
<br />
e.g. for a distro that ships with 0.48 but should support building of trunk you might get:<br />
0.48 / 0.47-<br />
<br />
'''General rules:'''<br />
* Support latest Debian Stable (as of feature freeze) [https://www.debian.org/distrib/packages Debian packages]<br />
* Support latest Ubuntu LTS (as of feature freeze) [https://packages.ubuntu.com/ Ubuntu packages]<br />
**e.g. Considering Inkscape 1.2, the latest Ubuntu LTS at '''feature freeze time''' (around February 2022) would have been Ubuntu 20.04. The latest LTS at release time (around May 2022), though, will be Ubuntu 22.04. Therefore, according to the rule, we should support Ubuntu 20.04 LTS as the minimum version.<br />
** ''Note: For gtkmm4: Jammy: no package, Kinetic: 4.8, Lunar: 4.10, Mantic: 4.10''<br />
<br />
* Support last two Fedora releases (as of feature freeze) [https://packages.fedoraproject.org/ Fedora packages]<br />
* Don't break ''point'' releases.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Distro<br />
! Inkscape<br />
! gcc<br />
! clang<br />
! cairo<br />
! cairomm<br />
! freetype<br />
! glib<br />
! glibmm<br />
! gtk+<br />
! gtkmm<br />
! harfbuzz<br />
! pango<br />
! poppler<br />
! gdl<br />
! lcms2<br />
! libsigc++<br />
! libgc <!-- Fedora rpm: gc --><br />
! libsoup<br />
|-<br />
| Windows MSYS2 (2021-04-14)<br/>([https://github.com/Alexpux/MINGW-packages mingw-w64 packages] from MSYS2 project)<br />
<!-- see http://quodlibet.duckdns.org/msys2/base for list of latest package versions --><br />
| 1.0.2<br />
| 10.2.0<br />
| 11.0.0<br />
| 1.17.4<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.68.1<br />
| 2.66.0<br />
| 3.24.27<br />
| 3.24.3<br />
| 2.8.0<br />
| 1.48.4<br />
| 20.12.1<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.6<br />
| 8.0.4 <!-- mingw-w64-gc --><br />
| 2.72.0<br />
|-<br />
| Debian 11 (Bullseye, oldstable) <small>EOL 2026</small><br />
| 1.0.2<br />
| 10.2.1<br />
| 11.0<br />
| 1.16<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.66.8<br />
| 2.64.2<br />
| 3.24.24<br />
| 3.24.2<br />
| 2.7.4<br />
| 1.46.2<br />
| 20.09.0<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.4<br />
| 8.0.4<br />
| 2.72.0<br />
|-<br />
| Debian 12 (Bookworm, stable) <small>EOL 2028?</small><br />
| 1.2.2<br />
| 10.4.0<br />
| 13.0.1<br />
| 1.16.0<br />
| 1.12.1<br />
| 2.10.4<br />
| 2.74.5<br />
| 2.74.0<br />
| 3.24.36<br />4.8.3<br />
| 3.24.7<br />4.8.0<br />
| 6.0.0<br />
| 1.50.12<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.1<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.03<br />3.2.2<br />
|-<br />
| Ubuntu 22.04 LTS (Jammy Jellyfish) <small>EOL 2027-04</small><br />
| 1.1.2<br />
| 12.1.0<br />
| 14.0.0<br />
| 1.16.0<br />
| 1.12.2<br />
| 2.11.1<br />
| 2.72.1<br />
| 2.66.2<br />
| 3.24.33<br />4.6.2<br />
| 3.24.5<br />no libgtkmm-4.0<br />
| 2.7.4<br />
| 1.50.6<br />
| 22.02.0<br />
| 3.40.0<br />
| 2.12-rc1<br />
| 2.10.4<br />
| 8.0.6<br />
| 2.74.2<br />3.0.5<br />
|}<br />
<br />
* Agreed to at Saarbrücken hackfest.<br />
<br />
== Getting and Installing Source packages ==<br />
<br />
See [https://inkscape.org/develop/getting-started/ Getting Started]<br />
<br />
== Optional Dependencies ==<br />
<br />
Inkscape will still compile without these, but some features may be missing if they are absent during compilation:<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Library<br />
! scope="col"| Needed for<br />
! scope="col"| Default<br />
|-<br />
|aspell<br />
|Dictionaries for spell checking<br />
|On<br />
|-<br />
|libcdr<br />
|Open Corel Draw files<br />
|On<br />
|-<br />
|gettext/msgformat<br />
|Translation support<br />
|On<br />
|-<br />
|gtest/gmock<br />
|Automatted testing<br />
|Off<br />
|-<br />
|gspell<br />
|Spell checking<br />
|On<br />
|-<br />
|imagemagick<br />
|Bitmap editing extensions, bitmap import resolution<br />
|On<br />
|-<br />
|jpeg<br />
|jpeg import?<br />
|On<br />
|-<br />
|OpenMP<br />
|Multi-threaded filter rendering<br />
|On<br />
|-<br />
|scour<br />
|Save as Optimized SVG<br />
|(not needed during compiling, Python)<br />
|-<br />
|libvisio<br />
|Open Visio Files, use Visio stencils<br />
|On<br />
|-<br />
|libwpg<br />
|Open WordPerfect Graphics<br />
|On<br />
|-<br />
|}<br />
<br />
<br />
<br />
[[Category:About Inkscape]]<br />
[[Category:Developer Documentation]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Tracking_Dependencies&diff=122447Tracking Dependencies2023-06-26T08:07:55Z<p>Tavmjong: /* Libs */</p>
<hr />
<div>== Compilers ==<br />
<br />
Version 1.0 requires a C++11 compiler.<br />
Version 1.1 requires a C++17 compiler.<br />
<br />
See [[c++11]] and [[c++17]].<br />
<br />
== Libs ==<br />
<br />
C++ bindings are not included, since their required versions match those of the C counterparts.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Library<br />
! v 0.92<br />
! v 1.0<br />
! v 1.1<br />
! v 1.2<br />
! v 1.3<br />
! master<br />
! gtk4<br />
|-<br />
| Boehm-GC<br />
| 7.2<br />
| 7.2<br />
| 7.2<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| Cairo<br />
| 1.14<br />
| 1.14 (1.15.4 required for PDF links)<br />
| 1.16*<br />
| 1.16<br />
| 1.16<br />
|<br />
| 1.16**<br />
|-<br />
| double-conversion [https://github.com/google/double-conversion]<br/>''(lib2geom dependency)''<br />
| ''(not required)''<br />
| any<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| FreeType<br />
|<br />
|<br />
| 2.9* (Required for Variable fonts)<br />
| 2.9<br />
| 2.9<br />
|<br />
|<br />
|-<br />
| GDL<br />
| N/A<br />(3.4)<br />
| 3.4<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
| Not Used<br />
|-<br />
| Glib<br />
| 2.28<br />
| 2.48<br />
| 2.56 or 2.62*<br />
| 2.64<br />
| 2.64<br />
|<br />
| 2.68**<br />
|-<br />
| GTK+<br />
| 2.24<br />(3.8)<br />
| 3.22<br />
| 3.24*<br />
| 3.24<br />
| 3.24<br />
|<br />
| 4.10.1** +<br />
|-<br />
| GNU Scientific Library<br />
| ?<br />
| ?<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| HarfBuzz<br />
| ?<br />
| ?<br />
| 2.2*<br />
| 2.6<br />
| 2.6<br />
| 2.6.5*<br />
|<br />
|-<br />
| libsigc++<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
| ''2.0.12*''<br />
|<br />
|<br />
|<br />
| 3.0**<br />
|-<br />
| libSoup<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libpotrace<br />
| ''(not required)''<br />
| (any)<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxml<br />
| ''2.6.11*''<br />
| ''2.6.11*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| libxslt<br />
| ''1.0.15*''<br />
| ''1.0.15*''<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|-<br />
| lcms<br />
| 1.13<br />
| 2.2<br />
| 2.2 (2.9*)<br />
| 2.9*<br />
| 2.9*<br />
|<br />
|<br />
|-<br />
| Pango<br />
| 1.24<br />
| 1.24 (1.41.1 required for variable fonts)<br />
| 1.42*<br />
| 1.44<br />
| 1.44 (HarfBuzz shaping)<br />
|<br />
| 2.48**<br />
|-<br />
| Poppler<br />
| 0.20.0<br />
| 0.20.0<br />
| 0.29 (0.71*)<br />
| 0.29 (0.71*)<br />
| 0.71*<br />
|<br />
|<br />
|-<br />
| [https://formulae.brew.sh/formula/gtk-mac-integration gtk-mac-integration]<br>[https://www.macports.org/ports.php?by=library&substr=gtk-osx-application-gtk3 gtk-osx-application-gtk3]<br />
| N/A<br />
| 2.0.8 ([[CompilingMacOsX|macOS only]])<br />
|<br />
|<br />
|<br />
|<br />
|<br />
|}<br />
<br />
''* Tentative dependency''<br />
<br />
* Pango 1.42.2 requires Harfbuzz 1.4.2<br />
* Pango 1.44.0 requires Glib 2.59.2 and Harfbuzz 2.0. 1.44 exposes hb_font directly.<br />
* Pango 1.45.1 requires Glib 2.60<br />
* Pango 1.48.4 has vertical upright marks fix.<br />
* Harfbuzz 4.1 changes glyph positioning for upright vertical text when font does not have vertical metrics (from glyph touching to of cell to being centered in cell).<br />
<br />
''** Gtkmm4 requires API changed Glibmm, Cairomm, and Pangomm. In particular, enums use child namespaces in newer libraries (Cairo::FORMAT_ARGB32 -> Cairo::Surface::Format::ARGB32).''<br />
<br />
''+ Gtk4 4.10.1 has an important scrolling bug fix.''<br />
<br />
== Distros ==<br />
<br />
Note: This table is not relevant to (non-fink) MacOS X, where we ship the desired version with Inkscape.<br />
<br />
"Inkscape" column is default or distro version / oldest that builds - latest that builds. If no latest is given then that means trunk is expected to build on the given platform.<br />
<br />
e.g. for a distro that ships with 0.48 but should support building of trunk you might get:<br />
0.48 / 0.47-<br />
<br />
'''General rules:'''<br />
* Support latest Debian Stable (as of feature freeze) [https://www.debian.org/distrib/packages Debian packages]<br />
* Support latest Ubuntu LTS (as of feature freeze) [https://packages.ubuntu.com/ Ubuntu packages]<br />
**e.g. Considering Inkscape 1.2, the latest Ubuntu LTS at '''feature freeze time''' (around February 2022) would have been Ubuntu 20.04. The latest LTS at release time (around May 2022), though, will be Ubuntu 22.04. Therefore, according to the rule, we should support Ubuntu 20.04 LTS as the minimum version.<br />
* Support last two Fedora releases (as of feature freeze) [https://packages.fedoraproject.org/ Fedora packages]<br />
* Don't break ''point'' releases.<br />
<br />
{| class="wikitable"<br />
|-<br />
! Distro<br />
! Inkscape<br />
! gcc<br />
! clang<br />
! cairo<br />
! cairomm<br />
! freetype<br />
! glib<br />
! glibmm<br />
! gtk+<br />
! gtkmm<br />
! harfbuzz<br />
! pango<br />
! poppler<br />
! gdl<br />
! lcms2<br />
! libsigc++<br />
! libgc <!-- Fedora rpm: gc --><br />
! libsoup<br />
|-<br />
| Windows MSYS2 (2021-04-14)<br/>([https://github.com/Alexpux/MINGW-packages mingw-w64 packages] from MSYS2 project)<br />
<!-- see http://quodlibet.duckdns.org/msys2/base for list of latest package versions --><br />
| 1.0.2<br />
| 10.2.0<br />
| 11.0.0<br />
| 1.17.4<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.68.1<br />
| 2.66.0<br />
| 3.24.27<br />
| 3.24.3<br />
| 2.8.0<br />
| 1.48.4<br />
| 20.12.1<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.6<br />
| 8.0.4 <!-- mingw-w64-gc --><br />
| 2.72.0<br />
|-<br />
| Debian 11 (Bullseye, oldstable) <small>EOL 2026</small><br />
| 1.0.2<br />
| 10.2.1<br />
| 11.0<br />
| 1.16<br />
| 1.12.2<br />
| 2.10.4<br />
| 2.66.8<br />
| 2.64.2<br />
| 3.24.24<br />
| 3.24.2<br />
| 2.7.4<br />
| 1.46.2<br />
| 20.09.0<br />
| 3.34.0<br />
| 2.12<br />
| 2.10.4<br />
| 8.0.4<br />
| 2.72.0<br />
|-<br />
| Debian 12 (Bookworm, stable) <small>EOL 2028?</small><br />
| 1.2.2<br />
| 10.4.0<br />
| 13.0.1<br />
| 1.16.0<br />
| 1.12.1<br />
| 2.10.4<br />
| 2.74.5<br />
| 2.74.0<br />
| 3.24.36<br />4.8.3<br />
| 3.24.7<br />4.8.0<br />
| 6.0.0<br />
| 1.50.12<br />
| 22.12.0<br />
| 3.40.0<br />
| 2.14.1<br />
| 2.12.0<br />3.4.0<br />
| 8.2.2<br />
| 2.74.03<br />3.2.2<br />
|-<br />
| Ubuntu 22.04 LTS (Jammy Jellyfish) <small>EOL 2027-04</small><br />
| 1.1.2<br />
| 12.1.0<br />
| 14.0.0<br />
| 1.16.0<br />
| 1.12.2<br />
| 2.11.1<br />
| 2.72.1<br />
| 2.66.2<br />
| 3.24.33<br />4.6.2<br />
| 3.24.5<br />no libgtkmm-4.0<br />
| 2.7.4<br />
| 1.50.6<br />
| 22.02.0<br />
| 3.40.0<br />
| 2.12-rc1<br />
| 2.10.4<br />
| 8.0.6<br />
| 2.74.2<br />3.0.5<br />
|}<br />
<br />
* Agreed to at Saarbrücken hackfest.<br />
<br />
== Getting and Installing Source packages ==<br />
<br />
See [https://inkscape.org/develop/getting-started/ Getting Started]<br />
<br />
== Optional Dependencies ==<br />
<br />
Inkscape will still compile without these, but some features may be missing if they are absent during compilation:<br />
<br />
{| class="wikitable"<br />
|-<br />
! scope="col"| Library<br />
! scope="col"| Needed for<br />
! scope="col"| Default<br />
|-<br />
|aspell<br />
|Dictionaries for spell checking<br />
|On<br />
|-<br />
|libcdr<br />
|Open Corel Draw files<br />
|On<br />
|-<br />
|gettext/msgformat<br />
|Translation support<br />
|On<br />
|-<br />
|gtest/gmock<br />
|Automatted testing<br />
|Off<br />
|-<br />
|gspell<br />
|Spell checking<br />
|On<br />
|-<br />
|imagemagick<br />
|Bitmap editing extensions, bitmap import resolution<br />
|On<br />
|-<br />
|jpeg<br />
|jpeg import?<br />
|On<br />
|-<br />
|OpenMP<br />
|Multi-threaded filter rendering<br />
|On<br />
|-<br />
|scour<br />
|Save as Optimized SVG<br />
|(not needed during compiling, Python)<br />
|-<br />
|libvisio<br />
|Open Visio Files, use Visio stencils<br />
|On<br />
|-<br />
|libwpg<br />
|Open WordPerfect Graphics<br />
|On<br />
|-<br />
|}<br />
<br />
<br />
<br />
[[Category:About Inkscape]]<br />
[[Category:Developer Documentation]]</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=GTK%2B_4_Migration&diff=122436GTK+ 4 Migration2023-06-16T14:01:19Z<p>Tavmjong: /* At time of switch: */</p>
<hr />
<div>'''<big>A page to track the migration to Gtk4.</big>'''<br />
<br />
See: https://docs.gtk.org/gtk4/migrating-3to4.html<br />
<br />
== Preparation: ==<br />
<br />
* ☑ Do not use GTK-specific command line arguments<br />
* ☑ Do not use widget style properties (We don't appear to use any.)<br />
* ☐ Review your window creation flags (3x src/ui/widget/color-slider.cpp) DELAY UNTIL GTK4,<br />
* ☐ Stop using direct access to GdkEvent structs (note: can use GtkEvent structures) '''BIG'''<br />
* ☑ Stop using gdk_pointer_warp()<br />
* ☑ Stop using non-RGBA visuals<br />
* ☑ gtk_widget_set_app_paintable<br />
* ☐ Stop using GtkBox padding, fill and expand child properties DELAY UNTIL GTK4<br />
* ☐ Stop using the state argument of GtkStyleContext getters (deprecated in 4.10, gtk_style_context_get_property removed, ui/widget/ink-ruler.cpp, color-slider.cpp, dash-selector.cpp, ink-ruler.cpp, ink-spinscale.cpp; src/ui/util.cpp) DELAY UNTIL GTK4<br />
* ☑ Stop using gdk_pixbuf_get_from_window() and gdk_cairo_set_source_window()<br />
* ☐ Stop using GtkButton's image-related API DELAY UNTIL GTK4<br />
* ☐ Stop using GtkWidget event signals (Convert to Controllers, '''BIG''') DELAY UNTIL GTK4 (Controllers mostly unusable in Gtk3.)<br />
* ☑ Set a proper application ID<br />
* ☑ Stop using gtk_main() and related APIs (2geom tests, autotrace, script)<br />
* ☑ Reduce the use of gtk_widget_destroy() (Only used for message dialogs and for ComboBoxEnryToolItem which will disappear.)<br />
* ☑ Stop using the GtkWidget.destroy vfunc (Not used)<br />
* ☐ Reduce the use of generic container APIs DELAY UNTIL GTK4<br />
* ☑ Review your use of icon resources<br />
<br />
== At time of switch: ==<br />
Some of these we maybe able to do earlier.<br />
<br />
* ☐ Subclassing widgets<br />
* ☐ Life-cycle handling<br />
* ☐ Stop using GdkScreen<br />
* ☐ Stop using the root window. Used in ege-color-prof-tracker.cpp.<br />
* ☑ Stop using GdkVisual. Don't use.<br />
* ☑ Stop using GdkDeviceManager. Don't use.<br />
* ☐ Adapt to GdkWindow API changes<br />
* ☐ The "iconified" window state has been renamed to "minimized"<br />
* ☐ Adapt to GdkEvent API changes<br />
* ☑ Stop using grabs<br />
* ☐ Adapt to coordinate API changes<br />
* ☐ Adapt to GdkKeymap API changes<br />
* ☐ Adapt to changes in keyboard modifier handling<br />
* ☐ Replace GtkClipboard with GdkClipboard<br />
* ☐ Stop using gtk_get_current_... APIs<br />
* ☐ Convert your UI files<br />
* ☐ Adapt to GtkBuilder API changes<br />
* ☐ Adapt to event controller API changes<br />
* ☐ Focus handling changes<br />
* ☐ Use the new apis for keyboard shortcuts<br />
* ☐ Stop using GtkEventBox<br />
* ☑ Stop using GtkButtonBox<br />
* ☐ Adapt to GtkBox API changes<br />
* ☐ Adapt to GtkWindow API changes<br />
* ☑ Adapt to GtkHeaderBar and GtkActionBar API changes. Don't use either.<br />
* ☐ Adapt to GtkStack, GtkAssistant and GtkNotebook API changes Don't use GtkAssistant<br />
* ☐ Adapt to button class hierarchy changes<br />
* ☐ Adapt to GtkScrolledWindow API changes<br />
* ☐ Adapt to GtkBin removal<br />
* ☐ Adapt to GtkContainer removal<br />
* ☐ Stop using GtkContainer::border-width<br />
* ☐ Adapt to coordinate API changes<br />
* ☐ Adapt to GtkStyleContext API changes Gtk::StyleContext::add_provider_for_screen -> add_provider_for_display.<br />
* ☐ Adapt to GtkCssProvider API changes<br />
* ☐ Stop using GtkShadowType and GtkRelief properties<br />
* ☐ Adapt to GtkWidget's size request changes<br />
* ☐ Adapt to GtkWidget's size allocation changes<br />
* ☐ Switch to GtkWidget's children APIs<br />
* ☑ Don't use -gtk-gradient in your CSS<br />
* ☐ Don't use -gtk-icon-effect in your CSS Used in style.css, Minwaita-Inkscape.css<br />
* ☑ Don't use -gtk-icon-theme in your CSS<br />
* ☐ Don't use -gtk-outline-...-radius in your CSS Used in style.css, Minwaita-Inkscape.css<br />
* ☐ Adapt to drawing model changes<br />
* ☐ Stop using APIs to query GdkSurfaces<br />
* ☐ Widgets are now visible by default<br />
* ☐ Adapt to changes in animated hiding and showing of widgets<br />
* ☐ Stop passing commandline arguments to gtk_init<br />
* ☐ GdkPixbuf is deemphasized<br />
* ☐ GtkWidget event signals are removed<br />
* ☐ Invalidation handling has changed<br />
* ☐ Stop using GtkWidget::draw<br />
* ☐ Window content observation has changed<br />
* ☐ Monitor handling has changed<br />
* ☐ Adapt to monitor API changes<br />
* ☐ Adapt to cursor API changes<br />
* ☐ Adapt to icon size API changes<br />
* ☐ Adapt to changes in the GtkAssistant API<br />
* ☐ Adapt to changes in the API of GtkEntry, GtkSearchEntry and GtkSpinButton<br />
* ☑ Adapt to changes in GtkOverlay. Don't use changed api.<br />
* ☑ Use GtkFixed instead of GtkLayout. Don't use.<br />
* ☑ Adapt to search entry changes. Don't use changed api.<br />
* ☐ Adapt to GtkScale changes<br />
* ☐ Stop using gtk_window_activate_default()<br />
* ☐ Stop using gtk_widget_grab_default()<br />
* ☐ Stop setting ::has-default and ::has-focus in .ui files<br />
* ☐ Stop using the GtkWidget::display-changed signal<br />
* ☐ GtkPopover::modal has been renamed to autohide<br />
* ☐ gtk_widget_get_surface has been removed<br />
* ☐ gtk_widget_is_toplevel has been removed<br />
* ☐ gtk_widget_get_toplevel has been removed<br />
* ☐ GtkEntryBuffer ::deleted-text has changed<br />
* ☐ GtkMenu, GtkMenuBar and GtkMenuItem are gone<br />
* ☐ GtkToolbar has been removed<br />
* ☐ GtkAspectFrame is no longer a frame<br />
* ☐ Stop using custom tooltip windows<br />
* ☐ Switch to the new Drag-and-Drop api<br />
* ☐ Adapt to GtkIconTheme API changes<br />
* ☐ Adapt to GtkImage changes<br />
* ☐ Update to GtkFileChooser API changes<br />
* ☐ Stop using blocking dialog functions<br />
* ☐ Stop using GtkBuildable API<br />
* ☐ Adapt to GtkAboutDialog API changes<br />
* ☐ Adapt to GtkTreeView and GtkIconView tooltip context changes<br />
* ☐ Adapt to GtkPopover changes<br />
* ☐ Stop using GtkFileChooserButton<br />
* ☐ Adapt to changed GtkSettings properties<br />
<br />
== After switch: ==<br />
* ☐ Use new list widgets.</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=GTK%2B_4_Migration&diff=122435GTK+ 4 Migration2023-06-16T13:14:24Z<p>Tavmjong: /* At time of switch: */</p>
<hr />
<div>'''<big>A page to track the migration to Gtk4.</big>'''<br />
<br />
See: https://docs.gtk.org/gtk4/migrating-3to4.html<br />
<br />
== Preparation: ==<br />
<br />
* ☑ Do not use GTK-specific command line arguments<br />
* ☑ Do not use widget style properties (We don't appear to use any.)<br />
* ☐ Review your window creation flags (3x src/ui/widget/color-slider.cpp) DELAY UNTIL GTK4,<br />
* ☐ Stop using direct access to GdkEvent structs (note: can use GtkEvent structures) '''BIG'''<br />
* ☑ Stop using gdk_pointer_warp()<br />
* ☑ Stop using non-RGBA visuals<br />
* ☑ gtk_widget_set_app_paintable<br />
* ☐ Stop using GtkBox padding, fill and expand child properties DELAY UNTIL GTK4<br />
* ☐ Stop using the state argument of GtkStyleContext getters (deprecated in 4.10, gtk_style_context_get_property removed, ui/widget/ink-ruler.cpp, color-slider.cpp, dash-selector.cpp, ink-ruler.cpp, ink-spinscale.cpp; src/ui/util.cpp) DELAY UNTIL GTK4<br />
* ☑ Stop using gdk_pixbuf_get_from_window() and gdk_cairo_set_source_window()<br />
* ☐ Stop using GtkButton's image-related API DELAY UNTIL GTK4<br />
* ☐ Stop using GtkWidget event signals (Convert to Controllers, '''BIG''') DELAY UNTIL GTK4 (Controllers mostly unusable in Gtk3.)<br />
* ☑ Set a proper application ID<br />
* ☑ Stop using gtk_main() and related APIs (2geom tests, autotrace, script)<br />
* ☑ Reduce the use of gtk_widget_destroy() (Only used for message dialogs and for ComboBoxEnryToolItem which will disappear.)<br />
* ☑ Stop using the GtkWidget.destroy vfunc (Not used)<br />
* ☐ Reduce the use of generic container APIs DELAY UNTIL GTK4<br />
* ☑ Review your use of icon resources<br />
<br />
== At time of switch: ==<br />
Some of these we maybe able to do earlier.<br />
<br />
* ☐ Subclassing widgets<br />
* ☐ Life-cycle handling<br />
* ☐ Stop using GdkScreen<br />
* ☐ Stop using the root window. Used in ege-color-prof-tracker.cpp.<br />
* ☑ Stop using GdkVisual. Don't use.<br />
* ☑ Stop using GdkDeviceManager. Don't use.<br />
* ☐ Adapt to GdkWindow API changes<br />
* ☐ The "iconified" window state has been renamed to "minimized"<br />
* ☐ Adapt to GdkEvent API changes<br />
* ☑ Stop using grabs<br />
* ☐ Adapt to coordinate API changes<br />
* ☐ Adapt to GdkKeymap API changes<br />
* ☐ Adapt to changes in keyboard modifier handling<br />
* ☐ Replace GtkClipboard with GdkClipboard<br />
* ☐ Stop using gtk_get_current_... APIs<br />
* ☐ Convert your UI files<br />
* ☐ Adapt to GtkBuilder API changes<br />
* ☐ Adapt to event controller API changes<br />
* ☐ Focus handling changes<br />
* ☐ Use the new apis for keyboard shortcuts<br />
* ☐ Stop using GtkEventBox<br />
* ☑ Stop using GtkButtonBox<br />
* ☐ Adapt to GtkBox API changes<br />
* ☐ Adapt to GtkWindow API changes<br />
* ☑ Adapt to GtkHeaderBar and GtkActionBar API changes. Don't use either.<br />
* ☐ Adapt to GtkStack, GtkAssistant and GtkNotebook API changes<br />
* ☐ Adapt to button class hierarchy changes<br />
* ☐ Adapt to GtkScrolledWindow API changes<br />
* ☐ Adapt to GtkBin removal<br />
* ☐ Adapt to GtkContainer removal<br />
* ☐ Stop using GtkContainer::border-width<br />
* ☐ Adapt to coordinate API changes<br />
* ☐ Adapt to GtkStyleContext API changes Gtk::StyleContext::add_provider_for_screen -> add_provider_for_display.<br />
* ☐ Adapt to GtkCssProvider API changes<br />
* ☐ Stop using GtkShadowType and GtkRelief properties<br />
* ☐ Adapt to GtkWidget's size request changes<br />
* ☐ Adapt to GtkWidget's size allocation changes<br />
* ☐ Switch to GtkWidget's children APIs<br />
* ☑ Don't use -gtk-gradient in your CSS<br />
* ☐ Don't use -gtk-icon-effect in your CSS Used in style.css, Minwaita-Inkscape.css<br />
* ☑ Don't use -gtk-icon-theme in your CSS<br />
* ☐ Don't use -gtk-outline-...-radius in your CSS Used in style.css, Minwaita-Inkscape.css<br />
* ☐ Adapt to drawing model changes<br />
* ☐ Stop using APIs to query GdkSurfaces<br />
* ☐ Widgets are now visible by default<br />
* ☐ Adapt to changes in animated hiding and showing of widgets<br />
* ☐ Stop passing commandline arguments to gtk_init<br />
* ☐ GdkPixbuf is deemphasized<br />
* ☐ GtkWidget event signals are removed<br />
* ☐ Invalidation handling has changed<br />
* ☐ Stop using GtkWidget::draw<br />
* ☐ Window content observation has changed<br />
* ☐ Monitor handling has changed<br />
* ☐ Adapt to monitor API changes<br />
* ☐ Adapt to cursor API changes<br />
* ☐ Adapt to icon size API changes<br />
* ☐ Adapt to changes in the GtkAssistant API<br />
* ☐ Adapt to changes in the API of GtkEntry, GtkSearchEntry and GtkSpinButton<br />
* ☑ Adapt to changes in GtkOverlay. Don't use changed api.<br />
* ☑ Use GtkFixed instead of GtkLayout. Don't use.<br />
* ☑ Adapt to search entry changes. Don't use changed api.<br />
* ☐ Adapt to GtkScale changes<br />
* ☐ Stop using gtk_window_activate_default()<br />
* ☐ Stop using gtk_widget_grab_default()<br />
* ☐ Stop setting ::has-default and ::has-focus in .ui files<br />
* ☐ Stop using the GtkWidget::display-changed signal<br />
* ☐ GtkPopover::modal has been renamed to autohide<br />
* ☐ gtk_widget_get_surface has been removed<br />
* ☐ gtk_widget_is_toplevel has been removed<br />
* ☐ gtk_widget_get_toplevel has been removed<br />
* ☐ GtkEntryBuffer ::deleted-text has changed<br />
* ☐ GtkMenu, GtkMenuBar and GtkMenuItem are gone<br />
* ☐ GtkToolbar has been removed<br />
* ☐ GtkAspectFrame is no longer a frame<br />
* ☐ Stop using custom tooltip windows<br />
* ☐ Switch to the new Drag-and-Drop api<br />
* ☐ Adapt to GtkIconTheme API changes<br />
* ☐ Adapt to GtkImage changes<br />
* ☐ Update to GtkFileChooser API changes<br />
* ☐ Stop using blocking dialog functions<br />
* ☐ Stop using GtkBuildable API<br />
* ☐ Adapt to GtkAboutDialog API changes<br />
* ☐ Adapt to GtkTreeView and GtkIconView tooltip context changes<br />
* ☐ Adapt to GtkPopover changes<br />
* ☐ Stop using GtkFileChooserButton<br />
* ☐ Adapt to changed GtkSettings properties<br />
<br />
== After switch: ==<br />
* ☐ Use new list widgets.</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Color_management_Gtk4&diff=122434Color management Gtk42023-06-14T07:43:11Z<p>Tavmjong: /* A redesigned system */</p>
<hr />
<div><br />
== Introduction ==<br />
Inkscape has supported color management for some time using ICC color profiles. ICC color profiles are used three places in Inkscape:<br />
# For specifying a particular color (see Fill and Stroke dialog). The profile and the color value are stored in the SVG file (see the SPObject based ColorProfile class).<br />
# For color adjustment of monitor(s).<br />
# For pre-flighting output.<br />
<br />
The latter two uses are controlled by settings in the "Color management" subsection of the Input/Output section of the Preferences dialog.<br />
<br />
The current code has some problems, particularly, the monitor adjustment code. These problems include<br />
* Only one profile can be specified even if there are multiple displays that need different corrections.<br />
* Retrieving a profile from a display doesn't appear to work.<br />
* The code for retrieving display profiles relies on X11 functionality that is missing under Wayland or other windowing systems.<br />
* The code was written for Gtk2 which defined a Gdk screen per monitor. In Gtk3, there is only one screen that can have multiple monitors. Gtk4 removes Gdk screen completely.<br />
* Only one color transform can be specified at a time due to the use of global variables.<br />
* The code is quite messy, based on GObject, and is poorly documented.<br />
* The drawing doesn't always update properly.<br />
<br />
For per monitor color correction to work under X11, a ICC profile must be attached to each monitor, verify by:<br />
<br />
xprop -display :0.0 -len 14 -root _ICC_PROFILE<br />
<br />
Spec: https://www.burtonini.com/computing/x-icc-profiles-spec-latest.html<br />
<br />
Darktable has a color management test: darktable-cmstest<br />
<br />
== A redesigned system==<br />
<br />
Each monitor should have its own color transform. This color transform should be updated when:<br />
* The user changes a color transform related preference. Note: the canvas widget triggers a redraw whenever a color transform preference is changed.<br />
* The canvas is moved to a different monitor (if Inkscape handles monitor color corrections, see below). In Gtk4 there is Gdk::Surface::signal_enter_monitor than can be used for this. In Gtk3, there was Gtk::Widget::signal_screen_changed but as of 3.20 there is only one screen. One could check which monitor the canvas is on each time there is a draw and if the monitor changes, recalculate the color transform.<br />
<br />
Per monitor color corrections should either:<br />
* Be handled by the windowing system. On most Linux (Gnome, KDE) systems, [https://www.freedesktop.org/software/colord/index.html colord] can be used to set a system wide color correction for each monitor (see, for example, the "Color" page for in Gnome's "Settings"). Windows and OSX have their own color corrections frameworks.<br />
* Be handled by Inkscape where the user can select which color correction to use for each monitor (it is the users responsibility to ensure that the windowing system does not also color correct as this would over-correct).<br />
<br />
Inkscape should NOT try to obtain per-monitor color corrections from the windowing system.<br />
* For Linux there are two ways of doing so:<br />
** Using X11 (this, of course assumes X11 is being used and not Wayland): X11 has an "Atom" for finding the color correction for each monitor. The primary monitor's atom is "_ICC_PROFILE", additional monitors have atoms of the form "_ICC_PROFILE_n" where n is the additional screen number (starting at 1). On, at least my system only the primary monitor's color profile atom is defined. I could not, having spent hours searching the Internet, find out how to set "_ICC_PROFILE_1". One possible tool, that may have worked, doesn't support V4 ICC files. Inkscape 1.3 tries to do corrections this way when the "Retrieve profile from display" box is checked.<br />
** Using colord: This is the framework that Gnome and KDE use to set per monitor color corrections. As this would be by default the same as used by the system wide monitor correction, there is probably no added advantage in supporting this method.<br />
<br />
The color transform is defined as a cmsHTRANSFORM (void *), this is a pointer to a data structure defined by lcms2. We need to track it, not only to avoid recreating it but also to delete it when replaced or no longer needed. It would probably best be stored per monitor in the CMSSystem class, currently there only one instance that gets continually update.<br />
<br />
== Test program ==<br />
<br />
A test program for examining monitor information can be found at: https://gitlab.com/Tavmjong/gtk_sandbox/-/tree/master/gtk_monitor<br />
<br />
Notes:<br />
* Output of Gdk::Display::get_name() is of the form "wayland-n" for Wayland and ":n" for X11, where n is a number.<br />
* Wayland has proper device model names, x11 has generic names (DP-1, DP-2).<br />
* Gtk4 with X11 lists all seat devices such as "Power Button", "Logitech M310/310t"; Gtk4 with Wayland lists a small set of devices including "Wayland Keyboard" and "Wayland Pointer".<br />
* Gtk3 has Gtk::Window::signal_screen_changed but Gtk has only one screen since 3.20 so it is useless to track moving a window between monitors. Gtk4 has Gtk::Surface::signal_enter_monitor(). This signal is not fired under X11. The Gtk4 function Gdk::Display::get_monitor_at_surface() does work on both X11 and Wayland.<br />
* The initial monitor is set wrong under Gtk3/Gtk4 x11/Wayland (as seen while constructing the Window, and in the signal handlers for realizing and mapping the window (it is always set to the second monitor). Under x11, the monitor is correct when using a button to trigger code to check the monitor. Under Wayland, the window has to be moved to a different monitor and back before the correct monitor is shown via the button. This is probably a Gtk bug.<br />
<br />
== Inkscape 1.3 ==<br />
<br />
This documents the ege-color-prof-tracker code as of 1.3.<br />
<br />
* On start-up:<br />
** ege-color_prof_tracker_new is called with no target widget (why?).<br />
** target_screen_change_cb<br />
** ege-color_prof_tracker_new is called with LayerSelector as target widget (why?).<br />
** If x11:<br />
*** add_xll_tracking_for_screen called:<br />
**** The X11 atoms _ICC_PROFILE (monitor 0) and _ICC_PROFILE_n (where n >= 1 is monitor number) are searched for.<br />
**** On my system, _ICC_PROFILE_1 is never defined. I can find no way (after hours of internet searching) to set _ICC_PROFILE_1. Various sites suggest abandoning using X11 atoms and relying on colord.<br />
** target_screen_change_cb<br />
* On event handling:<br />
** After EVERY event (mouse, scroll, etc.) event_after_cb is called.<br />
*** If the event is a GDK_CONFIGURE event (change of window size or position), there is a check to see if the gdk window is on a different monitor.<br />
*** Note, on Wayland, the GDK_CONFIGURE event always reports an x, y as 0, 0. <br />
*** If the monitor has changed, the tracker "changed" signal triggers a call to SPDesktopWidget::color_profile_event, this updates the canvas cms key (a checksum of profile buffer) corresponding to the new monitor.<br />
** CanvasPrivate::commit_tiles takes the value of prefs.from_display:<br />
*** True: calls cms_system->get_display_transform_monitor(q->_cms_key). This uses the display profile linked to a monitor.<br />
*** False: calls cms_system->get_display_transform_system(). This uses the display profile set in the preferences dialog (same profile for all monitors).</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Color_management_Gtk4&diff=122433Color management Gtk42023-06-14T07:40:31Z<p>Tavmjong: /* A redesigned system */</p>
<hr />
<div><br />
== Introduction ==<br />
Inkscape has supported color management for some time using ICC color profiles. ICC color profiles are used three places in Inkscape:<br />
# For specifying a particular color (see Fill and Stroke dialog). The profile and the color value are stored in the SVG file (see the SPObject based ColorProfile class).<br />
# For color adjustment of monitor(s).<br />
# For pre-flighting output.<br />
<br />
The latter two uses are controlled by settings in the "Color management" subsection of the Input/Output section of the Preferences dialog.<br />
<br />
The current code has some problems, particularly, the monitor adjustment code. These problems include<br />
* Only one profile can be specified even if there are multiple displays that need different corrections.<br />
* Retrieving a profile from a display doesn't appear to work.<br />
* The code for retrieving display profiles relies on X11 functionality that is missing under Wayland or other windowing systems.<br />
* The code was written for Gtk2 which defined a Gdk screen per monitor. In Gtk3, there is only one screen that can have multiple monitors. Gtk4 removes Gdk screen completely.<br />
* Only one color transform can be specified at a time due to the use of global variables.<br />
* The code is quite messy, based on GObject, and is poorly documented.<br />
* The drawing doesn't always update properly.<br />
<br />
For per monitor color correction to work under X11, a ICC profile must be attached to each monitor, verify by:<br />
<br />
xprop -display :0.0 -len 14 -root _ICC_PROFILE<br />
<br />
Spec: https://www.burtonini.com/computing/x-icc-profiles-spec-latest.html<br />
<br />
Darktable has a color management test: darktable-cmstest<br />
<br />
== A redesigned system==<br />
<br />
Each canvas (or monitor) should have its own color transform. This color transform should be updated when:<br />
* The user changes a color transform related preference. Note: the canvas widget triggers a redraw whenever a color transform preference is changed.<br />
* The canvas is moved to a different monitor (if Inkscape handles monitor color corrections, see below). In Gtk4 there is Gdk::Surface::signal_enter_monitor than can be used for this. In Gtk3, there was Gtk::Widget::signal_screen_changed but as of 3.20 there is only one screen. One could check which monitor the canvas is on each time there is a draw and if the monitor changes, recalculate the color transform.<br />
<br />
Per monitor color corrections should either:<br />
* Be handled by the windowing system. On most Linux (Gnome, KDE) systems, [https://www.freedesktop.org/software/colord/index.html colord] can be used to set a system wide color correction for each monitor (see, for example, the "Color" page for in Gnome's "Settings"). Windows and OSX have their own color corrections frameworks.<br />
* Be handled by Inkscape where the user can select which color correction to use for each monitor (it is the users responsibility to ensure that the windowing system does not also color correct as this would over-correct).<br />
<br />
Inkscape should NOT try to obtain per-monitor color corrections from the windowing system.<br />
* For Linux there are two ways of doing so:<br />
** Using X11 (this, of course assumes X11 is being used and not Wayland): X11 has an "Atom" for finding the color correction for each monitor. The primary monitor's atom is "_ICC_PROFILE", additional monitors have atoms of the form "_ICC_PROFILE_n" where n is the additional screen number (starting at 1). On, at least my system only the primary monitor's color profile atom is defined. I could not, having spent hours searching the Internet, find out how to set "_ICC_PROFILE_1". One possible tool, that may have worked, doesn't support V4 ICC files. Inkscape 1.3 tries to do corrections this way when the "Retrieve profile from display" box is checked.<br />
** Using colord: This is the framework that Gnome and KDE use to set per monitor color corrections. As this would be by default the same as used by the system wide monitor correction, there is probably no added advantage in supporting this method.<br />
<br />
The color transform is defined as a cmsHTRANSFORM (void *), this is a pointer to a data structure defined by lcms2. We need to track it, not only to avoid recreating it but also to delete it when replaced or no longer needed. It would probably best be stored as part of the Canvas structure. Currently there is only one instance stored in the CMSSystem class.<br />
<br />
== Test program ==<br />
<br />
A test program for examining monitor information can be found at: https://gitlab.com/Tavmjong/gtk_sandbox/-/tree/master/gtk_monitor<br />
<br />
Notes:<br />
* Output of Gdk::Display::get_name() is of the form "wayland-n" for Wayland and ":n" for X11, where n is a number.<br />
* Wayland has proper device model names, x11 has generic names (DP-1, DP-2).<br />
* Gtk4 with X11 lists all seat devices such as "Power Button", "Logitech M310/310t"; Gtk4 with Wayland lists a small set of devices including "Wayland Keyboard" and "Wayland Pointer".<br />
* Gtk3 has Gtk::Window::signal_screen_changed but Gtk has only one screen since 3.20 so it is useless to track moving a window between monitors. Gtk4 has Gtk::Surface::signal_enter_monitor(). This signal is not fired under X11. The Gtk4 function Gdk::Display::get_monitor_at_surface() does work on both X11 and Wayland.<br />
* The initial monitor is set wrong under Gtk3/Gtk4 x11/Wayland (as seen while constructing the Window, and in the signal handlers for realizing and mapping the window (it is always set to the second monitor). Under x11, the monitor is correct when using a button to trigger code to check the monitor. Under Wayland, the window has to be moved to a different monitor and back before the correct monitor is shown via the button. This is probably a Gtk bug.<br />
<br />
== Inkscape 1.3 ==<br />
<br />
This documents the ege-color-prof-tracker code as of 1.3.<br />
<br />
* On start-up:<br />
** ege-color_prof_tracker_new is called with no target widget (why?).<br />
** target_screen_change_cb<br />
** ege-color_prof_tracker_new is called with LayerSelector as target widget (why?).<br />
** If x11:<br />
*** add_xll_tracking_for_screen called:<br />
**** The X11 atoms _ICC_PROFILE (monitor 0) and _ICC_PROFILE_n (where n >= 1 is monitor number) are searched for.<br />
**** On my system, _ICC_PROFILE_1 is never defined. I can find no way (after hours of internet searching) to set _ICC_PROFILE_1. Various sites suggest abandoning using X11 atoms and relying on colord.<br />
** target_screen_change_cb<br />
* On event handling:<br />
** After EVERY event (mouse, scroll, etc.) event_after_cb is called.<br />
*** If the event is a GDK_CONFIGURE event (change of window size or position), there is a check to see if the gdk window is on a different monitor.<br />
*** Note, on Wayland, the GDK_CONFIGURE event always reports an x, y as 0, 0. <br />
*** If the monitor has changed, the tracker "changed" signal triggers a call to SPDesktopWidget::color_profile_event, this updates the canvas cms key (a checksum of profile buffer) corresponding to the new monitor.<br />
** CanvasPrivate::commit_tiles takes the value of prefs.from_display:<br />
*** True: calls cms_system->get_display_transform_monitor(q->_cms_key). This uses the display profile linked to a monitor.<br />
*** False: calls cms_system->get_display_transform_system(). This uses the display profile set in the preferences dialog (same profile for all monitors).</div>Tavmjonghttps://wiki.inkscape.org/wiki/index.php?title=Color_management_Gtk4&diff=122432Color management Gtk42023-06-13T12:48:13Z<p>Tavmjong: /* Inkscape 1.3 */</p>
<hr />
<div><br />
== Introduction ==<br />
Inkscape has supported color management for some time using ICC color profiles. ICC color profiles are used three places in Inkscape:<br />
# For specifying a particular color (see Fill and Stroke dialog). The profile and the color value are stored in the SVG file (see the SPObject based ColorProfile class).<br />
# For color adjustment of monitor(s).<br />
# For pre-flighting output.<br />
<br />
The latter two uses are controlled by settings in the "Color management" subsection of the Input/Output section of the Preferences dialog.<br />
<br />
The current code has some problems, particularly, the monitor adjustment code. These problems include<br />
* Only one profile can be specified even if there are multiple displays that need different corrections.<br />
* Retrieving a profile from a display doesn't appear to work.<br />
* The code for retrieving display profiles relies on X11 functionality that is missing under Wayland or other windowing systems.<br />
* The code was written for Gtk2 which defined a Gdk screen per monitor. In Gtk3, there is only one screen that can have multiple monitors. Gtk4 removes Gdk screen completely.<br />
* Only one color transform can be specified at a time due to the use of global variables.<br />
* The code is quite messy, based on GObject, and is poorly documented.<br />
* The drawing doesn't always update properly.<br />
<br />
For per monitor color correction to work under X11, a ICC profile must be attached to each monitor, verify by:<br />
<br />
xprop -display :0.0 -len 14 -root _ICC_PROFILE<br />
<br />
Spec: https://www.burtonini.com/computing/x-icc-profiles-spec-latest.html<br />
<br />
Darktable has a color management test: darktable-cmstest<br />
<br />
== A redesigned system==<br />
<br />
Each canvas should have its own color transform. This color transform should be updated when:<br />
* The user changes a color transform related preference.<br />
* The canvas is moved to a different monitor (if Inkscape handles monitor color corrections, see below). In Gtk4 there is Gdk::Surface::signal_enter_monitor than can be used for this. In Gtk3, there was Gtk::Widget::signal_screen_changed but as of 3.20 there is only one screen. One could check which monitor the canvas is on each time there is a draw and if the monitor changes, recalculate the color transform.<br />
<br />
There is the question of if Inkscape should even handle monitor color corrections. On most Linux (Gnome, KDE) systems, [https://www.freedesktop.org/software/colord/index.html colord] can be used to set a system wide color correction for each monitor (see, for example, the "Color" page for in Gnome's "Settings"). Windows and OSX have their own color corrections frameworks.<br />
<br />
If Inkscape does handle per monitor color corrections, there are two methods for determining the color corrections:<br />
<br />
# Allow the user to set the corrections. Currently (Inkscape 1.3), only one correction can be set which is used for all monitors.<br />
# Automatically obtain the color corrections from the monitors themselves. On Linux, one can either use X11 functionality or colord (or use X11 via colord?):<br />
## X11: X11 has an "Atom" for finding the color correction for each monitor. The primary monitor's atom is "_ICC_PROFILE", additional monitors have atoms of the form "_ICC_PROFILE_n" where n is the additional screen number (starting at 1). On, at least my system only the primary monitor's color profile atom is defined. This is Inkscape's current method.<br />
## colord: One can use the colord library to find the color correction set for a particular monitor. As this would be by default the same as used by the system wide monitor correction, there is probably no added advantage in supporting this method.<br />
<br />
The color transform is defined as a cmsHTRANSFORM (void *), this is a pointer to a data structure defined by lcms2. We need to track it, not only to avoid recreating it but also to delete it when replaced or no longer needed.<br />
<br />
== Test program ==<br />
<br />
A test program for examining monitor information can be found at: https://gitlab.com/Tavmjong/gtk_sandbox/-/tree/master/gtk_monitor<br />
<br />
Notes:<br />
* Output of Gdk::Display::get_name() is of the form "wayland-n" for Wayland and ":n" for X11, where n is a number.<br />
* Wayland has proper device model names, x11 has generic names (DP-1, DP-2).<br />
* Gtk4 with X11 lists all seat devices such as "Power Button", "Logitech M310/310t"; Gtk4 with Wayland lists a small set of devices including "Wayland Keyboard" and "Wayland Pointer".<br />
* Gtk3 has Gtk::Window::signal_screen_changed but Gtk has only one screen since 3.20 so it is useless to track moving a window between monitors. Gtk4 has Gtk::Surface::signal_enter_monitor(). This signal is not fired under X11. The Gtk4 function Gdk::Display::get_monitor_at_surface() does work on both X11 and Wayland.<br />
* The initial monitor is set wrong under Gtk3/Gtk4 x11/Wayland (as seen while constructing the Window, and in the signal handlers for realizing and mapping the window (it is always set to the second monitor). Under x11, the monitor is correct when using a button to trigger code to check the monitor. Under Wayland, the window has to be moved to a different monitor and back before the correct monitor is shown via the button. This is probably a Gtk bug.<br />
<br />
== Inkscape 1.3 ==<br />
<br />
This documents the ege-color-prof-tracker code as of 1.3.<br />
<br />
* On start-up:<br />
** ege-color_prof_tracker_new is called with no target widget (why?).<br />
** target_screen_change_cb<br />
** ege-color_prof_tracker_new is called with LayerSelector as target widget (why?).<br />
** If x11:<br />
*** add_xll_tracking_for_screen called:<br />
**** The X11 atoms _ICC_PROFILE (monitor 0) and _ICC_PROFILE_n (where n >= 1 is monitor number) are searched for.<br />
**** On my system, _ICC_PROFILE_1 is never defined. I can find no way (after hours of internet searching) to set _ICC_PROFILE_1. Various sites suggest abandoning using X11 atoms and relying on colord.<br />
** target_screen_change_cb<br />
* On event handling:<br />
** After EVERY event (mouse, scroll, etc.) event_after_cb is called.<br />
*** If the event is a GDK_CONFIGURE event (change of window size or position), there is a check to see if the gdk window is on a different monitor.<br />
*** Note, on Wayland, the GDK_CONFIGURE event always reports an x, y as 0, 0. <br />
*** If the monitor has changed, the tracker "changed" signal triggers a call to SPDesktopWidget::color_profile_event, this updates the canvas cms key (a checksum of profile buffer) corresponding to the new monitor.<br />
** CanvasPrivate::commit_tiles takes the value of prefs.from_display:<br />
*** True: calls cms_system->get_display_transform_monitor(q->_cms_key). This uses the display profile linked to a monitor.<br />
*** False: calls cms_system->get_display_transform_system(). This uses the display profile set in the preferences dialog (same profile for all monitors).</div>Tavmjong