diff --git a/build/bakefile/nana.bkl b/build/bakefile/nana.bkl
index def827a4..2d7ff43f 100644
--- a/build/bakefile/nana.bkl
+++ b/build/bakefile/nana.bkl
@@ -62,7 +62,6 @@ library nana {
gui/widgets/date_chooser.cpp
gui/widgets/float_listbox.cpp
gui/widgets/form.cpp
- gui/widgets/frame.cpp
gui/widgets/label.cpp
gui/widgets/listbox.cpp
gui/widgets/menubar.cpp
diff --git a/build/codeblocks/nana.cbp b/build/codeblocks/nana.cbp
index d48270ec..188c964d 100644
--- a/build/codeblocks/nana.cbp
+++ b/build/codeblocks/nana.cbp
@@ -88,7 +88,6 @@
-
diff --git a/build/vc2013/nana.vcxproj b/build/vc2013/nana.vcxproj
index 4051495b..7774a855 100644
--- a/build/vc2013/nana.vcxproj
+++ b/build/vc2013/nana.vcxproj
@@ -224,7 +224,6 @@
-
@@ -325,7 +324,6 @@
-
diff --git a/build/vc2013/nana.vcxproj.filters b/build/vc2013/nana.vcxproj.filters
index 4c14b4d7..7337c804 100644
--- a/build/vc2013/nana.vcxproj.filters
+++ b/build/vc2013/nana.vcxproj.filters
@@ -147,9 +147,6 @@
Source Files\nana\gui\widgets
-
- Source Files\nana\gui\widgets
-
Source Files\nana\gui\widgets
@@ -364,9 +361,6 @@
Header Files\gui\widgets
-
- Header Files\gui\widgets
-
Header Files\gui\widgets
diff --git a/build/vc2015/nana.vcxproj b/build/vc2015/nana.vcxproj
index f271092c..37189fc6 100644
--- a/build/vc2015/nana.vcxproj
+++ b/build/vc2015/nana.vcxproj
@@ -218,7 +218,6 @@
-
diff --git a/build/vc2015/nana.vcxproj.filters b/build/vc2015/nana.vcxproj.filters
index c0cfcbdc..8c2e213f 100644
--- a/build/vc2015/nana.vcxproj.filters
+++ b/build/vc2015/nana.vcxproj.filters
@@ -141,9 +141,6 @@
Source Files\gui\widgets
-
- Source Files\gui\widgets
-
Source Files\gui\widgets
diff --git a/build/vc2017/nana.vcxproj b/build/vc2017/nana.vcxproj
index 4e850cc2..85ad8a03 100644
--- a/build/vc2017/nana.vcxproj
+++ b/build/vc2017/nana.vcxproj
@@ -23,7 +23,7 @@
{42D0520F-EFA5-4831-84FE-2B9085301C5D}
Win32Proj
nana
- 10.0.17134.0
+ 10.0.14393.0
@@ -201,7 +201,6 @@
-
@@ -271,7 +270,6 @@
-
diff --git a/build/vc2017/nana.vcxproj.filters b/build/vc2017/nana.vcxproj.filters
index 65431a04..e88f7ed3 100644
--- a/build/vc2017/nana.vcxproj.filters
+++ b/build/vc2017/nana.vcxproj.filters
@@ -151,9 +151,6 @@
Sources\gui\widgets
-
- Sources\gui\widgets
-
Sources\gui\widgets
@@ -366,9 +363,6 @@
Include\gui\widgets
-
- Include\gui\widgets
-
Include\gui
diff --git a/include/nana/config.hpp b/include/nana/config.hpp
index aac360c4..1d88b379 100644
--- a/include/nana/config.hpp
+++ b/include/nana/config.hpp
@@ -1,7 +1,7 @@
/**
* Nana Configuration
* Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2016 Jinhao(cnjinhao@hotmail.com)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -25,10 +25,6 @@
#include "c++defines.hpp"
-//This marco is defined since 1.4 and until 1.5 for deprecating frame widget.
-//This marco and class frame will be removed in version 1.5
-#define WIDGET_FRAME_DEPRECATED
-
//The following basic configurations are ignored when NANA_IGNORE_CONF is defined.
//The NANA_IGNORE_CONF may be specified by CMake generated makefile.
#ifndef NANA_IGNORE_CONF
diff --git a/include/nana/gui/basis.hpp b/include/nana/gui/basis.hpp
index f7ed845d..1e043621 100644
--- a/include/nana/gui/basis.hpp
+++ b/include/nana/gui/basis.hpp
@@ -4,7 +4,7 @@
*
* Basis Implementation
* Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -80,17 +80,11 @@ namespace nana
widget = 0x1,
lite_widget = 0x3,
root = 0x5
-#ifndef WIDGET_FRAME_DEPRECATED
- ,frame = 0x9
-#endif
};
//wait for constexpr
struct widget_tag{ static const flags value = flags::widget; };
struct lite_widget_tag : public widget_tag{ static const flags value = flags::lite_widget; };
struct root_tag : public widget_tag{ static const flags value = flags::root; };
-#ifndef WIDGET_FRAME_DEPRECATED
- struct frame_tag : public widget_tag{ static const flags value = flags::frame; };
-#endif
}// end namespace category
using native_window_type = detail::native_window_handle_impl*;
diff --git a/include/nana/gui/detail/basic_window.hpp b/include/nana/gui/detail/basic_window.hpp
index 5911b598..b79ec168 100644
--- a/include/nana/gui/detail/basic_window.hpp
+++ b/include/nana/gui/detail/basic_window.hpp
@@ -1,7 +1,7 @@
/**
* A Basic Window Widget Definition
* Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -116,10 +116,6 @@ namespace detail
/// bind a native window and baisc_window
void bind_native_window(native_window_type, unsigned width, unsigned height, unsigned extra_width, unsigned extra_height, paint::graphics&);
-#ifndef WIDGET_FRAME_DEPRECATED
- void frame_window(native_window_type);
-#endif
-
bool is_ancestor_of(const basic_window* wd) const;
bool visible_parents() const;
bool displayed() const;
@@ -180,7 +176,8 @@ namespace detail
bool ignore_mouse_focus : 1; ///< A flag indicates whether the widget accepts focus when clicking on it
bool space_click_enabled : 1; ///< A flag indicates whether enable mouse_down/click/mouse_up when pressing and releasing whitespace key.
bool draggable : 1;
- unsigned Reserved :17;
+ bool ignore_child_mapping : 1;
+ unsigned Reserved :16;
unsigned char tab; ///< indicate a window that can receive the keyboard TAB
mouse_action action;
mouse_action action_before;
@@ -206,19 +203,8 @@ namespace detail
struct other_tag
{
-#ifndef WIDGET_FRAME_DEPRECATED
- struct attr_frame_tag
- {
- native_window_type container{nullptr};
- std::vector attach;
- };
-#endif
-
struct attr_root_tag
{
-#ifndef WIDGET_FRAME_DEPRECATED
- container frames; ///< initialization is null, it will be created while creating a frame widget. Refer to WindowManager::create_frame
-#endif
container tabstop;
std::vector effects_edge_nimbus;
basic_window* focus{nullptr};
@@ -237,12 +223,11 @@ namespace detail
update_state upd_state;
dragdrop_status dnd_state{ dragdrop_status::not_ready };
+ container mapping_requester; ///< Children which are ignored to mapping
+
union
{
attr_root_tag * root;
-#ifndef WIDGET_FRAME_DEPRECATED
- attr_frame_tag * frame;
-#endif
}attribute;
other_tag(category::flags);
diff --git a/include/nana/gui/detail/bedrock_pi_data.hpp b/include/nana/gui/detail/bedrock_pi_data.hpp
deleted file mode 100644
index 7404777b..00000000
--- a/include/nana/gui/detail/bedrock_pi_data.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#ifndef NANA_DETAIL_BEDROCK_PI_DATA_HPP
-#define NANA_DETAIL_BEDROCK_PI_DATA_HPP
-
-#include
-
-#include
-#include "color_schemes.hpp"
-#include "events_operation.hpp"
-#include "window_manager.hpp"
-#include
-
-namespace nana
-{
- namespace detail
- {
- struct bedrock::pi_data
- {
- color_schemes scheme;
- events_operation evt_operation;
- window_manager wd_manager;
- std::set auto_form_set;
- bool shortkey_occurred{ false };
-
- struct menu_rep
- {
- core_window_t* taken_window{ nullptr };
- bool delay_restore{ false };
- native_window_type window{ nullptr };
- native_window_type owner{ nullptr };
- bool has_keyboard{ false };
- }menu;
- };
- }
-}
-
-#include
-
-#endif
diff --git a/include/nana/gui/detail/window_manager.hpp b/include/nana/gui/detail/window_manager.hpp
index 0807978d..474cd2ea 100644
--- a/include/nana/gui/detail/window_manager.hpp
+++ b/include/nana/gui/detail/window_manager.hpp
@@ -1,7 +1,7 @@
/**
* Window Manager Implementation
* Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2017 Jinhao(cnjinhao@hotmail.com)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -83,12 +83,6 @@ namespace detail
core_window_t* create_root(core_window_t*, bool nested, rectangle, const appearance&, widget*);
core_window_t* create_widget(core_window_t*, const rectangle&, bool is_lite, widget*);
-#ifndef WIDGET_FRAME_DEPRECATED
- core_window_t* create_frame(core_window_t*, const rectangle&, widget*);
-
- bool insert_frame(core_window_t* frame, native_window);
- bool insert_frame(core_window_t* frame, core_window_t*);
-#endif
void close(core_window_t*);
//destroy
@@ -122,6 +116,7 @@ namespace detail
void refresh_tree(core_window_t*);
void do_lazy_refresh(core_window_t*, bool force_copy_to_screen, bool refresh_tree = false);
+ void map_requester(core_window_t*);
bool get_graphics(core_window_t*, nana::paint::graphics&);
bool get_visual_rectangle(core_window_t*, nana::rectangle&);
diff --git a/include/nana/gui/programming_interface.hpp b/include/nana/gui/programming_interface.hpp
index 56c3ec7d..2fdd3c14 100644
--- a/include/nana/gui/programming_interface.hpp
+++ b/include/nana/gui/programming_interface.hpp
@@ -1,7 +1,7 @@
/*
* Nana GUI Programming Interface Implementation
* Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -95,9 +95,7 @@ namespace API
window create_window(window, bool nested, const rectangle&, const appearance&, widget* attached);
window create_widget(window, const rectangle&, widget* attached);
window create_lite_widget(window, const rectangle&, widget* attached);
-#ifndef WIDGET_FRAME_DEPRECATED
- window create_frame(window, const rectangle&, widget* attached);
-#endif
+
paint::graphics* window_graphics(window);
void delay_restore(bool);
@@ -234,11 +232,6 @@ namespace API
void fullscreen(window, bool);
bool enabled_double_click(window, bool);
-#ifndef WIDGET_FRAME_DEPRECATED
- bool insert_frame(window frame, native_window_type);
- native_window_type frame_container(window frame);
- native_window_type frame_element(window frame, unsigned index);
-#endif
void close_window(window);
void show_window(window, bool show); ///< Sets a window visible state.
void restore_window(window);
diff --git a/include/nana/gui/widgets/frame.hpp b/include/nana/gui/widgets/frame.hpp
deleted file mode 100644
index 82a53d95..00000000
--- a/include/nana/gui/widgets/frame.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * A Frame Implementation
- * Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2015 Jinhao(cnjinhao@hotmail.com)
- *
- * Distributed under the Boost Software License, Version 1.0.
- * (See accompanying file LICENSE_1_0.txt or copy at
- * http://www.boost.org/LICENSE_1_0.txt)
- *
- * @file: nana/gui/widgets/frame.hpp
- *
- * @brief A frame provides a way to contain the platform window in a stdex GUI Window
- */
-
-#ifndef NANA_GUI_WIDGET_FRAME_HPP
-#define NANA_GUI_WIDGET_FRAME_HPP
-
-#include "widget.hpp"
-
-#ifndef WIDGET_FRAME_DEPRECATED
-namespace nana
-{
- /**
- \brief Container for system native windows. Provides an approach to
- display a control that is not written with Nana.GUI in a Nana.GUI window.
-
- Notes:
-
- 1. nana::native_window_type is a type of system handle of windows.
- 2. all the children windows of a nana::frame is topmost to Nana.GUI windows.
- 3. a simple example. Displaying a Windows Edit Control.
-
- nana::frame frame(parent, 0, 0 200, 100);
- HWND frame_handle = reinterpret_cast(frame.container());
- HWND edit = ::CreateWindowExW(WS_EX_CLIENTEDGE, L"EDIT", L"Test",
- WS_CHILD | WS_VISIBLE | WS_BORDER, 0, 0, 200, 100,
- frame_handle, 0, ::GetModuleHandle(0), 0);
- if(edit)
- frame.insert(edit);
-
- */
- class frame: public widget_object
- {
- typedef widget_object base_type;
- public:
- frame();
- frame(window, bool visible);
- frame(window, const rectangle& = rectangle(), bool visible = true);
- bool insert(native_window_type); ///< Inserts a platform native window.
- native_window_type element(unsigned index); ///< Returns the child window through index.
-
- native_window_type container() const; ///< Returns the frame container native window handle.
- };
-}//end namespace nana
-#endif
-#endif
diff --git a/include/nana/gui/widgets/widget.hpp b/include/nana/gui/widgets/widget.hpp
index 7448eea9..fe8fe543 100644
--- a/include/nana/gui/widgets/widget.hpp
+++ b/include/nana/gui/widgets/widget.hpp
@@ -1,7 +1,7 @@
/**
* The fundamental widget class implementation
* Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -499,72 +499,6 @@ namespace nana
std::unique_ptr scheme_;
};//end class widget_object
-#ifndef WIDGET_FRAME_DEPRECATED
- /// Base class of all the classes defined as a frame window. \see nana::frame
- template
- class widget_object: public widget{};
-
- /// Especialization. Base class of all the classes defined as a frame window. \see nana::frame
- template
- class widget_object: public detail::widget_base
- {
- protected:
- typedef int drawer_trigger_t;
- public:
- using scheme_type = Scheme;
- using event_type = Events;
-
- widget_object()
- : events_{ std::make_shared() }, scheme_{ API::dev::make_scheme() }
- {}
-
- ~widget_object()
- {
- API::close_window(handle());
- }
-
- event_type& events() const
- {
- return *events_;
- }
-
- bool create(window parent_wd, bool visible) ///< Creates a no-size (zero-size) widget. in a widget/root window specified by parent_wd.
- {
- return create(parent_wd, rectangle(), visible);
- }
- /// Creates in a widget/root window specified by parent_wd.
- bool create(window parent_wd, const rectangle& r = rectangle(), bool visible = true)
- {
- if(parent_wd && this->empty())
- {
- handle_ = API::dev::create_frame(parent_wd, r, this);
- API::dev::set_events(handle_, events_);
- API::dev::set_scheme(handle_, scheme_.get());
- API::show_window(handle_, visible);
- this->_m_complete_creation();
- }
- return (this->empty() == false);
- }
-
- scheme_type& scheme() const
- {
- return *scheme_;
- }
- private:
- virtual drawer_trigger* get_drawer_trigger()
- {
- return nullptr;
- }
-
- general_events& _m_get_general_events() const override
- {
- return *events_;
- }
- private:
- std::shared_ptr events_;
- std::unique_ptr scheme_;
- };//end class widget_object
-#endif
}//end namespace nana
#include
diff --git a/source/gui/detail/basic_window.cpp b/source/gui/detail/basic_window.cpp
index e0f6b02d..a52b2215 100644
--- a/source/gui/detail/basic_window.cpp
+++ b/source/gui/detail/basic_window.cpp
@@ -1,7 +1,7 @@
/*
* A Basic Window Widget Definition
* Nana C++ Library(http://www.nanapro.org)
-* Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
+* Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -216,40 +216,14 @@ namespace nana
basic_window::other_tag::other_tag(category::flags categ)
: category(categ), active_window(nullptr), upd_state(update_state::none)
{
-#ifndef WIDGET_FRAME_DEPRECATED
- switch(categ)
- {
- case category::flags::root:
- attribute.root = new attr_root_tag;
- break;
- case category::flags::frame:
- attribute.frame = new attr_frame_tag;
- break;
- default:
- attribute.root = nullptr;
- }
-#else
if (category::flags::root == categ)
attribute.root = new attr_root_tag;
else
attribute.root = nullptr;
-#endif
}
basic_window::other_tag::~other_tag()
{
-#ifndef WIDGET_FRAME_DEPRECATED
- switch(category)
- {
- case category::flags::root:
- delete attribute.root;
- break;
- case category::flags::frame:
- delete attribute.frame;
- break;
- default: break;
- }
-#endif
if (category::flags::root == category)
delete attribute.root;
}
@@ -290,14 +264,6 @@ namespace nana
}
}
-#ifndef WIDGET_FRAME_DEPRECATED
- void basic_window::frame_window(native_window_type wd)
- {
- if(category::flags::frame == this->other.category)
- other.attribute.frame->container = wd;
- }
-#endif
-
bool basic_window::is_ancestor_of(const basic_window* wd) const
{
while (wd)
@@ -424,6 +390,7 @@ namespace nana
flags.ignore_menubar_focus = false;
flags.ignore_mouse_focus = false;
flags.space_click_enabled = false;
+ flags.ignore_child_mapping = false;
visible = false;
diff --git a/source/gui/detail/bedrock_pi.cpp b/source/gui/detail/bedrock_pi.cpp
index 221d04c8..65d644ec 100644
--- a/source/gui/detail/bedrock_pi.cpp
+++ b/source/gui/detail/bedrock_pi.cpp
@@ -1,7 +1,7 @@
/*
* A Bedrock Platform-Independent Implementation
* Nana C++ Library(http://www.nanapro.org)
-* Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
+* Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -11,7 +11,7 @@
*/
#include "../../detail/platform_spec_selector.hpp"
-#include
+#include "bedrock_types.hpp"
#include
#include
#include
@@ -94,6 +94,12 @@ namespace nana
};
+ bedrock::core_window_t* bedrock::focus()
+ {
+ auto wd = wd_manager().root(native_interface::get_focus_window());
+ return (wd ? wd->other.attribute.root->focus : nullptr);
+ }
+
events_operation& bedrock::evt_operation()
{
return pi_data_->evt_operation;
@@ -164,17 +170,10 @@ namespace nana
caret_wd->annex.caret_ptr->visible(false);
}
- if (!exposed)
+ if ((!exposed) && (category::flags::root != wd->other.category))
{
- if (category::flags::root != wd->other.category)
- {
- //find an ancestor until it is not a lite_widget
- wd = wd->seek_non_lite_widget_ancestor();
- }
-#ifndef WIDGET_FRAME_DEPRECATED
- else if (category::flags::frame == wd->other.category)
- wd = wd_manager().find_window(wd->root, wd->pos_root.x, wd->pos_root.y);
-#endif
+ //find an ancestor until it is not a lite_widget
+ wd = wd->seek_non_lite_widget_ancestor();
}
wd_manager().refresh_tree(wd);
@@ -609,5 +608,93 @@ namespace nana
throw std::runtime_error("Invalid event code");
}
}
+
+ void bedrock::thread_context_destroy(core_window_t * wd)
+ {
+ auto ctx = get_thread_context(0);
+ if(ctx && ctx->event_window == wd)
+ ctx->event_window = nullptr;
+ }
+
+ void bedrock::thread_context_lazy_refresh()
+ {
+ auto ctx = get_thread_context(0);
+ if(ctx && ctx->event_window)
+ ctx->event_window->other.upd_state = core_window_t::update_state::refreshed;
+ }
+
+ bool bedrock::emit(event_code evt_code, core_window_t* wd, const ::nana::event_arg& arg, bool ask_update, thread_context* thrd, const bool bForce__EmitInternal)
+ {
+ if(wd_manager().available(wd) == false)
+ return false;
+
+ core_window_t * prev_wd = nullptr;
+ if(thrd)
+ {
+ prev_wd = thrd->event_window;
+ thrd->event_window = wd;
+ _m_event_filter(evt_code, wd, thrd);
+ }
+
+ using update_state = basic_window::update_state;
+
+ if (update_state::none == wd->other.upd_state)
+ wd->other.upd_state = update_state::lazy;
+
+ auto ignore_mapping_value = wd->flags.ignore_child_mapping;
+ wd->flags.ignore_child_mapping = true;
+
+ _m_emit_core(evt_code, wd, false, arg, bForce__EmitInternal);
+
+ wd->flags.ignore_child_mapping = ignore_mapping_value;
+
+ bool good_wd = false;
+ if(wd_manager().available(wd))
+ {
+ //A child of wd may not be drawn if it was out of wd's range before wd resized,
+ //so refresh all children of wd when a resized occurs.
+ if(ask_update || (event_code::resized == evt_code) || (update_state::refreshed == wd->other.upd_state))
+ {
+ wd_manager().do_lazy_refresh(wd, false, (event_code::resized == evt_code));
+ }
+ else
+ {
+ wd_manager().map_requester(wd);
+ wd->other.upd_state = update_state::none;
+ }
+
+ good_wd = true;
+ }
+
+
+ if(thrd) thrd->event_window = prev_wd;
+ return good_wd;
+ }
+
+ void bedrock::_m_event_filter(event_code event_id, core_window_t * wd, thread_context * thrd)
+ {
+ auto not_state_cur = (wd->root_widget->other.attribute.root->state_cursor == nana::cursor::arrow);
+
+ switch(event_id)
+ {
+ case event_code::mouse_enter:
+ if (not_state_cur)
+ set_cursor(wd, wd->predef_cursor, thrd);
+ break;
+ case event_code::mouse_leave:
+ if (not_state_cur && (wd->predef_cursor != cursor::arrow))
+ set_cursor(wd, nana::cursor::arrow, thrd);
+ break;
+ case event_code::destroy:
+ if (wd->root_widget->other.attribute.root->state_cursor_window == wd)
+ undefine_state_cursor(wd, thrd);
+
+ if(wd == thrd->cursor.window)
+ set_cursor(wd, cursor::arrow, thrd);
+ break;
+ default:
+ break;
+ }
+ }
}//end namespace detail
}//end namespace nana
diff --git a/source/gui/detail/bedrock_posix.cpp b/source/gui/detail/bedrock_posix.cpp
index c28497f6..07045626 100644
--- a/source/gui/detail/bedrock_posix.cpp
+++ b/source/gui/detail/bedrock_posix.cpp
@@ -1,7 +1,7 @@
/*
* A Bedrock Implementation
* Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -12,7 +12,6 @@
#include "../../detail/platform_spec_selector.hpp"
#if defined(NANA_POSIX) && defined(NANA_X11)
-#include
#include
#include
#include
@@ -22,6 +21,8 @@
#include
#include
+#include "bedrock_types.hpp"
+
namespace nana
{
namespace detail
@@ -52,6 +53,7 @@ namespace detail
};
#pragma pack()
+#if 0 //deprecated
struct bedrock::thread_context
{
unsigned event_pump_ref_count{0};
@@ -83,6 +85,7 @@ namespace detail
cursor.handle = 0;
}
};
+#endif
struct bedrock::private_impl
{
@@ -247,12 +250,14 @@ namespace detail
return bedrock_object;
}
+#if 0 //deprecated
bedrock::core_window_t* bedrock::focus()
{
core_window_t* wd = wd_manager().root(native_interface::get_focus_window());
return (wd ? wd->other.attribute.root->focus : 0);
}
-
+#endif
+
void bedrock::get_key_state(arg_keyboard& arg)
{
XKeyEvent xkey;
@@ -289,6 +294,7 @@ namespace detail
//No implementation for Linux
}
+#if 0 //deprecated
bool bedrock::emit(event_code evt_code, core_window_t* wd, const ::nana::event_arg& arg, bool ask_update, thread_context* thrd, const bool bForce__EmitInternal)
{
if(wd_manager().available(wd) == false)
@@ -304,11 +310,16 @@ namespace detail
using update_state = basic_window::update_state;
- if(wd->other.upd_state == update_state::none)
+ if (update_state::none == wd->other.upd_state)
wd->other.upd_state = update_state::lazy;
+ auto ignore_mapping_value = wd->flags.ignore_child_mapping;
+ wd->flags.ignore_child_mapping = true;
+
_m_emit_core(evt_code, wd, false, arg, bForce__EmitInternal);
+ wd->flags.ignore_child_mapping = ignore_mapping_value;
+
bool good_wd = false;
if(wd_manager().available(wd))
{
@@ -319,7 +330,10 @@ namespace detail
wd_manager().do_lazy_refresh(wd, false, (event_code::resized == evt_code));
}
else
+ {
+ wd_manager().map_requester(wd);
wd->other.upd_state = update_state::none;
+ }
good_wd = true;
}
@@ -328,6 +342,7 @@ namespace detail
if(thrd) thrd->event_window = prev_wd;
return good_wd;
}
+#endif
void assign_arg(arg_mouse& arg, basic_window* wd, unsigned msg, const XEvent& evt)
{
@@ -1346,6 +1361,7 @@ namespace detail
}//end bedrock::event_loop
+#if 0 //deprecated
void bedrock::thread_context_destroy(core_window_t * wd)
{
bedrock::thread_context * thr = get_thread_context(0);
@@ -1359,6 +1375,7 @@ namespace detail
if(thrd && thrd->event_window)
thrd->event_window->other.upd_state = core_window_t::update_state::refreshed;
}
+#endif
//Dynamically set a cursor for a window
void bedrock::set_cursor(core_window_t* wd, nana::cursor cur, thread_context* thrd)
@@ -1430,6 +1447,7 @@ namespace detail
set_cursor(rev_wd, rev_wd->predef_cursor, thrd);
}
+#if 0 //deprecated
void bedrock::_m_event_filter(event_code event_id, core_window_t * wd, thread_context * thrd)
{
auto not_state_cur = (wd->root_widget->other.attribute.root->state_cursor == nana::cursor::arrow);
@@ -1455,6 +1473,7 @@ namespace detail
break;
}
}
+#endif
}//end namespace detail
}//end namespace nana
#endif //NANA_POSIX && NANA_X11
diff --git a/source/gui/detail/bedrock_types.hpp b/source/gui/detail/bedrock_types.hpp
new file mode 100644
index 00000000..f3fb55bc
--- /dev/null
+++ b/source/gui/detail/bedrock_types.hpp
@@ -0,0 +1,101 @@
+#ifndef NANA_GUI_DETAIL_BEDROCK_TYPES_INCLUDED
+#define NANA_GUI_DETAIL_BEDROCK_TYPES_INCLUDED
+
+#include
+
+#include
+#include
+#include
+#include
+#include
+
+namespace nana
+{
+ namespace detail
+ {
+ struct bedrock::pi_data
+ {
+ color_schemes scheme;
+ events_operation evt_operation;
+ window_manager wd_manager;
+ std::set auto_form_set;
+ bool shortkey_occurred{ false };
+
+ struct menu_rep
+ {
+ core_window_t* taken_window{ nullptr };
+ bool delay_restore{ false };
+ native_window_type window{ nullptr };
+ native_window_type owner{ nullptr };
+ bool has_keyboard{ false };
+ }menu;
+ };
+
+
+#ifdef NANA_WINDOWS
+ struct bedrock::thread_context
+ {
+ unsigned event_pump_ref_count{0};
+ int window_count{0}; //The number of windows
+ core_window_t* event_window{nullptr};
+
+ struct platform_detail_tag
+ {
+ wchar_t keychar;
+ }platform;
+
+ struct cursor_tag
+ {
+ core_window_t * window;
+ native_window_type native_handle;
+ nana::cursor predef_cursor;
+ HCURSOR handle;
+ }cursor;
+
+ thread_context()
+ {
+ cursor.window = nullptr;
+ cursor.native_handle = nullptr;
+ cursor.predef_cursor = nana::cursor::arrow;
+ cursor.handle = nullptr;
+ }
+ };
+#else
+ struct bedrock::thread_context
+ {
+ unsigned event_pump_ref_count{0};
+
+ int window_count{0}; //The number of windows
+ core_window_t* event_window{nullptr};
+ bool is_alt_pressed{false};
+ bool is_ctrl_pressed{false};
+
+ struct platform_detail_tag
+ {
+ native_window_type motion_window;
+ nana::point motion_pointer_pos;
+ }platform;
+
+ struct cursor_tag
+ {
+ core_window_t * window;
+ native_window_type native_handle;
+ nana::cursor predef_cursor;
+ Cursor handle;
+ }cursor;
+
+ thread_context()
+ {
+ cursor.window = nullptr;
+ cursor.native_handle = nullptr;
+ cursor.predef_cursor = nana::cursor::arrow;
+ cursor.handle = 0;
+ }
+ };
+#endif
+ }
+}
+
+#include
+
+#endif
\ No newline at end of file
diff --git a/source/gui/detail/bedrock_windows.cpp b/source/gui/detail/bedrock_windows.cpp
index 674fe475..5c1f9701 100644
--- a/source/gui/detail/bedrock_windows.cpp
+++ b/source/gui/detail/bedrock_windows.cpp
@@ -1,7 +1,7 @@
/**
* A Bedrock Implementation
* Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -14,8 +14,8 @@
#include "../../detail/platform_spec_selector.hpp"
#if defined(NANA_WINDOWS)
-#include
-#include
+//#include //deprecated
+#include "bedrock_types.hpp"
#include
#include
#include
@@ -36,6 +36,8 @@
#define WM_MOUSEHWHEEL 0x020E
#endif
+#include "bedrock_types.hpp"
+
typedef void (CALLBACK *win_event_proc_t)(HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject, LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime);
namespace nana
@@ -135,6 +137,7 @@ namespace detail
};
#pragma pack()
+#if 0 //deprecated
struct bedrock::thread_context
{
unsigned event_pump_ref_count{0};
@@ -162,6 +165,7 @@ namespace detail
cursor.handle = nullptr;
}
};
+#endif
struct bedrock::private_impl
{
@@ -1594,11 +1598,13 @@ namespace detail
return ::DefWindowProc(root_window, message, wParam, lParam);
}
+#if 0 //deprecated
auto bedrock::focus() ->core_window_t*
{
core_window_t* wd = wd_manager().root(native_interface::get_focus_window());
return (wd ? wd->other.attribute.root->focus : nullptr);
}
+#endif
void bedrock::get_key_state(arg_keyboard& kb)
{
@@ -1677,6 +1683,7 @@ namespace detail
}
}
+#if 0 //deprecated
bool bedrock::emit(event_code evt_code, core_window_t* wd, const ::nana::event_arg& arg, bool ask_update, thread_context* thrd, const bool bForce__EmitInternal)
{
if (wd_manager().available(wd) == false)
@@ -1695,16 +1702,27 @@ namespace detail
if (update_state::none == wd->other.upd_state)
wd->other.upd_state = update_state::lazy;
+ auto ignore_mapping_value = wd->flags.ignore_child_mapping;
+ wd->flags.ignore_child_mapping = true;
+
_m_emit_core(evt_code, wd, false, arg, bForce__EmitInternal);
+ wd->flags.ignore_child_mapping = ignore_mapping_value;
+
bool good_wd = false;
if (wd_manager().available(wd))
{
- //Ignore ask_update if update state is refreshed.
- if (ask_update || (update_state::refreshed == wd->other.upd_state))
- wd_manager().do_lazy_refresh(wd, false);
+ //A child of wd may not be drawn if it was out of wd's range before wd resized,
+ //so refresh all children of wd when a resized occurs.
+ if(ask_update || (event_code::resized == evt_code) || (update_state::refreshed == wd->other.upd_state))
+ {
+ wd_manager().do_lazy_refresh(wd, false, (event_code::resized == evt_code));
+ }
else
+ {
+ wd_manager().map_requester(wd);
wd->other.upd_state = update_state::none;
+ }
good_wd = true;
}
@@ -1712,6 +1730,7 @@ namespace detail
if (thrd) thrd->event_window = prev_event_wd;
return good_wd;
}
+#endif
const wchar_t* translate(cursor id)
{
@@ -1740,7 +1759,7 @@ namespace detail
}
return name;
}
-
+#if 0 //deprecated
void bedrock::thread_context_destroy(core_window_t * wd)
{
auto * thr = get_thread_context(0);
@@ -1754,7 +1773,7 @@ namespace detail
if (thrd && thrd->event_window)
thrd->event_window->other.upd_state = core_window_t::update_state::refreshed;
}
-
+#endif
//Dynamically set a cursor for a window
void bedrock::set_cursor(core_window_t* wd, nana::cursor cur, thread_context* thrd)
{
@@ -1847,7 +1866,7 @@ namespace detail
::ShowCursor(FALSE);
::SetCursor(rev_handle);
}
-
+#if 0 //deprecated
void bedrock::_m_event_filter(event_code event_id, core_window_t * wd, thread_context * thrd)
{
auto not_state_cur = (wd->root_widget->other.attribute.root->state_cursor == nana::cursor::arrow);
@@ -1873,6 +1892,7 @@ namespace detail
break;
}
}
+#endif
}//end namespace detail
}//end namespace nana
#endif //NANA_WINDOWS
diff --git a/source/gui/detail/window_layout.cpp b/source/gui/detail/window_layout.cpp
index 19ec8133..12b5f86f 100644
--- a/source/gui/detail/window_layout.cpp
+++ b/source/gui/detail/window_layout.cpp
@@ -1,7 +1,7 @@
/*
* Window Layout Implementation
* Nana C++ Library(http://www.nanapro.org)
-* Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
+* Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -66,20 +66,9 @@ namespace nana
nana::point p_src;
for (auto & el : blocks)
{
-#ifndef WIDGET_FRAME_DEPRECATED
- if (category::flags::frame == el.window->other.category)
- {
- native_window_type container = el.window->other.attribute.frame->container;
- native_interface::refresh_window(container);
- graph.bitblt(el.r, container);
- }
- else
-#endif
- {
- p_src.x = el.r.x - el.window->pos_root.x;
- p_src.y = el.r.y - el.window->pos_root.y;
- graph.bitblt(el.r, (el.window->drawer.graphics), p_src);
- }
+ p_src.x = el.r.x - el.window->pos_root.x;
+ p_src.y = el.r.y - el.window->pos_root.y;
+ graph.bitblt(el.r, (el.window->drawer.graphics), p_src);
_m_paste_children(el.window, false, req_refresh_children, el.r, graph, nana::point{});
}
diff --git a/source/gui/detail/window_manager.cpp b/source/gui/detail/window_manager.cpp
index c9184053..78ea0927 100644
--- a/source/gui/detail/window_manager.cpp
+++ b/source/gui/detail/window_manager.cpp
@@ -1,7 +1,7 @@
/*
* Window Manager Implementation
* Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -513,12 +513,7 @@ namespace detail
if (owner->flags.destroying)
throw std::runtime_error("the specified owner is destoryed");
-#ifndef WIDGET_FRAME_DEPRECATED
- native = (category::flags::frame == owner->other.category ?
- owner->other.attribute.frame->container : owner->root_widget->root);
-#else
native = owner->root_widget->root;
-#endif
r.x += owner->pos_root.x;
r.y += owner->pos_root.y;
}
@@ -550,11 +545,6 @@ namespace detail
wd->bind_native_window(result.native_handle, result.width, result.height, result.extra_width, result.extra_height, value->root_graph);
impl_->wd_register.insert(wd);
-#ifndef WIDGET_FRAME_DEPRECATED
- if (owner && (category::flags::frame == owner->other.category))
- insert_frame(owner, wd);
-#endif
-
bedrock::inc_window(wd->thread_id);
this->icon(wd, impl_->default_icon_small, impl_->default_icon_big);
return wd;
@@ -562,56 +552,6 @@ namespace detail
return nullptr;
}
-#ifndef WIDGET_FRAME_DEPRECATED
- window_manager::core_window_t* window_manager::create_frame(core_window_t* parent, const rectangle& r, widget* wdg)
- {
- //Thread-Safe Required!
- std::lock_guard lock(mutex_);
-
- if (impl_->wd_register.available(parent) == false) return nullptr;
-
- core_window_t * wd = new core_window_t(parent, widget_notifier_interface::get_notifier(wdg), r, (category::frame_tag**)nullptr);
- wd->frame_window(native_interface::create_child_window(parent->root, rectangle(wd->pos_root.x, wd->pos_root.y, r.width, r.height)));
- impl_->wd_register.insert(wd, wd->thread_id);
-
- //Insert the frame_widget into its root frames container.
- wd->root_widget->other.attribute.root->frames.push_back(wd);
- return (wd);
- }
-
-
- bool window_manager::insert_frame(core_window_t* frame, native_window wd)
- {
- if(frame)
- {
- //Thread-Safe Required!
- std::lock_guard lock(mutex_);
- if(category::flags::frame == frame->other.category)
- frame->other.attribute.frame->attach.push_back(wd);
- return true;
- }
- return false;
- }
-
- bool window_manager::insert_frame(core_window_t* frame, core_window_t* wd)
- {
- if(frame)
- {
- //Thread-Safe Required!
- std::lock_guard lock(mutex_);
- if(category::flags::frame == frame->other.category)
- {
- if (impl_->wd_register.available(wd) && (category::flags::root == wd->other.category) && wd->root != frame->root)
- {
- frame->other.attribute.frame->attach.push_back(wd->root);
- return true;
- }
- }
- }
- return false;
- }
-#endif
-
window_manager::core_window_t* window_manager::create_widget(core_window_t* parent, const rectangle& r, bool is_lite, widget* wdg)
{
//Thread-Safe Required!
@@ -706,11 +646,7 @@ namespace detail
std::lock_guard lock(mutex_);
if (impl_->wd_register.available(wd) == false) return;
-#ifndef WIDGET_FRAME_DEPRECATED
- if((category::flags::root == wd->other.category) || (category::flags::frame != wd->other.category))
-#else
if (category::flags::root == wd->other.category)
-#endif
{
impl_->misc_register.erase(wd->root);
impl_->wd_register.remove(wd);
@@ -749,20 +685,7 @@ namespace detail
if(visible != wd->visible)
{
-#ifndef WIDGET_FRAME_DEPRECATED
- native_window_type nv = nullptr;
- switch(wd->other.category)
- {
- case category::flags::root:
- nv = wd->root; break;
- case category::flags::frame:
- nv = wd->other.attribute.frame->container; break;
- default: //category::widget_tag, category::lite_widget_tag
- break;
- }
-#else
auto nv = (category::flags::root == wd->other.category ? wd->root : nullptr);
-#endif
if(visible && wd->effect.bground)
window_layer::make_bground(wd);
@@ -1012,22 +935,11 @@ namespace detail
return false;
}
}
-#ifndef WIDGET_FRAME_DEPRECATED
- else if(category::flags::frame == wd->other.category)
- {
- native_interface::window_size(wd->other.attribute.frame->container, sz);
- for(auto natwd : wd->other.attribute.frame->attach)
- native_interface::window_size(natwd, sz);
- }
-#endif
- else
+ else if(wd->effect.bground && wd->parent)
{
//update the bground buffer of glass window.
- if(wd->effect.bground && wd->parent)
- {
- wd->other.glass_buffer.make(sz);
- window_layer::make_bground(wd);
- }
+ wd->other.glass_buffer.make(sz);
+ window_layer::make_bground(wd);
}
}
@@ -1072,8 +984,19 @@ namespace detail
auto parent = wd->parent;
while (parent)
{
- if (parent->flags.refreshing)
+ if(parent->flags.ignore_child_mapping || parent->flags.refreshing)
+ {
+ auto top = parent;
+ while(parent->parent)
+ {
+ parent = parent->parent;
+ if(parent->flags.ignore_child_mapping || parent->flags.refreshing)
+ top = parent;
+ }
+
+ top->other.mapping_requester.push_back(wd);
return;
+ }
parent = parent->parent;
}
@@ -1168,7 +1091,24 @@ namespace detail
window_layer::paint(wd, paint_operation::try_refresh, refresh_tree); //only refreshing if it has an invisible parent
}
wd->other.upd_state = core_window_t::update_state::none;
- return;
+ wd->other.mapping_requester.clear();
+ }
+
+ void window_manager::map_requester(core_window_t* wd)
+ {
+ //Thread-Safe Required!
+ std::lock_guard lock(mutex_);
+
+ if (false == impl_->wd_register.available(wd))
+ return;
+
+ if (wd->visible_parents())
+ {
+ for(auto requestor : wd->other.mapping_requester)
+ this->map(requestor, true);
+ }
+
+ wd->other.mapping_requester.clear();
}
//get_graphics
@@ -1758,17 +1698,6 @@ namespace detail
}
}
-#ifndef WIDGET_FRAME_DEPRECATED
- if (category::flags::frame == wd->other.category)
- {
- //remove the frame handle from the WM frames manager.
- utl::erase(root_attr->frames, wd);
-
- if (established)
- pa_root_attr->frames.push_back(wd);
- }
-#endif
-
if (established)
{
wd->parent = for_new;
@@ -1857,18 +1786,6 @@ namespace detail
wd->drawer.detached();
wd->widget_notifier->destroy();
-#ifndef WIDGET_FRAME_DEPRECATED
- if(category::flags::frame == wd->other.category)
- {
- //The frame widget does not have an owner, and close their element windows without activating owner.
- //close the frame container window, it's a native window.
- for(auto i : wd->other.attribute.frame->attach)
- native_interface::close_window(i);
-
- native_interface::close_window(wd->other.attribute.frame->container);
- }
-#endif
-
if(wd->other.category != category::flags::root) //Not a root window
impl_->wd_register.remove(wd);
@@ -1881,18 +1798,9 @@ namespace detail
if(category::flags::root != wd->other.category) //A root widget always starts at (0, 0) and its childs are not to be changed
{
wd->pos_root += delta;
-#ifndef WIDGET_FRAME_DEPRECATED
- if (category::flags::frame != wd->other.category)
- {
- if (wd->annex.caret_ptr && wd->annex.caret_ptr->visible())
- wd->annex.caret_ptr->update();
- }
- else
- native_interface::move_window(wd->other.attribute.frame->container, wd->pos_root.x, wd->pos_root.y);
-#else
+
if (wd->annex.caret_ptr && wd->annex.caret_ptr->visible())
wd->annex.caret_ptr->update();
-#endif
if (wd->displayed() && wd->effect.bground)
window_layer::make_bground(wd);
diff --git a/source/gui/programming_interface.cpp b/source/gui/programming_interface.cpp
index 9791d2fd..3218069d 100644
--- a/source/gui/programming_interface.cpp
+++ b/source/gui/programming_interface.cpp
@@ -1,7 +1,7 @@
/*
* Nana GUI Programming Interface Implementation
* Nana C++ Library(http://www.nanapro.org)
- * Copyright(C) 2003-2018 Jinhao(cnjinhao@hotmail.com)
+ * Copyright(C) 2003-2019 Jinhao(cnjinhao@hotmail.com)
*
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
@@ -303,13 +303,6 @@ namespace API
return reinterpret_cast(restrict::wd_manager().create_widget(reinterpret_cast(parent), r, true, wdg));
}
-#ifndef WIDGET_FRAME_DEPRECATED
- window create_frame(window parent, const rectangle& r, widget* wdg)
- {
- return reinterpret_cast(restrict::wd_manager().create_frame(reinterpret_cast(parent), r, wdg));
- }
-#endif
-
paint::graphics* window_graphics(window wd)
{
internal_scope_guard isg;
@@ -600,34 +593,6 @@ namespace API
reinterpret_cast(wd)->flags.fullscreen = v;
}
-#ifndef WIDGET_FRAME_DEPRECATED
- bool insert_frame(window frame, native_window_type native_window)
- {
- return restrict::wd_manager().insert_frame(reinterpret_cast(frame), native_window);
- }
-
- native_window_type frame_container(window frame)
- {
- auto frm = reinterpret_cast(frame);
- internal_scope_guard lock;
- if (restrict::wd_manager().available(frm) && (frm->other.category == category::flags::frame))
- return frm->other.attribute.frame->container;
- return nullptr;
- }
-
- native_window_type frame_element(window frame, unsigned index)
- {
- auto frm = reinterpret_cast(frame);
- internal_scope_guard lock;
- if (restrict::wd_manager().available(frm) && (frm->other.category == category::flags::frame))
- {
- if (index < frm->other.attribute.frame->attach.size())
- return frm->other.attribute.frame->attach.at(index);
- }
- return nullptr;
- }
-#endif
-
void close_window(window wd)
{
restrict::wd_manager().close(reinterpret_cast(wd));
diff --git a/source/gui/widgets/frame.cpp b/source/gui/widgets/frame.cpp
deleted file mode 100644
index 7b9e7af2..00000000
--- a/source/gui/widgets/frame.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * A Frame Implementation
- * Copyright(C) 2003-2013 Jinhao(cnjinhao@hotmail.com)
- *
- * Distributed under the Boost Software License, Version 1.0.
- * (See accompanying file LICENSE_1_0.txt or copy at
- * http://www.boost.org/LICENSE_1_0.txt)
- *
- * @file: nana/gui/widgets/frame.cpp
- *
- * A frame provides a way to contain the platform window in a stdex GUI Window
- */
-
-#include
-
-#ifndef WIDGET_FRAME_DEPRECATED
-
-namespace nana
-{
- //class frame:: public widget_object
- frame::frame(){}
-
- frame::frame(window wd, bool visible)
- {
- create(wd, rectangle(), visible);
- }
-
- frame::frame(window wd, const nana::rectangle& r, bool visible)
- {
- create(wd, r, visible);
- }
-
- bool frame::insert(native_window_type wd)
- {
- return API::insert_frame(handle(), wd);
- }
-
- native_window_type frame::element(unsigned index)
- {
- return API::frame_element(handle(), index);
- }
-
- native_window_type frame::container() const
- {
- return API::frame_container(handle());
- }
- //end class frame
-}//end namespace nana
-
-#endif
-