Я работаю над простым приложением SDL2 с несколькими областями просмотра, содержащими кнопки. Я использую классы из учебников LazyFoo с некоторыми незначительными изменениями (поэтому я использую LButton из учебника 17 и использую массив областей просмотра, как в учебнике 9).
Вот я и настраиваю расположение кнопок:
//Buttons in viewport 1
buttons[0].setPosition(12, buttonHeadSpace );
buttons[1].setPosition(24 + BUTTON_WIDTH_DEFAULT, buttonHeadSpace );
//Buttons in viewport 2
buttons[2].setPosition(12,buttonHeadSpace);
buttons[3].setPosition(24 + BUTTON_WIDTH_DEFAULT, buttonHeadSpace);
Как видите, кнопки в окне просмотра 1 имеют те же значения в целых числах позиций, что и кнопки в окне просмотра 2.
Вот я заполняю окна просмотра кнопками:
//viewport 1
SDL_RenderSetViewport( gRenderer, &panelOutlines[0]);
buttons[0].render(buttonSpriteSheetTexture, &*buttonSpriteClips);
buttons[1].render(buttonSpriteSheetTexture, &*buttonSpriteClips);
//viewport 2
SDL_RenderSetViewport( gRenderer, &panelOutlines[3]);
buttons[2].render(buttonSpriteSheetTexture, &*buttonSpriteClips);
buttons[3].render(buttonSpriteSheetTexture, &*buttonSpriteClips);
И, конечно же, внутри объекта LButton есть фрагмент обнаружения при наведении мыши:
int x, y;
SDL_GetMouseState(&x, &y);
//Check if mouse is in button
bool inside = true;
if ( (x < mPosition.x ) || (x > mPosition.x + mButtonWidth) || (y < mPosition.y) || (y > mPosition.y + mButtonHeight) )
{
inside = false;
}
Таким образом, проблема заключается в том, что обнаружение при наведении мыши проверяет положение мыши относительно окна относительно позиций кнопок в памяти, но положения кнопок в памяти сохраняются относительно области просмотра. Поэтому при наведении курсора мыши на кнопку 1 видового экрана 1 я вижу анимацию при наведении курсора на кнопку 1 видового экрана 1 и кнопку 1 видового экрана 2 *
Как узнать положение мыши относительно области просмотра в SDL2?
Заранее спасибо!