# Hacking Gecko or 1011020

For some time now I want to be able to contribute to native support of MathML at Gecko but

1. I only know C (not C++),
2. I only program command line interfaces (not graphical user interface),
3. I never program a “graphical framework”, ...

Frédéric recommended that I start with Bug 1011020 because shouldn’t be very hard to fix this bug. So I decided to give it a try.

## Reproducing the bug

The bug is about the bars of fractions, radicals etc be invisible at some zoom levels. For example, I had to zoom out three times (or to 67%) for reproduce the bug with the following example.

$2$

And if I zoom out another time (or to 50%) the bar is visible.

## Compiling

I already have compile Firefox in the past and this was easy this time.

Note

If you are going to compile Firefox for the first time, take a look at https://developer.mozilla.org/en/docs/Simple_Firefox_build.

## Trying GDB

Since I already program in C and GDB help me a lot when debugging I decided to try using it for Firefox. Unfortunately it didn’t go very good since Firefox was very slow and because of this I decided to go back and use printf.

## Finding the write file

To work with the msqrt element I

```\$ ls layout/mathml | grep -P '(sqrt|root).*cpp'
nsMathMLmrootFrame.cpp
nsMathMLmsqrtFrame.cpp
```

and

\$ grep -i pixel layout/mathml/nsMathMLmsqrtFrame.cpp \$ grep -i bar layout/mathml/nsMathMLmsqrtFrame.cpp

Since didn’t find anything, I

```\$ grep -i pixel layout/mathml/nsMathMLmrootFrame.cpp
nscoord oneDevPixel = aFontMetrics->AppUnitsPerDevPixel();
oneDevPixel);
oneDevPixel);
nscoord onePixel = nsPresContext::CSSPixelsToAppUnits(1);
printf("onePixel      = %d\n", onePixel);
if (ruleThickness < onePixel) {
ruleThickness = onePixel;
// adjust clearance psi to get an exact number of pixels -- this
nscoord delta = psi % onePixel;
psi += onePixel - delta; // round up
```

and because of it I start reading layout/mathml/nsMathMLmrootFrame.cpp and adding some printf on it. Unfortunately no information was send to the terminal and I asked for help. Frédéric reply suggesting to look at layout/mathml/nsMathMLmencloseFrame.cpp that first didn’t make much sense to me but after I looked at the documentation was very clear to me since I can use menclose as a replacement for msqrt, e.g.

$2$

Note

I should have look at layout/mathml/nsMathMLmsqrtFrame.h and find out that it is related with layout/mathml/nsMathMLmencloseFrame.cpp.

Then I added the printf at layout/mathml/nsMathMLmencloseFrame.cpp and started get some information (after I discovered that nscoord is int).