mirror of
				https://github.com/Drezil/imgui.git
				synced 2025-10-31 13:11:05 +01:00 
			
		
		
		
	Merge branch 'master' into drag_and_drop
# Conflicts: # imgui.cpp # imgui.h
This commit is contained in:
		| @@ -77,6 +77,7 @@ Frameworks: | ||||
| - Cinder: https://github.com/simongeilfus/Cinder-ImGui | ||||
| - cocos2d-x: https://github.com/c0i/imguix https://github.com/ocornut/imgui/issues/551 | ||||
| - Flexium/SFML (FlexGUI): https://github.com/DXsmiley/FlexGUI | ||||
| - GML/GameMakerStudio2 (ImGuiGML): https://marketplace.yoyogames.com/assets/6221/imguigml | ||||
| - Irrlicht (IrrIMGUI): https://github.com/ZahlGraf/IrrIMGUI | ||||
| - Ogre: https://bitbucket.org/LMCrashy/ogreimgui/src | ||||
| - openFrameworks (ofxImGui): https://github.com/jvcleave/ofxImGui | ||||
|   | ||||
							
								
								
									
										78
									
								
								imgui.h
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								imgui.h
									
									
									
									
									
								
							| @@ -73,19 +73,20 @@ typedef unsigned int ImGuiID;       // unique ID used by widgets (typically hash | ||||
| typedef unsigned short ImWchar;     // character for keyboard input/display | ||||
| typedef void* ImTextureID;          // user data to identify a texture (this is whatever to you want it to be! read the FAQ about ImTextureID in imgui.cpp) | ||||
| typedef int ImGuiCol;               // enum: a color identifier for styling     // enum ImGuiCol_ | ||||
| typedef int ImGuiStyleVar;          // enum: a variable identifier for styling  // enum ImGuiStyleVar_ | ||||
| typedef int ImGuiCond;              // enum: a condition for Set*()             // enum ImGuiCond_ | ||||
| typedef int ImGuiKey;               // enum: a key identifier (ImGui-side enum) // enum ImGuiKey_ | ||||
| typedef int ImGuiMouseCursor;       // enum: a mouse cursor identifier          // enum ImGuiMouseCursor_ | ||||
| typedef int ImGuiCond;              // enum: a condition for Set*()             // enum ImGuiCond_ | ||||
| typedef int ImDrawCornerFlags;      // flags: corner flags for AddRect*() etc.  // enum ImDrawCornerFlags_ | ||||
| typedef int ImGuiColorEditFlags;    // flags: color edit flags for Color*()     // enum ImGuiColorEditFlags_ | ||||
| typedef int ImGuiStyleVar;          // enum: a variable identifier for styling  // enum ImGuiStyleVar_ | ||||
| typedef int ImDrawCornerFlags;      // flags: for ImDrawList::AddRect*() etc.   // enum ImDrawCornerFlags_ | ||||
| typedef int ImGuiColorEditFlags;    // flags: for ColorEdit*(), ColorPicker*()  // enum ImGuiColorEditFlags_ | ||||
| typedef int ImGuiDragDropFlags;     // flags: for *DragDrop*()                  // enum ImGuiDragDropFlags_ | ||||
| typedef int ImGuiWindowFlags;       // flags: window flags for Begin*()         // enum ImGuiWindowFlags_ | ||||
| typedef int ImGuiColumnsFlags;      // flags: for *Columns*()                   // enum ImGuiColumnsFlags_ | ||||
| typedef int ImGuiComboFlags;        // flags: for BeginCombo()                  // enum ImGuiComboFlags_ | ||||
| typedef int ImGuiHoveredFlags;      // flags: for IsItemHovered()               // enum ImGuiHoveredFlags_ | ||||
| typedef int ImGuiInputTextFlags;    // flags: for InputText*()                  // enum ImGuiInputTextFlags_ | ||||
| typedef int ImGuiSelectableFlags;   // flags: for Selectable()                  // enum ImGuiSelectableFlags_ | ||||
| typedef int ImGuiTreeNodeFlags;     // flags: for TreeNode*(), Collapsing*()    // enum ImGuiTreeNodeFlags_ | ||||
| typedef int ImGuiHoveredFlags;      // flags: for IsItemHovered()               // enum ImGuiHoveredFlags_ | ||||
| typedef int ImGuiTreeNodeFlags;     // flags: for TreeNode*(),CollapsingHeader()// enum ImGuiTreeNodeFlags_ | ||||
| typedef int ImGuiWindowFlags;       // flags: for Begin*()                      // enum ImGuiWindowFlags_ | ||||
| typedef int (*ImGuiTextEditCallback)(ImGuiTextEditCallbackData *data); | ||||
| typedef void (*ImGuiSizeConstraintCallback)(ImGuiSizeConstraintCallbackData* data); | ||||
| #ifdef _MSC_VER | ||||
| @@ -161,8 +162,7 @@ namespace ImGui | ||||
|     IMGUI_API void          SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0,0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc. | ||||
|     IMGUI_API void          SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0);          // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin() | ||||
|     IMGUI_API void          SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeConstraintCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Use callback to apply non-trivial programmatic constraints. | ||||
|     IMGUI_API void          SetNextWindowContentSize(const ImVec2& size);                       // set next window content size (enforce the range of scrollbars). set axis to 0.0f to leave it automatic. call before Begin() | ||||
|     IMGUI_API void          SetNextWindowContentWidth(float width);                             // set next window content width (enforce the range of horizontal scrollbar). call before Begin() | ||||
|     IMGUI_API void          SetNextWindowContentSize(const ImVec2& size);                       // set next window content size (~ enforce the range of scrollbars). not including window decorations (title bar, menu bar, etc.). set an axis to 0.0f to leave it automatic. call before Begin() | ||||
|     IMGUI_API void          SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0);         // set next window collapsed state. call before Begin() | ||||
|     IMGUI_API void          SetNextWindowFocus();                                               // set next window to be focused / front-most. call before Begin() | ||||
|     IMGUI_API void          SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0);                // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects. | ||||
| @@ -180,9 +180,8 @@ namespace ImGui | ||||
|     IMGUI_API float         GetScrollMaxY();                                                    // get maximum scrolling amount ~~ ContentSize.Y - WindowSize.Y | ||||
|     IMGUI_API void          SetScrollX(float scroll_x);                                         // set scrolling amount [0..GetScrollMaxX()] | ||||
|     IMGUI_API void          SetScrollY(float scroll_y);                                         // set scrolling amount [0..GetScrollMaxY()] | ||||
|     IMGUI_API void          SetScrollHere(float center_y_ratio = 0.5f);                         // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. | ||||
|     IMGUI_API void          SetScrollHere(float center_y_ratio = 0.5f);                         // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead. | ||||
|     IMGUI_API void          SetScrollFromPosY(float pos_y, float center_y_ratio = 0.5f);        // adjust scrolling amount to make given position valid. use GetCursorPos() or GetCursorStartPos()+offset to get valid positions. | ||||
|     IMGUI_API void          SetKeyboardFocusHere(int offset = 0);                               // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. | ||||
|     IMGUI_API void          SetStateStorage(ImGuiStorage* tree);                                // replace tree state storage with our own (if you want to manipulate it yourself, typically clear subsection of it) | ||||
|     IMGUI_API ImGuiStorage* GetStateStorage(); | ||||
|  | ||||
| @@ -220,8 +219,8 @@ namespace ImGui | ||||
|     IMGUI_API void          NewLine();                                                          // undo a SameLine() | ||||
|     IMGUI_API void          Spacing();                                                          // add vertical spacing | ||||
|     IMGUI_API void          Dummy(const ImVec2& size);                                          // add a dummy item of given size | ||||
|     IMGUI_API void          Indent(float indent_w = 0.0f);                                      // move content position toward the right, by style.IndentSpacing or indent_w if >0 | ||||
|     IMGUI_API void          Unindent(float indent_w = 0.0f);                                    // move content position back to the left, by style.IndentSpacing or indent_w if >0 | ||||
|     IMGUI_API void          Indent(float indent_w = 0.0f);                                      // move content position toward the right, by style.IndentSpacing or indent_w if != 0 | ||||
|     IMGUI_API void          Unindent(float indent_w = 0.0f);                                    // move content position back to the left, by style.IndentSpacing or indent_w if != 0 | ||||
|     IMGUI_API void          BeginGroup();                                                       // lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.) | ||||
|     IMGUI_API void          EndGroup(); | ||||
|     IMGUI_API ImVec2        GetCursorPos();                                                     // cursor position is relative to window position | ||||
| @@ -280,22 +279,27 @@ namespace ImGui | ||||
|     // Widgets: Main | ||||
|     IMGUI_API bool          Button(const char* label, const ImVec2& size = ImVec2(0,0));            // button | ||||
|     IMGUI_API bool          SmallButton(const char* label);                                         // button with FramePadding=(0,0) to easily embed within text | ||||
|     IMGUI_API bool          InvisibleButton(const char* str_id, const ImVec2& size); | ||||
|     IMGUI_API bool          InvisibleButton(const char* str_id, const ImVec2& size);                // button behavior without the visuals, useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.) | ||||
|     IMGUI_API void          Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0)); | ||||
|     IMGUI_API bool          ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0,0),  const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1));    // <0 frame_padding uses default frame padding settings. 0 for no padding | ||||
|     IMGUI_API bool          Checkbox(const char* label, bool* v); | ||||
|     IMGUI_API bool          CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value); | ||||
|     IMGUI_API bool          RadioButton(const char* label, bool active); | ||||
|     IMGUI_API bool          RadioButton(const char* label, int* v, int v_button); | ||||
|     IMGUI_API bool          Combo(const char* label, int* current_item, const char* const* items, int items_count, int height_in_items = -1); | ||||
|     IMGUI_API bool          Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items = -1);    // separate items with \0, end item-list with \0\0 | ||||
|     IMGUI_API bool          Combo(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1); | ||||
|     IMGUI_API void          PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); | ||||
|     IMGUI_API void          PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); | ||||
|     IMGUI_API void          PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0), int stride = sizeof(float)); | ||||
|     IMGUI_API void          PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0,0)); | ||||
|     IMGUI_API void          ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-1,0), const char* overlay = NULL); | ||||
|  | ||||
|     // Widgets: Combo Box | ||||
|     // The new BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it.  | ||||
|     IMGUI_API bool          BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0); | ||||
|     IMGUI_API void          EndCombo(); | ||||
|     IMGUI_API bool          Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1); | ||||
|     IMGUI_API bool          Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1);      // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0" | ||||
|     IMGUI_API bool          Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1); | ||||
|  | ||||
|     // Widgets: Drags (tip: ctrl+click on a drag box to input with keyboard. manually input values aren't clamped, can go off-bounds) | ||||
|     // For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x | ||||
|     IMGUI_API bool          DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* display_format = "%.3f", float power = 1.0f);     // If v_min >= v_max we have no bound | ||||
| @@ -406,7 +410,7 @@ namespace ImGui | ||||
|     IMGUI_API bool          IsPopupOpen(const char* str_id);                                    // return true if the popup is open | ||||
|     IMGUI_API void          CloseCurrentPopup();                                                // close the popup we have begin-ed into. clicking on a MenuItem or Selectable automatically close the current popup. | ||||
|  | ||||
|     // Logging: all text output from interface is redirected to tty/file/clipboard. By default, tree nodes are automatically opened during logging. | ||||
|     // Logging/Capture: all text output from interface is captured to tty/file/clipboard. By default, tree nodes are automatically opened during logging. | ||||
|     IMGUI_API void          LogToTTY(int max_depth = -1);                                       // start logging to tty | ||||
|     IMGUI_API void          LogToFile(int max_depth = -1, const char* filename = NULL);         // start logging to file | ||||
|     IMGUI_API void          LogToClipboard(int max_depth = -1);                                 // start logging to OS clipboard | ||||
| @@ -431,6 +435,12 @@ namespace ImGui | ||||
|     IMGUI_API void          StyleColorsDark(ImGuiStyle* dst = NULL); | ||||
|     IMGUI_API void          StyleColorsLight(ImGuiStyle* dst = NULL); | ||||
|  | ||||
|     // Focus | ||||
|     // (FIXME: Those functions will be reworked after we merge the navigation branch + have a pass at focusing/tabbing features.) | ||||
|     // (Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHere()" when applicable, to make your code more forward compatible when navigation branch is merged) | ||||
|     IMGUI_API void          SetItemDefaultFocus();                                              // make last item the default focused item of a window (WIP navigation branch only). Pleaase use instead of SetScrollHere(). | ||||
|     IMGUI_API void          SetKeyboardFocusHere(int offset = 0);                               // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget. | ||||
|  | ||||
|     // Utilities | ||||
|     IMGUI_API bool          IsItemHovered(ImGuiHoveredFlags flags = 0);                         // is the last item hovered by mouse (and usable)? | ||||
|     IMGUI_API bool          IsItemActive();                                                     // is the last item active? (e.g. button being held, text field being edited- items that don't interact will always return false) | ||||
| @@ -451,6 +461,7 @@ namespace ImGui | ||||
|     IMGUI_API bool          IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max);      // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side. | ||||
|     IMGUI_API float         GetTime(); | ||||
|     IMGUI_API int           GetFrameCount(); | ||||
|     IMGUI_API ImDrawList*   GetOverlayDrawList();                                               // this draw list will be the last rendered one, useful to quickly draw overlays shapes/text | ||||
|     IMGUI_API const char*   GetStyleColorName(ImGuiCol idx); | ||||
|     IMGUI_API ImVec2        CalcItemRectClosestPoint(const ImVec2& pos, bool on_edge = false, float outward = +0.0f);   // utility to find the closest point the last item bounding rectangle edge. useful to visually link items | ||||
|     IMGUI_API ImVec2        CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f); | ||||
| @@ -523,13 +534,14 @@ enum ImGuiWindowFlags_ | ||||
|     ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14,  // Always show vertical scrollbar (even if ContentSize.y < Size.y) | ||||
|     ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15,  // Always show horizontal scrollbar (even if ContentSize.x < Size.x) | ||||
|     ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16,  // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient) | ||||
|     ImGuiWindowFlags_ResizeFromAnySide      = 1 << 17,  // (WIP) Enable resize from any corners and borders. Your back-end needs to honor the different values of io.MouseCursor set by imgui. | ||||
|  | ||||
|     // [Internal] | ||||
|     ImGuiWindowFlags_ChildWindow            = 1 << 22,  // Don't use! For internal use by BeginChild() | ||||
|     ImGuiWindowFlags_ComboBox               = 1 << 23,  // Don't use! For internal use by ComboBox() | ||||
|     ImGuiWindowFlags_Tooltip                = 1 << 24,  // Don't use! For internal use by BeginTooltip() | ||||
|     ImGuiWindowFlags_Popup                  = 1 << 25,  // Don't use! For internal use by BeginPopup() | ||||
|     ImGuiWindowFlags_Modal                  = 1 << 26,  // Don't use! For internal use by BeginPopupModal() | ||||
|     ImGuiWindowFlags_ChildMenu              = 1 << 27   // Don't use! For internal use by BeginMenu() | ||||
|     ImGuiWindowFlags_ChildWindow            = 1 << 24,  // Don't use! For internal use by BeginChild() | ||||
|     ImGuiWindowFlags_Tooltip                = 1 << 25,  // Don't use! For internal use by BeginTooltip() | ||||
|     ImGuiWindowFlags_Popup                  = 1 << 26,  // Don't use! For internal use by BeginPopup() | ||||
|     ImGuiWindowFlags_Modal                  = 1 << 27,  // Don't use! For internal use by BeginPopupModal() | ||||
|     ImGuiWindowFlags_ChildMenu              = 1 << 28   // Don't use! For internal use by BeginMenu() | ||||
| }; | ||||
|  | ||||
| // Flags for ImGui::InputText() | ||||
| @@ -584,6 +596,17 @@ enum ImGuiSelectableFlags_ | ||||
|     ImGuiSelectableFlags_AllowDoubleClick   = 1 << 2    // Generate press events on double clicks too | ||||
| }; | ||||
|  | ||||
| // Flags for ImGui::BeginCombo() | ||||
| enum ImGuiComboFlags_ | ||||
| { | ||||
|     ImGuiComboFlags_PopupAlignLeft      = 1 << 0,   // Align the popup toward the left by default | ||||
|     ImGuiComboFlags_HeightSmall         = 1 << 1,   // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo() | ||||
|     ImGuiComboFlags_HeightRegular       = 1 << 2,   // Max ~8 items visible (default) | ||||
|     ImGuiComboFlags_HeightLarge         = 1 << 3,   // Max ~20 items visible | ||||
|     ImGuiComboFlags_HeightLargest       = 1 << 4,   // As many fitting items as possible | ||||
|     ImGuiComboFlags_HeightMask_         = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest | ||||
| }; | ||||
|  | ||||
| // Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered() | ||||
| enum ImGuiHoveredFlags_ | ||||
| { | ||||
| @@ -763,7 +786,7 @@ enum ImGuiMouseCursor_ | ||||
|     ImGuiMouseCursor_Move,              // Unused | ||||
|     ImGuiMouseCursor_ResizeNS,          // Unused | ||||
|     ImGuiMouseCursor_ResizeEW,          // When hovering over a column | ||||
|     ImGuiMouseCursor_ResizeNESW,        // Unused | ||||
|     ImGuiMouseCursor_ResizeNESW,        // When hovering over the bottom-left corner of a window | ||||
|     ImGuiMouseCursor_ResizeNWSE,        // When hovering over the bottom-right corner of a window | ||||
|     ImGuiMouseCursor_Count_ | ||||
| }; | ||||
| @@ -940,6 +963,7 @@ struct ImGuiIO | ||||
| #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS | ||||
| namespace ImGui | ||||
| { | ||||
|     static inline void      SetNextWindowContentWidth(float width) { ImGui::SetNextWindowContentSize(ImVec2(width, 0.0f)); } // OBSOLETE 1.53+ (nb: original version preserved last Y value set by SetNextWindowContentSize()) | ||||
|     static inline bool      IsRootWindowOrAnyChildHovered(ImGuiHoveredFlags flags = 0) { return IsItemHovered(flags | ImGuiHoveredFlags_FlattenChilds); } // OBSOLETE 1.53+ use flags directly | ||||
|     bool                    Begin(const char* name, bool* p_open, const ImVec2& size_on_first_use, float bg_alpha_override = -1.0f, ImGuiWindowFlags flags = 0); // OBSOLETE 1.52+. use SetNextWindowSize() instead if you want to set a window size. | ||||
|     static inline void      AlignFirstTextHeightToWidgets() { AlignTextToFramePadding(); }     // OBSOLETE 1.52+ | ||||
| @@ -949,9 +973,6 @@ namespace ImGui | ||||
|     static inline bool      IsMouseHoveringAnyWindow() { return IsAnyWindowHovered(); }        // OBSOLETE 1.51+ | ||||
|     static inline bool      IsMouseHoveringWindow() { return IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem); } // OBSOLETE 1.51+ | ||||
|     static inline bool      CollapsingHeader(const char* label, const char* str_id, bool framed = true, bool default_open = false) { (void)str_id; (void)framed; ImGuiTreeNodeFlags default_open_flags = 1 << 5; return CollapsingHeader(label, (default_open ? default_open_flags : 0)); } // OBSOLETE 1.49+ | ||||
|     static inline ImFont*   GetWindowFont() { return GetFont(); }                              // OBSOLETE 1.48+ | ||||
|     static inline float     GetWindowFontSize() { return GetFontSize(); }                      // OBSOLETE 1.48+ | ||||
|     static inline void      SetScrollPosHere() { SetScrollHere(); }                            // OBSOLETE 1.42+ | ||||
| } | ||||
| #endif | ||||
|  | ||||
| @@ -1599,6 +1620,7 @@ struct ImFont | ||||
|     IMGUI_API void              SetFallbackChar(ImWchar c); | ||||
|     float                       GetCharAdvance(ImWchar c) const     { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; } | ||||
|     bool                        IsLoaded() const                    { return ContainerAtlas != NULL; } | ||||
|     const char*                 GetDebugName() const                { return ConfigData ? ConfigData->Name : "<unknown>"; } | ||||
|  | ||||
|     // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable. | ||||
|     // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable. | ||||
|   | ||||
| @@ -80,7 +80,7 @@ static void ShowExampleAppLongText(bool* p_open); | ||||
| static void ShowExampleAppAutoResize(bool* p_open); | ||||
| static void ShowExampleAppConstrainedResize(bool* p_open); | ||||
| static void ShowExampleAppFixedOverlay(bool* p_open); | ||||
| static void ShowExampleAppManipulatingWindowTitle(bool* p_open); | ||||
| static void ShowExampleAppWindowTitles(bool* p_open); | ||||
| static void ShowExampleAppCustomRendering(bool* p_open); | ||||
| static void ShowExampleAppMainMenuBar(); | ||||
| static void ShowExampleMenuFile(); | ||||
| @@ -133,34 +133,34 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|     static bool show_app_auto_resize = false; | ||||
|     static bool show_app_constrained_resize = false; | ||||
|     static bool show_app_fixed_overlay = false; | ||||
|     static bool show_app_manipulating_window_title = false; | ||||
|     static bool show_app_window_titles = false; | ||||
|     static bool show_app_custom_rendering = false; | ||||
|     static bool show_app_style_editor = false; | ||||
|  | ||||
|     static bool show_app_metrics = false; | ||||
|     static bool show_app_about = false; | ||||
|  | ||||
|     if (show_app_main_menu_bar) ShowExampleAppMainMenuBar(); | ||||
|     if (show_app_console) ShowExampleAppConsole(&show_app_console); | ||||
|     if (show_app_log) ShowExampleAppLog(&show_app_log); | ||||
|     if (show_app_layout) ShowExampleAppLayout(&show_app_layout); | ||||
|     if (show_app_property_editor) ShowExampleAppPropertyEditor(&show_app_property_editor); | ||||
|     if (show_app_long_text) ShowExampleAppLongText(&show_app_long_text); | ||||
|     if (show_app_auto_resize) ShowExampleAppAutoResize(&show_app_auto_resize); | ||||
|     if (show_app_constrained_resize) ShowExampleAppConstrainedResize(&show_app_constrained_resize); | ||||
|     if (show_app_fixed_overlay) ShowExampleAppFixedOverlay(&show_app_fixed_overlay); | ||||
|     if (show_app_manipulating_window_title) ShowExampleAppManipulatingWindowTitle(&show_app_manipulating_window_title); | ||||
|     if (show_app_custom_rendering) ShowExampleAppCustomRendering(&show_app_custom_rendering); | ||||
|     if (show_app_main_menu_bar)       ShowExampleAppMainMenuBar(); | ||||
|     if (show_app_console)             ShowExampleAppConsole(&show_app_console); | ||||
|     if (show_app_log)                 ShowExampleAppLog(&show_app_log); | ||||
|     if (show_app_layout)              ShowExampleAppLayout(&show_app_layout); | ||||
|     if (show_app_property_editor)     ShowExampleAppPropertyEditor(&show_app_property_editor); | ||||
|     if (show_app_long_text)           ShowExampleAppLongText(&show_app_long_text); | ||||
|     if (show_app_auto_resize)         ShowExampleAppAutoResize(&show_app_auto_resize); | ||||
|     if (show_app_constrained_resize)  ShowExampleAppConstrainedResize(&show_app_constrained_resize); | ||||
|     if (show_app_fixed_overlay)       ShowExampleAppFixedOverlay(&show_app_fixed_overlay); | ||||
|     if (show_app_window_titles)       ShowExampleAppWindowTitles(&show_app_window_titles); | ||||
|     if (show_app_custom_rendering)    ShowExampleAppCustomRendering(&show_app_custom_rendering); | ||||
|  | ||||
|     if (show_app_metrics) ImGui::ShowMetricsWindow(&show_app_metrics); | ||||
|     if (show_app_style_editor) { ImGui::Begin("Style Editor", &show_app_style_editor); ImGui::ShowStyleEditor(); ImGui::End(); } | ||||
|     if (show_app_metrics)             { ImGui::ShowMetricsWindow(&show_app_metrics); } | ||||
|     if (show_app_style_editor)        { ImGui::Begin("Style Editor", &show_app_style_editor); ImGui::ShowStyleEditor(); ImGui::End(); } | ||||
|     if (show_app_about) | ||||
|     { | ||||
|         ImGui::Begin("About ImGui", &show_app_about, ImGuiWindowFlags_AlwaysAutoResize); | ||||
|         ImGui::Begin("About Dear ImGui", &show_app_about, ImGuiWindowFlags_AlwaysAutoResize); | ||||
|         ImGui::Text("dear imgui, %s", ImGui::GetVersion()); | ||||
|         ImGui::Separator(); | ||||
|         ImGui::Text("By Omar Cornut and all github contributors."); | ||||
|         ImGui::Text("ImGui is licensed under the MIT License, see LICENSE for more information."); | ||||
|         ImGui::Text("By Omar Cornut and all dear imgui contributors."); | ||||
|         ImGui::Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information."); | ||||
|         ImGui::End(); | ||||
|     } | ||||
|  | ||||
| @@ -170,6 +170,7 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|     static bool no_move = false; | ||||
|     static bool no_resize = false; | ||||
|     static bool no_collapse = false; | ||||
|     static bool no_close = false; | ||||
|  | ||||
|     // Demonstrate the various window flags. Typically you would just use the default. | ||||
|     ImGuiWindowFlags window_flags = 0; | ||||
| @@ -179,6 +180,8 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|     if (no_move)      window_flags |= ImGuiWindowFlags_NoMove; | ||||
|     if (no_resize)    window_flags |= ImGuiWindowFlags_NoResize; | ||||
|     if (no_collapse)  window_flags |= ImGuiWindowFlags_NoCollapse; | ||||
|     if (no_close)     p_open = NULL; // Don't pass our bool* to Begin | ||||
|  | ||||
|     ImGui::SetNextWindowSize(ImVec2(550,680), ImGuiCond_FirstUseEver); | ||||
|     if (!ImGui::Begin("ImGui Demo", p_open, window_flags)) | ||||
|     { | ||||
| @@ -211,7 +214,7 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|             ImGui::MenuItem("Auto-resizing window", NULL, &show_app_auto_resize); | ||||
|             ImGui::MenuItem("Constrained-resizing window", NULL, &show_app_constrained_resize); | ||||
|             ImGui::MenuItem("Simple overlay", NULL, &show_app_fixed_overlay); | ||||
|             ImGui::MenuItem("Manipulating window title", NULL, &show_app_manipulating_window_title); | ||||
|             ImGui::MenuItem("Manipulating window titles", NULL, &show_app_window_titles); | ||||
|             ImGui::MenuItem("Custom rendering", NULL, &show_app_custom_rendering); | ||||
|             ImGui::EndMenu(); | ||||
|         } | ||||
| @@ -219,7 +222,7 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|         { | ||||
|             ImGui::MenuItem("Metrics", NULL, &show_app_metrics); | ||||
|             ImGui::MenuItem("Style Editor", NULL, &show_app_style_editor); | ||||
|             ImGui::MenuItem("About ImGui", NULL, &show_app_about); | ||||
|             ImGui::MenuItem("About Dear ImGui", NULL, &show_app_about); | ||||
|             ImGui::EndMenu(); | ||||
|         } | ||||
|         ImGui::EndMenuBar(); | ||||
| @@ -241,6 +244,7 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|         ImGui::Checkbox("No move", &no_move); ImGui::SameLine(150); | ||||
|         ImGui::Checkbox("No resize", &no_resize); ImGui::SameLine(300); | ||||
|         ImGui::Checkbox("No collapse", &no_collapse); | ||||
|         ImGui::Checkbox("No close", &no_close); | ||||
|  | ||||
|         if (ImGui::TreeNode("Style")) | ||||
|         { | ||||
| @@ -248,7 +252,7 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|             ImGui::TreePop(); | ||||
|         } | ||||
|  | ||||
|         if (ImGui::TreeNode("Logging")) | ||||
|         if (ImGui::TreeNode("Capture/Logging")) | ||||
|         { | ||||
|             ImGui::TextWrapped("The logging API redirects all text output so you can easily capture the content of a window or a block. Tree nodes can be automatically expanded. You can also call ImGui::LogText() to output directly to the log without a visual output."); | ||||
|             ImGui::LogButtons(); | ||||
| @@ -318,7 +322,7 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|             static int item = 1; | ||||
|             ImGui::Combo("combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");   // Combo using values packed in a single constant string (for really quick combo) | ||||
|  | ||||
|             const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK" }; | ||||
|             const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO", "PPPP", "QQQQQQQQQQ", "RRR", "SSSS" }; | ||||
|             static int item2 = -1; | ||||
|             ImGui::Combo("combo scroll", &item2, items, IM_ARRAYSIZE(items));   // Combo using proper array. You can also pass a callback to retrieve array value, no need to create/copy an array just for that. | ||||
|  | ||||
| @@ -1664,7 +1668,7 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|  | ||||
|         if (ImGui::TreeNode("Horizontal Scrolling")) | ||||
|         { | ||||
|             ImGui::SetNextWindowContentWidth(1500); | ||||
|             ImGui::SetNextWindowContentSize(ImVec2(1500.0f, 0.0f)); | ||||
|             ImGui::BeginChild("##ScrollingRegion", ImVec2(0, ImGui::GetFontSize() * 20), false, ImGuiWindowFlags_HorizontalScrollbar); | ||||
|             ImGui::Columns(10); | ||||
|             int ITEMS_COUNT = 2000; | ||||
| @@ -1827,6 +1831,8 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|         if (ImGui::TreeNode("Dragging")) | ||||
|         { | ||||
|             ImGui::TextWrapped("You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget."); | ||||
|             for (int button = 0; button < 3; button++) | ||||
|                 ImGui::Text("IsMouseDragging(%d) = %d", button, ImGui::IsMouseDragging(button)); | ||||
|             ImGui::Button("Drag Me"); | ||||
|             if (ImGui::IsItemActive()) | ||||
|             { | ||||
| @@ -1845,12 +1851,16 @@ void ImGui::ShowTestWindow(bool* p_open) | ||||
|  | ||||
|         if (ImGui::TreeNode("Mouse cursors")) | ||||
|         { | ||||
|             const char* mouse_cursors_names[] = { "Arrow", "TextInput", "Move", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE" }; | ||||
|             IM_ASSERT(IM_ARRAYSIZE(mouse_cursors_names) == ImGuiMouseCursor_Count_); | ||||
|  | ||||
|             ImGui::Text("Current mouse cursor = %d: %s", ImGui::GetMouseCursor(), mouse_cursors_names[ImGui::GetMouseCursor()]); | ||||
|             ImGui::Text("Hover to see mouse cursors:"); | ||||
|             ImGui::SameLine(); ShowHelpMarker("Your application can render a different mouse cursor based on what ImGui::GetMouseCursor() returns. If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, otherwise your backend needs to handle it."); | ||||
|             for (int i = 0; i < ImGuiMouseCursor_Count_; i++) | ||||
|             { | ||||
|                 char label[32]; | ||||
|                 sprintf(label, "Mouse cursor %d", i); | ||||
|                 sprintf(label, "Mouse cursor %d: %s", i, mouse_cursors_names[i]); | ||||
|                 ImGui::Bullet(); ImGui::Selectable(label, false); | ||||
|                 if (ImGui::IsItemHovered()) | ||||
|                     ImGui::SetMouseCursor(i); | ||||
| @@ -2276,8 +2286,8 @@ static void ShowExampleAppFixedOverlay(bool* p_open) | ||||
| } | ||||
|  | ||||
| // Demonstrate using "##" and "###" in identifiers to manipulate ID generation. | ||||
| // Read section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." about ID. | ||||
| static void ShowExampleAppManipulatingWindowTitle(bool*) | ||||
| // This apply to regular items as well. Read FAQ section "How can I have multiple widgets with the same label? Can I have widget without a label? (Yes). A primer on the purpose of labels/IDs." for details. | ||||
| static void ShowExampleAppWindowTitles(bool*) | ||||
| { | ||||
|     // By default, Windows are uniquely identified by their title. | ||||
|     // You can use the "##" and "###" markers to manipulate the display/ID. | ||||
| @@ -2295,7 +2305,7 @@ static void ShowExampleAppManipulatingWindowTitle(bool*) | ||||
|  | ||||
|     // Using "###" to display a changing title but keep a static identifier "AnimatedTitle" | ||||
|     char buf[128]; | ||||
|     sprintf(buf, "Animated title %c %d###AnimatedTitle", "|/-\\"[(int)(ImGui::GetTime()/0.25f)&3], rand()); | ||||
|     sprintf(buf, "Animated title %c %d###AnimatedTitle", "|/-\\"[(int)(ImGui::GetTime()/0.25f)&3], ImGui::GetFrameCount()); | ||||
|     ImGui::SetNextWindowPos(ImVec2(100,300), ImGuiCond_FirstUseEver); | ||||
|     ImGui::Begin(buf); | ||||
|     ImGui::Text("This window has a changing title."); | ||||
| @@ -2781,7 +2791,7 @@ static void ShowExampleAppLog(bool* p_open) | ||||
|     if (time - last_time >= 0.20f && !ImGui::GetIO().KeyCtrl) | ||||
|     { | ||||
|         const char* random_words[] = { "system", "info", "warning", "error", "fatal", "notice", "log" }; | ||||
|         log.AddLog("[%s] Hello, time is %.1f, rand() %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, (int)rand()); | ||||
|         log.AddLog("[%s] Hello, time is %.1f, frame count is %d\n", random_words[rand() % IM_ARRAYSIZE(random_words)], time, ImGui::GetFrameCount()); | ||||
|         last_time = time; | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -22,6 +22,9 @@ | ||||
| #if !defined(alloca) | ||||
| #ifdef _WIN32 | ||||
| #include <malloc.h>     // alloca | ||||
| #if !defined(alloca) | ||||
| #define alloca _alloca  // for clang with MS Codegen | ||||
| #endif | ||||
| #elif defined(__GLIBC__) || defined(__sun) | ||||
| #include <alloca.h>     // alloca | ||||
| #else | ||||
|   | ||||
| @@ -286,6 +286,7 @@ struct IMGUI_API ImRect | ||||
|     void        Translate(const ImVec2& v)      { Min.x += v.x; Min.y += v.y; Max.x += v.x; Max.y += v.y; } | ||||
|     void        ClipWith(const ImRect& clip)    { if (Min.x < clip.Min.x) Min.x = clip.Min.x; if (Min.y < clip.Min.y) Min.y = clip.Min.y; if (Max.x > clip.Max.x) Max.x = clip.Max.x; if (Max.y > clip.Max.y) Max.y = clip.Max.y; } | ||||
|     void        Floor()                         { Min.x = (float)(int)Min.x; Min.y = (float)(int)Min.y; Max.x = (float)(int)Max.x; Max.y = (float)(int)Max.y; } | ||||
|     void        FixInverted()                   { if (Min.x > Max.x) ImSwap(Min.x, Max.x); if (Min.y > Max.y) ImSwap(Min.y, Max.y); } | ||||
|     bool        IsFinite() const                { return Min.x != FLT_MAX; } | ||||
|     ImVec2      GetClosestPoint(ImVec2 p, bool on_edge) const | ||||
|     { | ||||
| @@ -642,7 +643,7 @@ struct IMGUI_API ImGuiDrawContext | ||||
|     ImVec2                  CursorPos; | ||||
|     ImVec2                  CursorPosPrevLine; | ||||
|     ImVec2                  CursorStartPos; | ||||
|     ImVec2                  CursorMaxPos;           // Implicitly calculate the size of our contents, always extending. Saved into window->SizeContents at the end of the frame | ||||
|     ImVec2                  CursorMaxPos;           // Used to implicitly calculate the size of our contents, always growing during the frame. Turned into window->SizeContents at the beginning of next frame | ||||
|     float                   CurrentLineHeight; | ||||
|     float                   CurrentLineTextBaseOffset; | ||||
|     float                   PrevLineHeight; | ||||
| @@ -727,7 +728,8 @@ struct IMGUI_API ImGuiWindow | ||||
|     ImVec2                  Pos;                                // Position rounded-up to nearest pixel | ||||
|     ImVec2                  Size;                               // Current size (==SizeFull or collapsed title bar size) | ||||
|     ImVec2                  SizeFull;                           // Size when non collapsed | ||||
|     ImVec2                  SizeContents;                       // Size of contents (== extents reach of the drawing cursor) from previous frame | ||||
|     ImVec2                  SizeFullAtLastBegin;                // Copy of SizeFull at the end of Begin. This is the reference value we'll use on the next frame to decide if we need scrollbars. | ||||
|     ImVec2                  SizeContents;                       // Size of contents (== extents reach of the drawing cursor) from previous frame. Include decoration, window title, border, menu, etc. | ||||
|     ImVec2                  SizeContentsExplicit;               // Size of contents explicitly set by the user via SetNextWindowContentSize() | ||||
|     ImRect                  ContentsRegionRect;                 // Maximum visible content position in window coordinates. ~~ (SizeContentsExplicit ? SizeContentsExplicit : Size - ScrollbarSizes) - CursorStartPos, per axis | ||||
|     ImVec2                  WindowPadding;                      // Window padding at the time of begin. | ||||
| @@ -751,7 +753,7 @@ struct IMGUI_API ImGuiWindow | ||||
|     int                     AutoFitFramesX, AutoFitFramesY; | ||||
|     bool                    AutoFitOnlyGrows; | ||||
|     int                     AutoFitChildAxises; | ||||
|     int                     AutoPosLastDirection; | ||||
|     ImGuiDir                AutoPosLastDirection; | ||||
|     int                     HiddenFrames; | ||||
|     ImGuiCond               SetWindowPosAllowFlags;             // store condition flags for next SetWindowPos() call. | ||||
|     ImGuiCond               SetWindowSizeAllowFlags;            // store condition flags for next SetWindowSize() call. | ||||
| @@ -873,10 +875,6 @@ namespace ImGui | ||||
|     IMGUI_API void          EndColumns();                                                         // close columns | ||||
|     IMGUI_API void          PushColumnClipRect(int column_index = -1); | ||||
|  | ||||
|     // FIXME-WIP: New Combo API | ||||
|     IMGUI_API bool          BeginCombo(const char* label, const char* preview_value, ImVec2 popup_size = ImVec2(0.0f,0.0f)); | ||||
|     IMGUI_API void          EndCombo(); | ||||
|  | ||||
|     // NB: All position are in absolute pixels coordinates (never using window coordinates internally) | ||||
|     // AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT. | ||||
|     IMGUI_API void          RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user