http://bugs.winehq.org/show_bug.cgi?id=421
--- Comment #375 from el elton@schiert.net 2010-06-03 13:38:37 --- OK, I know now what makes the outlined circles not show up correctly. It is the way your current implementation alternates between HLine and SetPixel calls in each step. This makes it possible for the HLine to overwrite perviously set pixels, making the outline seem incomplete. A proper implementation might probably have to do this: For each scanline determine the (maximum) width and draw the corresponding HLine. After that do all SetPixel calls on this line. Proceed to the next scanline, repeat. It might be a bit simpler (but also a tad more ineffective) to draw the complete inside of the ellipse first and then draw all of the outline after that.
Also in you current implementation you cannot write: "else {//test ever done before if (physDev->penStyle != PS_NULL)" Instead you have to check: "if (physDev->penStyle != PS_NULL) {" This is because both penStyle and brushStyle can be non-null simultaneously.
About the division by two and float/integer stuff: I doubt that everything is done in float because of the speed penalty. It seems quite possible that Windows uses (28.4) fixed point arithmetic for all calculations.