Положение мыши SDL2 относительно видового экрана - PullRequest
0 голосов
/ 25 апреля 2018

Я работаю над простым приложением 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?

Заранее спасибо!

...