From 70385593387e1f47549e050c3aaea047a96bc7a2 Mon Sep 17 00:00:00 2001 From: Duncan Gibson Date: Sat, 11 Jul 2020 01:03:09 +0200 Subject: [PATCH] add resize documentation as per STR3433 add resize chapter to documentation, plus images, based on Article #415: How does resizing work? https://www.fltk.org/articles.php?L415 see also https://www.fltk.org/str.php?L3433 --- documentation/Doxyfile.in | 1 + documentation/Makefile | 1 + documentation/src/common.dox | 20 +-- documentation/src/drawing.dox | 6 +- documentation/src/editor.dox | 10 +- documentation/src/examples.dox | 10 +- documentation/src/faq.dox | 21 +++ documentation/src/fluid.dox | 30 ++-- documentation/src/index.dox | 2 + documentation/src/resize-example1.png | Bin 0 -> 9422 bytes documentation/src/resize-example2.png | Bin 0 -> 9355 bytes documentation/src/resize-example3a.png | Bin 0 -> 7544 bytes documentation/src/resize-example3b.png | Bin 0 -> 6439 bytes documentation/src/resize-example3c.png | Bin 0 -> 6534 bytes documentation/src/resize-example4a.png | Bin 0 -> 3034 bytes documentation/src/resize-example4b.png | Bin 0 -> 2921 bytes documentation/src/resize.dox | 216 +++++++++++++++++++++++++ 17 files changed, 280 insertions(+), 37 deletions(-) create mode 100644 documentation/src/resize-example1.png create mode 100644 documentation/src/resize-example2.png create mode 100644 documentation/src/resize-example3a.png create mode 100644 documentation/src/resize-example3b.png create mode 100644 documentation/src/resize-example3c.png create mode 100644 documentation/src/resize-example4a.png create mode 100644 documentation/src/resize-example4b.png create mode 100644 documentation/src/resize.dox diff --git a/documentation/Doxyfile.in b/documentation/Doxyfile.in index f619a7fa1..893f3bd28 100644 --- a/documentation/Doxyfile.in +++ b/documentation/Doxyfile.in @@ -557,6 +557,7 @@ INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/preface.dox INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/intro.dox INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/basics.dox INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/common.dox +INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/resize.dox INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/editor.dox INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/drawing.dox INPUT += @CMAKE_CURRENT_SOURCE_DIR@/src/events.dox diff --git a/documentation/Makefile b/documentation/Makefile index 0c03b8c56..a1c370799 100644 --- a/documentation/Makefile +++ b/documentation/Makefile @@ -29,6 +29,7 @@ HTMLFILES = \ $(SRC_DOCDIR)/intro.dox \ $(SRC_DOCDIR)/basics.dox \ $(SRC_DOCDIR)/common.dox \ + $(SRC_DOCDIR)/resize.dox \ $(SRC_DOCDIR)/editor.dox \ $(SRC_DOCDIR)/drawing.dox \ $(SRC_DOCDIR)/events.dox \ diff --git a/documentation/src/common.dox b/documentation/src/common.dox index 2c586a352..4f7a59011 100644 --- a/documentation/src/common.dox +++ b/documentation/src/common.dox @@ -23,7 +23,7 @@ FLTK provides many types of buttons: \li Fl_Round_Button - A button with a radio circle. -\image html buttons.png "Figure 3-1: FLTK Button Widgets" +\image html buttons.png "Figure 5.1: FLTK Button Widgets" \image latex buttons.png "FLTK Button Widgets" width=10cm All of these buttons just need the corresponding @@ -110,7 +110,7 @@ strings. FLTK provides the following valuators: \li Fl_Value_Slider - A slider that shows the current value. -\image html valuators.png "Figure 3-2: FLTK valuator widgets" +\image html valuators.png "Figure 5.2: FLTK valuator widgets" \image latex valuators.png "FLTK valuator widgets" width=10cm The \p value() method gets and sets the current value @@ -249,15 +249,15 @@ the nearest entry in the colormap. The type Fl_Boxtype stored and returned in Fl_Widget::box() is an enumeration defined in Enumerations.H. -Figure 3-3 shows the standard box types included with FLTK. +Figure 5.3 shows the standard box types included with FLTK. -\image html boxtypes.png "Figure 3-3: FLTK box types" +\image html boxtypes.png "Figure 5.3: FLTK box types" \image latex boxtypes.png "FLTK box types" width=12cm \p FL_NO_BOX means nothing is drawn at all, so whatever is already on the screen remains. The FL_..._FRAME types only draw their edges, leaving the interior unchanged. The blue color in -Figure 3-3 is the area that is not drawn by the frame types. +Figure 5.3 is the area that is not drawn by the frame types. \subsection common_custom_boxtypes Making Your Own Boxtypes @@ -351,9 +351,9 @@ labeling of widgets. The \p label() method sets the string that is displayed for the label. Symbols can be included with the label string by escaping them using the "@" symbol - "@@" displays a single at -sign. Figure 3-4 shows the available symbols. +sign. Figure 5.4 shows the available symbols. -\image html symbols.png "Figure 3-4: FLTK label symbols" +\image html symbols.png "Figure 5.4: FLTK label symbols" \image latex symbols.png "FLTK label symbols" width=10cm @@ -379,7 +379,7 @@ Symbols and text can be combined in a label, however the symbol must be at the beginning and/or at the end of the text. If the text spans multiple lines, the symbol or symbols will scale up to match the height of all the lines. -\image html symbol-examples.png "Figure 3-5: FLTK symbols and text" +\image html symbol-examples.png "Figure 5.5: FLTK symbols and text" \image latex symbol-examples.png "FLTK symbols and text" width=10cm @@ -640,8 +640,8 @@ combined with any modifiers like \p Shift , \p Alt , and \p Control. [Index] - - Designing a Simple Text Editor + + How does resizing work? [Next] diff --git a/documentation/src/drawing.dox b/documentation/src/drawing.dox index 4e12affb2..3ec17d6c0 100644 --- a/documentation/src/drawing.dox +++ b/documentation/src/drawing.dox @@ -251,7 +251,7 @@ standard colors and color cube for the first 256 colors. All of these are named with symbols in \ref enumerations "". Example: -\image html fltk-colormap.png "FLTK default colormap (Fl_Color 0x00 - 0xff)" +\image html fltk-colormap.png "Figure 8.1: FLTK default colormap (Fl_Color 0x00 - 0xff)" \image latex fltk-colormap.png "FLTK default colormap (Fl_Color 0x00 - 0xff)" width=6cm Color values greater than 255 are treated as 24-bit RGB @@ -511,7 +511,7 @@ box. The two angles are measured in degrees counter-clockwise from must be greater or equal to \p a1. \par -\image html fl_pie_arc_diagram.png "fl_pie() and fl_arc()" +\image html fl_pie_arc_diagram.png "Figure 8.1: fl_pie() and fl_arc()" \image latex fl_pie_arc_diagram.png "fl_pie() and fl_arc()" width=6cm \par @@ -654,7 +654,7 @@ If \p end is less than \p start then it draws the arc in a clockwise direction. \par -\image html fl_arc_xyr_diagram.png "fl_arc(x,y,r,a1,a2)" +\image html fl_arc_xyr_diagram.png "Figure 8.3: fl_arc(x,y,r,a1,a2)" \image latex fl_arc_xyr_diagram.png "fl_arc(x,y,r,a1,a2)" width=6cm void fl_circle(double x, double y, double r) diff --git a/documentation/src/editor.dox b/documentation/src/editor.dox index 77c8bbaa5..91123fc2c 100644 --- a/documentation/src/editor.dox +++ b/documentation/src/editor.dox @@ -143,7 +143,7 @@ Fl_Input widgets, the "replace all" and the "replace next " button is a Fl_Return_Button widget: -\image html editor-replace.png "Figure 4-1: The search and replace dialog" +\image html editor-replace.png "Figure 7.1: The search and replace dialog" \image latex editor-replace.png "The search and replace dialog" width=10cm \code @@ -604,9 +604,9 @@ Congratulations, you've just built your own text editor! \section editor_final_product The Final Product -The final editor window should look like the image in Figure 4-2. +The final editor window should look like the image in Figure 7.2. -\image html editor.png "Figure 4-2: The completed editor window" +\image html editor.png "Figure 7.2: The completed editor window" \image latex editor.png "The completed editor window" width=12cm \section editor_advanced_features Advanced Features @@ -897,9 +897,9 @@ style_parse(const char *text, diff --git a/documentation/src/faq.dox b/documentation/src/faq.dox index b42aafeb7..766fe5252 100644 --- a/documentation/src/faq.dox +++ b/documentation/src/faq.dox @@ -143,5 +143,26 @@ void my_callback(Fl_Widget*, void*) { \endcode +\htmlonly +
+
- + [Prev] - Common Widgets and Attributes + How does resizing work? diff --git a/documentation/src/examples.dox b/documentation/src/examples.dox index 4bd3ccd0d..85dd74d76 100644 --- a/documentation/src/examples.dox +++ b/documentation/src/examples.dox @@ -757,7 +757,7 @@ the display \b should look when running the example programs. The \c cairo_test demo program shows three shiny buttons drawn with Cairo in an Fl_Cairo_Window. - \image html cairo_test.png "Buttons drawn with Cairo" + \image html cairo_test.png "Figure 22.1: Buttons drawn with Cairo" \image latex cairo_test.png "Buttons drawn with Cairo" width=8cm @@ -767,7 +767,7 @@ in an Fl_Cairo_Window. The \c icon program lets you set the program icon from an image (here an Fl_RGB_Image). - \image html icon.png "Green icon (Windows 10)" + \image html icon.png "Figure 22.2: Green icon (Windows 10)" \image latex icon.png "Green icon (Windows 10)" width=6cm @@ -777,7 +777,7 @@ an Fl_RGB_Image). Select "drawing images" in the browser at the left side to see the image drawing example: - \image html unittest_images.png "Image Drawing" + \image html unittest_images.png "Figure 22.3: Image Drawing" \image latex unittest_images.png "Image Drawing" width=12cm @@ -795,7 +795,9 @@ image drawing example: [Index] -   + + Frequently Asked Questions + [Next]
+ + + + + +
+ + [Prev] + Example Source Code + + + [Index] + +   + +
+\endhtmlonly + */ diff --git a/documentation/src/fluid.dox b/documentation/src/fluid.dox index 9d1e1fcc4..25bc56c65 100644 --- a/documentation/src/fluid.dox +++ b/documentation/src/fluid.dox @@ -47,7 +47,7 @@ the .h file or they can \p \#include the .cxx file so it still appears to be a single source file. - \image html fluid-org.png "Figure 9-1: FLUID organization" + \image html fluid-org.png "Figure 12.1: FLUID organization" \image latex fluid-org.png "FLUID organization" width=12cm Normally the FLUID file defines one or more functions or classes which @@ -181,7 +181,7 @@ accomplish seemingly simple tasks with it. This tutorial will show you how to generate a complete user interface class with FLUID that is used for the CubeView program provided with FLTK. -\image html cubeview.png "Figure 9-2: CubeView demo" +\image html cubeview.png "Figure 12.2: CubeView demo" \image latex cubeview.png "CubeView demo" width=10cm The window is of class CubeViewUI, and is completely generated by FLUID, @@ -407,7 +407,7 @@ menu item. Name the class "CubeViewUI" and leave the subclass blank. We do not need any inheritance for this window. You should see the new class declaration in the FLUID browser window. -\image html fluid1.png "Figure 9-3: FLUID file for CubeView" +\image html fluid1.png "Figure 12.3: FLUID file for CubeView" \image latex fluid1.png "FLUID file for CubeView" width=10cm \par Adding the Class Constructor @@ -435,7 +435,7 @@ CubeViewUI. When you are finished you should have something like this: -\image html fluid2.png "Figure 9-4: FLUID window containing CubeView demo" +\image html fluid2.png "Figure 12.4: FLUID window containing CubeView demo" \image latex fluid2.png "FLUID window containing CubeView demo" width=10cm We will talk about the \p show() method that is highlighted @@ -463,7 +463,7 @@ This \p \#include is important, as we have just included CubeView as a member of CubeViewUI, so any public CubeView methods are now available to CubeViewUI. -\image html fluid3-cxx.png "Figure 9-5: CubeView methods" +\image html fluid3-cxx.png "Figure 12.5: CubeView methods" \image latex fluid3-cxx.png "CubeView methods" width=10cm \par Defining the Callbacks @@ -500,7 +500,7 @@ Make sure the top level CubeViewUI is selected and select not be adding any widgets to this method FLUID will assign it a return type of \p void. -\image html fluid4.png "Figure 9-6: CubeView constructor" +\image html fluid4.png "Figure 12.6: CubeView constructor" \image latex fluid4.png "CubeView constructor" width=10cm Once the new method has been added, highlight its name and select @@ -762,7 +762,7 @@ button the code file will include the header file automatically. Under the "Internationalization" tab are the \ref fluid_i18n "internationalization" options, described later in this chapter. -\image html fluid-edit-proj-settings.png "Figure 9-7: FLUID Project Settings Window" +\image html fluid-edit-proj-settings.png "Figure 12.7: FLUID Project Settings Window" \image latex fluid-edit-proj-settings.png "FLUID Project Settings Window" width=10cm \par Edit/GUI Settings... (Shift+Alt+p) @@ -770,7 +770,7 @@ options, described later in this chapter. \par Displays the GUI Settings panel, used to control the user interface settings. -\image html fluid-edit-gui-settings.png "Figure 9-7a: FLUID GUI Settings Window" +\image html fluid-edit-gui-settings.png "Figure 12.8: FLUID GUI Settings Window" \image latex fluid-edit-gui-settings.png "FLUID GUI Settings Window" width=10cm \par Edit/Global FLTK Settings... (Shift+Alt+g) @@ -786,7 +786,7 @@ Tooltips provide descriptions of each option. At the lower-right, "User Settings" causes changes to only affect the current user, "System Settings" causes changes to be applied to all users on the current machine. -\image html fluid-edit-global-fltk-settings.png "Figure 9-7b: FLUID Global Settings Window" +\image html fluid-edit-global-fltk-settings.png "Figure 12.9: FLUID Global Settings Window" \image latex fluid-edit-global-fltk-settings.png "FLUID Global Settings Window" width=10cm \par New/Code/Function @@ -875,7 +875,7 @@ This panel controls the grid that all widgets snap to when you move and resize them, and for the "snap" which is how far a widget has to be dragged from its original position to actually change. -\image html fluid-layout-grid-and-size-settings.png "Figure 9-7c: FLUID Layout/Grid Settings Window" +\image html fluid-layout-grid-and-size-settings.png "Figure 12.10: FLUID Layout/Grid Settings Window" \image latex fluid-layout-grid-and-size-settings.png "FLUID Layout/Grid Settings Window" width=10cm \par Shell/Execute Command... (Alt+x) @@ -934,7 +934,7 @@ undone, however. -\image html fluid_widget_gui.png "Figure 9-8: The FLUID widget GUI attributes" +\image html fluid_widget_gui.png "Figure 12.11: The FLUID widget GUI attributes" \image latex fluid_widget_gui.png "The FLUID widget GUI attributes" width=10cm \section fluid_widget_attributes GUI Attributes @@ -1049,7 +1049,7 @@ as the class. This can change the icon or window decorations. On most (all?) window managers you will have to close the window and reopen it to see the effect. -\image html fluid_widget_style.png "Figure 9-9: The FLUID widget Style attributes" +\image html fluid_widget_style.png "Figure 12.12: The FLUID widget Style attributes" \image latex fluid_widget_style.png "The FLUID widget Style attributes" width=10cm \subsection fluid_style_attributes Style Attributes @@ -1120,7 +1120,7 @@ when they have the focus. Some widgets display text, such as input fields, pull-down menus, and browsers. -\image html fluid_widget_cxx.png "Figure 9-10: The FLUID widget C++ attributes" +\image html fluid_widget_cxx.png "Figure 12.13: The FLUID widget C++ attributes" \image latex fluid_widget_cxx.png "The FLUID widget C++ attributes" width=10cm \subsection fluid_cpp_attributes C++ Attributes @@ -1499,7 +1499,7 @@ fields will then appear to control the include file and function/macro name to use when retrieving the localized label strings. - \image html fluid-gettext.png "Figure 9-11: Internationalization using GNU gettext" + \image html fluid-gettext.png "Figure 12.14: Internationalization using GNU gettext" \image latex fluid-gettext.png "Internationalization using GNU gettext" width=10cm The \b \#include @@ -1524,7 +1524,7 @@ input fields will then appear to control the include file, catalog file, and set number for retrieving the localized label strings. - \image html fluid-catgets.png "Figure 9-12: Internationalization using POSIX catgets" + \image html fluid-catgets.png "Figure 12.15: Internationalization using POSIX catgets" \image latex fluid-catgets.png "Internationalization using POSIX catgets" width=10cm The \b \#include diff --git a/documentation/src/index.dox b/documentation/src/index.dox index 09b4545bd..6dafc22de 100644 --- a/documentation/src/index.dox +++ b/documentation/src/index.dox @@ -43,6 +43,8 @@ - \ref common_labels - \ref drawing_images + \subpage resize + \subpage editor \subpage drawing diff --git a/documentation/src/resize-example1.png b/documentation/src/resize-example1.png new file mode 100644 index 0000000000000000000000000000000000000000..6b85245dc5d27b2eedae14a67cc12b8cc18e4d1c GIT binary patch literal 9422 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 QH$(F zj;0Y66%9y5MSXCB7P6eWWy=Ho(YdZ~qD4(hb>ZR#8zJj>xp;H)Q=urd$t}wa3((o2 z-P5f@AwD52oUhZ}BQ{{YU1#ain6D^i>2%1ZTKTT7ol4c)ifui$a#s2PDbzpKLN5VtR4 z7-+$Z9E7mfkKxPNgpGa*ng8~l9?v*Rw#@~FB zY(I3m$&LsWkd-;V(j6y0xsq9HQ0eU(<9vxrF}f{rKYDPy%CW02)8mm> z(t0@ly9_@FTAzsD;1KD*L9UmKv$8r@d{27T1PiKjScdCmr24z8bpsO-M(6%T71% z=W2;F>^+8tAvr#9dl%^stD1GiEDOE+q!7ew_SA_TAZZMh1f9u+rL$@>*=q@xfAxzZ z$&$>m{Vd_McF}4E^@A;SsdD!2&X`5oiH9Ew-Y$F?$y3-wCvEM0^~cg{8lOgz7&O#uho<+6Q6qrDeu0bph!l&eno;kBjghDeCpnVe z{M|+8$9C5c_|iz2@i|IYCU-vR5B{w#$!uZ@Pf>&!TWn};gGW)+D^BJPloAhfXKXy~ z%k{hRtoyStRDwYP)(~hq!xrglUzdeptXejqPc^z`twN9#*JrFLL6Sv18Tj*M~yvc$o%-21iyvH{0$5}lu=T})OiJ%0Wn)fiMuHd-?zM11?{d z9(;hnJ(!Wwc*U5)q!_ctzDz+^xu38LVg?xYt2jSq$Fqd?s|0RJud zNY2w4cCjKCm^2hSMl#_YDLwGAC~vn5`K3-x;AeyQj4#*c7QA!<6|W^HOrplR9mK7! z@zEEepzWYqS>J*2so-{4z1-h9=!H0*|j+hJ<{K2=6Sw3g)>fUXb-)Wj0Htma$ zm~7AS^}2L<(y3&5OR@RWeB(R%#57L)3-6h!qSjzu7a`I`x?wnY>HhfAd7MaH!MA{S zw~yho0L!~;&vDj|d}3a#POW$fgyfh!8adFd6jt3xe$|AUj~DyPygKXwVo2LC+<;!hT6$MlYq)s^Eb-ypJUZ1xjf6WK7%7_9{pIYdsB~We#2Ys^QqMo zbQ!7}4`4Wh1N0Xvp9Xs(N-dvNu!0J-pqy>G201<`ALAN z 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 DFXgAL literal 0 HcmV?d00001 diff --git a/documentation/src/resize-example3c.png b/documentation/src/resize-example3c.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8c4d64097a077d4f897240c058c5bdd92f5563 GIT binary patch literal 6534 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 literal 0 HcmV?d00001 diff --git a/documentation/src/resize.dox b/documentation/src/resize.dox new file mode 100644 index 000000000..5eb5a23e0 --- /dev/null +++ b/documentation/src/resize.dox @@ -0,0 +1,216 @@ +/** + + \page resize How does resizing work? + +This chapter describes the basic mechanism behind the creation +of resizable user interface elements in FLTK. + +FLTK uses a simple, but very versatile system to resize even the +most complex dialogs and interfaces. +The resizing is implemented within the Fl_Group widget, and the exact +resizing behavior of that group is determined by its +\link Fl_Group::resizable() resizable() \endlink attribute. + + +\section resize_disabled Resizing can be disabled + +\code + Summary: + group = new Fl_Group(xg, yg, wg, hg, "No Resizing"); + child1 = new Fl_Box(xb, yb, wb, hb, "B"); // or other widget type + . . . + group->resizable(0); // no resizing + group->end() +\endcode + +The \p resizable may be set to zero, +which means that the group will not resize. +Note that this is the default behavior for Fl_Window and Fl_Pack +derived widgets, and therefore the programmer must explicitly set +the window's \p resizable attribute if they want to allow the +window to be resized. + + +\section resize_simple Resizing can be simple + +\code + Summary: + group = new Fl_Group(xg, yg, wg, hg, "Simple Resizing"); + child1 = new Fl_Box(xb, yb, wb, hb, "B"); // or other widget type + . . . + group->resizable(group); // simple proportional resizing + group->end() +\endcode + +The \p resizable may be set to the group itself, +which means that all widgets within the group will resize +as the group itself is resized. +This is the default behavior for Fl_Group widgets, +and is shown in the diagram below. + +If the group is stretched horizontally, the widths of +the widgets within the group are adjusted proportionally. +The same is true for vertical resizing. + +\image html resize-example1.png "Figure 6.1: Proportional resizing example" +\image latex resize-example1.png "Proportional resizing example" width=12cm + + +\section resize_complex Resizing can be complex + +\code + Summary: + group = new Fl_Group(xg, yg, wg, hg, "Complex Resizing"); + child1 = new Fl_Box(xb, yb, wb, hb, "B"); // or other widget type + . . . + group->resizable(child1); // complex resizing + group->end() +\endcode + +It is when the group's \p resizable attribute is set to one of the +group's child widgets, that things become really interesting. + +In the diagram below, imagine vertical lines extending from the +left and right sides of the yellow widget marked "resizable", +and horizontal lines extending from the top and bottom sides. +Exactly which widgets resize, and by how much, is determined +by which ones lie completely or partially within this cross. + +The widgets marked B, C, J, K and M clearly lie completely or +partially within the vertical part of the cross; the widgets +marked E, F, G, H and N lie completely or partially within the +horizontal part of the cross; and the widgets marked A, D, I +and L do not overlap with the cross at all. +The resizing behavior is as follows: + +\li the width and height of the \p resizable widget increase + to match the change in the width and height of the group + widget as it is stretched; + +\li the widths of those widgets that overlap with the vertical + part of the cross increase proportionally as the width of the + group widget increases, but their heights remain unchanged, + i.e. the widgets marked B, C, J, K and M; + +\li the heights of those widgets that overlap with the horizontal + part of the cross increase proportionally as the height of + the group widget increases, but their widths remain unchanged, + i.e. the widgets marked E, F, G, H and N; + +\li the widths and heights of the remaining widgets stay the same, + i.e. the widgets marked A, D, I and L stay the same size. + +\image html resize-example2.png "Figure 6.2: Complex resizing example" +\image latex resize-example2.png "Complex resizing example" width=12cm + + +\section resize_practical Practical examples + +Why is this so powerful, you may ask. +Well, every widget group can have a completely independent resizing +strategy. +By replacing one or more of the group's "normal" child widgets with +another group widget where all of the above rules can be applied again, +it is possible to create a hierarchy of group widgets with very complex +layouts and resizing behavior. + +Consider a simple dialog box, consisting of an icon box and a message +area on the top and a button at the bottom right: which widget should +be the \p resizable one? + +Setting the \p resizable to be the icon box won't give us what we want: + +\image html resize-example3a.png "Figure 6.3: Resizing dialog example (a)" +\image latex resize-example3a.png "Resizing dialog example (a)" width=12cm + +The message text area would be the logical choice so that the user +can expand the dialog to see if there is more of an explanation below +the short error message. This results in the behaviour shown in the +diagram below. + +\image html resize-example3b.png "Figure 6.4: Resizing dialog example (b)" +\image latex resize-example3b.png "Resizing dialog example (b)" width=12cm + +The result is close to what we want, but not quite: +the text area will fully resize, +the "!" icon box will resize vertically but not horizontally, +which we can live with, +but the "Darn!" button will - wait a minute - resize horizontally? + +That's ugly. How do we stop that from happening? +Simple: put it in its own group and set the \p resizable to +an invisible box widget, as shown in the diagram below. + +\image html resize-example3c.png "Figure 6.5: Resizing dialog example (c)" +\image latex resize-example3c.png "Resizing dialog example (c)" width=12cm + +Now the invisible box, shown as "R", takes all of the +horizontal resizing and the "Darn!" box will stay as it is. +Here's the skeleton code: + +\code +dialog = new Fl_Window(300, 100); + icon = new Fl_Box(0, 0, 50, 50, "!"); + text = new Fl_Box(50, 0, 250, 40, "Out of Memory Error"); + btns = new Fl_Group(50, 50, 250, 50); // parent group + darn = new Fl_Button(200, 50, 100, 50, "Darn!"); + R = new Fl_Box(50, 50, 150, 50); // "invisible" box "R" + R->hide(); // make sure it's invisible + btns->resizable(R); // make "R" parent group resizable + btns->end(); +dialog->resizable(text); +dialog->end(); +\endcode + +Imagine instead that you have a group that has a button, an input field, +another button and a second input field, all next to each other, and +you want the input fields to resize equally, but not the buttons. +How could you achieve this? + +Setting either of the input fields to be the \p resizable leaves the +other one fixed, as shown below: + +\image html resize-example4a.png "Figure 6.6: Resizing input fields example (a)" +\image latex resize-example4a.png "Resizing input fields example (b)" width=12cm + +The answer is to leave the \p resizable of the group set to itself, +and to create two equal size subgroups, each of which will resize +equally. Add a button and input field to each subgroup, and set +each subgroup's \p resizable to the input field, as shown below. +Tada! + +\image html resize-example4b.png "Figure 6.7: Resizing input fields example (b)" +\image latex resize-example4b.png "Resizing inut fields example (b)" width=12cm + +In FLTK it is possible to solve almost any layout and resizing +problem by introducing an invisible box into a group, or an extra +group into the widget hierarchy. +It might take some thought to achieve exactly what you want and +sometimes it is necessary to introduce parallel hierarchies in +order to get widgets in different groups to resize together. + + +\htmlonly +
+ + + + + + +
+ + [Prev] + Common Widgets and Attributes + + + [Index] + + + Designing a Simple Text Editor + [Next] + +
+\endhtmlonly + +*/