Difference between revisions of "Refactoring projects"

From Inkscape Wiki
Jump to navigation Jump to search
 
(51 intermediate revisions by 2 users not shown)
Line 7: Line 7:


See [[Refactoring plan]] for guidelines on how to refactor.
See [[Refactoring plan]] for guidelines on how to refactor.
'''''Attention: Some of these suggestions might not make sense''' or have better solutions. For example instead of moving some unused function to a different file, you should remove it. Apply the [[Refactoring plan#Principles|principles]] of adding unit tests and adding documentation (doxygen comments).''


= Little Projects =
= Little Projects =


* Derive SPStar from SPShape (not SPPolygon), update 'object/README'.
* <strike>Derive SPStar from SPShape (not SPPolygon), update 'object/README'.</strike>
* Move sp-item-transform.h functions into SPItem.
* <strike>Move sp-item-transform.h functions into SPItem.</strike> See: https://gitlab.com/inkscape/inkscape/-/merge_requests/2976
* Move sp-item-update-cns.h function into SPItem.
* <strike>Move sp-item-update-cns.h function into SPItem.</strike> [https://gitlab.com/inkscape/inkscape/-/commit/fc026649f3667eb840b995ef2f61e829036c20ba Removed]
* Move sp-item-rm-unsatisfied-cns.h function into SPItem.
* <strike>Move sp-item-rm-unsatisfied-cns.h function into SPItem.</strike> [https://gitlab.com/inkscape/inkscape/-/commit/fc026649f3667eb840b995ef2f61e829036c20ba Removed]
* Remove config.h code (or document why it is needed). DOCUMENT/Autogenerated
* <strike>Remove config.h code (or document why it is needed).</strike> DOCUMENT/Autogenerated
* <strike>Remove macros.h (or document why it is needed). DELETE</strike>
* <strike>Remove macros.h (or document why it is needed).</strike> [https://gitlab.com/inkscape/inkscape/-/commit/d6b062f355dd643012f4870727813965cd142978 Removed]
* <strike>Remove dependence on Glib::object in ResourceManager().</strike>
* <strike>Remove dependence on Glib::object in ResourceManager().</strike>
* implify ResourceManager... it does only one thing: fix broken links.  
* <strike>Simplify ResourceManager... it does only one thing: fix broken links.</strike> [https://gitlab.com/inkscape/inkscape/-/commit/9444a1174912fbe6e5c7380cf6500464b06a6e16 Replaced]
* In SPObject one can write:
* In SPObject one can write:
     getRepr()->setAttribute("x", "y");
     getRepr()->setAttribute("x", "y");
Line 25: Line 27:
* Rename helper-fns.h with a better discriptive name and move to util(?). MOVE/RENAME
* Rename helper-fns.h with a better discriptive name and move to util(?). MOVE/RENAME
* Remove dependence on object-set.h in files in src/livarot directory.
* Remove dependence on object-set.h in files in src/livarot directory.
* Evaluate all the functions in sys.h/.cpp. See if we can't use standard glib functions.
* Evaluate all the functions in io/sys.h/.cpp. See if we can't use standard glib functions.
* <strike>Remove helper/ucompose.hpp and it's use in src/event-log.cpp.</strike> [https://gitlab.com/inkscape/inkscape/-/commit/62b2e789da04bfddd3bc8f5f12b4b627623c78e6 Removed]
* Move functionality of src/line-geometry.h/.cpp into lib2geom or elsewhere.
* <strike>Remove deprecated GDK_POINTER_MOTION_HINT_MASK (motion events are compressed since Gdk 3.8).</strike> [https://gitlab.com/inkscape/inkscape/-/commit/28587f2d2fb0c83bd12c8364994332dea100143b Removed]
* Turn DrawAnchor into a proper class (or figure out how to get rid of it all together).
* Clean up constructors and signals in selcue.cpp.
* <strike>Remove need to write out and read back in a PNG file with createBitmapImage().</strike> [https://gitlab.com/inkscape/inkscape/-/commit/09f2b4a77169d172b81a30b8c638124aeac77e8a Done]
* Remove SPObject::setKeyValue() which only calls set(), refactor duplicate code in two versions of SPObject::readAttr().
* Move Behavior-Dashes into Behavior-Transforms in Preferences dialog.
* Move Pixbuf out of cairo_utils.h/.cpp into it's on files. Fix ''g_object_unref: assertion 'G_IS_OBJECT (object)' failed'' from destructor.
* Remove global variables from ui/tools/tool-base.cpp
* Removed desktop dependency from hiding/unhiding, locking/unlocking objects and layers.
* Remove widgets/widget-sizes.h Most of this should be replaced by CSS.
* Move spw_label and spw_hbox to stroke-style.cpp (only place they are used) and rename (or maybe don't use). Give better names to sp_search_xxxx and move to ui/?.
* Remove Desktop::setToolboxAdjustmentValue() (used mostly by spray tool, one use each in calligraphic and eraser tools).
* Convert ColorSlider to be derived from Gtk::DrawingArea rather than a GdkWindow.


= Medium Projects =
= Medium Projects =


* <strike>Remove god-awful SPWidget (only used for selection).</strike>
* <strike>Remove god-awful SPWidget (only used for selection).</strike> Yeah!!! [https://gitlab.com/inkscape/inkscape/-/commit/013141efcf5a6146b2f1f0a889c28c456a45aefe Removed]
* Move most files in 'src' to subdirectories, add ''README'' for each directory with description of contents. (Tav)
* Move most files in 'src' to subdirectories, add ''README'' for each directory with description of contents. (Tav)
* In toolbars, use ''dataKludge'' or ''data'' or ''tbl'' or ''holder'' ... but not all four! (Side benefit of C++ify toolbars.) (Alex)  
* <strike>In toolbars, use ''dataKludge'' or ''data'' or ''tbl'' or ''holder'' ... but not all four!</strike> (Side benefit of C++ify toolbars.) (Alex)
* Remove InkAction class. Normal GTK button actions should be able to handle SVG icons... no need for derived class. (Alex)
* <strike>Remove InkAction class. Normal GTK button actions should be able to handle SVG icons... no need for derived class.</strike> (Alex) Done
* Make data members private in SPI::Base and derived class. Add set() function. Default to SP_STYLE_UNSET in constructor, setting to SP_STYLE_SRC_PROP in set(). (Tav)
* Make data members private in SPI::Base and derived class. Add set() function. Default to SP_STYLE_UNSET in constructor, setting to SP_STYLE_SRC_PROP in set(). (Tav)
* Sort out URL/file handling. See [[URIs and Filenames]].
* Sort out URL/file handling. See [[URIs and Filenames]].
* Find all the ways we output error/status messages to users (this does not include developer focused error messages that use std::cerr). Pick one and use it everywhere. The goal should be to be able to build Inkscape without a GUI but if the GUI is used, the user will see the messages on the desktop.
* Look at Inkscape::URIReference and derived classes to see if they can't be simplified/templated/etc.
* <strike>Make sp_repr_set_svg_double etc. member functions of Inkscape::XML::Node. [sp_repr_set_svg_double() -> setAttributeSvgDouble()].</strike>
* Redo Save/Export separating Lossless vs Lossy formats. Create one path for all Exports that share processing so that all options (that make sense) are available to all output formats.
* Refactor toolbase and derived classes. The conversion from C to C++ seems to be only partially done.
* Move the functionality found in SPDesktop to SPCanvas or InkscapeWindow, then kill it as well as View!
* Divide display directory into:
** canvas: GUI related routines, move to ui/
** drawing: Generic rendering routines
* Clean-up Key events. Check to see if get_latin_keyval() can be moved to InkscapeWindow::on_key_press() and removed everywhere else. (Must make sure it doesn't interfere with typing text.)
* Get rid of all Glib::wrap's.
* Git rid of all gobj()'s.
* <strike>Make liblcms2 a hard dependency and git rid of 92 #ifdefs.</strike> [https://gitlab.com/inkscape/inkscape/-/commit/3b4c7c84baecf0f7f75d1dc2db58a0b4555696f5 Done]
* Merge old knot code with "new" control-point code.
* Figure out why the cursor SVG file is reloaded when a drawing file is reverted and stop it from happening.
*Remove GUI dependencies in SPObjects (SPNamedView and Grid for example).


= Large Projects =
= Large Projects =


* C++ify toolbars. (Alex)
* <strike>C++ify toolbars.</strike> (Alex) Multiple commits.
* Convert all GtkActions's and Gtk::Action's to Gio::Action's.  See [[GtkAction migration]] (Alex)
* <strike>Convert all GtkActions's and Gtk::Action's to Gio::Action's.</strike> See [[GtkAction migration]] (Alex) Done
* Add a one or two line description of what each file contains at the top of the file if it is missing. (Everyone)
* Add a one or two line description of what each file contains at the top of the file if it is missing. (Everyone)
* Remove livarot, moving any needed functionality into lib2geom or other files.
* Remove livarot, moving any needed functionality into lib2geom or other files.
* Remove desktop dependence on reading and setting style on a document. In particular remove sp_desktop_set_style().
* <strike>C++ify SPCanvasItem and all its derived class.</strike> [https://gitlab.com/inkscape/inkscape/-/commit/17b002864216f3f5db4a7ccf10fffb154a99fe7b Done]


= Super Large Projects =
= Super Large Projects =


* Convert verbs to Gio::Action's.
* <strike>Convert verbs to Gio::Action's.<strike> Done
* Convert GUI to XML files. (Long term.)
* Convert GUI to XML files. (Long term.)
* <strike>Invert 'y' coordinate system to match SVG. (Look at previous patch... link?)</strike>
* <strike>Invert 'y' coordinate system to match SVG. (Look at previous patch... link?)</strike>

Latest revision as of 07:16, 15 April 2023


A List of Refactoring Projects

See Development Project Ideas and Funded Project Ideas for more possible projects.

See Refactoring plan for guidelines on how to refactor.

Attention: Some of these suggestions might not make sense or have better solutions. For example instead of moving some unused function to a different file, you should remove it. Apply the principles of adding unit tests and adding documentation (doxygen comments).

Little Projects

  • Derive SPStar from SPShape (not SPPolygon), update 'object/README'.
  • Move sp-item-transform.h functions into SPItem. See: https://gitlab.com/inkscape/inkscape/-/merge_requests/2976
  • Move sp-item-update-cns.h function into SPItem. Removed
  • Move sp-item-rm-unsatisfied-cns.h function into SPItem. Removed
  • Remove config.h code (or document why it is needed). DOCUMENT/Autogenerated
  • Remove macros.h (or document why it is needed). Removed
  • Remove dependence on Glib::object in ResourceManager().
  • Simplify ResourceManager... it does only one thing: fix broken links. Replaced
  • In SPObject one can write:
   getRepr()->setAttribute("x", "y");

or

   setKeyValue( sp_attribute_lookup("x"), "y");

These are redundant and neither is really convenient. SPObject perhaps should have it's own setAttribute() function.

  • Rename helper-fns.h with a better discriptive name and move to util(?). MOVE/RENAME
  • Remove dependence on object-set.h in files in src/livarot directory.
  • Evaluate all the functions in io/sys.h/.cpp. See if we can't use standard glib functions.
  • Remove helper/ucompose.hpp and it's use in src/event-log.cpp. Removed
  • Move functionality of src/line-geometry.h/.cpp into lib2geom or elsewhere.
  • Remove deprecated GDK_POINTER_MOTION_HINT_MASK (motion events are compressed since Gdk 3.8). Removed
  • Turn DrawAnchor into a proper class (or figure out how to get rid of it all together).
  • Clean up constructors and signals in selcue.cpp.
  • Remove need to write out and read back in a PNG file with createBitmapImage(). Done
  • Remove SPObject::setKeyValue() which only calls set(), refactor duplicate code in two versions of SPObject::readAttr().
  • Move Behavior-Dashes into Behavior-Transforms in Preferences dialog.
  • Move Pixbuf out of cairo_utils.h/.cpp into it's on files. Fix g_object_unref: assertion 'G_IS_OBJECT (object)' failed from destructor.
  • Remove global variables from ui/tools/tool-base.cpp
  • Removed desktop dependency from hiding/unhiding, locking/unlocking objects and layers.
  • Remove widgets/widget-sizes.h Most of this should be replaced by CSS.
  • Move spw_label and spw_hbox to stroke-style.cpp (only place they are used) and rename (or maybe don't use). Give better names to sp_search_xxxx and move to ui/?.
  • Remove Desktop::setToolboxAdjustmentValue() (used mostly by spray tool, one use each in calligraphic and eraser tools).
  • Convert ColorSlider to be derived from Gtk::DrawingArea rather than a GdkWindow.

Medium Projects

  • Remove god-awful SPWidget (only used for selection). Yeah!!! Removed
  • Move most files in 'src' to subdirectories, add README for each directory with description of contents. (Tav)
  • In toolbars, use dataKludge or data or tbl or holder ... but not all four! (Side benefit of C++ify toolbars.) (Alex)
  • Remove InkAction class. Normal GTK button actions should be able to handle SVG icons... no need for derived class. (Alex) Done
  • Make data members private in SPI::Base and derived class. Add set() function. Default to SP_STYLE_UNSET in constructor, setting to SP_STYLE_SRC_PROP in set(). (Tav)
  • Sort out URL/file handling. See URIs and Filenames.
  • Find all the ways we output error/status messages to users (this does not include developer focused error messages that use std::cerr). Pick one and use it everywhere. The goal should be to be able to build Inkscape without a GUI but if the GUI is used, the user will see the messages on the desktop.
  • Look at Inkscape::URIReference and derived classes to see if they can't be simplified/templated/etc.
  • Make sp_repr_set_svg_double etc. member functions of Inkscape::XML::Node. [sp_repr_set_svg_double() -> setAttributeSvgDouble()].
  • Redo Save/Export separating Lossless vs Lossy formats. Create one path for all Exports that share processing so that all options (that make sense) are available to all output formats.
  • Refactor toolbase and derived classes. The conversion from C to C++ seems to be only partially done.
  • Move the functionality found in SPDesktop to SPCanvas or InkscapeWindow, then kill it as well as View!
  • Divide display directory into:
    • canvas: GUI related routines, move to ui/
    • drawing: Generic rendering routines
  • Clean-up Key events. Check to see if get_latin_keyval() can be moved to InkscapeWindow::on_key_press() and removed everywhere else. (Must make sure it doesn't interfere with typing text.)
  • Get rid of all Glib::wrap's.
  • Git rid of all gobj()'s.
  • Make liblcms2 a hard dependency and git rid of 92 #ifdefs. Done
  • Merge old knot code with "new" control-point code.
  • Figure out why the cursor SVG file is reloaded when a drawing file is reverted and stop it from happening.
  • Remove GUI dependencies in SPObjects (SPNamedView and Grid for example).

Large Projects

  • C++ify toolbars. (Alex) Multiple commits.
  • Convert all GtkActions's and Gtk::Action's to Gio::Action's. See GtkAction migration (Alex) Done
  • Add a one or two line description of what each file contains at the top of the file if it is missing. (Everyone)
  • Remove livarot, moving any needed functionality into lib2geom or other files.
  • Remove desktop dependence on reading and setting style on a document. In particular remove sp_desktop_set_style().
  • C++ify SPCanvasItem and all its derived class. Done

Super Large Projects

  • Convert verbs to Gio::Action's. Done
  • Convert GUI to XML files. (Long term.)
  • Invert 'y' coordinate system to match SVG. (Look at previous patch... link?)