Color Schemes

textbox.scheme().selection = color(colors::red);
Set the text selection background color
This commit is contained in:
cnjinhao 2014-12-28 17:16:52 +08:00
parent ad7c36be3f
commit ecbf71b7e2
38 changed files with 506 additions and 166 deletions

View File

@ -52,6 +52,7 @@
<Unit filename="../../source/gui/detail/basic_window.cpp" />
<Unit filename="../../source/gui/detail/bedrock_pi.cpp" />
<Unit filename="../../source/gui/detail/bedrock_selector.cpp" />
<Unit filename="../../source/gui/detail/color_schemes.cpp" />
<Unit filename="../../source/gui/detail/drawer.cpp" />
<Unit filename="../../source/gui/detail/element_store.cpp" />
<Unit filename="../../source/gui/detail/events_operation.cpp" />

View File

@ -1,51 +1,26 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_layout_file>
<ActiveTarget name="Debug" />
<File name="..\..\source\gui\widgets\date_chooser.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="457" topLine="3" />
</Cursor>
</File>
<File name="..\..\source\audio\detail\buffer_preparation.cpp" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1924" topLine="62" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\tabbar.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="18615" topLine="760" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\textbox.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="11188" topLine="459" />
</Cursor>
</File>
<File name="..\..\source\audio\detail\audio_device.cpp" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6256" topLine="215" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\toolbar.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2244" topLine="84" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\treebox.cpp" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="15535" topLine="539" />
</Cursor>
</File>
<File name="..\..\source\gui\detail\native_window_interface.cpp" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="4901" topLine="171" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\listbox.cpp" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="12428" topLine="532" />
</Cursor>
</File>
<File name="..\..\source\gui\detail\window_layout.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5198" topLine="161" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\menu.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="27717" topLine="1044" />
</Cursor>
</File>
<File name="..\..\source\gui\detail\window_manager.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="30124" topLine="1046" />
@ -56,14 +31,9 @@
<Cursor1 position="1316" topLine="59" />
</Cursor>
</File>
<File name="..\..\source\paint\graphics.cpp" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="..\..\source\audio\detail\audio_device.cpp" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="30961" topLine="1020" />
</Cursor>
</File>
<File name="..\..\source\gui\element.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="20890" topLine="542" />
<Cursor1 position="6256" topLine="215" />
</Cursor>
</File>
<File name="..\..\source\paint\image.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -71,14 +41,29 @@
<Cursor1 position="3714" topLine="168" />
</Cursor>
</File>
<File name="..\..\source\audio\detail\buffer_preparation.cpp" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1924" topLine="62" />
</Cursor>
</File>
<File name="..\..\source\gui\element.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="20890" topLine="542" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\tabbar.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="18615" topLine="760" />
</Cursor>
</File>
<File name="..\..\source\gui\filebox.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="22934" topLine="871" />
</Cursor>
</File>
<File name="..\..\source\gui\msgbox.cpp" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="..\..\source\gui\widgets\textbox.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="48249" topLine="407" />
<Cursor1 position="11188" topLine="459" />
</Cursor>
</File>
<File name="..\..\source\paint\text_renderer.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -86,34 +71,24 @@
<Cursor1 position="5894" topLine="205" />
</Cursor>
</File>
<File name="..\..\source\gui\programming_interface.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5022" topLine="159" />
</Cursor>
</File>
<File name="..\..\source\charset.cpp" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="412" topLine="15" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\listbox.cpp" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="..\..\source\gui\widgets\toolbar.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="12428" topLine="532" />
<Cursor1 position="2244" topLine="84" />
</Cursor>
</File>
<File name="..\..\source\threads\pool.cpp" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="..\..\source\gui\msgbox.cpp" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5569" topLine="249" />
<Cursor1 position="48249" topLine="407" />
</Cursor>
</File>
<File name="..\..\source\gui\tooltip.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="..\..\source\gui\widgets\treebox.cpp" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="4739" topLine="194" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\menu.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="27717" topLine="1044" />
<Cursor1 position="15535" topLine="539" />
</Cursor>
</File>
<File name="..\..\source\detail\platform_spec_selector.cpp" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -121,11 +96,41 @@
<Cursor1 position="587" topLine="2" />
</Cursor>
</File>
<File name="..\..\source\gui\programming_interface.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5022" topLine="159" />
</Cursor>
</File>
<File name="..\..\source\threads\pool.cpp" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="5569" topLine="249" />
</Cursor>
</File>
<File name="..\..\source\filesystem\fs_utility.cpp" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1562" topLine="57" />
</Cursor>
</File>
<File name="..\..\source\gui\tooltip.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="4739" topLine="194" />
</Cursor>
</File>
<File name="..\..\source\gui\animation.cpp" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1164" topLine="43" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\button.cpp" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="7080" topLine="291" />
</Cursor>
</File>
<File name="..\..\source\paint\graphics.cpp" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="30961" topLine="1020" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\categorize.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6160" topLine="196" />
@ -136,19 +141,14 @@
<Cursor1 position="6998" topLine="275" />
</Cursor>
</File>
<File name="..\..\source\filesystem\fs_utility.cpp" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1562" topLine="57" />
</Cursor>
</File>
<File name="..\..\source\gui\widgets\combox.cpp" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="16572" topLine="610" />
</Cursor>
</File>
<File name="..\..\source\gui\animation.cpp" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="..\..\source\gui\widgets\date_chooser.cpp" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1164" topLine="43" />
<Cursor1 position="457" topLine="3" />
</Cursor>
</File>
</CodeBlocks_layout_file>

Binary file not shown.

View File

@ -99,6 +99,7 @@
<ClCompile Include="..\..\source\gui\basis.cpp" />
<ClCompile Include="..\..\source\gui\detail\basic_window.cpp" />
<ClCompile Include="..\..\source\gui\detail\bedrock_pi.cpp" />
<ClCompile Include="..\..\source\gui\detail\color_schemes.cpp" />
<ClCompile Include="..\..\source\gui\detail\drawer.cpp" />
<ClCompile Include="..\..\source\gui\detail\element_store.cpp" />
<ClCompile Include="..\..\source\gui\detail\events_operation.cpp" />

View File

@ -291,5 +291,8 @@
<ClCompile Include="..\..\source\internationalization.cpp">
<Filter>Source Files\nana</Filter>
</ClCompile>
<ClCompile Include="..\..\source\gui\detail\color_schemes.cpp">
<Filter>Source Files\nana\gui\detail</Filter>
</ClCompile>
</ItemGroup>
</Project>

View File

@ -18,7 +18,6 @@
//Windows:
#define NANA_WINDOWS 1
#define PLATFORM_SPEC_HPP <nana/detail/win32/platform_spec.hpp>
#define GUI_BEDROCK_HPP <nana/gui/detail/bedrock.hpp>
//Test if it is MINGW
#if defined(__MINGW32__)
@ -31,8 +30,6 @@
#define NANA_LINUX 1
#define NANA_X11 1
#define PLATFORM_SPEC_HPP <nana/detail/linux_X11/platform_spec.hpp>
#define GUI_BEDROCK_HPP <nana/gui/detail/bedrock.hpp>
#define STD_CODECVT_NOT_SUPPORTED
#endif

View File

@ -14,7 +14,7 @@
#define NANA_GUI_DETAIL_BASIC_WINDOW_HPP
#include "drawer.hpp"
#include "events_holder.hpp"
#include "../basis.hpp"
#include "widget_colors.hpp"
#include <nana/basic_types.hpp>
#include <nana/system/platform.hpp>
#include <nana/gui/effects.hpp>
@ -181,6 +181,8 @@ namespace detail
color bgcolor;
color activated;
}colors;
widget_colors* expr_colors{ nullptr };
struct
{

View File

@ -16,6 +16,7 @@
#include "events_operation.hpp"
#include "runtime_manager.hpp"
#include "general_events.hpp"
#include "color_schemes.hpp"
#include "internal_scope_guard.hpp"
namespace nana
@ -76,6 +77,9 @@ namespace detail
void set_cursor(core_window_t*, nana::cursor, thread_context*);
void define_state_cursor(core_window_t*, nana::cursor, thread_context*);
void undefine_state_cursor(core_window_t*, thread_context*);
widget_colors& get_scheme_template(scheme_factory_base&&);
std::unique_ptr<widget_colors> make_scheme(scheme_factory_base&&);
public:
window_manager_t wd_manager;
events_operation evt_operation;
@ -92,6 +96,8 @@ namespace detail
private:
static bedrock bedrock_object;
struct pi_data;
pi_data* pi_data_;
struct private_impl;
private_impl *impl_;
};//end class bedrock

View File

@ -0,0 +1,18 @@
#ifndef NANA_DETAIL_BEDROCK_PI_DATA_HPP
#define NANA_DETAIL_BEDROCK_PI_DATA_HPP
#include <nana/gui/detail/bedrock.hpp>
#include "color_schemes.hpp"
namespace nana
{
namespace detail
{
struct bedrock::pi_data
{
color_schemes scheme;
};
}
}
#endif

View File

@ -0,0 +1,80 @@
/*
* Color Schemes
* Nana C++ Library(http://www.nanapro.org)
* Copyright(C) 2003-2014 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/color_schemes.hpp
* @description:
*/
#ifndef NANA_DETAIL_COLOR_SCHEMES_HPP
#define NANA_DETAIL_COLOR_SCHEMES_HPP
#include "widget_colors.hpp"
#include <nana/pat/cloneable.hpp>
namespace nana
{
namespace detail
{
class scheme_factory_base
{
public:
struct factory_identifier{};
virtual ~scheme_factory_base() = default;
virtual factory_identifier* get_id() const = 0;
virtual std::unique_ptr<widget_colors> create() = 0;
virtual std::unique_ptr<widget_colors> create(widget_colors&) = 0;
};
template<typename Scheme>
class scheme_factory
: public scheme_factory_base
{
private:
factory_identifier* get_id() const override
{
return &fid_;
}
std::unique_ptr<widget_colors> create() override
{
return std::unique_ptr<widget_colors>(new Scheme);
}
std::unique_ptr<widget_colors> create(widget_colors& other) override
{
return std::unique_ptr<widget_colors>{new Scheme(static_cast<Scheme&>(other))};
}
private:
static factory_identifier fid_;
};
template<typename Scheme>
scheme_factory_base::factory_identifier scheme_factory<Scheme>::fid_;
class color_schemes
{
struct implement;
color_schemes(const color_schemes&) = delete;
color_schemes(color_schemes&&) = delete;
color_schemes& operator=(const color_schemes&) = delete;
color_schemes& operator=(color_schemes&&) = delete;
public:
using scheme = widget_colors;
color_schemes();
~color_schemes();
scheme& scheme_template(scheme_factory_base&&);
std::unique_ptr<scheme> create(scheme_factory_base&&);
private:
implement * impl_;
};
}//end namespace detail;
}//end namespace nana
#endif

View File

@ -28,21 +28,21 @@ namespace nana
class event_interface
{
public:
virtual ~event_interface(){}
virtual ~event_interface() = default;
virtual void remove(event_handle) = 0;
};
class docker_interface
{
public:
virtual ~docker_interface(){}
virtual ~docker_interface() = default;
virtual event_interface* get_event() const = 0;
};
class event_arg_interface
{
public:
virtual ~event_arg_interface(){}
virtual ~event_arg_interface() = default;
};
void events_operation_register(event_handle);
@ -471,6 +471,7 @@ namespace nana
basic_event<arg_move> move;
basic_event<arg_resizing> resizing;
basic_event<arg_resized> resized;
basic_event<arg_destroy> destroy;
};

View File

@ -0,0 +1,44 @@
/*
* Color Schemes
* Nana C++ Library(http://www.nanapro.org)
* Copyright(C) 2003-2014 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/color_schemes.hpp
* @description:
*/
#ifndef NANA_DETAIL_WIDGET_COLORS_HPP
#define NANA_DETAIL_WIDGET_COLORS_HPP
#include <nana/gui/basis.hpp>
#include <memory>
namespace nana
{
class color_proxy
{
public:
color_proxy(const color_proxy&);
color_proxy(color_rgb);
color_proxy(colors);
color_proxy& operator=(const color_proxy&);
color_proxy& operator=(const ::nana::color&);
color get_color() const;
operator color() const;
private:
std::shared_ptr<color> color_;
};//end namespace color_proxy
struct widget_colors
{
virtual ~widget_colors() = default;
color_proxy activated{ static_cast<color_rgb>(0x60C8FD) };
color_proxy background{colors::button_face};
color_proxy foreground{colors::black};
};
}
#endif

View File

@ -13,7 +13,7 @@
#ifndef NANA_GUI_PROGRAMMING_INTERFACE_HPP
#define NANA_GUI_PROGRAMMING_INTERFACE_HPP
#include <nana/config.hpp>
#include GUI_BEDROCK_HPP
#include "detail/bedrock.hpp"
#include "effects.hpp"
#include "detail/general_events.hpp"
#include <nana/paint/image.hpp>
@ -45,6 +45,16 @@ namespace API
}
bool set_events(window, const std::shared_ptr<general_events>&);
template<typename Scheme>
std::unique_ptr<Scheme> make_scheme()
{
return std::unique_ptr<Scheme>(
static_cast<Scheme*>(::nana::detail::bedrock::instance().make_scheme(::nana::detail::scheme_factory<Scheme>()).release()));
}
void set_scheme(window, widget_colors*);
widget_colors* get_scheme(window);
void attach_drawer(widget&, drawer_trigger&);
nana::string window_caption(window);
@ -66,6 +76,13 @@ namespace API
void exit();
template<typename Scheme>
Scheme& get_scheme()
{
auto & brock = ::nana::detail::bedrock::instance();
return static_cast<Scheme&>(brock.get_scheme_template(::nana::detail::scheme_factory<Scheme>{}));
}
nana::string transform_shortkey_text(nana::string text, nana::string::value_type &shortkey, nana::string::size_type *skpos);
bool register_shortkey(window, unsigned long);
void unregister_shortkey(window);

View File

@ -14,6 +14,7 @@
#define NANA_GUI_WIDGETS_COMBOX_HPP
#include "widget.hpp"
#include "float_listbox.hpp"
#include "skeletons/text_editor_scheme.hpp"
#include <nana/key_type.hpp>
#include <nana/concepts.hpp>
#include <functional>
@ -160,7 +161,7 @@ namespace nana
}//end namespace drawerbase
class combox
: public widget_object<category::widget_tag, drawerbase::combox::trigger, drawerbase::combox::combox_events>,
: public widget_object<category::widget_tag, drawerbase::combox::trigger, drawerbase::combox::combox_events, ::nana::widgets::skeletons::text_editor_scheme>,
public nana::concepts::any_objective<std::size_t, 1>
{
public:

View File

@ -47,6 +47,7 @@ namespace nana
form(window, const rectangle&, const appearance& = {});
void modality() const;
void wait_for_this();
};
class nested_form : public widget_object<category::root_tag, drawerbase::form::trigger, detail::events_root_extension>

View File

@ -14,9 +14,9 @@
#ifndef NANA_GUI_SKELETONS_TEXT_EDITOR_HPP
#define NANA_GUI_SKELETONS_TEXT_EDITOR_HPP
#include "textbase.hpp"
#include "text_editor_scheme.hpp"
#include <nana/gui/widgets/scroll.hpp>
#include <nana/unicode_bidi.hpp>
#include <memory>
namespace nana{ namespace widgets
{
@ -128,18 +128,18 @@ namespace nana{ namespace widgets
class undo_input_text;
class undo_move_text;
public:
typedef nana::char_t char_type;
typedef ::nana::char_t char_type;
typedef textbase<char_type>::size_type size_type;
typedef textbase<char_type>::string_type string_type;
typedef nana::paint::graphics & graph_reference;
typedef ::nana::paint::graphics & graph_reference;
struct ext_renderer_tag
{
std::function<void(graph_reference, const nana::rectangle& text_area, const ::nana::color&)> background;
};
text_editor(window, graph_reference);
text_editor(window, graph_reference, const text_editor_scheme*);
~text_editor();
bool respone_keyboard(nana::char_t, bool enterable);
@ -263,10 +263,10 @@ namespace nana{ namespace widgets
//_m_draw_string
//@brief: Draw a line of string
void _m_draw_string(int top, const ::nana::color&, const nana::upoint& str_pos, const nana::string&, bool if_mask) const;
//_m_draw
//@brief: Draw a character at a position specified by caret pos.
//@return: true if beyond the border
bool _m_draw(nana::char_t, std::size_t secondary_before);
//_m_update_caret_line
//@brief: redraw whole line specified by caret pos.
//@return: true if caret overs the border
bool _m_update_caret_line(std::size_t secondary_before);
bool _m_get_sort_select_points(nana::upoint&, nana::upoint&) const;
void _m_offset_y(int y);
@ -279,6 +279,8 @@ namespace nana{ namespace widgets
undoable<command> undo_;
nana::window window_;
graph_reference graph_;
const text_editor_scheme* scheme_;
skeletons::textbase<nana::char_t> textbase_;
nana::char_t mask_char_{0};

View File

@ -0,0 +1,22 @@
#ifndef NANA_WIDGETS_SKELETONS_TEXT_EDITOR_SCHEME_HPP
#define NANA_WIDGETS_SKELETONS_TEXT_EDITOR_SCHEME_HPP
#include "../../detail/widget_colors.hpp"
namespace nana
{
namespace widgets
{
namespace skeletons
{
struct text_editor_scheme
: public ::nana::widget_colors
{
color_proxy selection{static_cast<color_rgb>(0x3399FF)};
color_proxy selection_text{colors::white};
};
}
}
}
#endif

View File

@ -13,6 +13,7 @@
#define NANA_GUI_WIDGET_TEXTBOX_HPP
#include <nana/gui/widgets/widget.hpp>
#include "skeletons/textbase_export_interface.hpp"
#include "skeletons/text_editor_scheme.hpp"
namespace nana
{
@ -96,7 +97,7 @@ namespace nana
/// Allow users to enter and edit text by typing on the keyboard.
class textbox
:public widget_object<category::widget_tag, drawerbase::textbox::drawer, drawerbase::textbox::textbox_events>
:public widget_object<category::widget_tag, drawerbase::textbox::drawer, drawerbase::textbox::textbox_events, ::nana::widgets::skeletons::text_editor_scheme>
{
public:
/// The default constructor without creating the widget.

View File

@ -117,14 +117,17 @@ namespace nana
};
/// Base class of all the classes defined as a widget window. Defaultly a widget_tag
template<typename Category, typename DrawerTrigger, typename Events = nana::general_events>
template<typename Category, typename DrawerTrigger, typename Events = ::nana::general_events, typename Scheme = ::nana::widget_colors>
class widget_object: public widget
{
protected:
typedef DrawerTrigger drawer_trigger_t;
public:
using scheme_type = Scheme;
widget_object()
: events_(std::make_shared<Events>())
: events_{ std::make_shared<Events>() },
scheme_{ API::dev::make_scheme<Scheme>() }
{}
~widget_object()
@ -143,12 +146,13 @@ namespace nana
return create(parent_wd, rectangle(), visible);
}
bool create(window parent_wd, const rectangle & r = rectangle(), bool visible = true) ///< in a widget/root window specified by parent_wd.
bool create(window parent_wd, const rectangle & r = {}, bool visible = true) ///< in a widget/root window specified by parent_wd.
{
if(parent_wd && this->empty())
{
handle_ = API::dev::create_widget(parent_wd, r, this);
API::dev::set_events(handle_, events_);
API::dev::set_scheme(handle_, scheme_.get());
API::dev::attach_signal(handle_, *this, &widget_object::signal);
API::dev::attach_drawer(*this, trigger_);
if(visible)
@ -174,6 +178,11 @@ namespace nana
{
return API::widget_borderless(handle_);
}
scheme_type& scheme() const
{
return *scheme_;
}
protected:
DrawerTrigger& get_drawer_trigger()
{
@ -212,18 +221,20 @@ namespace nana
window handle_{nullptr};
DrawerTrigger trigger_;
std::shared_ptr<Events> events_;
std::unique_ptr<scheme_type> scheme_;
};//end class widget_object
/// Base class of all the classes defined as a non-graphics-buffer widget window. The second template parameter DrawerTrigger is always ignored.\see nana::panel
template<typename DrawerTrigger, typename Events>
class widget_object<category::lite_widget_tag, DrawerTrigger, Events>: public widget
template<typename DrawerTrigger, typename Events, typename Scheme>
class widget_object<category::lite_widget_tag, DrawerTrigger, Events, Scheme>: public widget
{
protected:
typedef DrawerTrigger drawer_trigger_t;
public:
using scheme_type = Scheme;
widget_object()
: events_(std::make_shared<Events>())
: events_{ std::make_shared<Events>() }, scheme_{ API::dev::make_scheme<scheme_type>() }
{}
~widget_object()
@ -248,6 +259,7 @@ namespace nana
{
handle_ = API::dev::create_lite_widget(parent_wd, r, this);
API::dev::set_events(handle_, events_);
API::dev::set_scheme(handle_, scheme_.get());
if(visible)
API::show_window(handle_, true);
this->_m_complete_creation();
@ -259,6 +271,11 @@ namespace nana
{
return handle_;
}
scheme_type& scheme() const
{
return *scheme_;
}
private:
void signal(detail::signals::code code, const detail::signals& sig)
{
@ -286,16 +303,18 @@ namespace nana
private:
window handle_{nullptr};
std::shared_ptr<Events> events_;
std::unique_ptr<scheme_type> scheme_;
};//end class widget_object
/// Base class of all the classes defined as a root window. \see nana::form
template<typename DrawerTrigger, typename Events>
class widget_object<category::root_tag, DrawerTrigger, Events>: public widget
template<typename DrawerTrigger, typename Events, typename Scheme>
class widget_object<category::root_tag, DrawerTrigger, Events, Scheme>: public widget
{
protected:
typedef DrawerTrigger drawer_trigger_t;
public:
using scheme_type = Scheme;
widget_object()
{
@ -303,13 +322,13 @@ namespace nana
_m_bind_and_attach();
}
widget_object(const rectangle& r, const appearance& apr = appearance())
widget_object(const rectangle& r, const appearance& apr = {})
{
handle_ = API::dev::create_window(nullptr, false, r, apr, this);
_m_bind_and_attach();
}
widget_object(window owner, bool nested, const rectangle& r = rectangle(), const appearance& apr = appearance())
widget_object(window owner, bool nested, const rectangle& r = {}, const appearance& apr = {})
{
handle_ = API::dev::create_window(owner, nested, r, apr, this);
_m_bind_and_attach();
@ -376,6 +395,11 @@ namespace nana
API::set_window_z_order(handle_, wd_after, action_if_no_wd_after);
return *this;
}
scheme_type& scheme() const
{
return *scheme_;
}
protected:
DrawerTrigger& get_drawer_trigger()
{
@ -410,6 +434,9 @@ namespace nana
{
events_ = std::make_shared<Events>();
API::dev::set_events(handle_, events_);
scheme_ = API::dev::make_scheme<scheme_type>();
API::dev::set_scheme(handle_, scheme_.get());
API::dev::attach_signal(handle_, *this, &widget_object::signal);
API::dev::attach_drawer(*this, trigger_);
}
@ -422,21 +449,24 @@ namespace nana
window handle_;
DrawerTrigger trigger_;
std::shared_ptr<Events> events_;
std::unique_ptr<scheme_type> scheme_;
};//end class widget_object<root_tag>
/// Base class of all the classes defined as a frame window. \see nana::frame
template<typename Drawer, typename Events>
class widget_object<category::frame_tag, Drawer, Events>: public widget{};
template<typename Drawer, typename Events, typename Scheme>
class widget_object<category::frame_tag, Drawer, Events, Scheme>: public widget{};
/// Especialization. Base class of all the classes defined as a frame window. \see nana::frame
template<typename Events>
class widget_object<category::frame_tag, int, Events>: public widget
template<typename Events, typename Scheme>
class widget_object<category::frame_tag, int, Events, Scheme>: public widget
{
protected:
typedef int drawer_trigger_t;
public:
using scheme_type = Scheme;
widget_object()
: events_(std::make_shared<Events>())
: events_{ std::make_shared<Events>() }, scheme_{ API::dev::make_scheme<scheme_type>() }
{}
~widget_object()
@ -461,6 +491,7 @@ namespace nana
{
handle_ = API::dev::create_frame(parent_wd, r, this);
API::dev::set_events(handle_, events_);
API::dev::set_scheme(handle_, scheme_.get());
API::dev::attach_signal(handle_, *this, &widget_object::signal);
API::show_window(handle_, visible);
this->_m_complete_creation();
@ -472,6 +503,11 @@ namespace nana
{
return handle_;
}
scheme_type& scheme() const
{
return *scheme_;
}
private:
virtual drawer_trigger* get_drawer_trigger()
{
@ -504,6 +540,7 @@ namespace nana
private:
window handle_{nullptr};
std::shared_ptr<Events> events_;
std::unique_ptr<scheme_type> scheme_;
};//end class widget_object<category::frame_tag>
}//end namespace nana
#endif

View File

@ -28,7 +28,6 @@ namespace gadget
void arrow_16_pixels(nana::paint::graphics&, int x, int y, const color&, uint32_t style, directions::t direction);
void close_16_pixels(nana::paint::graphics&, int x, int y, uint32_t style, const color&);
//void cross(nana::paint::graphics&, int x, int y, uint32_t size, uint32_t thickness, nana::color_t color); //deprecated
void cross(nana::paint::graphics&, int x, int y, uint32_t size, uint32_t thickness, const nana::color&);
}//end namespace gadget

View File

@ -13,11 +13,6 @@ namespace nana
text_renderer(graph_reference graph, align = align::left);
//void render(int x, int y, nana::color_t, const nana::char_t*, std::size_t len); //deprecated
//void render(int x, int y, nana::color_t, const nana::char_t*, std::size_t len, unsigned restricted_pixels, bool omitted); //deprecated
//void render(int x, int y, nana::color_t, const nana::char_t*, std::size_t len, unsigned restricted_pixels); //deprecated
nana::size extent_size(int x, int y, const nana::char_t*, std::size_t len, unsigned restricted_pixels) const;
void render(const point&, const char_t*, std::size_t len);

View File

@ -22,7 +22,7 @@
#include <set>
#include <algorithm>
#include <nana/paint/graphics.hpp>
#include GUI_BEDROCK_HPP
#include <nana/gui/detail/bedrock.hpp>
#include <nana/gui/detail/basic_window.hpp>
#include <nana/system/platform.hpp>
#include <errno.h>

View File

@ -49,9 +49,7 @@ namespace nana
void caret_descriptor::effective_range(nana::rectangle rect)
{
//Chech rect
if( (rect.width && rect.height) &&
(rect.x + rect.width > 0) &&
(rect.y + rect.height > 0))
if (rect.width && rect.height && rect.right() > 0 && rect.bottom() > 0)
{
if(rect.x < 0)
{
@ -151,9 +149,9 @@ namespace nana
size.width -= (rect.x - pos.x);
pos.x = rect.x;
}
else if(pos.x + size.width > rect.x + rect.width)
else if(pos.x + size.width > rect.right())
{
size.width -= pos.x + size.width - (rect.x + rect.width);
size.width -= pos.x + size.width - rect.right();
}
if(pos.y < rect.y)
@ -161,8 +159,8 @@ namespace nana
size.width -= (rect.y - pos.y);
pos.y = rect.y;
}
else if(pos.y + size.height > rect.y + rect.height)
size.height -= pos.y + size.height - (rect.y + rect.height);
else if(pos.y + size.height > rect.bottom())
size.height -= pos.y + size.height - rect.bottom();
if(out_of_range_)
{
@ -228,7 +226,7 @@ namespace nana
: widget_ptr(wdg), other(category::root_tag::value)
{
drawer.bind(this);
_m_init_pos_and_size(0, rectangle());
_m_init_pos_and_size(nullptr, rectangle());
this->_m_initialize(owner);
}

View File

@ -12,7 +12,7 @@
#include <nana/config.hpp>
#include PLATFORM_SPEC_HPP
#include GUI_BEDROCK_HPP
#include <nana/gui/detail/bedrock_pi_data.hpp>
#include <nana/gui/detail/event_code.hpp>
#include <nana/system/platform.hpp>
#include <sstream>
@ -120,6 +120,16 @@ namespace nana
}
}
widget_colors& bedrock::get_scheme_template(scheme_factory_base&& factory)
{
return pi_data_->scheme.scheme_template(std::move(factory));
}
std::unique_ptr<widget_colors> bedrock::make_scheme(scheme_factory_base&& factory)
{
return pi_data_->scheme.create(std::move(factory));
}
void bedrock::_m_emit_core(event_code evt_code, core_window_t* wd, bool draw_only, const ::nana::detail::event_arg_interface& event_arg)
{
switch (evt_code)

View File

@ -0,0 +1,78 @@
#include <nana/gui/detail/color_schemes.hpp>
#include <map>
namespace nana
{
//class color_proxy
color_proxy::color_proxy(const color_proxy& other)
: color_(other.color_)
{}
color_proxy::color_proxy(color_rgb clr)
: color_(std::make_shared<color>(clr))
{}
color_proxy::color_proxy(colors clr)
: color_(std::make_shared<color>(clr))
{}
color_proxy& color_proxy::operator=(const color_proxy& other)
{
if (this != &other)
color_ = other.color_;
return *this;
}
color_proxy& color_proxy::operator=(const ::nana::color& clr)
{
color_ = std::make_shared<::nana::color>(clr);
return *this;
}
color color_proxy::get_color() const
{
return *color_;
}
color_proxy::operator color() const
{
return *color_;
}
//end class color_proxy
namespace detail
{
//class color_schemes
struct color_schemes::implement
{
std::map<scheme_factory_base::factory_identifier*, std::unique_ptr<scheme>> scheme_template;
};
color_schemes::color_schemes()
: impl_(new implement)
{
}
color_schemes::~color_schemes()
{
delete impl_;
}
auto color_schemes::scheme_template(scheme_factory_base&& factory) -> scheme&
{
auto & tmpl_scheme = impl_->scheme_template[factory.get_id()];
//Creates a scheme template if no template
if (!tmpl_scheme)
factory.create().swap(tmpl_scheme);
return *tmpl_scheme.get();
}
std::unique_ptr<widget_colors> color_schemes::create(scheme_factory_base&& factory)
{
return factory.create(scheme_template(std::move(factory)));
}
//end class color_system
}//end namespace detail
}//end namespace nana

View File

@ -11,7 +11,7 @@
*/
#include <nana/config.hpp>
#include GUI_BEDROCK_HPP
#include <nana/gui/detail/bedrock.hpp>
#include <nana/gui/detail/drawer.hpp>
#include <nana/gui/detail/dynamic_drawing_object.hpp>
#include <nana/gui/detail/effects_renderer.hpp>

View File

@ -12,7 +12,7 @@
#include <nana/config.hpp>
#include PLATFORM_SPEC_HPP
#include GUI_BEDROCK_HPP
#include <nana/gui/detail/bedrock_pi_data.hpp>
#include <nana/gui/detail/event_code.hpp>
#include <nana/system/platform.hpp>
#include <nana/gui/detail/inner_fwd_implement.hpp>
@ -165,13 +165,14 @@ namespace detail
}
bedrock::bedrock()
: impl_(new private_impl)
: pi_data_(new pi_data), impl_(new private_impl)
{
nana::detail::platform_spec::instance().msg_set(timer_proc, window_proc_dispatcher);
}
bedrock::~bedrock()
{
delete pi_data_;
delete impl_;
}

View File

@ -23,7 +23,7 @@
#include <nana/paint/detail/image_ico.hpp>
#elif defined(NANA_X11)
#include <nana/system/platform.hpp>
#include GUI_BEDROCK_HPP
#include <nana/gui/detail/bedrock.hpp>
#endif
namespace nana{

View File

@ -13,16 +13,18 @@
#include <nana/config.hpp>
#include PLATFORM_SPEC_HPP
#include GUI_BEDROCK_HPP
#include <nana/gui/detail/bedrock.hpp>
#include <nana/gui/detail/bedrock_pi_data.hpp>
#include <nana/gui/detail/event_code.hpp>
#include <nana/system/platform.hpp>
#include <sstream>
#include <nana/system/timepiece.hpp>
#include <nana/gui/wvl.hpp>
#include <nana/gui.hpp>
#include <nana/gui/detail/inner_fwd_implement.hpp>
#include <nana/gui/detail/native_window_interface.hpp>
#include <nana/gui/layout_utility.hpp>
#include <nana/gui/detail/element_store.hpp>
#include <nana/gui/detail/color_schemes.hpp>
#ifndef WM_MOUSEWHEEL
#define WM_MOUSEWHEEL 0x020A
@ -175,7 +177,8 @@ namespace detail
std::recursive_mutex mutex;
thr_context_container thr_contexts;
element_store estore;
color_schemes schemes;
element_store estore;
struct cache_type
{
@ -213,7 +216,8 @@ namespace detail
static LRESULT WINAPI Bedrock_WIN32_WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
bedrock::bedrock()
:impl_(new private_impl)
: pi_data_(new pi_data),
impl_(new private_impl)
{
nana::detail::platform_spec::instance(); //to guaranty the platform_spec object is initialized before using.
@ -269,6 +273,7 @@ namespace detail
::MessageBoxA(0, ss.str().c_str(), ("Nana C++ Library"), MB_OK);
}
delete impl_;
delete pi_data_;
}
//inc_window

View File

@ -12,7 +12,7 @@
*/
#include <nana/config.hpp>
#include GUI_BEDROCK_HPP
#include <nana/gui/detail/bedrock.hpp>
#include <nana/gui/detail/handle_manager.hpp>
#include <nana/gui/detail/window_manager.hpp>
#include <nana/gui/detail/native_window_interface.hpp>

View File

@ -150,6 +150,22 @@ namespace API
return false;
}
void set_scheme(window wd, widget_colors* wdg_colors)
{
auto iwd = reinterpret_cast<restrict::core_window_t*>(wd);
internal_scope_guard lock;
if (restrict::window_manager.available(iwd))
iwd->expr_colors = wdg_colors;
}
widget_colors* get_scheme(window wd)
{
auto iwd = reinterpret_cast<restrict::core_window_t*>(wd);
internal_scope_guard lock;
return (restrict::window_manager.available(iwd) ? iwd->expr_colors : nullptr);
}
void attach_drawer(widget& wd, drawer_trigger& dr)
{
const auto iwd = reinterpret_cast<restrict::core_window_t*>(wd.handle());
@ -794,20 +810,20 @@ namespace API
{
internal_scope_guard lock;
if (restrict::window_manager.available(reinterpret_cast<restrict::core_window_t*>(wd)))
return reinterpret_cast<restrict::core_window_t*>(wd)->colors.fgcolor;
return reinterpret_cast<restrict::core_window_t*>(wd)->expr_colors->foreground.get_color();
return{};
}
color fgcolor(window wd, const color& col)
color fgcolor(window wd, const color& clr)
{
auto iwd = reinterpret_cast<restrict::core_window_t*>(wd);
internal_scope_guard lock;
if (restrict::window_manager.available(iwd))
{
auto prev = iwd->colors.fgcolor;
if (prev != col)
auto prev = iwd->expr_colors->foreground.get_color();
if (prev != clr)
{
iwd->colors.fgcolor = col;
iwd->expr_colors->foreground = clr;
restrict::window_manager.update(iwd, true, false);
}
return prev;
@ -819,20 +835,20 @@ namespace API
{
internal_scope_guard lock;
if (restrict::window_manager.available(reinterpret_cast<restrict::core_window_t*>(wd)))
return reinterpret_cast<restrict::core_window_t*>(wd)->colors.bgcolor;
return reinterpret_cast<restrict::core_window_t*>(wd)->expr_colors->background.get_color();
return{};
}
color bgcolor(window wd, const color& col)
color bgcolor(window wd, const color& clr)
{
auto iwd = reinterpret_cast<restrict::core_window_t*>(wd);
internal_scope_guard lock;
if (restrict::window_manager.available(iwd))
{
auto prev = iwd->colors.bgcolor;
if (prev != col)
auto prev = iwd->expr_colors->background.get_color();
if (prev != clr)
{
iwd->colors.bgcolor = col;
iwd->expr_colors->background = clr;
restrict::window_manager.update(iwd, true, false);
}
return prev;
@ -844,20 +860,20 @@ namespace API
{
internal_scope_guard lock;
if (restrict::window_manager.available(reinterpret_cast<restrict::core_window_t*>(wd)))
return reinterpret_cast<restrict::core_window_t*>(wd)->colors.activated;
return reinterpret_cast<restrict::core_window_t*>(wd)->expr_colors->activated.get_color();
return{};
}
color activated_color(window wd, const color& col)
color activated_color(window wd, const color& clr)
{
auto iwd = reinterpret_cast<restrict::core_window_t*>(wd);
internal_scope_guard lock;
if (restrict::window_manager.available(iwd))
{
auto prev = iwd->colors.activated;
if (prev != col)
auto prev = iwd->expr_colors->activated.get_color();
if (prev != clr)
{
iwd->colors.activated = col;
iwd->expr_colors->activated = clr;
restrict::window_manager.update(iwd, true, false);
}
return prev;

View File

@ -84,7 +84,9 @@ namespace nana
void attached(widget_reference wd, graph_reference graph)
{
widget_ = static_cast< ::nana::combox*>(&wd);
editor_ = new widgets::skeletons::text_editor(widget_->handle(), graph);
auto scheme = dynamic_cast< ::nana::widgets::skeletons::text_editor_scheme*>(API::dev::get_scheme(wd));
editor_ = new widgets::skeletons::text_editor(widget_->handle(), graph, scheme);
editor_->border_renderer([this](graph_reference graph, const ::nana::color& bgcolor){
draw_border(graph, bgcolor);
});

View File

@ -54,6 +54,11 @@ namespace nana
{
API::modal_window(handle());
}
void form::wait_for_this()
{
API::wait_for(handle());
}
//end class form
//class nested_form

View File

@ -1140,9 +1140,9 @@ namespace nana{ namespace widgets
}; //end class behavior_linewrapped
//class text_editor
text_editor::text_editor(window wd, graph_reference graph)
text_editor::text_editor(window wd, graph_reference graph, const text_editor_scheme* schm)
: behavior_(new behavior_normal(*this)),
window_(wd), graph_(graph)
window_(wd), graph_(graph), scheme_(schm)
{
text_area_.area = graph.size();
text_area_.captured = false;
@ -1661,7 +1661,7 @@ namespace nana{ namespace widgets
{
const auto bgcolor = _m_bgcolor();
auto fgcolor = API::fgcolor(window_);
auto fgcolor = scheme_->foreground.get_color();
if (!API::window_enabled(window_))
fgcolor.blend(bgcolor, 0.5);
@ -1727,7 +1727,7 @@ namespace nana{ namespace widgets
behavior_->pre_calc_line(points_.caret.y, width_pixels());
points_.caret.x ++;
if(refresh || _m_draw(c, secondary_before))
if (refresh || _m_update_caret_line(secondary_before))
render(true);
else
draw_scroll_rectangle();
@ -2524,7 +2524,8 @@ namespace nana{ namespace widgets
//The line of text is in the range of selection
nana::upoint a, b;
graph_.set_text_color(clr);
graph_.set_color({ 0x33, 0x99, 0xFF });
graph_.set_color(scheme_->selection.get_color());
//The text is not selected or the whole line text is selected
if ((!_m_get_sort_select_points(a, b)) || (select_.a.y != str_pos.y && select_.b.y != str_pos.y))
@ -2539,7 +2540,7 @@ namespace nana{ namespace widgets
{
if (selected)
{
graph_.set_text_color(colors::white);
graph_.set_text_color(scheme_->selection_text.get_color());
graph_.rectangle({ text_pos, { str_w, line_h_pixels } }, true);
}
@ -2556,11 +2557,11 @@ namespace nana{ namespace widgets
graph_.string(strpos, str, len);
paint::graphics graph(glyph_selected, line_h_pixels);
graph.typeface(this->graph_.typeface());
graph.rectangle(true, { 0x33, 0x99, 0xFF });
graph.rectangle(true, scheme_->selection.get_color());
int sel_xpos = static_cast<int>(str_px - (glyph_front + glyph_selected));
graph.set_text_color(colors::white);
graph_.set_text_color(scheme_->selection_text.get_color());
graph.string({-sel_xpos, 0}, str, len);
graph_.bitblt(nana::rectangle(strpos.x + sel_xpos, strpos.y, glyph_selected, line_h_pixels), graph);
};
@ -2584,7 +2585,7 @@ namespace nana{ namespace widgets
if (a.x <= pos && str_end <= b.x)
{
graph_.rectangle({ text_pos, { str_w, line_h_pixels } }, true);
graph_.set_text_color(colors::white);
graph_.set_text_color(scheme_->selection_text.get_color());
}
else
graph_.set_text_color(clr);
@ -2615,7 +2616,7 @@ namespace nana{ namespace widgets
graph_.rectangle({ part_pos, { sel_w, line_h_pixels } }, true);
graph_.set_text_color(colors::white);
graph_.set_text_color(scheme_->selection_text.get_color());
graph_.string(part_pos, ent.begin + (a.x - pos), endpos - a.x);
if (static_cast<size_t>(endpos) < str_end)
@ -2641,7 +2642,7 @@ namespace nana{ namespace widgets
{ //LTR
graph_.rectangle({ text_pos, { sel_w, line_h_pixels } }, true);
graph_.set_text_color(colors::white);
graph_.set_text_color(scheme_->selection_text.get_color());
graph_.string(text_pos, ent.begin, endpos - pos);
graph_.set_text_color(clr);
graph_.string(text_pos + ::nana::point(static_cast<int>(sel_w), 0), ent.begin + (endpos - pos), str_end - endpos);
@ -2666,7 +2667,7 @@ namespace nana{ namespace widgets
if (a.x < pos)
{
graph_.rectangle({ text_pos, { str_w, line_h_pixels } }, true, { 0x33, 0x99, 0xFF });
graph_.set_text_color(colors::white);
graph_.set_text_color(scheme_->selection_text.get_color());
}
graph_.string(text_pos, ent.begin, len);
}
@ -2684,7 +2685,7 @@ namespace nana{ namespace widgets
::nana::point part_pos{ text_pos.x + static_cast<int>(head_w), text_pos.y };
graph_.rectangle({ part_pos, {str_w - head_w, line_h_pixels } }, true);
graph_.set_text_color(colors::white);
graph_.set_text_color(scheme_->selection_text.get_color());
graph_.string(part_pos, ent.begin + a.x - pos, len - (a.x - pos));
}
}
@ -2708,7 +2709,7 @@ namespace nana{ namespace widgets
if (pos + len <= b.x)
{
graph_.rectangle({ text_pos, { str_w, line_h_pixels } }, true);
graph_.set_text_color(colors::white);
graph_.set_text_color(scheme_->selection_text.get_color());
graph_.string(text_pos, ent.begin, len);
}
else if (pos <= b.x && b.x < pos + len)
@ -2721,8 +2722,7 @@ namespace nana{ namespace widgets
else
{
graph_.rectangle({ text_pos, { sel_w, line_h_pixels } }, true);
graph_.set_text_color(colors::white);
graph_.set_text_color(scheme_->selection_text.get_color());
graph_.string(text_pos, ent.begin, b.x - pos);
graph_.set_text_color(clr);
graph_.string(text_pos + ::nana::point(static_cast<int>(sel_w), 0), ent.begin + b.x - pos, len - (b.x - pos));
@ -2737,10 +2737,7 @@ namespace nana{ namespace widgets
}
}
//_m_draw
//@brief: Draw a character at a position specified by caret pos.
//@return: true if beyond the border
bool text_editor::_m_draw(nana::char_t c, std::size_t secondary_before)
bool text_editor::_m_update_caret_line(std::size_t secondary_before)
{
if (false == behavior_->adjust_caret_into_screen())
{

View File

@ -71,8 +71,6 @@ namespace nana
public:
enum class style{horizontal, vertical};
enum class parts{none, bar, slider};
//enum dir_t{DirHorizontal, DirVertical}; //deprecated
//enum where_t{WhereNone, WhereBar, WhereSlider};
typedef drawer_trigger::graph_reference graph_reference;

View File

@ -57,7 +57,9 @@ namespace nana{ namespace drawerbase {
widget_ = &wdg;
evt_agent_.reset(new event_agent(static_cast< ::nana::textbox&>(wdg)));
editor_ = new text_editor(wd, graph);
auto scheme = API::dev::get_scheme(wdg);
editor_ = new text_editor(wd, graph, dynamic_cast<::nana::widgets::skeletons::text_editor_scheme*>(scheme));
editor_->textbase().set_event_agent(evt_agent_.get());
editor_->border_renderer([this](graph_reference graph, const ::nana::color& clr){
this->_m_draw_border(graph, clr);

View File

@ -12,7 +12,7 @@
#include <nana/config.hpp>
#include PLATFORM_SPEC_HPP
#include GUI_BEDROCK_HPP
#include <nana/gui/detail/bedrock.hpp>
#include <nana/paint/graphics.hpp>
#include <nana/paint/detail/native_paint_interface.hpp>
#include <nana/paint/pixel_buffer.hpp>

View File

@ -16,7 +16,7 @@
#include <windows.h>
#elif defined(NANA_X11)
#include PLATFORM_SPEC_HPP
#include GUI_BEDROCK_HPP
#include <nana/gui/detail/bedrock.hpp>
#include <nana/gui/detail/basic_window.hpp>
#endif