Mission Planner Map Overlay button programming

Hello,

I am working on a plugin that adds hover buttons on the Mission Planner map.

When the mouse cursor hovers over a button, its color changes. However, due to the long rendering interval of Mission Planner, the color change appears very delayed.

To solve this issue, I added the FDGMapControl.Refresh() function in my plugin. However, I am concerned about potential collisions with the original code or performance of Mission Planner, because I’m not expert on programming, I’m just barely writing my code with very big efforts.

Could an expert please review my code?:

    private void FDGMapControl_MouseMove(object sender, MouseEventArgs e)
    {
        mouse_move_pixel_x = e.X;
        mouse_move_pixel_y = e.Y;
        PointLatLng moving_point = Host.FDGMapControl.FromLocalToLatLng(mouse_move_pixel_x, mouse_move_pixel_y);
        mouse_move_gps_x = moving_point.Lat;
        mouse_move_gps_y = moving_point.Lng;

        if (buttonOverlay.button_rect[0].Contains(new Point(mouse_move_pixel_x - (int)buttonOverlay.controlPositionGPoint.X, mouse_move_pixel_y - (int)buttonOverlay.controlPositionGPoint.Y)))
        {
            buttonOverlay.hovering_button_number = 1;
            Host.FDGMapControl.Refresh();
        }
        else if (buttonOverlay.button_rect[1].Contains(new Point(mouse_move_pixel_x - (int)buttonOverlay.controlPositionGPoint.X, mouse_move_pixel_y - (int)buttonOverlay.controlPositionGPoint.Y)))
        {
            buttonOverlay.hovering_button_number = 2;
            Host.FDGMapControl.Refresh();
        }
        else if (buttonOverlay.button_rect[2].Contains(new Point(mouse_move_pixel_x - (int)buttonOverlay.controlPositionGPoint.X, mouse_move_pixel_y - (int)buttonOverlay.controlPositionGPoint.Y)))
        {
            buttonOverlay.hovering_button_number = 3;
            Host.FDGMapControl.Refresh();
        }
        else if (buttonOverlay.button_rect[3].Contains(new Point(mouse_move_pixel_x - (int)buttonOverlay.controlPositionGPoint.X, mouse_move_pixel_y - (int)buttonOverlay.controlPositionGPoint.Y)))
        {
            buttonOverlay.hovering_button_number = 4;
            Host.FDGMapControl.Refresh();
        }
        else if (buttonOverlay.button_rect[4].Contains(new Point(mouse_move_pixel_x - (int)buttonOverlay.controlPositionGPoint.X, mouse_move_pixel_y - (int)buttonOverlay.controlPositionGPoint.Y)))
        {
            buttonOverlay.hovering_button_number = 5;
            Host.FDGMapControl.Refresh();
        }
        else if (buttonOverlay.button_rect[5].Contains(new Point(mouse_move_pixel_x - (int)buttonOverlay.controlPositionGPoint.X, mouse_move_pixel_y - (int)buttonOverlay.controlPositionGPoint.Y)))
        {
            buttonOverlay.hovering_button_number = 6;
            Host.FDGMapControl.Refresh();
        }
        else if (buttonOverlay.button_rect[6].Contains(new Point(mouse_move_pixel_x - (int)buttonOverlay.controlPositionGPoint.X, mouse_move_pixel_y - (int)buttonOverlay.controlPositionGPoint.Y)))
        {
            buttonOverlay.hovering_button_number = 7;
            Host.FDGMapControl.Refresh();
        }
        else if (buttonOverlay.button_rect[7].Contains(new Point(mouse_move_pixel_x - (int)buttonOverlay.controlPositionGPoint.X, mouse_move_pixel_y - (int)buttonOverlay.controlPositionGPoint.Y)))
        {
            buttonOverlay.hovering_button_number = 8;
            Host.FDGMapControl.Refresh();
        }
        else if (buttonOverlay.button_rect[8].Contains(new Point(mouse_move_pixel_x - (int)buttonOverlay.controlPositionGPoint.X, mouse_move_pixel_y - (int)buttonOverlay.controlPositionGPoint.Y)))
        {
            buttonOverlay.hovering_button_number = 9;
            Host.FDGMapControl.Refresh();
        }
        else
        {
            buttonOverlay.hovering_button_number = 0;
            Host.FDGMapControl.Refresh();
        }  
    }

Host.FDGMapControl.Refresh() ← this code line is problem.

I added if statement like below, so the Refresh() line will not be called too frequently, but I wonder it is safe to call like this.
in SITL test, it was okay.

:

if(previous_hovering_button_number != buttonOverlay.hovering_button_number)
{
       Host.FDGMapControl.Refresh();
}

Yepp, that was what I wanted to recommend. Do a refresh only when it is necessary. Only when there is a change in the button number.