The Library
Help/Info
Current Release
Sourceforge











Last Modified:
Apr 28, 2008

Release notes

Release 17.3

Release date: Apr 28, 2008
Major Changes in this Release:
New Stuff:
   - Added the vector_to_matrix() function.
   - Added a cholesky_decomposition() function.
   - Added the toggle_button GUI widget
      - Added a default toggle button style as well as check box and 
        radio button styles.
   - Added a single click event to list_box
   - Added a save_file_box() and open_existing_file_box() function.  

Non-Backwards Compatible Changes:
   - Changed the check_box and radio_button widgets to be specializations of 
     the new toggle_button object.  This is a nearly backwards compatible 
     change except that the events registered to check_box and radio_button 
     clicks must now take the form void event(toggle_button&) or 
     void event(void) instead of the previous void event(check_box&) and 
     void event(radio_button&).
   - Removed the is_mouse_over bool from the button_style::draw_button()
     function.

Bug fixes:
   - Fixed a compiler error in mingw.
   - Changed the preprocessor checks for the wchar_t overload of 
     is_built_in_scalar_type so that it works properly with visual studio.

Other:
   - Added a Bayesian Network GUI that allows you to create a network
     and serialize it to disk.

Release 17.2

Release date: Apr 21, 2008
Major Changes in this Release:
New Stuff:
   - GUI Related
      - Added the scrollable_region widget
      - Added the text_grid widget
      - Added an event to the text_field so you can tell when the
        user modifies it.
      - Added the fit_to_contents() function to the tabbed_display 
        widget.
   - Bayesian Network Related
      - Added the node_first_parent_assignment(), node_next_parent_assignment(), 
        and node_cpt_filled_out() functions.

Non-Backwards Compatible Changes:
   - Reverted the change in 17.0 where I made drawable::lastx and 
     drawable::lasty not match the current location of the mouse inside
     the on_mouse_move() event.  I changed this back to how it was before,
     so now lastx and lasty represent the most current record of where
     the mouse is in *all* events.
   - Changed the functions that control text color in the label and text_field
     widgets to use rgb_pixel objects.  Also added a function to set the
     background color of a text_field.

Bug fixes:
   - Fixed a bug in the bayesian_network_join_tree object that caused it to
     compute incorrect results for some networks.
   - GUI Related
      - Fixed a minor bug in the cursor drawing of the text_field
        gui widget.
      - Fixed a bug in the compute_cursor_rect() function.  It would return an
        incorrectly positioned rectangle for 0 length strings.
      - Changed the way wchar_t is handled in the serialize.h file.  Now
        everything should compile correctly in visual studio regardless of how
        you set the /Zc:wchar_t compiler option.
      - Fixed a bug in the menu_bar widget.  One of the members wasn't being 
        initialized when it needed to be.
      - Fixed a bug in the tabbed_display where it didn't redraw itself
        correctly after it was moved by set_pos()

Other:
   - Changed the xml parser so that it counts line numbers
     from the start of the input stream instead of from the
     root tag.
   - Changed the xml parser so that you will only get the fatal_error
     event once if it occurs. 

Release 17.1

Release date: Apr 13, 2008
Major Changes in this Release:
New Stuff:
   - Added a zoomable_region widget
   - Added a directed_graph_drawer widget

Non-Backwards Compatible Changes:
   - Changed the first_pixel argument of the draw_string() function 
     to be a rectangle like all the other draw functions now use.

Bug fixes:
   - Fixed a bug in the tooltip widget that was triggered when calling
     its member functions without calling set_tooltip_text().  This also 
     fixed a bug in the button object that triggered when calling some button
     functions that referenced the tooltip widget.
   - Fixed a problem in the draw_circle and draw_solid_circle functions.
     They didn't draw themselves quite correctly in all cases.

Other:

Release 17.0

Release date: Apr 07, 2008
Major Changes in this Release:
New Stuff:
  - Added a png_loader object
  - GUI related
    - Added a popup_menu widget
    - Added a menu_bar widget
    - Added a tooltip widget
    - Added a user selectable style to the gui button.
    - Added the draw_rounded_rectangle() and fill_gradient_rounded() functions
    - Added the mouse_over_event object to the base_widgets and made the 
      button_action inherit from it.
    - Added the drawable::next_free_user_event_number() function 
  - matrix and geometry:
    - Added a size() function to matrix_exp and matrix_ref objects.
    - Added a class that represents 2D points 
    - Added the following matrix functions:
      - squared(), cubed(), get_rect(), a subm() function that takes 
        rectangles, and normlize() 
    - Added the following rectangle functions:
      - area(), centered_rect(), translate_rect(), move_rect(), resize_rect(),
        resize_rect_height(), resize_rect_width(), and nearest_point() 

Non-Backwards Compatible Changes:
  - Renamed atom() to array_to_matrix()
  - Moved the rectangle object from the gui_core into a new geometry folder  
    (only matters if you were directly including the rectangle file)
  - Moved the vector object into the geometry folder.  Also removed the kernel_1a
    stuff.  So there is now only one possible vector implementation.
  - Changed the default position for a rectangle to (0,0) instead of (1,1)
  - Added edge data to the directed_graph.  This breaks backwards compatibility 
    with the previous serialization format for directed_graphs.
  - GUI related:
    - Changed the base_window::on_keydown event signature so that it now
      reports more keyboard modifier keys (e.g. alt)
    - Made the functions for drawing on canvas objects take points and pixels 
      instead of just a bunch of integers.  Also changed the order of the
      arguments so that the canvas comes first, followed by the location
      to draw on, then what to draw.
    - Moved the canvas drawing functions into the gui_widgets/canvas_drawing.h 
      file.
    - Modified the drawable_window so that the drawable::lastx and drawable::lasty
      fields are updated after calls to on_mouse_move.  This way the x and y that
      go into the on_mouse_move actually tell you something.

Bug fixes:
  - Fixed a bug in the floating point serialization code.  It 
    didn't handle NaN or infinities correctly.
  - Fixed a bug in the win32 version of the gui_core component.  It was 
    possible that calling set_size(), set_pos(), or set_title() could cause 
    the program to deadlock.
  - Made the load_bmp() function more robust in the face of weirdly 
    written BMP files.
  - Modified the draw_circle() and draw_solid_circle() functions so that they
    only touch each canvas pixel once.  This avoids messing up alpha blending
    if an rgb_alpha_pixel is used.  

Other:
  - Removed the old win32 only gui code in the dlib/gui folder. 
  - Changed the default GUI font to a nicer Sans Serif font 

Release 16.5

Release date: Mar 04, 2008
Major Changes in this Release:
New Stuff:
   - Added another constructor to the thread_function object.  
     Now it can take proper function objects as well as normal function
     pointers.
   - Added the probabilistic_decision_function object and svm_nu_train_prob() 
     function.

Non-Backwards Compatible Changes:
   - Changed the svm train functions so that the cache_size argument
     now measures the max number of megabytes of memory to use rather
     than number of kernel matrix rows to cache.  It's default
     value is now 200MB.
   - changed the type typedef in the SVM kernel function objects to
     be named sample_type instead of type. 

Bug fixes:
   - Fixed a bug in the trim, rtrim, and ltrim functions.  They
     didn't return empty strings when the input string contained all
     trim characters.
   - Fixed a bug in the decision_function's copy constructor

Other:
   - Added an optimization to the working set selection for the svm training code.
     Now the algorithm will prefer to select indices that are in the kernel 
     matrix cache when possible.
   - Fixed a problem with the chm documentation file where many of the links
     didn't work.
   - Made the support vector functions capable of operating with floats, doubles,
     and long doubles instead of just the double type.

Release 16.4

Release date: Feb 22, 2008
Major Changes in this Release:
New Stuff:
   - Added aversion of the draw_line() function for images.
   - Added the atom(), rowm(), colm(), and subm() matrix functions.
   - Added some push/pop_back() functions to the array object that are similar
     to the ones in the std::vector.
   - Added the std_vector_c class that wraps std::vector and checks its 
     function's preconditions.
   - Added the polynomial_kernel object for use with the svm algorithm.

Non-Backwards Compatible Changes:
   - Changed the svm_nu_cross_validate() function to return a vector
     of both the +1 and -1 cross validation accuracies.

Bug fixes:
   - Fixed a bug in the list_box that caused it to not hide itself properly
     when told to do so.
   - Fixed canvas::fill() gui function so that it should work right
     on 64 bit platforms.

Other:

Release 16.3

Release date: Feb 12, 2008
Major Changes in this Release:
New Stuff:
   - Added memory manager support to the matrix object.

Non-Backwards Compatible Changes:
   - Made the assign_pixel() function saturate grayscale values bigger
     than the target pixel type can handle.  Previously it would just 
     truncate the numbers.
   - Removed rand_kernel_1 and rand_kernel_2 because they gave very 
     inferior results compared to rand_kernel_3.  I then renamed
     rand_kernel_3 to rand_kernel_1.
   - Renamed rand::get_random_number() to get_random_8bit_number() and also 
     added a get_random_16bit_number() and get_random_32bit_number()
   - Added a checksum to compress_stream_kernel_1 and kernel_2.  This 
     breaks backwards compatibility with the previous versions.  That is,
     the new implementations will complain that decompression fails if 
     you give them data compressed with the old non-checksum version of
     the compression routines. 
   - Removed the width() and height() functions from the array2d object.  
     Now only the equivalent nc() and nr() member functions remain.
   - Changed array2d::set_size(width,height) to set_size(num_rows, num_cols).  
     That is, I switched the order of the two arguments to this function.
     The reason for doing this is to make it have the same form as the
     set_size() member of the matrix object.  This way the usage of the
     set_size() member for these two very similar data structures is 
     the same.  Hopefully this will reduce confusion rather than 
     make things worse.

Bug fixes:
   - Fixed a bug in the image_widget.  It didn't repaint the screen
     all the way if you gave it a smaller image to display.
   - Fixed a bug in the cat() function that caused the state of the queue
     to be broken if you called cat with an empty queue.
   - Made the queue_sort_1 use a better sorting algorithm.  In particular, it 
     will not sort slowly for nearly sorted data.
   - Fixed a bug in the queue_kernel_2 object that caused it to not work 
     correctly with the non-default memory managers.

Other:
   - Added example code for the member_function_pointer as well as the matrix 
     object.
   - Added some more regression tests and made some of the longer running 
     ones execute a lot quicker.
   - Made the unit test suite easier to use.  Now tests just throw an exception 
     to indicate an error rather than returning an error code.
   - Added an example program for the multi-layer perceptron neural network.

Release 16.2

Release date: Jan 25, 2008
Major Changes in this Release:
New Stuff:
   - Added the is_signed_type and is_unsigned_type templates
   - Image Processing stuff
      - Added the assign_all_pixels() function
      - Added the assign_border_pixels() function
      - Added the assign_pixel_intensity() function
      - Added the auto_threshold_image() function
      - Added the binary_union() function
      - Added the edge_orientation() function
      - Added the get_histogram() function
      - Added the get_pixel_intensity() function
      - Added the hysteresis_threshold() function
      - Added the sobel_edge_detector() function
      - Added the suppress_non_maximum_edges() function
      - Added the zero_border_pixels() function
      - Changed the pixel_traits structure so that it can support 8, 16, and 32 
        bit grayscale pixels. 

Non-Backwards Compatible Changes:
   - Added more fields to the pixel_traits template so if you had defined your 
     own pixel types you will need to update them.

Bug fixes:
   - Fixed some compiler errors in Visual Studio 2008

Other:
   - Generally tried to clean up the documentation and code in this release


Release 16.1

Release date: Jan 1, 2008
Major Changes in this Release:
New Stuff:
   - Added the randomize_samples() function
   - Added the set_main_font() and main_font() functions to the drawable object.
     So now the drawable widgets can use a user provided font.  

Non-Backwards Compatible Changes:
   - Made the named_rectangle object a little easier to use.  It now won't
     let you size it so small that it doesn't display its entire name.

Bug fixes:
   - Fixed a bug in the svm_nu_train() function that caused a crash with 
     some inputs.
   - Fixed a compile time error that occurred when compiling the bayesian
     network code in Mac OS X.
   - Fixed a bug in the compute_cursor_pos() function where it would 
     return the incorrect value.
     
Other:
   - Added an example showing how to use the svm functions.


Release 16.0

Release date: Dec 10, 2007
Major Changes in this Release:
New Stuff:
   - Added the left_substr() and right_substr() functions
   - Added the zero_extend_cast() function
   - Added the unsigned_type template
   - Added the uint8 typedef
   - Bayesian Network related
      - Added the assignment object
      - Added the bayes_node object
      - Added the joint_probability_table object
      - Added the conditional_probability_table object
      - Added the bayesian_network_gibbs_sampler object
        This object implements an algorithm that performs approximate inference
        in a Bayesian Network.
      - Added the bayesian_network_join_tree object
        This object implements an algorithm that performs exact inference
        in a Bayesian Network.
   - Set related
      - Added the set_intersection_size() function
      - Added the set_union() function
      - Added the set_intersection() function
      - Added the set_difference() function
   - Graph related
      - Added the graph object
      - Added the is_graph template
      - Added the is_directed_graph template
      - Added the create_moral_graph() function
      - Added the triangulate_graph_and_find_cliques() function
      - Added the graph_contains_length_one_cycle() function
      - Added the find_connected_nodes() function
      - Added the graph_is_connected() function
      - Added the is_clique() function
      - Added the is_maximal_clique() function
      - Added the copy_graph_structure() function
      - Added the create_join_tree() function
      - Added the is_join_tree() function
      - Added the edge() function
   - GUI related
      - Added the base_window::get_display_size() function
      - Added message_box_blocking()
      - Added the bdf_font object which is capable of loading BDF font files into
        the font object used by the gui_widgets
   - Better Unicode support
      - Added the basic_utf8_ifstream: An input stream that can read UTF-8 files
      - Added serialization support for wchar_t and std::wstring
      - Added the is_combining_char() function
      - Added the convert_utf8_to_utf32() function
      - Modified most of the string manipulation functions in dlib/string.h
        to work with any kind of character type
      - The gui widgets' font object now works with Unicode text (i.e. wchar_t 
        and unichar strings) as well as with normal char data.

Non-Backwards Compatible Changes:
   - The dlib/all_console.cpp and dlib/all_gui.cpp files have been deprecated
     in favor of a new file.  Now to build with dlib you simply add 
     dlib/all/source.cpp to your project regardless of what type of project
     you are building.
   - The GUI program entry point, winmain(), has been removed.  You can now use 
     the normal main() entry point or some other non-standard entry point 
     provided by your compiler.
   - Renamed directed_graph::node::item to directed_graph::node::data

Bug fixes:
   - Fixed some build issues in gcc 4.2 involving some uses of the std_allocator
   - Fixed some build issues in Visual Studio involving the dir_nav component
     and buidling with NO_MAKEFILE #defined.
   - Moved the #define that disables the old WinSock API into the sockets cpp 
     file.  This should avoid conflicts with people who are using the old WinSock
     API.
   - Changed the tuple template slightly to avoid a bug in Visual Studio 7.1 
     that caused a compile time error in some instances.
     
Other:




Old Release Notes