add support of text align to text_editor/textbox
This commit is contained in:
parent
583bdf6199
commit
d34806353e
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* A text editor implementation
|
* A text editor implementation
|
||||||
* Nana C++ Library(http://www.nanapro.org)
|
* Nana C++ Library(http://www.nanapro.org)
|
||||||
* Copyright(C) 2003-2016 Jinhao(cnjinhao@hotmail.com)
|
* Copyright(C) 2003-2017 Jinhao(cnjinhao@hotmail.com)
|
||||||
*
|
*
|
||||||
* Distributed under the Boost Software License, Version 1.0.
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
* (See accompanying file LICENSE_1_0.txt or copy at
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
@ -56,6 +56,8 @@ namespace nana{ namespace widgets
|
|||||||
class keyword_parser;
|
class keyword_parser;
|
||||||
class helper_pencil;
|
class helper_pencil;
|
||||||
|
|
||||||
|
struct text_section;
|
||||||
|
|
||||||
text_editor(const text_editor&) = delete;
|
text_editor(const text_editor&) = delete;
|
||||||
text_editor& operator=(const text_editor&) = delete;
|
text_editor& operator=(const text_editor&) = delete;
|
||||||
|
|
||||||
@ -101,6 +103,8 @@ namespace nana{ namespace widgets
|
|||||||
|
|
||||||
bool load(const char*);
|
bool load(const char*);
|
||||||
|
|
||||||
|
void text_align(::nana::align alignment);
|
||||||
|
|
||||||
/// Sets the text area.
|
/// Sets the text area.
|
||||||
/// @return true if the area is changed with the new value.
|
/// @return true if the area is changed with the new value.
|
||||||
bool text_area(const nana::rectangle&);
|
bool text_area(const nana::rectangle&);
|
||||||
@ -206,8 +210,17 @@ namespace nana{ namespace widgets
|
|||||||
skeletons::textbase<char_type>& textbase();
|
skeletons::textbase<char_type>& textbase();
|
||||||
const skeletons::textbase<char_type>& textbase() const;
|
const skeletons::textbase<char_type>& textbase() const;
|
||||||
private:
|
private:
|
||||||
|
std::vector<upoint> _m_render_text(const ::nana::color& text_color);
|
||||||
void _m_pre_calc_lines(std::size_t line_off, std::size_t lines);
|
void _m_pre_calc_lines(std::size_t line_off, std::size_t lines);
|
||||||
|
|
||||||
|
::nana::point _m_caret_to_screen(::nana::upoint pos) const;
|
||||||
|
::nana::upoint _m_screen_to_caret(::nana::point pos) const;
|
||||||
|
|
||||||
|
bool _m_pos_from_secondary(std::size_t textline, const nana::upoint& secondary, unsigned & pos);
|
||||||
|
bool _m_pos_secondary(const nana::upoint& charpos, nana::upoint& secondary_pos) const;
|
||||||
|
bool _m_move_caret_ns(bool to_north);
|
||||||
|
void _m_update_line(std::size_t pos, std::size_t secondary_count_before);
|
||||||
|
|
||||||
bool _m_accepts(char_type) const;
|
bool _m_accepts(char_type) const;
|
||||||
::nana::color _m_bgcolor() const;
|
::nana::color _m_bgcolor() const;
|
||||||
bool _m_scroll_text(bool vertical);
|
bool _m_scroll_text(bool vertical);
|
||||||
@ -233,10 +246,13 @@ namespace nana{ namespace widgets
|
|||||||
|
|
||||||
int _m_text_top_base() const;
|
int _m_text_top_base() const;
|
||||||
|
|
||||||
|
/// Returns the logical position that text starts of a specified line in x-axis
|
||||||
|
int _m_text_x(const text_section&) const;
|
||||||
|
|
||||||
void _m_draw_parse_string(const keyword_parser&, bool rtl, ::nana::point pos, const ::nana::color& fgcolor, const wchar_t*, std::size_t len) const;
|
void _m_draw_parse_string(const keyword_parser&, bool rtl, ::nana::point pos, const ::nana::color& fgcolor, const wchar_t*, std::size_t len) const;
|
||||||
//_m_draw_string
|
//_m_draw_string
|
||||||
//@brief: Draw a line of string
|
//@brief: Draw a line of string
|
||||||
void _m_draw_string(int top, const ::nana::color&, const nana::upoint& str_pos, const ::std::wstring&, bool if_mask) const;
|
void _m_draw_string(int top, const ::nana::color&, const nana::upoint& str_pos, const text_section&, bool if_mask) const;
|
||||||
//_m_update_caret_line
|
//_m_update_caret_line
|
||||||
//@brief: redraw whole line specified by caret pos.
|
//@brief: redraw whole line specified by caret pos.
|
||||||
//@return: true if caret overs the border
|
//@return: true if caret overs the border
|
||||||
@ -244,7 +260,7 @@ namespace nana{ namespace widgets
|
|||||||
|
|
||||||
void _m_offset_y(int y);
|
void _m_offset_y(int y);
|
||||||
|
|
||||||
unsigned _m_char_by_pixels(const unicode_bidi::entity&, unsigned pos);
|
unsigned _m_char_by_pixels(const unicode_bidi::entity&, unsigned pos) const;
|
||||||
|
|
||||||
unsigned _m_pixels_by_char(const ::std::wstring&, ::std::size_t pos) const;
|
unsigned _m_pixels_by_char(const ::std::wstring&, ::std::size_t pos) const;
|
||||||
void _m_handle_move_key(const arg_keyboard& arg);
|
void _m_handle_move_key(const arg_keyboard& arg);
|
||||||
@ -265,6 +281,8 @@ namespace nana{ namespace widgets
|
|||||||
{
|
{
|
||||||
::std::string tip_string;
|
::std::string tip_string;
|
||||||
|
|
||||||
|
::nana::align alignment{ ::nana::align::left };
|
||||||
|
|
||||||
bool line_wrapped{false};
|
bool line_wrapped{false};
|
||||||
bool multi_lines{true};
|
bool multi_lines{true};
|
||||||
bool editable{true};
|
bool editable{true};
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
/**
|
/**
|
||||||
* A Textbox Implementation
|
* A Textbox Implementation
|
||||||
* Nana C++ Library(http://www.nanapro.org)
|
* Nana C++ Library(http://www.nanapro.org)
|
||||||
* Copyright(C) 2003-2016 Jinhao(cnjinhao@hotmail.com)
|
* Copyright(C) 2003-2017 Jinhao(cnjinhao@hotmail.com)
|
||||||
*
|
*
|
||||||
* Distributed under the Boost Software License, Version 1.0.
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
* (See accompanying file LICENSE_1_0.txt or copy at
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
@ -227,6 +227,9 @@ namespace nana
|
|||||||
void set_keywords(const std::string& name, bool case_sensitive, bool whole_word_match, std::initializer_list<std::string> kw_list_utf8);
|
void set_keywords(const std::string& name, bool case_sensitive, bool whole_word_match, std::initializer_list<std::string> kw_list_utf8);
|
||||||
void erase_keyword(const std::string& kw);
|
void erase_keyword(const std::string& kw);
|
||||||
|
|
||||||
|
/// Sets the text alignment
|
||||||
|
textbox& text_align(::nana::align alignment);
|
||||||
|
|
||||||
/// Returns the text position of each line that currently displays on screen.
|
/// Returns the text position of each line that currently displays on screen.
|
||||||
text_positions text_position() const;
|
text_positions text_position() const;
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* A Textbox Implementation
|
* A Textbox Implementation
|
||||||
* Nana C++ Library(http://www.nanapro.org)
|
* Nana C++ Library(http://www.nanapro.org)
|
||||||
* Copyright(C) 2003-2016 Jinhao(cnjinhao@hotmail.com)
|
* Copyright(C) 2003-2017 Jinhao(cnjinhao@hotmail.com)
|
||||||
*
|
*
|
||||||
* Distributed under the Boost Software License, Version 1.0.
|
* Distributed under the Boost Software License, Version 1.0.
|
||||||
* (See accompanying file LICENSE_1_0.txt or copy at
|
* (See accompanying file LICENSE_1_0.txt or copy at
|
||||||
@ -619,6 +619,19 @@ namespace drawerbase {
|
|||||||
editor->erase_keyword(to_wstring(kw));
|
editor->erase_keyword(to_wstring(kw));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
textbox& textbox::text_align(::nana::align alignment)
|
||||||
|
{
|
||||||
|
internal_scope_guard lock;
|
||||||
|
auto editor = get_drawer_trigger().editor();
|
||||||
|
if (editor)
|
||||||
|
{
|
||||||
|
editor->text_align(alignment);
|
||||||
|
API::update_window(this->handle());
|
||||||
|
}
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<upoint> textbox::text_position() const
|
std::vector<upoint> textbox::text_position() const
|
||||||
{
|
{
|
||||||
internal_scope_guard lock;
|
internal_scope_guard lock;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user