<mikekaganski>
а вообще хороший файл, непаханное поле :)
<mikekaganski>
я не придираюсь. Нужно, чтобы было понятно, что происходит в алгоритме
<tagezi>
да я вчера уже матом крыл всех.. там есть ещё такоеже место, но чуть чуть другое, я просто не стал объединять уже, потому что срастить 5 мест, это уже жесть просто
<mikekaganski>
Твой патч сделает весь код понятнее, и имя функции - один из компонентов
<mikekaganski>
? там не получится срастить? птому что если можно 5 - сделай 5
<tagezi>
сейчас гляну ещё раз, дай кофе допить, я пол второго по финке лёг, в 6 встал уже :)
<tagezi>
вот вторая ссылка, это то место которое можно включить тоже, но тогда нужно делить на 2 функции
<tagezi>
mikekaganski: и ещё вопрос по веркам git. я вчера тормазнул, мастер обновил, а в свою ветку мастер не забрал, а теперь мастер другой, и чтобы проверить, опять 6 часов ждать
<tagezi>
короче, как мастер кинуть в ветку, так чтобы мой коммит остался по верх? :)
<mikekaganski>
так, погодь
<mikekaganski>
у тебя коммит же в геррите?
<tagezi>
да
<mikekaganski>
ты сейчас в мастере, так?
<tagezi>
ну да
<mikekaganski>
убей свою ветку, создай новую из мастера, и на неё накати из геррита
<mikekaganski>
только в свою не переходи
<mikekaganski>
в свою нынешнюю
<tagezi>
а если уже переходил?
<mikekaganski>
тогда ... можно попробовать сбросить всем изменившимся файлам даты, если знаешь утилиту
<tagezi>
ох
<mikekaganski>
для винды такие есть, а для lin не знаю
<mikekaganski>
тут ведь дело в дате изменения
<mikekaganski>
если всем исходникам дать дату вчера-позавчера, рекомпиляции не будет
<mikekaganski>
touch умеет
<mikekaganski>
заставить её делать это для всех cxx/hxx
<mikekaganski>
а почему ты говоришь, что в том куске надо бить на части?
<tagezi>
так, ответь мне про пятое место, имеет смысл его включать?
<mikekaganski>
я про него и говорю
<tagezi>
потому что в пятом нет ифа одного
<tagezi>
и тогда будет 2 функции, первая будет регулировать лево право, а вторая верх низ
<tagezi>
в пятом куске нет if ( bWrapFields )
<mikekaganski>
ага. Смотри: этот bWrapFields вообще сюда не относится и может быть проделан в вызывающих функциях : bool bClip = AreaParamClipRect(aAreaParam) | bWrapFields;
<mikekaganski>
Другое дело, что тебе нужно в этом пятом куске вернуть не один bClip , а пару bHClip + bVClip
<tagezi>
bHClip не участвует в расчетах и его можно вынести под функцию
<tagezi>
aAreaParam.mbLeftClip || aAreaParam.mbRightClip; не поменяется к этому времени
<mikekaganski>
С другой стороны, зачем вообще bHClip, если он получается из aAreaParam
<mikekaganski>
да
<mikekaganski>
так что можно из AreaParamClipRect возвращать только bVClip
<mikekaganski>
а всё остальное получать в вызывающих функциях
<tagezi>
да
<tagezi>
так, объясни вот это bool bClip = AreaParamClipRect(aAreaParam) | bWrapFields;
<tagezi>
так ладно.. я понял тебя, хотя не понимаю почему это более понятно
<JohnDoe_71Rus>
сократ?
<mikekaganski>
тут как раз и будет bool bHClip = AdjustAreaParamClipRect(aAreaParam); bool bVClip = aAreaParam.mbLeftClip || aAreaParam.mbRightClip;
<mikekaganski>
только наоборот
<mikekaganski>
сократ что?
<tagezi>
да bClip = тру как в вертикали || как в горизонтали || как в разрыве кадра
<tagezi>
ладно, мне и так и так понятно, наверное, как ты говоришь понятнее, так как ты дольше работаешь в проекте и представляешь как должно быть
<JohnDoe_71Rus>
mikekaganski: я знаю что ничего не знаю
<mikekaganski>
сделал -1, чтобы никто не запостил
<JohnDoe_71Rus>
у вас когда кто то берет править файл, он помечается "в работе user_name"? а то прилетят одновременно 2 комента от разных людей на один код
<mikekaganski>
прилетают, бывает
<mikekaganski>
но когда работают через геррит, это видно
<mikekaganski>
tagezi: нене
<tagezi>
что нене?
<mikekaganski>
строка 1850 -> 1851
<mikekaganski>
ты же только в AdjustAreaParamClipRect устанавливаешь правильные значения aAreaParam.mbLeftClip и aAreaParam.mbRightClip
<tagezi>
аааа, Иван Иваныч
<mikekaganski>
Можно даже там коммент оставить: // Take adjusted values of aAreaParam.mbLeftClip and aAreaParam.mbRightClip
* tagezi
чуть не сломал всё
<mikekaganski>
погодь, там ещё
<tagezi>
mikekaganski: остальное нормально?
<mikekaganski>
4220
<mikekaganski>
не поправил
<mikekaganski>
аналогично 3901
<tagezi>
да, не поправил
<mikekaganski>
я же говорю: 5 :)
<JohnDoe_71Rus>
то есть ты в реальном времени видишь что тагезя фиксит?
<mikekaganski>
не совсем :) только то, что он выложил
<tagezi>
это потому что без зборки, если бы сборку делал, онобы меня носот тыкнулобы
<mikekaganski>
это понятно, но что ж тут сделать
<mikekaganski>
у тебя наверное ещё полдня будет собирать
<tagezi>
mikekaganski: второй и третий можно убить
<tagezi>
ну не пол дня
<mikekaganski>
попрошу
<tagezi>
почти 100 строк в минус...
<tagezi>
яже говорю, удаляю ЛО :)
<mikekaganski>
и правильно, так его!
<tagezi>
с этим файлом ещё работать и работать
<tagezi>
там полно таких мест, которые на отдельные функции тянут
<mikekaganski>
ну, ты и поиграйся с ним. Главное, чтобы каждая правка была законченной
<tagezi>
и этот самый анализатор копипаста, кстати, их не зачек, я глазами нашёл
<tagezi>
ну, я так и хочу.. просто если сразу всё сделать, я это могу и не закончить.. а так хоть часть успею сделать
<mikekaganski>
просто когда ты вчера спросил, я не знал, что конкретно ты имел ввиду. Делать нужно именно так, по частям, чтобы если что, регрессию легко было найти
<mikekaganski>
JohnDoe_71Rus: он выкладывает в геррит, и там я просматриваю
<tagezi>
вот что мне не нравиться, он возвращает не инициализированную переменную
<tagezi>
и название функции мне не нравиться :)
<tagezi>
оно скорее AdjustClipRegion() или IntersectOrSetClipRegion()
<tagezi>
а остальное я не вижу
<mikekaganski>
Зачем там rParam? Оттуда нужен только булевый флаг - так и передавай его как bool bPixelToLogic
<mikekaganski>
кстати, rParam должен был передаваться как константная ссылка
<mikekaganski>
иначе предполагается, что ты объект меняешь в функции
<mikekaganski>
То же самое по aAreaParam
<mikekaganski>
и лучше передавать только её maClipRect
<tagezi>
а почему тогда в предыдущем патче ты не сказал про aAreaParam?
<mikekaganski>
потому что там не только прямоугольник был
<mikekaganski>
там ещё были булевые значения емнип
<tagezi>
а тут я его не меняю, и поэтому нужно сделать константу?
<mikekaganski>
да
<mikekaganski>
но лучше даже не его, а только rect
<tagezi>
а рект какой класс использует?
<mikekaganski>
tagezi: поищи :)
<mikekaganski>
Насчёт неинициализированного возврата: наверняка у tools::Rectangle есть конструктор - он отрабатывает в первой строке, так что это не неинициализированный объект
<tagezi>
а ты уверен что у нас в конструкторе это реализовано? :)
<tagezi>
этоже только концепуция :)
<mikekaganski>
это нормально используемый механизм
<mikekaganski>
но только нужно понять, применим ли он здесь
<tagezi>
концептуально, я суперпупер кутой программист, а по факту, ты меня уже второй день носом в какашки тыкаешь :)
<tagezi>
так, нужно найти конструктор Rectangle в пространстве имен tools. Так?
<mikekaganski>
погодь
<tagezi>
и посмотреть есть ли унего деструктор
<tagezi>
годю :)
<mikekaganski>
нет, если нам это делать, то нужно вместо функции сделать новый класс с конструктором и деструктором, и на местах создавать его экземпляры
<mikekaganski>
но вот меня напрягает ScOutputData::Clip - она не очищает образку
* tagezi
стол kompi, ничего не понял, кроме минуса :)
<tagezi>
чем он тебя напрягает?
<tagezi>
функция член класса, все созданые объекты будут уничтожены в деструкторе.
<mikekaganski>
:) смотри: у нас везде создаётся и применяется обрезающий прямоугольник, а потом он очищается (mpDev->Pop() либо mpDev->SetClipRegion())
<tagezi>
а
<mikekaganski>
Это происходит двумя способами: 1. Тот, который ты, собственно, обработал в патче: сначала все эти танцы, затем что-то они там делают, потом в конце функции очистка
<mikekaganski>
2. Сначала вызывается ScOutputData::Clip (а внутри него, в т.ч., делается обрезка), а потом в конце очистка
<mikekaganski>
Фактически мы можем возвращать из твоей функции объект, уничтожение которого будет очищать обрезку
<mikekaganski>
наверное, это самый правильный способ
<tagezi>
хорошо, но какой объект?
<tagezi>
mpDev - это член класса, он будет разрушен только при срабатывании деструктора класса
<mikekaganski>
скайп/хангаутс?
<tagezi>
остальные объекты не нужны в родительской функции
<tagezi>
хангфнтс, скайп долго ставить
<mikekaganski>
tagezi: ок, звони
<mikekaganski>
ты ж мой gmail знаешь
<tagezi>
нет, не нахожу
<mikekaganski>
mikekaganski@gmail.com
<JohnDoe_71Rus>
скайп умирает. wire
<tagezi>
mikekaganski: а вотсап у тебя есть?
<mikekaganski>
есть
<tagezi>
давай по нему, что-то у меня нифига не стоит на компе
<mikekaganski>
tagezi: из браузера ж можно вроде в хангаутс... ладно, как там по ватсапу?
<tagezi>
телефон нужен
<tagezi>
я тебе свой скинул, ты что не пользуешься?
<JohnDoe_71Rus>
онлайн курсы "программирование ЛО" в скайпе :)
kompi has quit [Quit: Page closed]
JohnDoe_71Rus has quit [Quit: Miranda IM! Smaller, Faster, Easier. http://miranda-im.org]
<tagezi>
в вотсапе :)
<tagezi>
да, примерно так и есть...
<tagezi>
оказывается я программировать вобще не умею :)
<mikekaganski>
Ты про fixed own bug не переживай. Вон Тор пофиксил недавно свой баг 2014 года, который всем маководам из США печатать не давал три года :))
<mikekaganski>
копипаст-error
<kompi>
'nj z gjvy.
<kompi>
это я помню
<kompi>
mikekaganski: однако раз уж какой-то скрипт там вас считает, то несправедливо, что ты правишь свой баг, а тебе ставят плюс 1
<mikekaganski>
плюс 1 чего?
<tagezi>
git push origin sc_2:refs/drafts/branch
<tagezi>
так получается?
<kompi>
mikekaganski: +1 в карму наверное
<kompi>
mikekaganski: Arkadiy Illarionov - это кто такой? CiB?
<tagezi>
здесь карму считают? :)
<kompi>
tagezi: в багзилле
<mikekaganski>
tagezi: наверное так, я давно ползуюсь logerrit, забыл уже
<mikekaganski>
kompi: первый раз слышу
<mikekaganski>
refs/drafts/master
<kompi>
Allow assigning styles to ui elements - что он сделал? До меня не очень доходит
<mikekaganski>
kompi: ссылку
<tagezi>
а логерит как получается?
<tagezi>
прямо так? ./logerrit submit-draft master
<mikekaganski>
a - это вроде "просто объект" - как "a man"
<mikekaganski>
а r - это ссылка (reference)
<tagezi>
ясно
<mikekaganski>
Перед mpDev = pDev; добавь пустую строку - чтобы было визуально видно, что оно не относится к предыдущей строке (иначе кто-то может подумать, что оно должно быть в else)
<mikekaganski>
Я придираюсь, но такова моя сучность :)
<mikekaganski>
Вот, теперь давай посмотрим, что не так в ScOutputData::Clip
<mikekaganski>
Здесь раньше происходило что: просто применялась обрезающая маска, и всё. Очистка маски происходила в вызывающих функциях.
<tagezi>
да
<mikekaganski>
А теперь маска применяется, и тут же очищается. А потом ещё раз очищается в вызывающем процессе
<kompi>
tagezi: какой ты непонятливый =)
<mikekaganski>
Здесь у нас новая задача: создать объект, но не удалять его сразу.
<mikekaganski>
Стоит воспользоваться std::unique_ptr<ClearableClipRegion>
<mikekaganski>
и возвращать его из ScOutputData::Clip вместо bool
<mikekaganski>
То есть в ScOutputData::Clip последнzz строкf будtт типа return std::unique_ptr<ClearableClipRegion>(new ClearableClipRegion(...))
<mikekaganski>
не смотрю на результат :) надеюсь, моя мешанина всё же понятна
<mikekaganski>
ух ьты
<mikekaganski>
а в вызывающих функциях можно написать auto ClipRegion = Clip(...);
<mikekaganski>
и тогда оттуда убрать очистку маски\
<tagezi>
mikekaganski: этого я не понимаю std::unique_ptr<ClearableClipRegion>(new ClearableClipRegion(...))
<tagezi>
контейнер с новым объектом?
<mikekaganski>
да :)
<mikekaganski>
этот контейнер позволит тебе передать объект из функции без разрушения объекта, а потом в функции уничтожение контейнера уничтожит объект
<mikekaganski>
и вот здесь тебе придётся менять объявление ScOutputData::Clip (её возвращаемого значения) на std::unique_ptr<ClearableClipRegion>, и поэтому имя ClearableClipRegion прозвучит в заголовке
<tagezi>
так, но мне нужна булева функция же
<mikekaganski>
зачем?
<tagezi>
так, признавайся, ты решил моими руками переписать весь ЛО? :)
<mikekaganski>
:)
<tagezi>
потому что там она участвует дальше в расчетах
<tagezi>
всмысле переменная
<mikekaganski>
А точнее?
<mikekaganski>
Ещё одно имя, которое я плохо придумал: ClearableClipRegion
<mikekaganski>
Хотя нет
<mikekaganski>
пусть будет
<tagezi>
так , вроде я понял твою идею
<tagezi>
слип возращает объейт, который в конце функции разрушается
<mikekaganski>
точно
<tagezi>
это вообще потом кто-нибудь прочтет?
<mikekaganski>
А комментарии на что?
<kompi>
mikekaganski: сказал Хейко про проблему копирования в таблицах со стилями
<tagezi>
auto ClipRegion =
<tagezi>
почему ауто?
<kompi>
mikekaganski: он мне сказал "Конечно! Это то, что ты ожидаешь!"
<kompi>
mikekaganski: и привел в пример "Ты же пишешь большими красными буквами заголовок таблиц? Как ты хочешь чтобы он выглядел в новой таблице, если ты его копируешь?"
<kompi>
то есть он априори считает, что их стили говно и я форматирование загловка буду правит руками
<tagezi>
mikekaganski: так, и клас нужно переносить в hxx
<kompi>
mikekaganski: а был же вроде экпсорт в FB2 из Либры? А где он?
<tagezi>
в расширении
<kompi>
это разве не встроенная функция?
<tagezi>
нет
<tagezi>
это же бублегум (с)
<kompi>
хм
<kompi>
в сборке от могги нету расширений что ли?
<tagezi>
его не включали в сборку, вроде
kompi has quit [Ping timeout: 260 seconds]
<mikekaganski>
tagezi: не надо класс переносить в заголовок. Там его нужно только упомянуть, вот так: class ClearableClipRegion;
<mikekaganski>
и всё. Этого достаточно
<tagezi>
спасибо
<mikekaganski>
а насчёт auto - это просто чтобы не писать std::unique_ptr<ClearableClipRegion> ClipRegion = ...
<tagezi>
mikekaganski: а куда его поставить?
<mikekaganski>
перед классом ScOutputData
<tagezi>
mikekaganski: что дальше переписываем? :))