d_window->getLookNFeel();
const WidgetLookFeel& wlf = getLookNFeel();
const Rect textArea(wlf.getNamedArea("TextArea").getArea().getPixelRect(*w));
const Rect textArea(wlf.getNamedArea("TextArea").getArea().getPixelRect(*w), d_window->getOuterRectClipper());
///////////////////////////////////////////
Rect getPixelRect(const Window& wnd, const Rect& container) const;
Rect getPixelRect(const Window& wnd) const;
第一个函数得到的结果是该nameArea在该window的位置,以Rect参考的基准为基准
第二个函数得到的结果是nameArea在该window的位置,
一般用法就是注释上面的一段,改自FalEditbox,原来的减去的不知道是啥东东~反正改了looknfeel中的TextArea就会点不到真实的位置了,改了就好了。。。也算是输入文本的偏移错误吧。。。希望同问题的人可以搜索到,有点帮助~
size_t FalagardEditbox::getTextIndexFromPosition(const Point& pt) const
{
Editbox* w = static_cast<Editbox*>(d_window);
// calculate final window position to be checked
float wndx = CoordConverter::screenToWindowX(*w, pt.d_x);
//MODIFY:还应该减去namespace:TextArea的左边缘
d_window->getLookNFeel();
const WidgetLookFeel& wlf = getLookNFeel();
const Rect textArea(wlf.getNamedArea("TextArea").getArea().getPixelRect(*w));
wndx -= textArea.d_left;
//原来的
//wndx -= d_lastTextOffset;
// Return the proper index
if (w->isTextMasked())
return w->getFont()->getCharAtPixel(
String(w->getTextVisual().length(), w->getMaskCodePoint()),
wndx);
else
return w->getFont()->getCharAtPixel(w->getTextVisual(), wndx);
}