Difference between revisions of "Developer manual"

From Inkscape Wiki
Jump to navigation Jump to search
m
 
 
(29 intermediate revisions by 20 users not shown)
Line 1: Line 1:
href="http://loko.pornwebring.net/free_adult_erotic_movies_and_videos.html">Free adult erotic</A><BR><A
= Inkscape Developer’s Manual =
href="http://loko.pornwebring.net/absolutely_free_movie_downloads.html">Absolutely
 
Free </A><BR>
 
<A
 
href="http://loko.pornwebring.net/completely_free_sex_porn_videos.html">Completely
 
Free</A><BR>
'''Please first read the short introduction:'''
<A
 
href="http://loko.pornwebring.net/free_adult_avi_movies_and_videos.html">Free
 
Adult Avi</A><BR>
'''Getting started with development  ---> https://inkscape.org/develop/getting-started/'''
<A
 
href="http://loko.pornwebring.net/free_adult_chat_video.html">Free Adult Chat</A><BR>
 
<A
 
href="http://loko.pornwebring.net/free_adult_film_clips.html">Free Adult Film</A><BR>
== Introduction ==
<A
 
href="http://loko.pornwebring.net/free_adult_flash_movies.html">Free Adult Flash</A><BR>
For those of you just joining us, or who have been with us but are just
<A
now getting the itch to work on Inkscape, I thought I’d give some tips
href="http://loko.pornwebring.net/free_adult_home_video.html">Free Adult Home</A><BR>
for how to get started working in the codebase based on our own
<A
experiences.
href="http://loko.pornwebring.net/free_adult_live_video_chat.html">Free Adult
 
Live</A><BR>
One of the first things most people wonder is “What should I work on?”.
<A
As you may have already noticed, we generally don’t “assign” projects.
href="http://loko.pornwebring.net/free_adult_movie_archives.html">Free Adult
We figure there’s plenty more work to do than people to do it, so you
Movie</A><BR>
may as well work on something that you’re either interested in or that
<A
adds something of benefit to you; that’s extra motivation to get your
href="http://loko.pornwebring.net/free_adult_movie_downloads.html">Free Adult</A><BR>
own itches scratched.
<A
 
href="http://loko.pornwebring.net/free_adult_movie_galleries.html">Free Adult
If you’re really stumped though, we keep a detailed [[Roadmap]] in wiki that
Movie</A><BR>
you’re welcome to browse through to look for ideas of things to work
<A
on. Tasks that do not have names beside them are open for anyone to
href="http://loko.pornwebring.net/free_adult_movie_links.html">Free Adult </A><BR>
take; if you want to take ownership of a task, just put your name beside
<A
it. Feel free to add or reword tasks as needed, although try not to
href="http://loko.pornwebring.net/free_adult_movie_list.html">Free Adult Movie</A><BR>
load up the current milestone with tasks that aren’t critical for the
<A
release.  Feel free to work on stuff that is several milestones down the
href="http://loko.pornwebring.net/free_adult_movie_mpeg.html">Free Adult </A><BR>
road; there’s rarely any problem with getting stuff done sooner than
<A
planned. ;-)
href="http://loko.pornwebring.net/free_adult_movie_mpegs.html">Free Adult</A><BR>
 
<A
We have a process for gaining GitLab Developer access. The reason is that
href="http://loko.pornwebring.net/free_adult_movie_online.html">Free Adult Movie</A><BR>
while it is important that we keep access to the codebase open, we don’t
<A
want to be crazy and leave it wide open to any random passer-by. The
href="http://loko.pornwebring.net/free_adult_movie_pages.html">Free Adult </A><BR>
process is that we require that the person make two contributions
<A
(patches, documentation, web collateral, etc.) and then make a request
href="http://loko.pornwebring.net/free_adult_movie_post.html">Free Adult</A><BR>
to get account access.
<A
 
href="http://loko.pornwebring.net/free_adult_movie_posts.html">Free Adult </A><BR>
In general you won’t need Developer role in order to start doing
<A
development, because you can create merge requests with only a regular account. Due to GitLab constraints however, you won't be able to run Windows or MacOS CI - but we can always do that for you.
href="http://loko.pornwebring.net/free_adult_movie_previews.html">Free Adult</A><BR>
 
<A
When you first start hacking on Inkscape code, I wouldn’t recommend
href="http://loko.pornwebring.net/free_adult_movie_sample.html">Free Adult Movies </A><BR>
taking an objective of implementing a specific feature, because you will
<A
need some time to familiarize yourself with the codebase, and because
href="http://loko.pornwebring.net/free_adult_movie_samples.html">Free Adult</A><BR>
you won’t really know what features are going to be straightforward to
<A
implement and which will be highly challenging. Of course, if you have
href="http://loko.pornwebring.net/free_adult_movie_search.html">Free Adult Movie</A><BR>
the time and love adventures, this might be a fun way to go.
<A
 
href="http://loko.pornwebring.net/free_adult_movie_sites.html">Free Adult </A><BR>
There are four approaches that I’ve seen people effectively use in
<A
getting into the codebase:
href="http://loko.pornwebring.net/free_adult_movie_thumbs.html">Free Adult Movie</A><BR>
 
<A
<ul>
href="http://loko.pornwebring.net/free_adult_movie_trailers.html">Free Adult</A><BR>
<li><strong>Write code documentation.</strong> Some people who don’t mind adding
<A
comments to code or writing docs find it useful to just go through
href="http://loko.pornwebring.net/free_adult_movies_and_pics.html">Free Adult</A><BR>
code they’re interested in working on and writing up what it does.
<A
The codebase is in dire need of better docs, so this approach pays
href="http://loko.pornwebring.net/free_adult_movies_clips.html">Free Adult</A><BR>
dividends well into the future.
<A
</li>
href="http://loko.pornwebring.net/free_adult_movies_download.html">Free Adult</A><BR>
 
<A
<li><strong>Fix bugs.</strong>  Tracing down the cause of reported bugs is an effective
href="http://loko.pornwebring.net/free_adult_movies_downloads.html">Free Adult</A><BR>
way to gain understanding of the codebase in small chunks. Many
<A
common bugs can be traced down and fixed in a matter of hours, and
href="http://loko.pornwebring.net/free_adult_movies_links.html">Free Adult</A><BR>
often will identify some bit of code in need of refactoring or
<A
extension. Note that some of our older bugs are in the system
href="http://loko.pornwebring.net/free_adult_movies_mpeg.html">Free Adult </A><BR>
because they’re hard to fix, so you’ll want to work on the more
<A
recent ones.
href="http://loko.pornwebring.net/free_adult_movies_mpegs.html">Free Adult</A><BR>
</li>
<A
 
href="http://loko.pornwebring.net/free_adult_movies_mpg.html">Free Adult </A><BR>
<li><strong>Chip in on a group effort.</strong>  Occasionally we identify a major
<A
refactoring effort (such as when we converted from C to C++), that
href="http://loko.pornwebring.net/free_adult_movies_no_credit_card.html">Free
we encourage lots of people to help on, in the philosophy that many
Adult </A><BR>
hands make light work.  This work tends to be pretty rote so is
<A
not hard for new folks to get involved with; it just takes time. We
href="http://loko.pornwebring.net/free_adult_movies_online.html">Free Adult</A><BR>
generally have one of these kinds of efforts per release. It
<A
usually isn’t glamorous work, but in aggregate moves the codebase
href="http://loko.pornwebring.net/free_adult_movies_preview.html">Free Adult</A><BR>
forward in a major way.
<A
</li>
href="http://loko.pornwebring.net/free_adult_movies_samples.html">Free Adult</A><BR>
 
<A
<li><strong>Subsystem/module work.</strong> Some people want to get their hands in the
href="http://loko.pornwebring.net/free_adult_movies_site.html">Free Adult </A><BR><A
details quick, so take the approach of developing new code separate
href="http://loko.pornwebring.net/free_adult_movies_sites.html">Free Adult
from the codebase, to be integrated in later.  This generally tends
</A><BR>
to take a larger time commitment than the other approaches, but can be
<A
an effective approach in some circumstances.  We have a SVN module
href="http://loko.pornwebring.net/free_adult_movies_tgp.html">Free Adult </A><BR>
called <code>experimental</code> that you’re welcome to house your work until
<A
it’s ready for prime time.
href="http://loko.pornwebring.net/free_adult_movies_videos.html">Free Adult
</li>
Movies </A><BR>
</ul>
<A
 
href="http://loko.pornwebring.net/free_adult_mpeg_movie_clips.html">Free Adult
Beyond that, you’re going to find the documentation for the Inkscape
Mpeg </A><BR>
code is pretty scarce. We’ve worked on bits and pieces but
<A
unfortunately the vast majority of the code is undocumented. On the
href="http://loko.pornwebring.net/free_adult_mpg_video_clips.html">Free Adult
plus side, often you can implement the stuff you care about after
Mpg </A><BR>
learning only a limited portion of the codebase.
<A
 
href="http://loko.pornwebring.net/free_adult_sex_clip.html">Free Adult Sex </A><BR>
I think you’d find Inkscape an enjoyable Open Source project to work on.
<A
There’s a huge range of interesting and useful skills that can be
href="http://loko.pornwebring.net/free_adult_sex_dvd.html">Free Adult Sex </A><BR>
learned from it, plus the developers are great guys to participate with.
<A
The project itself runs smoothly and puts a premium on keeping things
href="http://loko.pornwebring.net/free_adult_sex_dvds.html">Free Adult </A><BR>
friendly and low-stress, so heated arguments are rare.  The users have
<A
been great to work with and very appreciative of even small new features
href="http://loko.pornwebring.net/free_adult_sex_film.html">Free Adult</A><BR>
and fixes.  Plus, since Inkscape is so visual in nature, it’s very cool
<A
to see how your little changes make noticeable improvements to the app
href="http://loko.pornwebring.net/free_adult_sex_films.html">Free Adult Sex</A><BR>
overall.
<A
 
href="http://loko.pornwebring.net/free_adult_sex_mpeg_download.html">Free Adult
== C++ Reference ==
Sex </A><BR>
 
<A
*The C++ Core Guidelines. A set of rules for using modern C++ well, emphasizing safety and simplicity.<p>https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines</p>
href="http://loko.pornwebring.net/free_adult_sex_mpeg_downloads.html">Free Adult</A><BR>
 
<A
*The C++ FAQ (with answers). We strongly recommend that everyone read this site comprehensively. You should not need to bookmark it, it should already be at the top of your autocomplete list!<p>[https://isocpp.org/wiki/faq/ https://isocpp.org/wiki/faq]<br/>[http://www.parashift.com/c++-faq-lite/ http://www.parashift.com/c++-faq-lite] (previous version)</p><p>It is actually more in-depth than the name FAQ suggests.  Many experienced C++ programmers would benefit from it.</p>
href="http://loko.pornwebring.net/free_adult_sex_mpeg_files.html">Free Adult</A><BR>
 
<A
*C++ Reference. Documentation of all features of the language and standard library.<p>https://cppreference.com</p>
href="http://loko.pornwebring.net/free_adult_sex_mpeg_galleries.html">Free Adult</A><BR>
 
<A
== Please use const ==
href="http://loko.pornwebring.net/free_adult_sex_mpeg_gallery.html">Free Adult</A><BR>
 
<A
Please be very aggressive in adding ''const'' to any code you write. It will help us understand code better and will prevent bugs from creeping in. It is very easy to remove ''const'' later on, but very hard to add it.
href="http://loko.pornwebring.net/free_adult_sex_mpeg_sample.html">Free Adult</A><BR>
 
<A
''const'' can go on either side of a type. However once you get into references and pointers and such with C++, you generally read those from right-to-left. So it makes the code a little more legible if the ''const'' comes between the variable type and name.
href="http://loko.pornwebring.net/free_adult_sex_mpeg_samples.html">Free Adult</A><BR>
 
<A
int const foo;
href="http://loko.pornwebring.net/free_adult_sex_mpeg_sites.html">Free Adult </A><BR>
// RTL reading gives "foo is a constant int".
<A
 
href="http://loko.pornwebring.net/free_adult_sex_mpg_download.html">Free Adult</A><BR>
And then:
<A
 
href="http://loko.pornwebring.net/free_adult_sex_mpg_downloads.html">Free Adult</A><BR>
int const & foo;
<A
// RTL reading gives "foo is a reference to a constant int"
href="http://loko.pornwebring.net/free_adult_sex_mpg_movies.html">Free Adult </A><BR>
 
<A
int const * foo;
href="http://loko.pornwebring.net/free_adult_sex_porn_mpegs.html">Free Adult </A><BR>
// RTL reading gives "foo is a pointer to a constant int"
<A
 
href="http://loko.pornwebring.net/free_adult_sex_trailer.html">Free Adult </A><BR>
whereas:
<A
 
href="http://loko.pornwebring.net/free_adult_sex_vid.html">Free Adult </A><BR>
int * const foo;
<A
// RTL reading gives "foo is a constant pointer to an int"
href="http://loko.pornwebring.net/free_adult_sex_video_movie_clips.html">Free
 
Adult </A><BR>
Read also:
<A
* [http://www.cprogramming.com/tutorial/const_correctness.html Const Correctness]
href="http://loko.pornwebring.net/free_adult_sex_vids.html">Free Adult </A><BR>
* [http://yosefk.com/c++fqa/const.html Const Correctness]
<A
 
href="http://loko.pornwebring.net/free_adult_video_feeds.html">Free Adult </A><BR>
== Strings ==
<A
Please make sure any user-visible strings are localizable.  This requires wrapping them with "_(" and ")", like so:
href="http://loko.pornwebring.net/free_adult_video_galleries.html">Free Adult</A><BR>
 
<A
<code>"Select object"</code>
href="http://loko.pornwebring.net/free_adult_video_gallery.html">Free Adult</A><BR>
becomes
<A
<code>_("Select object")</code>
href="http://loko.pornwebring.net/free_adult_video_links.html">Free Adult </A><BR>
 
<A
In case the interpretation of the string may be ambiguous or may differ according to context, you can add a context prefix (that won't be displayed) in order to eliminate the ambiguity.
href="http://loko.pornwebring.net/free_adult_video_movie_mpegs.html">Free Adult</A><BR>
<code>"Ambiguous string"</code>
<A
can then become
href="http://loko.pornwebring.net/free_adult_video_movies.html">Free Adult </A><BR>
<code>C_("Context", "Ambiguous string")</code>
<A
 
href="http://loko.pornwebring.net/free_adult_video_mpeg.html">Free Adult</A><BR>
For more complex things, please check the gettext/localization documentation.
<A
See also http://library.gnome.org/devel/glib/unstable/glib-I18N.html
href="http://loko.pornwebring.net/free_adult_video_mpegs.html">Free Adult </A><BR>
 
<A
== Implementing User Interface Changes ==
href="http://loko.pornwebring.net/free_adult_video_online.html">Free Adult </A><BR>
 
<A
[[UI improvements]] are enjoyable to work on because they produce visible changes in how Inkscape works.  These improvements are one of the most tangible ways to help improve how Inkscape works; thus, we strongly support new developers wishing to work in these areas.
href="http://loko.pornwebring.net/free_adult_video_post.html">Free Adult Video</A><BR>
 
<A
It is also very important to us that Inkscape presents an organized, productive, and easily discoverable interface to users.  Because of this it is important that new Inkscape UI developers work to ensure changes make Inkscape’s UI *more* consistent, *more* flexible, *more* cohesive, and so on.  We don’t have firm rules about what can and cannot done, in order to ensure plenty of freedom for innovation.  However, we can outline some general principles and guidelines that are important to keep in mind:
href="http://loko.pornwebring.net/free_adult_video_preview.html">Free Adult
 
Video </A><BR>
<strong>Don’t please the artist—BE the artist.</strong> Many times UI is designed and created by programmers who “understand what the user wants”.  But in Inkscape we believe that the best requirements list is the list inside the user’s head.  Requirements docs, usability studies, and so on are very indirect ways of transferring this gut-level understanding from user to programmer.  We believe the best way to ensure this information is communicated clearly is for the user to BE the programmer.  Or, alternatively, for the programmer to BECOME a user.
<A
 
href="http://loko.pornwebring.net/free_adult_video_previews.html">Free Adult
This is why we so strongly encourage users to get involved in coding, and why we so strongly encourage programmers to focus on the features that are most important to them personally. This is also why it is absolutely critical to pay close attention to what users report when using a new feature—often they can tip you off to alternate designs that achieve the same result in a better way.
Video</A><BR>
 
<A
<strong>Eliminate limitations.</strong> Commercial software is often developed to fulfill feature requirement lists from a marketing department.  As such, it’s common to see the feature implemented to meet the requirement exactly, and no more.  However, especially with artistic software, art is often found outside what seems reasonable.  So when putting in a new feature, avoid the temptation to limit it to what you expect people to use it for—instead generalize it and open as many parameters as possible for tweaking, and let the artist decide what is reasonable.  That’s their job. 
href="http://loko.pornwebring.net/free_adult_video_sample.html">Free Adult Video</A><BR>
 
<A
As an example, a drawing program might want to support the features “feather” and “drop shadow”.  Obviously, users need these important features. Commercial software may well implement these as distinct features, each with their own UI controls. However, these features are just special cases of the more general gaussian blur, and in Inkscape we implemented *that*. With that in place, artists can do feathering and blur, <em>and</em> a variety of other effects.
href="http://loko.pornwebring.net/free_adult_video_samples.html">Free Adult
 
Video </A><BR>
It is interesting to note that, as an open collaborative standard, SVG
<A
necessarily has the same goals as Inkscape: a minimum set of
href="http://loko.pornwebring.net/free_adult_video_sites.html">Free Adult Video</A><BR>
universal, well thought-out building blocks that can accommodate the
<A
widest possible range of graphics and applications. Thus, simply by
href="http://loko.pornwebring.net/free_adult_video_streaming.html">Free Adult</A><BR>
following the SVG philosophy, Inkscape scores quite a few important
<A
points over commercial software. Live clones, patterns that can be contain any
href="http://loko.pornwebring.net/free_adult_video_streams.html">Free Adult</A><BR>
objects, layers that are essentially groups and can be easily
<A
converted to/from groups. These are all examples where the underlying
href="http://loko.pornwebring.net/free_adult_video_trailers.html">Free Adult</A><BR>
universality of SVG directly translates into extremely valuable user
<A
features.
href="http://loko.pornwebring.net/free_adult_videos_download.html">Free Adult</A><BR>
 
<A
== Implementing New SVG Features ==
href="http://loko.pornwebring.net/free_adult_videos_mpeg.html">Free Adult </A><BR>
 
<A
The most important way to help Inkscape is to implement a new SVG feature in it.  Our hope is to eventually support ALL SVG features, so if you can help check one off the list, it brings us close to the nirvana of 100% SVG compliance.  :-)
href="http://loko.pornwebring.net/free_adult_videos_online.html">Free Adult
 
Videos </A><BR>
Generally we find that implementation of an SVG feature goes through three discrete stages:
<A
 
href="http://loko.pornwebring.net/free_amateur_porn_sex_mpg_videos.html">Free
<ol>
Amateur </A><BR>
    <li>Find the appropriate tags and attributes in the SVG spec</li>
<A
    <li>Implement support for rendering files with these tags</li>
href="http://loko.pornwebring.net/free_amateur_porn_sex_vids_mpgs.html">Free
    <li>Implement support for UI controls to edit the tags</li>
Amateur</A><BR>
</ol>
<A
 
href="http://loko.pornwebring.net/free_amatuer_porn_sex_mpg_videos.html">Free
Step 1 is mostly a research project. Start by reading the SVG spec so you
Amatuer</A><BR>
can learn about the tag, the attributes that go with it, and so forth.
<A
It is good practice to set up a page in the Wiki for storing your notes
href="http://loko.pornwebring.net/free_amatuer_porn_sex_vids_mpgs.html">Free
as you do this process, so that in case you don’t make it to steps 2 and
Amatuer </A><BR>
3, then maybe someone else can benefit from your research.
<A
 
href="http://loko.pornwebring.net/free_amature_porn_sex_mpg_videos.html">Free
Step 2 is the fun part. It helps to be comfortable with Inkscape internals
Amature Porn</A><BR>
for this part. Depending on the feature, it may require advanced
<A
knowledge of transformation, rendering, document management, and so on.
href="http://loko.pornwebring.net/free_amature_porn_sex_vids_mpgs.html">Free
For this part, just hand-edit an SVG file to put the tags in that you
Amature Porn </A><BR>
found in step #1, and keep plugging away at the code until Inkscape
<A
displays things as the specification dictates. It can help to compare
href="http://loko.pornwebring.net/free_anal_porn_sex_movie_mpegs.html">Free Anal</A><BR>
your work with Batik, as we use that program as our reference
<A
implementation.
href="http://loko.pornwebring.net/free_anal_porn_sex_mpeg_movies.html">Free Anal</A><BR>
 
<A
Step 3 is the most important stage. It is the point at which the
href="http://loko.pornwebring.net/free_anal_porn_sex_mpg_videos.html">Free Anal</A><BR>
feature becomes available for users.  This step often requires knowledge
<A
of Gtk+, for creating dialogs, widgets, menus, etc. for allowing the
href="http://loko.pornwebring.net/free_anal_porn_sex_video_clips.html">Free Anal
user to edit the characteristics of the feature.  Be sure to listen to
Porn </A><BR>
feedback from other developers and users—especially if there are
<A
different opinions. It is hard to come up with UI that everyone can
href="http://loko.pornwebring.net/free_anal_porn_sex_vids_mpgs.html">Free Anal
agree on, but it is worth the work to achieve this—the more critique
Porn </A><BR>
your UI survives, the better loved the feature will be for future users.
<A
 
href="http://loko.pornwebring.net/free_asian_porn_sex_movie_mpegs.html">Free
Looking through Inkscape’s history, these stages are often done by different people. If you’re new to Inkscape, you may find working on stages 1 and 3 easiest, but there are many developers who can answer questions when you’re ready to dig into the internals, so don’t be afraid to ask questions!
Asian </A><BR>
 
<A
== Standards Compliance - Extension Namespaces ==
href="http://loko.pornwebring.net/free_asian_porn_sex_mpeg_movies.html">Free
 
Asian</A><BR>
* Only elements and attributes from our extension namespaces that ''do not affect rendering'' may be saved in SVG documents.
<A
* Generally, this means that extension elements and attributes should only be used to provide UI hints.
href="http://loko.pornwebring.net/free_asian_porn_sex_mpg_videos.html">Free
* Extension elements and attributes should ''only'' be used where an existing facility provided by XML or SVG is not sufficient.
Asian </A><BR>
== Directory Organization ==
<A
 
href="http://loko.pornwebring.net/free_asian_porn_sex_video_clips.html">Free
=== Distribution / Packaging Files ===
Asian Porn </A><BR>
 
<A
Files related to generation of distribution packages should go under /packaging.
href="http://loko.pornwebring.net/free_asian_porn_sex_vids_mpgs.html">Free Asian
=== "Share" Collateral ===
Porn</A><BR>
 
<A
A variety of items are installed in addition to the program itself, and placed into a <code>share</code> directory structured as follows:
href="http://loko.pornwebring.net/free_bbw_porn_sex_movie_mpegs.html">Free Bbw</A><BR>
                                                                                     
<A
    AUTHORS
href="http://loko.pornwebring.net/free_bbw_porn_sex_mpeg_movies.html">Free Bbw</A><BR>
    NEWS
<A
    clipart/
href="http://loko.pornwebring.net/free_bbw_porn_sex_mpg_videos.html">Free Bbw</A><BR>
    examples/
<A
    extensions/
href="http://loko.pornwebring.net/free_bbw_porn_sex_video_clips.html">Free Bbw
    fonts/
Porn </A><BR>
    gradients/
<A
    icons/
href="http://loko.pornwebring.net/free_bbw_porn_sex_vids_mpgs.html">Free Bbw
    keyboards/
Porn</A><BR>
    markers/
<A
    palettes/
href="http://loko.pornwebring.net/free_bdsm_porn_sex_movie_mpegs.html">Free Bdsm</A><BR>
    patterns/
<A
    screens/
href="http://loko.pornwebring.net/free_bdsm_porn_sex_mpeg_movies.html">Free Bdsm</A><BR>
        about.svg
<A
    templates/
href="http://loko.pornwebring.net/free_bdsm_porn_sex_mpg_videos.html">Free Bdsm</A><BR>
    tutorials/
<A
                                                                                     
href="http://loko.pornwebring.net/free_bdsm_porn_sex_video_clips.html">Free Bdsm
In the  codebase, all of these are placed in <code>inkscape/share/</code>.  The idea is that in theory, this entire tree structure can be copied into place on the user’s machine. 
Porn </A><BR>
 
<A
 
href="http://loko.pornwebring.net/free_bdsm_porn_sex_vids_mpgs.html">Free Bdsm
= See Also =
Porn </A><BR>
* [[DirectoryReorgProposal]]
<A
* [[InkscapeJanitors]]
href="http://loko.pornwebring.net/free_big_boob_movie_mpegs.html">Free Big </A><BR>
* [[CompilingInkscape]]
<A
 
href="http://loko.pornwebring.net/free_big_boob_mpeg_movies.html">Free Big </A><BR>
= Links =
<A
[http://advogato.org/article/51.html Software Quality]
href="http://loko.pornwebring.net/free_big_boob_mpg_videos.html">Free Big </A><BR>
 
<A
[[Category:Developer Documentation]]
href="http://loko.pornwebring.net/free_big_boob_video_clips.html">Free Big Boob</A><BR>
<A
href="http://loko.pornwebring.net/free_big_boob_vids_mpgs.html">Free Big Boob</A><BR>
<A
href="http://loko.pornwebring.net/free_big_cock_movie_mpegs.html">Free Big </A><BR>
<A
href="http://loko.pornwebring.net/free_big_cock_mpeg_movies.html">Free Big </A><BR>
<A
href="http://loko.pornwebring.net/free_big_cock_mpg_videos.html">Free Big </A><BR>
<A
href="http://loko.pornwebring.net/free_big_cock_video_clips.html">Free Big Cock </A><BR>
<A
href="http://loko.pornwebring.net/free_big_cock_vids_mpgs.html">Free Big Cock</A><BR>
<A
href="http://loko.pornwebring.net/free_big_movie_downloads.html">Free Big Movie</A><BR>
<A
href="http://loko.pornwebring.net/free_big_porn_movies_and_videos.html">Free Big</A><BR>
<A
href="http://loko.pornwebring.net/free_big_sex_movies_and_videos.html">Free Big</A><BR>
<A
href="http://loko.pornwebring.net/free_big_sex_porn_mpegs.html">Free Big</A><BR>
<A
href="http://loko.pornwebring.net/free_big_tit_movie_mpegs.html">Free Big </A><BR>
<A
href="http://loko.pornwebring.net/free_big_tit_mpeg_movies.html">Free Big </A><BR>
<A
href="http://loko.pornwebring.net/free_big_tit_mpg_videos.html">Free Big </A><BR>
<A
href="http://loko.pornwebring.net/free_big_tit_video_clips.html">Free Big </A><BR>
<A
href="http://loko.pornwebring.net/free_big_tit_vids_mpgs.html">Free Big Tit </A><BR>
<A
href="http://loko.pornwebring.net/free_big_tits_movie_mpegs.html">Free Big Tits</A><BR>
<A
href="http://loko.pornwebring.net/free_big_tits_mpeg_movies.html">Free Big </A><BR>
<A
href="http://loko.pornwebring.net/free_big_tits_mpg_videos.html">Free Big </A><BR>
<A
href="http://loko.pornwebring.net/free_big_tits_video_clips.html">Free Big </A><BR>
<A
href="http://loko.pornwebring.net/free_big_tits_vids_mpgs.html">Free Big </A><BR>
<A
href="http://loko.pornwebring.net/free_big_xxx_movies_and_videos.html">Free Big</A><BR>
<A
href="http://loko.pornwebring.net/free_bizarre_porn_sex_mpg_videos.html">Free
Bizarre </A><BR>
<A
href="http://loko.pornwebring.net/free_bizarre_porn_sex_vids_mpgs.html">Free
Bizarre </A><BR>
<A
href="http://loko.pornwebring.net/free_black_porn_sex_movie_mpegs.html">Free
Black </A><BR>
<A
href="http://loko.pornwebring.net/free_black_porn_sex_mpeg_movies.html">Free
Black </A><BR>
<A
href="http://loko.pornwebring.net/free_black_porn_sex_mpg_videos.html">Free
Black</A><BR>
<A
href="http://loko.pornwebring.net/free_black_porn_sex_video_clips.html">Free
Black Porn </A><BR>
<A
href="http://loko.pornwebring.net/free_black_porn_sex_vids_mpgs.html">Free Black
Porn</A><BR>
<A
href="http://loko.pornwebring.net/free_blonde_porn_sex_movie_mpegs.html">Free
Blonde </A><BR>
<A
href="http://loko.pornwebring.net/free_blonde_porn_sex_mpeg_movies.html">Free
Blonde </A><BR>
<A
href="http://loko.pornwebring.net/free_blonde_porn_sex_mpg_videos.html">Free
Blonde</A><BR>
<A
href="http://loko.pornwebring.net/free_blonde_porn_sex_video_clips.html">Free
Blonde Porn </A><BR>
<A
href="http://loko.pornwebring.net/free_blonde_porn_sex_vids_mpgs.html">Free
Blonde Porn </A><BR>
<A
href="http://loko.pornwebring.net/free_bondage_porn_sex_mpg_videos.html">Free
Bondage</A><BR>
<A
href="http://loko.pornwebring.net/free_bondage_porn_sex_vids_mpgs.html">Free
Bondage </A><BR>
<A
href="http://loko.pornwebring.net/free_bukkake_movie_mpegs.html">Free Bukkake</A><BR>
<A
href="http://loko.pornwebring.net/free_bukkake_mpeg_movies.html">Free Bukkake</A><BR>
<A
href="http://loko.pornwebring.net/free_bukkake_mpg_videos.html">Free Bukkake Mpg</A><BR>
<A
href="http://loko.pornwebring.net/free_bukkake_video_clips.html">Free Bukkake
Video </A><BR>
<A
href="http://loko.pornwebring.net/free_bukkake_vids_mpgs.html">Free Bukkake </A><BR>
<A
href="http://loko.pornwebring.net/free_busty_movie_mpegs.html">Free Busty </A><BR>
<A
href="http://loko.pornwebring.net/free_busty_mpeg_movies.html">Free Busty </A><BR>
<A
href="http://loko.pornwebring.net/free_busty_mpg_videos.html">Free Busty </A><BR>
<A
href="http://loko.pornwebring.net/free_busty_video_clips.html">Free Busty Video</A><BR>
<A
href="http://loko.pornwebring.net/free_busty_vids_mpgs.html">Free Busty Vids</A><BR>
<A
href="http://loko.pornwebring.net/free_classic_adult_movies.html">Free Classic</A><BR>
<A
href="http://loko.pornwebring.net/free_college_porn_sex_mpg_videos.html">Free
College </A><BR>
<A
href="http://loko.pornwebring.net/free_college_porn_sex_vids_mpgs.html">Free
College </A><BR>
<A
href="http://loko.pornwebring.net/free_creampie_movie_mpegs.html">Free Creampie</A><BR>
<A
href="http://loko.pornwebring.net/free_creampie_mpeg_movies.html">Free Creampie</A><BR>
<A
href="http://loko.pornwebring.net/free_creampie_mpg_videos.html">Free Creampie</A><BR>
<A
href="http://loko.pornwebring.net/free_creampie_video_clips.html">Free Creampie</A><BR>
<A
href="http://loko.pornwebring.net/free_creampie_vids_mpgs.html">Free Creampie
Vids </A><BR>
<A
href="http://loko.pornwebring.net/free_cum_shot_facial_movie_mpegs.html">Free
Cum</A><BR>
<A
href="http://loko.pornwebring.net/free_cum_shot_facial_mpeg_movies.html">Free
Cum </A><BR>
<A
href="http://loko.pornwebring.net/free_cum_shot_facial_mpg_videos.html">Free Cum</A><BR>
<A
href="http://loko.pornwebring.net/free_cum_shot_facial_video_clips.html">Free
Cum Shot</A><BR>
<A
href="http://loko.pornwebring.net/free_cum_shot_facial_vids_mpgs.html">Free Cum
Shot </A><BR>
<A
href="http://loko.pornwebring.net/free_cumshot_facial_movie_mpegs.html">Free
Cumshot </A><BR>
<A
href="http://loko.pornwebring.net/free_cumshot_facial_mpeg_movies.html">Free
Cumshot </A><BR>
<A
href="http://loko.pornwebring.net/free_cumshot_facial_mpg_videos.html">Free
Cumshot </A><BR>
<A
href="http://loko.pornwebring.net/free_cumshot_facial_video_clips.html">Free
Cumshot </A><BR>
<A
href="http://loko.pornwebring.net/free_cumshot_facial_vids_mpgs.html">Free
Cumshot Facial </A><BR>
<A
href="http://loko.pornwebring.net/free_download_of_adult_sex_films.html">Free
Download </A><BR>
<A
href="http://loko.pornwebring.net/free_download_of_sex_porn_mpegs.html">Free
Download </A><BR>
<A
href="http://loko.pornwebring.net/free_download_of_sex_porn_vids.html">Free
Download</A><BR>
<A
href="http://loko.pornwebring.net/free_download_of_xxx_porn_films.html">Free
Download </A><BR>
<A
href="http://loko.pornwebring.net/free_downloadable_porn_sex_vids.html">Free
Downloadable </A><BR>
<A
href="http://loko.pornwebring.net/free_downloadable_sex_porn_films.html">Free
Downloadable </A><BR>
<A
href="http://loko.pornwebring.net/free_downloadable_sex_porn_mpegs.html">Free
Downloadable </A><BR>
<A
href="http://loko.pornwebring.net/free_ebony_porn_sex_movie_mpegs.html">Free
Ebony </A><BR>
<A
href="http://loko.pornwebring.net/free_ebony_porn_sex_mpeg_movies.html">Free
Ebony </A><BR>
<A
href="http://loko.pornwebring.net/free_ebony_porn_sex_mpg_videos.html">Free
Ebony </A><BR>
<A
href="http://loko.pornwebring.net/free_ebony_porn_sex_video_clips.html">Free
Ebony </A><BR>
<A
href="http://loko.pornwebring.net/free_ebony_porn_sex_vids_mpgs.html">Free Ebony
Porn </A><BR>
<A
href="http://loko.pornwebring.net/free_erotic_mpeg_and_mpegs.html">Free Erotic</A><BR>
<A
href="http://loko.pornwebring.net/index.html">Free Extreme </A><BR>
<A
href="http://loko.pornwebring.net/free_extreme_porn_sex_mpg_videos.html">Free
Extreme </A><BR>
<A
href="http://loko.pornwebring.net/free_extreme_porn_sex_vids_mpgs.html">Free
Extreme </A><BR>
<A
href="http://loko.pornwebring.net/free_fat_porn_sex_movie_mpegs.html">Free Fat
Porn </A><BR>
<A
href="http://loko.pornwebring.net/free_fat_porn_sex_mpeg_movies.html">Free Fat</A><BR>
<A
href="http://loko.pornwebring.net/free_fat_porn_sex_mpg_videos.html">Free Fat</A><BR>
<A
href="http://loko.pornwebring.net/free_fat_porn_sex_video_clips.html">Free Fat</A><BR>
<A
href="http://loko.pornwebring.net/free_fat_porn_sex_vids_mpgs.html">Free Fat</A><BR>
<A
href="http://loko.pornwebring.net/free_fetish_movie_mpegs.html">Free Fetish</A><BR>
<A
href="http://loko.pornwebring.net/free_fetish_mpeg_movies.html">Free Fetish </A><BR>
<A
href="http://loko.pornwebring.net/free_fetish_mpg_videos.html">Free Fetish </A><BR>
<A
href="http://loko.pornwebring.net/free_fetish_video_clips.html">Free Fetish
Video</A><BR>
<A
href="http://loko.pornwebring.net/free_fetish_vids_mpgs.html">Free Fetish </A><BR>
<A
href="http://loko.pornwebring.net/free_fuck_films_trailers_vids.html">Free Fuck</A><BR>
<A
href="http://loko.pornwebring.net/free_fuck_mpeg_movies.html">Free Fuck </A><BR>
<A
href="http://loko.pornwebring.net/free_fucking_and_sucking_movies.html">Free
Fucking </A><BR>
<A
href="http://loko.pornwebring.net/free_fucking_films_trailers_vids.html">Free
Fucking </A><BR>
<A
href="http://loko.pornwebring.net/free_fucking_movies_clips.html">Free Fucking</A><BR>
<A
href="http://loko.pornwebring.net/free_fucking_mpeg_movies.html">Free Fucking</A><BR>
<A
href="http://loko.pornwebring.net/free_fucking_mpg_mpgs.html">Free Fucking </A><BR>
<A
href="http://loko.pornwebring.net/free_fucking_sample_movies.html">Free Fucking</A><BR>
<A
href="http://loko.pornwebring.net/free_fucking_video_movie_clips.html">Free
Fucking </A><BR>
<A
href="http://loko.pornwebring.net/free_full_length_sex_porn_mpegs.html">Free
Full </A><BR>
<A
href="http://loko.pornwebring.net/free_gang_bang_movie_mpegs.html">Free Gang</A><BR>
<A
href="http://loko.pornwebring.net/free_gang_bang_mpeg_movies.html">Free Gang</A><BR>
<A
href="http://loko.pornwebring.net/free_gang_bang_mpg_videos.html">Free Gang </A><BR>
<A
href="http://loko.pornwebring.net/free_gang_bang_video_clips.html">Free Gang</A><BR>
<A
href="http://loko.pornwebring.net/free_gang_bang_vids_mpgs.html">Free Gang </A><BR>
<A
href="http://loko.pornwebring.net/free_gangbang_movie_mpegs.html">Free Gangbang</A><BR>
<A
href="http://loko.pornwebring.net/free_gangbang_mpeg_movies.html">Free Gangbang</A><BR>
<A
href="http://loko.pornwebring.net/free_gangbang_mpg_videos.html">Free Gangbang</A><BR>
<A
href="http://loko.pornwebring.net/free_gangbang_video_clips.html">Free Gangbang</A><BR>
<A
href="http://loko.pornwebring.net/free_gangbang_vids_mpgs.html">Free Gangbang</A><BR>
<A
href="http://loko.pornwebring.net/free_granny_porn_sex_movie_mpegs.html">Free
Granny </A><BR>
<A
href="http://loko.pornwebring.net/free_granny_porn_sex_mpeg_movies.html">Free
Granny </A><BR>
<A
href="http://loko.pornwebring.net/free_granny_porn_sex_mpg_videos.html">Free
Granny </A><BR>
<A
href="http://loko.pornwebring.net/free_granny_porn_sex_video_clips.html">Free
Granny Porn</A><BR>
<A
href="http://loko.pornwebring.net/free_granny_porn_sex_vids_mpgs.html">Free
Granny Porn </A><BR>
<A
href="http://loko.pornwebring.net/free_group_sex_movie_mpegs.html">Free Group</A><BR>
<A
href="http://loko.pornwebring.net/free_group_sex_mpeg_movies.html">Free Group</A><BR>
<A
href="http://loko.pornwebring.net/free_group_sex_mpg_videos.html">Free Group Sex</A><BR>
<A
href="http://loko.pornwebring.net/free_group_sex_video_clips.html">Free Group</A><BR>
<A
href="http://loko.pornwebring.net/free_group_sex_vids_mpgs.html">Free Group Sex</A><BR>
<A
href="http://loko.pornwebring.net/free_hand_job_movie_mpegs.html">Free Hand </A><BR>
<A
href="http://loko.pornwebring.net/free_hand_job_mpeg_movies.html">Free Hand </A><BR>
<A
href="http://loko.pornwebring.net/free_hand_job_mpg_videos.html">Free Hand </A><BR>
<A
href="http://loko.pornwebring.net/free_hand_job_video_clips.html">Free Hand Job</A><BR>
<A
href="http://loko.pornwebring.net/free_hand_job_vids_mpgs.html">Free Hand Job</A><BR>
<A
href="http://loko.pornwebring.net/free_handjob_movie_mpegs.html">Free Handjob</A><BR>
<A
href="http://loko.pornwebring.net/free_handjob_mpeg_movies.html">Free Handjob</A><BR>
<A
href="http://loko.pornwebring.net/free_handjob_mpg_videos.html">Free Handjob </A><BR>
<A
href="http://loko.pornwebring.net/free_handjob_video_clips.html">Free Handjob
Video </A><BR>
<A
href="http://loko.pornwebring.net/free_handjob_vids_mpgs.html">Free Handjob Vids</A><BR>
<A
href="http://loko.pornwebring.net/free_hard_fuck_movies_and_videos.html">Free
Hard</A><BR>
<A
href="http://loko.pornwebring.net/free_hardcore_movies_and_pics.html">Free
Hardcore </A><BR>
<A
href="http://loko.pornwebring.net/free_hardcore_movies_clips.html">Free Hardcore</A><BR>
<A
href="http://loko.pornwebring.net/free_hardcore_movies_download.html">Free
Hardcore </A><BR>
<A
href="http://loko.pornwebring.net/free_hardcore_movies_downloads.html">Free
Hardcore </A><BR>
<A
href="http://loko.pornwebring.net/free_hardcore_movies_galleries.html">Free
Hardcore </A><BR>
<A
href="http://loko.pornwebring.net/free_hardcore_movies_mpeg.html">Free Hardcore
Movies </A><BR>
<A
href="http://loko.pornwebring.net/free_hardcore_movies_mpegs.html">Free Hardcore</A><BR>
<A
href="http://loko.pornwebring.net/free_hardcore_movies_mpg.html">Free Hardcore
Movies </A><BR>
<A
href="http://loko.pornwebring.net/free_hardcore_movies_online.html">Free
Hardcore </A><BR>
<A
href="http://loko.pornwebring.net/free_home_porn_videos.html">Free Home Porn</A><BR>
<A
href="http://loko.pornwebring.net/free_home_sex_movie_mpegs.html">Free Home </A><BR>
<A
href="http://loko.pornwebring.net/free_home_sex_mpeg_movies.html">Free Home Sex</A><BR>
<A
href="http://loko.pornwebring.net/free_home_sex_mpg_videos.html">Free Home Sex</A><BR>
<A
href="http://loko.pornwebring.net/free_home_sex_porn_video.html">Free Home </A><BR>
<A
href="http://loko.pornwebring.net/free_home_sex_video_clips.html">Free Home </A><BR>
<A
href="http://loko.pornwebring.net/free_home_sex_vids_mpgs.html">Free Home Sex</A><BR>
<A
href="http://loko.pornwebring.net/free_homemade_porn_videos.html">Free Homemade</A><BR>
<A
href="http://loko.pornwebring.net/free_homemade_sex_videos.html">Free Homemade</A><BR>
<A
href="http://loko.pornwebring.net/free_hot_live_long_sexy_movies.html">Free Hot
Live </A><BR>
<A
href="http://loko.pornwebring.net/free_hot_sex_porn_mpegs.html">Free Hot Sex</A><BR>
<A
href="http://loko.pornwebring.net/free_hot_sexy_movies_and_videos.html">Free Hot
Sexy </A><BR>
<A
href="http://loko.pornwebring.net/free_huge_dildo_movie_mpegs.html">Free Huge
Dildo</A><BR>
<A
href="http://loko.pornwebring.net/free_huge_dildo_mpeg_movies.html">Free Huge</A><BR>
<A
href="http://loko.pornwebring.net/free_huge_dildo_mpg_videos.html">Free Huge</A><BR>
<A
href="http://loko.pornwebring.net/free_huge_dildo_video_clips.html">Free Huge</A><BR>
<A
href="http://loko.pornwebring.net/free_huge_dildo_vids_mpgs.html">Free Huge
Dildo</A><BR>
<A
href="http://loko.pornwebring.net/free_indian_porn_sex_movie_mpegs.html">Free
Indian </A><BR>
<A
href="http://loko.pornwebring.net/free_indian_porn_sex_mpeg_movies.html">Free
Indian </A><BR>
<A
href="http://loko.pornwebring.net/free_indian_porn_sex_mpg_videos.html">Free
Indian </A><BR>
<A
href="http://loko.pornwebring.net/free_indian_porn_sex_video_clips.html">Free
Indian </A><BR>
<A
href="http://loko.pornwebring.net/free_indian_porn_sex_vids_mpgs.html">Free
Indian </A><BR>
<A
href="http://loko.pornwebring.net/free_jenna_jameson_movie_mpegs.html">Free
Jenna </A><BR>
<A
href="http://loko.pornwebring.net/free_jenna_jameson_mpeg_movies.html">Free
Jenna </A><BR>
<A
href="http://loko.pornwebring.net/free_jenna_jameson_mpg_videos.html">Free Jenna</A><BR>
<A
href="http://loko.pornwebring.net/free_jenna_jameson_video_clips.html">Free
Jenna </A><BR>
<A
href="http://loko.pornwebring.net/free_jenna_jameson_vids_mpgs.html">Free Jenna
J</A><BR>
<A
href="http://loko.pornwebring.net/free_latina_porn_sex_movie_mpegs.html">Free
Latina </A><BR>
<A
href="http://loko.pornwebring.net/free_latina_porn_sex_mpeg_movies.html">Free
Latina Porn</A><BR>
<A
href="http://loko.pornwebring.net/free_latina_porn_sex_mpg_videos.html">Free
Latina Porn </A><BR>
<A
href="http://loko.pornwebring.net/free_latina_porn_sex_video_clips.html">Free
Latina </A><BR>
<A
href="http://loko.pornwebring.net/free_latina_porn_sex_vids_mpgs.html">Free
Latina </A><BR>
<A
href="http://loko.pornwebring.net/free_lesbian_porn_sex_mpg_videos.html">Free
Lesbian </A><BR>
<A
href="http://loko.pornwebring.net/free_lesbian_porn_sex_vids_mpgs.html">Free
Lesbian </A><BR>
<A
href="http://loko.pornwebring.net/free_live_adult_sex_video_chat.html">Free Live
Adult</A><BR>
<A
href="http://loko.pornwebring.net/free_live_nude_movies_and_videos.html">Free
Live </A><BR>
<A
href="http://loko.pornwebring.net/free_live_xxx_porn_video_chat.html">Free Live
Xxx </A><BR>
<A
href="http://loko.pornwebring.net/free_long_adult_sex_movie_clips.html">Free
Long </A><BR>
<A
href="http://loko.pornwebring.net/free_long_adult_xxx_mpgs.html">Free Long Adult</A><BR>
<A
href="http://loko.pornwebring.net/free_long_fuck_movies_and_videos.html">Free
Long </A><BR>
<A
href="http://loko.pornwebring.net/free_long_porn_sex_mpgs.html">Free Long Porn</A><BR>
<A
href="http://loko.pornwebring.net/free_long_porn_sex_vids.html">Free Long </A><BR>
<A
href="http://loko.pornwebring.net/free_long_sex_porn_mpeg.html">Free Long Sex</A><BR>
<A
href="http://loko.pornwebring.net/free_long_sex_porn_mpegs.html">Free Long Sex</A><BR>
<A
href="http://loko.pornwebring.net/free_long_xxx_porn_movie_clips.html">Free Long
Xxx</A><BR>
<A
href="http://loko.pornwebring.net/free_masturbation_movie_mpegs.html">Free
Masturbation </A><BR>
<A
href="http://loko.pornwebring.net/free_masturbation_mpeg_movies.html">Free
Masturbation </A><BR>
<A
href="http://loko.pornwebring.net/free_masturbation_mpg_videos.html">Free
Masturbation </A><BR>
<A
href="http://loko.pornwebring.net/free_masturbation_video_clips.html">Free
Masturbation </A><BR><A
href="http://loko.pornwebring.net/free_masturbation_vids_mpgs.html">Free
Masturbation </A>

Latest revision as of 15:07, 26 May 2025

Inkscape Developer’s Manual

Please first read the short introduction:


Getting started with development ---> https://inkscape.org/develop/getting-started/


Introduction

For those of you just joining us, or who have been with us but are just now getting the itch to work on Inkscape, I thought I’d give some tips for how to get started working in the codebase based on our own experiences.

One of the first things most people wonder is “What should I work on?”. As you may have already noticed, we generally don’t “assign” projects. We figure there’s plenty more work to do than people to do it, so you may as well work on something that you’re either interested in or that adds something of benefit to you; that’s extra motivation to get your own itches scratched.

If you’re really stumped though, we keep a detailed Roadmap in wiki that you’re welcome to browse through to look for ideas of things to work on. Tasks that do not have names beside them are open for anyone to take; if you want to take ownership of a task, just put your name beside it. Feel free to add or reword tasks as needed, although try not to load up the current milestone with tasks that aren’t critical for the release. Feel free to work on stuff that is several milestones down the road; there’s rarely any problem with getting stuff done sooner than planned.  ;-)

We have a process for gaining GitLab Developer access. The reason is that while it is important that we keep access to the codebase open, we don’t want to be crazy and leave it wide open to any random passer-by. The process is that we require that the person make two contributions (patches, documentation, web collateral, etc.) and then make a request to get account access.

In general you won’t need Developer role in order to start doing development, because you can create merge requests with only a regular account. Due to GitLab constraints however, you won't be able to run Windows or MacOS CI - but we can always do that for you.

When you first start hacking on Inkscape code, I wouldn’t recommend taking an objective of implementing a specific feature, because you will need some time to familiarize yourself with the codebase, and because you won’t really know what features are going to be straightforward to implement and which will be highly challenging. Of course, if you have the time and love adventures, this might be a fun way to go.

There are four approaches that I’ve seen people effectively use in getting into the codebase:

  • Write code documentation. Some people who don’t mind adding comments to code or writing docs find it useful to just go through code they’re interested in working on and writing up what it does. The codebase is in dire need of better docs, so this approach pays dividends well into the future.
  • Fix bugs. Tracing down the cause of reported bugs is an effective way to gain understanding of the codebase in small chunks. Many common bugs can be traced down and fixed in a matter of hours, and often will identify some bit of code in need of refactoring or extension. Note that some of our older bugs are in the system because they’re hard to fix, so you’ll want to work on the more recent ones.
  • Chip in on a group effort. Occasionally we identify a major refactoring effort (such as when we converted from C to C++), that we encourage lots of people to help on, in the philosophy that many hands make light work. This work tends to be pretty rote so is not hard for new folks to get involved with; it just takes time. We generally have one of these kinds of efforts per release. It usually isn’t glamorous work, but in aggregate moves the codebase forward in a major way.
  • Subsystem/module work. Some people want to get their hands in the details quick, so take the approach of developing new code separate from the codebase, to be integrated in later. This generally tends to take a larger time commitment than the other approaches, but can be an effective approach in some circumstances. We have a SVN module called experimental that you’re welcome to house your work until it’s ready for prime time.

Beyond that, you’re going to find the documentation for the Inkscape code is pretty scarce. We’ve worked on bits and pieces but unfortunately the vast majority of the code is undocumented. On the plus side, often you can implement the stuff you care about after learning only a limited portion of the codebase.

I think you’d find Inkscape an enjoyable Open Source project to work on. There’s a huge range of interesting and useful skills that can be learned from it, plus the developers are great guys to participate with. The project itself runs smoothly and puts a premium on keeping things friendly and low-stress, so heated arguments are rare. The users have been great to work with and very appreciative of even small new features and fixes. Plus, since Inkscape is so visual in nature, it’s very cool to see how your little changes make noticeable improvements to the app overall.

C++ Reference

  • The C++ FAQ (with answers). We strongly recommend that everyone read this site comprehensively. You should not need to bookmark it, it should already be at the top of your autocomplete list!

    https://isocpp.org/wiki/faq
    http://www.parashift.com/c++-faq-lite (previous version)

    It is actually more in-depth than the name FAQ suggests. Many experienced C++ programmers would benefit from it.

Please use const

Please be very aggressive in adding const to any code you write. It will help us understand code better and will prevent bugs from creeping in. It is very easy to remove const later on, but very hard to add it.

const can go on either side of a type. However once you get into references and pointers and such with C++, you generally read those from right-to-left. So it makes the code a little more legible if the const comes between the variable type and name.

int const foo;
// RTL reading gives "foo is a constant int".

And then:

int const & foo;
// RTL reading gives "foo is a reference to a constant int"
int const * foo;
// RTL reading gives "foo is a pointer to a constant int"

whereas:

int * const foo;
// RTL reading gives "foo is a constant pointer to an int"

Read also:

Strings

Please make sure any user-visible strings are localizable. This requires wrapping them with "_(" and ")", like so:

"Select object"

becomes

_("Select object")

In case the interpretation of the string may be ambiguous or may differ according to context, you can add a context prefix (that won't be displayed) in order to eliminate the ambiguity.

"Ambiguous string"

can then become

C_("Context", "Ambiguous string")

For more complex things, please check the gettext/localization documentation. See also http://library.gnome.org/devel/glib/unstable/glib-I18N.html

Implementing User Interface Changes

UI improvements are enjoyable to work on because they produce visible changes in how Inkscape works. These improvements are one of the most tangible ways to help improve how Inkscape works; thus, we strongly support new developers wishing to work in these areas.

It is also very important to us that Inkscape presents an organized, productive, and easily discoverable interface to users. Because of this it is important that new Inkscape UI developers work to ensure changes make Inkscape’s UI *more* consistent, *more* flexible, *more* cohesive, and so on. We don’t have firm rules about what can and cannot done, in order to ensure plenty of freedom for innovation. However, we can outline some general principles and guidelines that are important to keep in mind:

Don’t please the artist—BE the artist. Many times UI is designed and created by programmers who “understand what the user wants”. But in Inkscape we believe that the best requirements list is the list inside the user’s head. Requirements docs, usability studies, and so on are very indirect ways of transferring this gut-level understanding from user to programmer. We believe the best way to ensure this information is communicated clearly is for the user to BE the programmer. Or, alternatively, for the programmer to BECOME a user.

This is why we so strongly encourage users to get involved in coding, and why we so strongly encourage programmers to focus on the features that are most important to them personally. This is also why it is absolutely critical to pay close attention to what users report when using a new feature—often they can tip you off to alternate designs that achieve the same result in a better way.

Eliminate limitations. Commercial software is often developed to fulfill feature requirement lists from a marketing department. As such, it’s common to see the feature implemented to meet the requirement exactly, and no more. However, especially with artistic software, art is often found outside what seems reasonable. So when putting in a new feature, avoid the temptation to limit it to what you expect people to use it for—instead generalize it and open as many parameters as possible for tweaking, and let the artist decide what is reasonable. That’s their job.

As an example, a drawing program might want to support the features “feather” and “drop shadow”. Obviously, users need these important features. Commercial software may well implement these as distinct features, each with their own UI controls. However, these features are just special cases of the more general gaussian blur, and in Inkscape we implemented *that*. With that in place, artists can do feathering and blur, and a variety of other effects.

It is interesting to note that, as an open collaborative standard, SVG necessarily has the same goals as Inkscape: a minimum set of universal, well thought-out building blocks that can accommodate the widest possible range of graphics and applications. Thus, simply by following the SVG philosophy, Inkscape scores quite a few important points over commercial software. Live clones, patterns that can be contain any objects, layers that are essentially groups and can be easily converted to/from groups. These are all examples where the underlying universality of SVG directly translates into extremely valuable user features.

Implementing New SVG Features

The most important way to help Inkscape is to implement a new SVG feature in it. Our hope is to eventually support ALL SVG features, so if you can help check one off the list, it brings us close to the nirvana of 100% SVG compliance.  :-)

Generally we find that implementation of an SVG feature goes through three discrete stages:

  1. Find the appropriate tags and attributes in the SVG spec
  2. Implement support for rendering files with these tags
  3. Implement support for UI controls to edit the tags

Step 1 is mostly a research project. Start by reading the SVG spec so you can learn about the tag, the attributes that go with it, and so forth. It is good practice to set up a page in the Wiki for storing your notes as you do this process, so that in case you don’t make it to steps 2 and 3, then maybe someone else can benefit from your research.

Step 2 is the fun part. It helps to be comfortable with Inkscape internals for this part. Depending on the feature, it may require advanced knowledge of transformation, rendering, document management, and so on. For this part, just hand-edit an SVG file to put the tags in that you found in step #1, and keep plugging away at the code until Inkscape displays things as the specification dictates. It can help to compare your work with Batik, as we use that program as our reference implementation.

Step 3 is the most important stage. It is the point at which the feature becomes available for users. This step often requires knowledge of Gtk+, for creating dialogs, widgets, menus, etc. for allowing the user to edit the characteristics of the feature. Be sure to listen to feedback from other developers and users—especially if there are different opinions. It is hard to come up with UI that everyone can agree on, but it is worth the work to achieve this—the more critique your UI survives, the better loved the feature will be for future users.

Looking through Inkscape’s history, these stages are often done by different people. If you’re new to Inkscape, you may find working on stages 1 and 3 easiest, but there are many developers who can answer questions when you’re ready to dig into the internals, so don’t be afraid to ask questions!

Standards Compliance - Extension Namespaces

  • Only elements and attributes from our extension namespaces that do not affect rendering may be saved in SVG documents.
  • Generally, this means that extension elements and attributes should only be used to provide UI hints.
  • Extension elements and attributes should only be used where an existing facility provided by XML or SVG is not sufficient.

Directory Organization

Distribution / Packaging Files

Files related to generation of distribution packages should go under /packaging.

"Share" Collateral

A variety of items are installed in addition to the program itself, and placed into a share directory structured as follows:

   AUTHORS
   NEWS
   clipart/
   examples/
   extensions/
   fonts/
   gradients/
   icons/
   keyboards/
   markers/
   palettes/
   patterns/
   screens/
       about.svg
   templates/
   tutorials/
                                                                                     

In the codebase, all of these are placed in inkscape/share/. The idea is that in theory, this entire tree structure can be copied into place on the user’s machine.


See Also

Links

Software Quality