MatthewFinnicum

Matthew Finnicum

Email: <MattFinn@gmail.com>, usually on #winehackers as "murph"

Welcome, I'm a second-year college student at UIUC (The University of Illinois, Urbana-Champaign). I'm going for a degree in both Computer Science and Computer Engineering. I spent last summer working on riched20, thanks to Google's Summer of Code program. I'm also applying for this year's program.

Summer of Code 2007 (possible) stuff to do

Given that I'm much more knowledgeable about richedit than I was when I started my GSoC project last year, I expect that I'll be able to accomplish, at the minimum, three times the work I did last summer. Instead of choosing a whole bunch of smaller features to implement, I intend to focus on some larger features and 'harder' tasks like OLE/COM and horizontal scrolling.

Styles

I implemented the first real support for any styles last summer, and this summer i'd like to have the majority of them supported.

Single Line Controls

We don't support single line controls yet. I'd like to implement them and their related styles.

Horizontal Scrolling

Add horizontal scrolling support, and write some tests to see when we should scroll vs word-wrap. Also, clarify which methods expect absolute locations and which expect relative-to-the-view-window locations for internal things - I fixed at least one bug caused by a mixup of the two.

Message Notification Tests

We keep having bugs and issues with message notifications (specifically CHANGE and UPDATE) - I'd like to write enough tests for these things that we can be reasonably sure that we've settled them once and for all.

COM interface

Specifically, focus on abstracting methods into ME_ functions instead of changing things inside the message handlers. Then, implement enough to get Google Talk working. :)

Code cleanup and commenting

As i mentioned above, there's a lot of places where a method's purpose is unclear or it's hard to know what the inputs/return values mean (Absolute vs relative pixel locations, locations in one of many forms, etc) - I'd like to comment the purpose,inputs,and outputs of most of the functions in riched20.

Tests

Since I started working on this a year ago, the number of tests in riched20 has at least doubled - I will keep adding more to test the things I'm working with. I'll also fix all the tests that currently are failing on windows but not on native (There's like ten, but it's not a lot of work). I should also look into maybe splitting the tests into more than one .c file - that thing is getting large.

Bug Fixing

It's hard to put an estimate as to how much bug fixing I'll be able to do, but I'll look at all new bugs and fix any regressions caused by my patches. There's a couple older ones that I should be able to get working as well, such as the World of Warcraft EULA displaying as gibberish bug.

Selection Code Fixup

The selection code could use some serious work - things should be moved to a couple selection changing functions instead of methods modifying the selection directly all over the place. Also, I still add the "you can hilight one more character than exists" behavior like native has as it messes with the results of the getselection message.

Support Wine's Wordpad

Since wordpad is so closely related to richedit, If a GSoC project to improve wordpad gets approved I'll collaborate with that person to add any functionality that is needed from richedit to allow wordpad to be improved. If such a project isn't approved, then maybe I'll work on wordpad a some myself.

A lot of the info below (about riched20) is in varying stages of being out-of-date. It might be better to just ask me if you have any questions.

riched20 work to do

Selection Code Work (in progress / some done)

  • Basicly rewrite most of the selection code to have an API instead of just modifying the pCursors everywhere
  • Do so in such a way to make windowless controls work better
  • Include support for the strange "highlight an imaginary character at the end of the document" behavior

Undo / Redo names

  • Implement EM_GETUNDONAME so it returns a "UNDONAMEID enumeration value"
  • Implement EM_GETREDONAME the same way.
  • Implement conformance tests for both - this is a very testable function.

Style related messages

  • Implement the WM_STYLECHANGING notification
  • Implement the WM_STYLECHANGED notification
  • Tests for both - they are very testable.

Related Bugs

  • 4240 - Lineage II installer uses WM_STYLECHANGING and WM_STYLECHANGED

  • 5162 - Google Talk uses three ITextServices COM interfaces, and EM_SHOWSCROLLBAR

OLE / COM stuff

ITextServices::TxSetText
  • This should be the easiest COM interface - just uses SETTEXT to do it's dirty work.
  • Implement TxSetText

  • Implement Conformance tests for TxSetText

  • Ensure real-world apps work well with it (Google Talk, any others in appdb/bugs)

ITextServices::TxSendMessage
  • Figure out exactly what it's supposed to do - which messages it forwards, and to where
  • Implement TxSendMessage

  • Implement tests for TxSendMessage - should be very testable, but will be harder than most conformance tests

ITextServices::TxGetNaturalSize
  • Learn the size rendering code of riched20 - font sizes, width, etc.
  • Figure out exactly which values I'm supposed to compute
  • Implement TxGetNaturalSize for both "Fit To Content" and "Round to line" modes.

  • Conformance tests for function - should be very well testable.

riched20 work already done

(mostly undedited from when it was in the "work to do" list...)

WM_SETFONT
  • This seems to be the most common fixme in richedit.
  • Apparently this will mostly be a frontend to SETCHARFORMAT
  • Most of the work will be testing the native dll / seeing what to change and when.

WM_SETFONT Expected Behavior
  • Change the default font for the control
  • Change all text currently in the control to the new font
  • Note that, after changing everythign, text pasted in the old font will remain that font.
  • Send in patch for conformance tests
  • Figure out proper solution for redrawing

ES_PASSWORD
  • Experiment w/ these features on the native version, determine when the text should be masked, and when it shouldn't be - questions like should GETTEXT return the real text or not.
  • Add a char to the editor structure to store the password char, initialize it to 0
  • Implement EM_SETPASSWORDCHAR and EM_GETPASSWORDCHAR
  • Implement the ES_PASSWORD style itself (Probably just calls EM_SETPASSWORD). This defaults the char to *
  • Modify the display routine to display the text "masked" when it's supposed to.
  • Implement conformance tests - SETPASSWORD and GETPASSWORD are easy, will look into how testable the displaying of masked text is.
  • Apparently, modify the rewrap routine / sizing routine so that the runs of text calculate their size with the masked characters, when needed.

Scrollbar related modifications
  • Experiment w/ scrollbar code, figure out how it works.
  • Find apps that use this (I know there are some in appdb/bugs)
  • Implement EM_SHOWSCROLLBAR
  • Implement EM_SETSCROLLPOS
  • Implement ES_DISABLENOSCROLL style - sets scrollbars to disable instead of going invalid
  • Implement tests for all three - should be decently testable
  • Ensure that real-world apps that use this function properly

Future work (just stuff to remember)

EM_SETFONTSIZE
  • Shouldn't be hard after implementing setfont

EM_SETLIMITTEXT
  • Identical to EM_LIMITTEXT, so just fall through / implement both at once.

Undo Grouping / coalescing
  • including EM_STOPGROUPTYPING

Related Bugs


CategoryHomepage

MatthewFinnicum (last edited 2007-03-29 03:56:30 by MattFinnicum)