Выпуск новостей ReactOS №52 | Participants
|
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translated in draft, editing and proof-reading required.
If you do not want to register an account, you can sign in with OpenID.
Newsletter #52 | ||
More Win32 Work | ||
Timo Kreuzer continues his efforts to make the Win32 subsystem more correct, recently working on the functions SetWindowExtEx and SetViewpointExtEx. The first step was moving it out of win32k, where the operations were originally being carried out, and into gdi32, where they should be carried out. Jim Tabor had code in place which implemented them, but they needed some fixing. While not yet complete, Timo has corrected some of the errors. The two functions are for setting the dimensions of the device context for the window and viewport respectively. The window is the set of logical coordinates that one tells GDI to draw to, whereas the viewport is the set of device coordinates that the logical coordinates get translated into when an image is actually displayed on the screen. There are various ways the logical coordinates can be mapped to the device coordinates, depending on which mode you are using. Timo fixed some of the modes, but currently isotropic mode is broken. Isotropic requires the vertical and horizontal dimensions to be equal. The application that exposes the issue is actually the resource editor for Visual Basic 6. | Тимо Кройцер (Timo Kreuzer) продолжает свою работу над исправлением подсистемы Win32, в последнее время занимаясь функциями SetWindowExtEx и SetViewportExtEx. Первым шагом стало их перемещение из win32, где эти операции изначально производились, в gdi32, где они должны производиться. У Джима Табора (Jim Tabor) имелся код, реализующий это, но он требовал правки. Хотя работа ещё не завершена, Тимо уже исправил некоторые ошибки. Это две функции для установки размеров контекста устройства, по одной для окна и проекции соответственно. Окно представляет собой набор логических координат, задающих GDI регион для прорисовки, в то время, как проекция - это набор координат устройства, в которые преобразуются логические координаты при выводе изображения на экран. В зависимости от используемого режима, существуют различные способы преобразования логических координат в координаты устройства. Тимо исправил некоторые режимы, однако в данный момент изотропный режим не функционирует. Изотропия требует одинаковых размеров по вертикали и горизонтали. Приложение, в котором наиболее заметна эта проблема - редактор ресурсов в Visual Basic 6. | |
Jim Tabor has also been busy, trying to fix the ThreadInfo structure, which would in turn fix timers, which would then fix menus and other drawing issues, and ultimately fix the issue of needing to move the mouse to download pages in Firefox. This is an excellent example of how problems in one component can have a cascading effect and result in long standing bugs, as the Firefox issue has been present for at least a year. Another result of this bug is the menus in GIMP being drawn wrong as well as GIMP crashing under certain conditions. The problem itself involves the fact that the timers are being saved in a message queue when they are supposed to be saved on a fixed list. The address of the queue is currently in the ClientThreadInfo, but the address where the timers are supposed to be is also stored in a different location. This second location actually has the correct address, but since the address in ClientThreadInfo is wrong, a mismatch occurs which causes a fault in user mode and terminates the application. | Джим Табор, помимо того, работал над исправлением структуры ThreadInfo, пытаясь исправить работу таймеров, что позволит исправить меню, а также другие проблемы с прорисовкой, и, в конечном итоге, исправить проблему, из-за которой необходимо двигать мышью для загрузки страниц в Firefox. Это отличный пример того, как проблемы в одном компоненте способны каскадом создавать массу ошибок-долгожителей, таких, как проблема с Firefox, которая существовала не менее года. Другое следствие этой ошибки - меню в GIMP неверно отрисовывается, а работа самого GIMP при определённых действиях завершается с критической ошибкой. Проблема состоит в том, что таймеры сохраняются в очереди сообщений, хотя должны они сохраняться в фиксированном списке. Адрес очереди в настоящий момент хранится в структуре данных ClientThreadInfo, однако адрес, по которому таймеры должны находиться в действительности, сохраняется в совершенно другом месте. На самом деле это место находится по правильному адресу, а в ClientThreadInfo записан неправильный адрес, что приводит к несоответствию, вызывая ошибку в пользовательском режиме и завершение работы приложения. | — Сама проблема в том, что таймеры... - закончил ревизию на этом предложении. — bz00mmer Досмотрел. Скажу честно - НЕ ПОНИМАЮ, о чём речь в двух последних предложениях. — bz00mmer — одна и та же переменная в двух адресах. но в одном месте верное значение, в другом нет. — stampoon — последние предложения нужно тщательно продумать — seven_ro |

— спасибо LRN за черновой перевод! — stampoon