CEGUI的ComponentArea::getPixelRect()两个重载函数的参数,Editbox点击偏移错误


 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);
}

你可能感兴趣的:(CEGUI的ComponentArea::getPixelRect()两个重载函数的参数,Editbox点击偏移错误)