use UTF-8 for string representation
This commit is contained in:
		
							parent
							
								
									009e7e7647
								
							
						
					
					
						commit
						8fc84938bf
					
				@ -203,7 +203,7 @@ namespace detail
 | 
				
			|||||||
		void default_native_font(const font_ptr_t&);
 | 
							void default_native_font(const font_ptr_t&);
 | 
				
			||||||
		unsigned font_size_to_height(unsigned) const;
 | 
							unsigned font_size_to_height(unsigned) const;
 | 
				
			||||||
		unsigned font_height_to_size(unsigned) const;
 | 
							unsigned font_height_to_size(unsigned) const;
 | 
				
			||||||
		font_ptr_t make_native_font(const nana::char_t* name, unsigned height, unsigned weight, bool italic, bool underline, bool strick_out);
 | 
							font_ptr_t make_native_font(const char* name, unsigned height, unsigned weight, bool italic, bool underline, bool strick_out);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Display* open_display();
 | 
							Display* open_display();
 | 
				
			||||||
		void close_display();
 | 
							void close_display();
 | 
				
			||||||
 | 
				
			|||||||
@ -80,7 +80,7 @@ namespace detail
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	struct font_tag
 | 
						struct font_tag
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		nana::string name;
 | 
							native_string_type name;
 | 
				
			||||||
		unsigned height;
 | 
							unsigned height;
 | 
				
			||||||
		unsigned weight;
 | 
							unsigned weight;
 | 
				
			||||||
		bool italic;
 | 
							bool italic;
 | 
				
			||||||
@ -186,7 +186,7 @@ namespace detail
 | 
				
			|||||||
		void default_native_font(const font_ptr_t&);
 | 
							void default_native_font(const font_ptr_t&);
 | 
				
			||||||
		unsigned font_size_to_height(unsigned) const;
 | 
							unsigned font_size_to_height(unsigned) const;
 | 
				
			||||||
		unsigned font_height_to_size(unsigned) const;
 | 
							unsigned font_height_to_size(unsigned) const;
 | 
				
			||||||
		font_ptr_t make_native_font(const nana::char_t* name, unsigned height, unsigned weight, bool italic, bool underline, bool strike_out);
 | 
							font_ptr_t make_native_font(const char* name, unsigned height, unsigned weight, bool italic, bool underline, bool strike_out);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		static platform_spec& instance();
 | 
							static platform_spec& instance();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -174,13 +174,25 @@ namespace nana
 | 
				
			|||||||
		{
 | 
							{
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		categorize(window wd, const nana::string& text, bool visible = true)
 | 
							categorize(window wd, const std::string& text_utf8, bool visible = true)
 | 
				
			||||||
			: categorize(wd, ::nana::rectangle(), visible)
 | 
								: categorize(wd, ::nana::rectangle(), visible)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			this->caption(text);
 | 
								this->caption(text);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		categorize(window wd, const nana::char_t* text, bool visible = true)
 | 
							categorize(window wd, const char* text_utf8, bool visible = true)
 | 
				
			||||||
 | 
								: categorize(wd, ::nana::rectangle(), visible)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								this->caption(text);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							categorize(window wd, const std::wstring& text, bool visible = true)
 | 
				
			||||||
 | 
								: categorize(wd, ::nana::rectangle(), visible)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								this->caption(text);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							categorize(window wd, const wchar_t* text, bool visible = true)
 | 
				
			||||||
			: categorize(wd, ::nana::rectangle(), visible)
 | 
								: categorize(wd, ::nana::rectangle(), visible)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			this->caption(text);
 | 
								this->caption(text);
 | 
				
			||||||
@ -206,7 +218,7 @@ namespace nana
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/// Erases a child category with a specified name from current category.
 | 
							/// Erases a child category with a specified name from current category.
 | 
				
			||||||
		categorize& childset_erase(const nana::string& name)
 | 
							categorize& childset_erase(const std::string& name)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if(this->get_drawer_trigger().childset_erase(name))
 | 
								if(this->get_drawer_trigger().childset_erase(name))
 | 
				
			||||||
				API::update_window(*this);
 | 
									API::update_window(*this);
 | 
				
			||||||
@ -220,13 +232,13 @@ namespace nana
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/// Sets the splitter string
 | 
							/// Sets the splitter string
 | 
				
			||||||
		categorize& splitstr(const nana::string& sstr)
 | 
							categorize& splitstr(const std::string& sstr)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			this->get_drawer_trigger().splitstr(sstr);
 | 
								this->get_drawer_trigger().splitstr(sstr);
 | 
				
			||||||
			return *this;
 | 
								return *this;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		nana::string splitstr() const
 | 
							std::string splitstr() const
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			return this->get_drawer_trigger().splitstr();
 | 
								return this->get_drawer_trigger().splitstr();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -434,7 +434,7 @@ namespace nana{ namespace widgets{	namespace skeletons
 | 
				
			|||||||
			};
 | 
								};
 | 
				
			||||||
		};
 | 
							};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		::std::wstring	font;
 | 
							::std::string	font;
 | 
				
			||||||
		std::size_t		font_size;
 | 
							std::size_t		font_size;
 | 
				
			||||||
		bool	bold;
 | 
							bool	bold;
 | 
				
			||||||
		bool	bold_empty;	//bold should be ignored if bold_empty is true
 | 
							bool	bold_empty;	//bold should be ignored if bold_empty is true
 | 
				
			||||||
@ -706,7 +706,7 @@ namespace nana{ namespace widgets{	namespace skeletons
 | 
				
			|||||||
					if(token::string != tknizer.read())
 | 
										if(token::string != tknizer.read())
 | 
				
			||||||
						throw std::runtime_error("");
 | 
											throw std::runtime_error("");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
					fp->font = tknizer.idstr();
 | 
										fp->font = to_utf8(tknizer.idstr());
 | 
				
			||||||
					break;
 | 
										break;
 | 
				
			||||||
				case token::size:
 | 
									case token::size:
 | 
				
			||||||
					if(token::equal != tknizer.read())
 | 
										if(token::equal != tknizer.read())
 | 
				
			||||||
 | 
				
			|||||||
@ -36,14 +36,14 @@ namespace nana
 | 
				
			|||||||
			font();
 | 
								font();
 | 
				
			||||||
			font(drawable_type);
 | 
								font(drawable_type);
 | 
				
			||||||
			font(const font&);
 | 
								font(const font&);
 | 
				
			||||||
			font(const char_t* name, unsigned size, bool bold = false, bool italic = false, bool underline = false, bool strike_out = false);
 | 
								font(const ::std::string& name, unsigned size, bool bold = false, bool italic = false, bool underline = false, bool strike_out = false);
 | 
				
			||||||
			~font();
 | 
								~font();
 | 
				
			||||||
			bool empty() const;
 | 
								bool empty() const;
 | 
				
			||||||
			void make(const char_t* name, unsigned size, bool bold = false, bool italic = false, bool underline = false, bool strike_out = false);
 | 
								void make(const ::std::string& name, unsigned size, bool bold = false, bool italic = false, bool underline = false, bool strike_out = false);
 | 
				
			||||||
			void make_raw(const char_t*, unsigned height, unsigned weight, bool italic, bool underline, bool strike_out);
 | 
								void make_raw(const ::std::string& name, unsigned height, unsigned weight, bool italic, bool underline, bool strike_out);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			void set_default() const;
 | 
								void set_default() const;
 | 
				
			||||||
			::nana::string name() const;
 | 
								::std::string name() const;
 | 
				
			||||||
			unsigned size() const;
 | 
								unsigned size() const;
 | 
				
			||||||
			bool bold() const;
 | 
								bool bold() const;
 | 
				
			||||||
			unsigned height() const;
 | 
								unsigned height() const;
 | 
				
			||||||
 | 
				
			|||||||
@ -32,8 +32,6 @@ namespace paint
 | 
				
			|||||||
		image();
 | 
							image();
 | 
				
			||||||
		image(const image&);
 | 
							image(const image&);
 | 
				
			||||||
		image(image&&);
 | 
							image(image&&);
 | 
				
			||||||
		//image(const nana::char_t* file);
 | 
					 | 
				
			||||||
		//image(const nana::string& filename);	//deprecated
 | 
					 | 
				
			||||||
		image(const ::nana::experimental::filesystem::path& file);
 | 
							image(const ::nana::experimental::filesystem::path& file);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		template<typename Source>
 | 
							template<typename Source>
 | 
				
			||||||
@ -45,7 +43,6 @@ namespace paint
 | 
				
			|||||||
		~image();
 | 
							~image();
 | 
				
			||||||
		image& operator=(const image& rhs);
 | 
							image& operator=(const image& rhs);
 | 
				
			||||||
		image& operator=(image&&);
 | 
							image& operator=(image&&);
 | 
				
			||||||
		//bool open(const nana::string& filename);	//deprecated
 | 
					 | 
				
			||||||
		bool open(const ::nana::experimental::filesystem::path& file);
 | 
							bool open(const ::nana::experimental::filesystem::path& file);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		/// Opens an icon from a specified buffer
 | 
							/// Opens an icon from a specified buffer
 | 
				
			||||||
 | 
				
			|||||||
@ -515,7 +515,7 @@ namespace detail
 | 
				
			|||||||
		atombase_.xdnd_finished = ::XInternAtom(display_, "XdndFinished", False);
 | 
							atombase_.xdnd_finished = ::XInternAtom(display_, "XdndFinished", False);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		//Create default font object.
 | 
							//Create default font object.
 | 
				
			||||||
		def_font_ptr_ = make_native_font(0, font_size_to_height(10), 400, false, false, false);
 | 
							def_font_ptr_ = make_native_font(nullptr, font_size_to_height(10), 400, false, false, false);
 | 
				
			||||||
		msg_dispatcher_ = new msg_dispatcher(display_);
 | 
							msg_dispatcher_ = new msg_dispatcher(display_);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -550,10 +550,10 @@ namespace detail
 | 
				
			|||||||
		return height;
 | 
							return height;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	platform_spec::font_ptr_t platform_spec::make_native_font(const nana::char_t* name, unsigned height, unsigned weight, bool italic, bool underline, bool strike_out)
 | 
						platform_spec::font_ptr_t platform_spec::make_native_font(const char* name, unsigned height, unsigned weight, bool italic, bool underline, bool strike_out)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		font_ptr_t ref;
 | 
							font_ptr_t ref;
 | 
				
			||||||
#if defined(NANA_UNICODE)
 | 
					#if 1 //Xft
 | 
				
			||||||
		if(0 == name || *name == 0)
 | 
							if(0 == name || *name == 0)
 | 
				
			||||||
			name = STR("*");
 | 
								name = STR("*");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -207,7 +207,7 @@ namespace detail
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
		::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof metrics, &metrics, 0);
 | 
							::SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof metrics, &metrics, 0);
 | 
				
			||||||
		def_font_ptr_ = make_native_font(metrics.lfMessageFont.lfFaceName, font_size_to_height(9), 400, false, false, false);
 | 
							def_font_ptr_ = make_native_font(utf8_cast(metrics.lfMessageFont.lfFaceName).c_str(), font_size_to_height(9), 400, false, false, false);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	const platform_spec::font_ptr_t& platform_spec::default_native_font() const
 | 
						const platform_spec::font_ptr_t& platform_spec::default_native_font() const
 | 
				
			||||||
@ -238,12 +238,15 @@ namespace detail
 | 
				
			|||||||
		return height;
 | 
							return height;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	platform_spec::font_ptr_t platform_spec::make_native_font(const nana::char_t* name, unsigned height, unsigned weight, bool italic, bool underline, bool strike_out)
 | 
						platform_spec::font_ptr_t platform_spec::make_native_font(const char* name, unsigned height, unsigned weight, bool italic, bool underline, bool strike_out)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		::LOGFONT logfont;
 | 
							::LOGFONT logfont;
 | 
				
			||||||
		memset(&logfont, 0, sizeof logfont);
 | 
							memset(&logfont, 0, sizeof logfont);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		strcpy(logfont.lfFaceName, (name && *name ? name : def_font_ptr_->name.c_str()));
 | 
							if (name && *name)
 | 
				
			||||||
 | 
								strcpy(logfont.lfFaceName, utf8_cast(name).c_str());
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								strcpy(logfont.lfFaceName, def_font_ptr_->name.c_str());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		logfont.lfCharSet = DEFAULT_CHARSET;
 | 
							logfont.lfCharSet = DEFAULT_CHARSET;
 | 
				
			||||||
		HDC hdc = ::GetDC(0);
 | 
							HDC hdc = ::GetDC(0);
 | 
				
			||||||
 | 
				
			|||||||
@ -259,7 +259,7 @@ namespace nana
 | 
				
			|||||||
					return fp->bold;
 | 
										return fp->bold;
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				const nana::string& _m_fontname(nana::widgets::skeletons::fblock* fp)
 | 
									const std::string& _m_fontname(nana::widgets::skeletons::fblock* fp)
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					while(fp->font.empty())
 | 
										while(fp->font.empty())
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
@ -274,13 +274,13 @@ namespace nana
 | 
				
			|||||||
				{
 | 
									{
 | 
				
			||||||
					if(fp != fblock_)
 | 
										if(fp != fblock_)
 | 
				
			||||||
					{
 | 
										{
 | 
				
			||||||
						const nana::string& name = _m_fontname(fp);
 | 
											auto& name = _m_fontname(fp);
 | 
				
			||||||
						auto fontsize = static_cast<unsigned>(_m_font_size(fp));
 | 
											auto fontsize = static_cast<unsigned>(_m_font_size(fp));
 | 
				
			||||||
						bool bold = _m_bold(fp);
 | 
											bool bold = _m_bold(fp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
						if((fontsize != font_.size()) || bold != font_.bold() || name != font_.name())
 | 
											if((fontsize != font_.size()) || bold != font_.bold() || name != font_.name())
 | 
				
			||||||
						{
 | 
											{
 | 
				
			||||||
							font_.make(name.data(), fontsize, bold);
 | 
												font_.make(name, fontsize, bold);
 | 
				
			||||||
							graph.typeface(font_);
 | 
												graph.typeface(font_);
 | 
				
			||||||
						}
 | 
											}
 | 
				
			||||||
						fblock_ = fp;
 | 
											fblock_ = fp;
 | 
				
			||||||
@ -606,7 +606,7 @@ namespace nana
 | 
				
			|||||||
				::nana::paint::font font_;
 | 
									::nana::paint::font font_;
 | 
				
			||||||
				struct def_font_tag
 | 
									struct def_font_tag
 | 
				
			||||||
				{
 | 
									{
 | 
				
			||||||
					::nana::string font_name;
 | 
										::std::string font_name;
 | 
				
			||||||
					std::size_t font_size;
 | 
										std::size_t font_size;
 | 
				
			||||||
					bool	font_bold;
 | 
										bool	font_bold;
 | 
				
			||||||
					::nana::color fgcolor;
 | 
										::nana::color fgcolor;
 | 
				
			||||||
 | 
				
			|||||||
@ -79,7 +79,7 @@ namespace paint
 | 
				
			|||||||
				impl_->font_ptr = rhs.impl_->font_ptr;
 | 
									impl_->font_ptr = rhs.impl_->font_ptr;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		font::font(const nana::char_t* name, unsigned size, bool bold, bool italic, bool underline, bool strike_out)
 | 
							font::font(const std::string& name, unsigned size, bool bold, bool italic, bool underline, bool strike_out)
 | 
				
			||||||
			: impl_(new impl_type)
 | 
								: impl_(new impl_type)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			make(name, size, bold, italic, underline, strike_out);
 | 
								make(name, size, bold, italic, underline, strike_out);
 | 
				
			||||||
@ -95,17 +95,17 @@ namespace paint
 | 
				
			|||||||
			return ((nullptr == impl_) || (nullptr == impl_->font_ptr));
 | 
								return ((nullptr == impl_) || (nullptr == impl_->font_ptr));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		void font::make(const nana::char_t* name, unsigned size, bool bold, bool italic, bool underline, bool strike_out)
 | 
							void font::make(const std::string& name, unsigned size, bool bold, bool italic, bool underline, bool strike_out)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			size = nana::detail::platform_spec::instance().font_size_to_height(size);
 | 
								size = nana::detail::platform_spec::instance().font_size_to_height(size);
 | 
				
			||||||
			make_raw(name, size, bold ? 700 : 400, italic, underline, strike_out);
 | 
								make_raw(name, size, bold ? 700 : 400, italic, underline, strike_out);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		void font::make_raw(const nana::char_t*name, unsigned height, unsigned weight, bool italic, bool underline, bool strike_out)
 | 
							void font::make_raw(const std::string& name, unsigned height, unsigned weight, bool italic, bool underline, bool strike_out)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if(impl_)
 | 
								if(impl_)
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				auto t = nana::detail::platform_spec::instance().make_native_font(name, height, weight, italic, underline, strike_out);
 | 
									auto t = nana::detail::platform_spec::instance().make_native_font(name.c_str(), height, weight, italic, underline, strike_out);
 | 
				
			||||||
				if(t)
 | 
									if(t)
 | 
				
			||||||
					impl_->font_ptr = t;
 | 
										impl_->font_ptr = t;
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@ -119,10 +119,11 @@ namespace paint
 | 
				
			|||||||
			nana::detail::platform_spec::instance().default_native_font(impl_->font_ptr);
 | 
								nana::detail::platform_spec::instance().default_native_font(impl_->font_ptr);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		nana::string font::name() const
 | 
							std::string font::name() const
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if(empty()) return nana::string();
 | 
								if(empty()) return std::string();
 | 
				
			||||||
			return impl_->font_ptr->name;
 | 
					
 | 
				
			||||||
 | 
								return to_utf8(impl_->font_ptr->name);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		unsigned font::size() const
 | 
							unsigned font::size() const
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user