Ticket #8023: corners.diff

File corners.diff, 1.5 KB (added by eriktorbjorn, 17 years ago)

Patch against an August 21 CVS snapshot

  • scummvm/gfx.cpp

    diff -ur ScummVM-cvs20020821/scummvm/gfx.cpp ScummVM-cvs20020821+hack/scummvm/gfx.cpp
    old new  
    643643
    644644        blit(flashBuffer, bgbak, flashW*8, flashH);
    645645
    646         // TODO - flashlight should have round corners
     646        // Round the corners. This may need some tuning. I have no idea how
     647        // the original interpreters did it.
    647648
     649        int r = (_flashlightXStrips < _flashlightYStrips) ?
     650                        _flashlightXStrips : _flashlightYStrips;
     651       
     652        if (r > 0) {
     653                // At first I thought I could do this by using the Pythagorean
     654                // relation to draw circles, but the code got pretty ugly, and
     655                // the results were even worse. Rounding errors, I guess.
     656                //
     657                // Instead, we hard-code a set of nicely rounded corners.
     658
     659                int corner_data[] = {
     660                        1,
     661                        2, 1,
     662                        3, 2, 1,
     663                        4, 2, 1, 1,
     664                        5, 3, 2, 1, 1,
     665                        6, 4, 3, 2, 1, 1,
     666                        7, 5, 4, 3, 2, 1, 1,
     667                        8, 6, 4, 3, 2, 2, 1, 1
     668                };
     669
     670                if (r > 8)
     671                        r = 8;
     672
     673                int *ptr = &corner_data[(r * (r - 1)) / 2];
     674
     675                for (i = 0; i < r; i++) {
     676                        int minrow = i * 320;
     677                        int maxrow = (flashH - i - 1) * 320;
     678                        int maxcol = flashW * 8 - 1;
     679                        int d = ptr[i];
     680
     681                        for (j = 0; j < d; j++) {
     682                                flashBuffer[minrow + j] = 0;
     683                                flashBuffer[minrow + maxcol - j] = 0;
     684                                flashBuffer[maxrow + j] = 0;
     685                                flashBuffer[maxrow + maxcol - j] = 0;
     686                        }
     687                }
     688        }
     689       
    648690        _flashlightIsDrawn = true;
    649691}
    650692