CHM и HiDPI — как?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 09.08.20 07:16
Оценка: 4 (1)
Имеется справка в CHM-формате. В связи с распространением HiDPI-мониторов возник вопрос, как эта справка работает у пользователей сих девайсов. Поработав за компом с масштабированием 150%, я понял: хреново работает. Про 4K с 200% даже думать страшно. Шрифты-то масштабируются автоматически (если для них выставлены размеры в пунктах), а вот картинки остаются в родном размере в пикселях, всё мелко. Возник вопрос: а как это дело можно улучшить? Положим, сами картинки-то в разных размерах переделать несложно, но как заставить справочную систему отображать нужный вариант изображения в зависимости от текущего масштаба? Распространять 3 раздельных CHM-файла как-то не тянет.

Насколько я понял, в современном вебе для этого используются CSS-правила @media. Вот только движок IE7, на котором работает CHM, про эти правила знать не знает, так что эта идея отпала. Также я рассматривал возможность внедрить JS, который будет динамически высчитывать масштаб и подменять картинки. PoC сработал нормально, но я смутно помню, что JS в CHM считается злом (то ли на каких-то системах или при каких-то настройках он блокируется, то ли ещё что-то в этом роде; точно знаю только, что у пользователей древнего Макстона скрипты в CHM вызывали лишние запросы подтверждения от какой-то системы безопасности). В общем, по возможности хотелось бы обойтись без JS. Нашёл также интересный хак, позволяющий внедрить JS-код прямо внутрь CSS, но думается мне, это принципиально не отличается от честного выполнения JS из кода страницы.

Не знает ли многоуважаемый all каких-нибудь других способов решения задачи?
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re: CHM и HiDPI — как?
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 09.08.20 07:38
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Не знает ли многоуважаемый all каких-нибудь других способов решения задачи?

Я сварщик фронтендер не настоящий, поэтому, быть может, скажу глупость...
А что если:
— всегда класть картинки с максимальным разрешением
— указывать размеры изображения не в пикселах, а например, относительно ширины окна

Или я не правильно понял проблему?
Re: CHM и HiDPI — как?
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 09.08.20 07:43
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Имеется справка в CHM-формате.


Открывается okularʼом с управлением масштабированием. Есть сборка под Windows.
Ещё есть приложение для Хрома.
Re[2]: CHM и HiDPI — как?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 09.08.20 08:47
Оценка:
Здравствуйте, Михаил Романов, Вы писали:

CF>>Не знает ли многоуважаемый all каких-нибудь других способов решения задачи?

МР>Я сварщик фронтендер не настоящий, поэтому, быть может, скажу глупость...
МР>А что если:
МР>- всегда класть картинки с максимальным разрешением
МР>- указывать размеры изображения не в пикселах, а например, относительно ширины окна

Сейчас размеры картинок вообще не указываются, и картинки просто вставляются в "базовом" размере. Если начать вставлять туда относительные размеры, то вылезает сразу несколько проблем:
1. Если указывать размеры относительно окна, то когда пользователь растягивает окно, все картинки будут растягиваться вместе с ним (причём непропорционально).
2. Если засунуть их, скажем, в DIV фиксированного размера (равного базовому размеру картинки) и указывать размер картинки в процентах от этого блока, то DIV продолжит занимать место, и вокруг картинки останется пустое поле.
3. Независимо от выбранного способа, перемасштабирование картинки даёт мыло, которого хотелось бы избежать. Особенно с учётом того, что масштаб 100% — это всё-таки пока что мейнстрим, и он должен быть в хорошем качестве. Если 100% превратить в 200 ещё можно было бы дублированием пикселей, избежав мыла (и то ещё вопрос, как движок IE7 будет осуществлять масштабирование), то нецелые масштабы и тем более уменьшение размеров неизбежно приводят к ухудшению качества. Поскольку это не фотографии, а скриншоты с чёткими линиями, значками и текстом, то разница очень ощутима.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: CHM и HiDPI — как?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 09.08.20 08:50
Оценка:
Здравствуйте, netch80, Вы писали:

N>Открывается okularʼом с управлением масштабированием. Есть сборка под Windows.

N>Ещё есть приложение для Хрома.

К сожалению, этот вариант не подходит. Справка пишется для сторонней программы и распространяется для произвольного круга лиц. Заставить всех пересесть на альтернативный просмотрщик невозможно. Кроме того, сама программа вызывает справку с использованием HTMLHelp API, что приводит к использованию стандартного системного движка.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re: CHM и HiDPI — как?
От: Alexander G Украина  
Дата: 09.08.20 10:29
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Не знает ли многоуважаемый all каких-нибудь других способов решения задачи?


Вектор туда кинуть?

IE7 не понимает .svg (уточнить), но понимает какой-то VML Наверное, есть конвертеры.

Получить скриншот в векторе сложно, но можно.

Можно попытаться подменив рисовалку.
В Qt это через QSvgGenerator, в обычном GDI это через метафайлы, зайдёт это всё только без двойной буферизации.
Или -- распознать текст и линии OCR.

PS: Я теоретик.
Отредактировано 09.08.2020 10:33 Alexander G . Предыдущая версия .
Re[2]: CHM и HiDPI — как?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 09.08.20 22:06
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Вектор туда кинуть?


AG>IE7 не понимает .svg (уточнить), но понимает какой-то VML Наверное, есть конвертеры.


Скриншот в векторе — идея, конечно, нестандартная…
Впрочем, из любопытства посмотрел, что с ними можно сделать. Но ни SVG, ни VML движок CHM принимать не захотел, показывает заглушку несуществующей картинки. (Сами файлы в CHM, разумеется, присутствуют.)
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re: CHM и HiDPI — как?
От: Mystic Artifact  
Дата: 10.08.20 04:08
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Насколько я понял, в современном вебе для этого используются CSS-правила @media.

В современном веб px это reference pixel, который в идеале 1/96 дюйма, но реальное соотношение может прыгать, в зависимости от реализации и сколько ошибок насобирать. Поэтому, размеры в пикселах не идеальны, но во многих случаев этого достаточно, и никакие медиа-квери не нужны и они будут физически (в дюймах) более-менее одинаковы.
@media нужны для более забористых случаев, но в значительной части используются для адаптации контента под конкретные размеры экранов. А что касается картинок, то, что бы их заменять на другие, с большим разрешением — нужно прежде всего их иметь.

Можно попробовать задавать размеры картинок в других единицах css, вплоть до процентов (например оттолкнуться от шрифта в em). Я конкретно уже про IE7 не подскажу. Наверное надо добиться, что бы в нем это сначала приемлимо заработало, а потом уже это в chm втаскивать.
Отредактировано 10.08.2020 4:10 Mystic Artifact . Предыдущая версия .
Re: CHM и HiDPI — как?
От: qaz77  
Дата: 10.08.20 07:42
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Имеется справка в CHM-формате. В связи с распространением HiDPI-мониторов возник вопрос, как эта справка работает у пользователей сих девайсов.


Решал подобную задачу, но не для chm, а для интегрированного в приложение WebControl.
Возможно, что этот способ и для htmlhelp сработает.

В реестре можно задать некоторое количество параметров IE в разрезе имени exe:
HKLM или HKCU \Software\Microsoft\Internet Explorer\Main\FeatureControl\<конкретная фича>

За DPI awarness отвечает фича FEATURE_96DPI_PIXEL. Если такого ключа нет, то его надо создать.
Далее создается параметр DWORD с именем MyApp.exe и значением 1.
Re: CHM и HiDPI — как?
От: VladCore  
Дата: 10.08.20 07:48
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Имеется справка в CHM-формате. В связи с распространением HiDPI-мониторов возник вопрос, как эта справка работает у пользователей сих девайсов. Поработав за компом с масштабированием 150%, я понял: хреново работает. Про 4K с 200% даже думать страшно. Шрифты-то масштабируются автоматически (если для них выставлены размеры в пунктах), а вот картинки остаются в родном размере в пикселях, всё мелко. Возник вопрос: а как это дело можно улучшить? Положим, сами картинки-то в разных размерах переделать несложно, но как заставить справочную систему отображать нужный вариант изображения в зависимости от текущего масштаба? Распространять 3 раздельных CHM-файла как-то не тянет.


CF>Насколько я понял, в современном вебе для этого используются CSS-правила @media. Вот только движок IE7, на котором работает CHM, про эти правила знать не знает, так что эта идея отпала. Также я рассматривал возможность внедрить JS, который будет динамически высчитывать масштаб и подменять картинки. PoC сработал нормально, но я смутно помню, что JS в CHM считается злом (то ли на каких-то системах или при каких-то настройках он блокируется, то ли ещё что-то в этом роде; точно знаю только, что у пользователей древнего Макстона скрипты в CHM вызывали лишние запросы подтверждения от какой-то системы безопасности). В общем, по возможности хотелось бы обойтись без JS. Нашёл также интересный хак, позволяющий внедрить JS-код прямо внутрь CSS, но думается мне, это принципиально не отличается от честного выполнения JS из кода страницы.


CF>Не знает ли многоуважаемый all каких-нибудь других способов решения задачи?


есть две настройки HiDPI — одна как в Windows 7 работает и там все легаси приложения без мыла. Но она глубоко спрятана. И действует на все мониторы и если их больше одного.
Re: CHM и HiDPI — как?
От: wildwind Россия  
Дата: 10.08.20 08:49
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Не знает ли многоуважаемый all каких-нибудь других способов решения задачи?


Конечно знает. Перейти на более современные форматы справки и способы ее отображения. Например, положиться на то, что у пользователя установлен современный браузер, и открывать справку в нем.
Re[2]: CHM и HiDPI — как?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 10.08.20 11:44
Оценка:
Здравствуйте, Mystic Artifact, Вы писали:

CF>>Насколько я понял, в современном вебе для этого используются CSS-правила @media.

MA> В современном веб px это reference pixel, который в идеале 1/96 дюйма, но реальное соотношение может прыгать, в зависимости от реализации и сколько ошибок насобирать. Поэтому, размеры в пикселах не идеальны, но во многих случаев этого достаточно, и никакие медиа-квери не нужны и они будут физически (в дюймах) более-менее одинаковы.
MA> @media нужны для более забористых случаев, но в значительной части используются для адаптации контента под конкретные размеры экранов. А что касается картинок, то, что бы их заменять на другие, с большим разрешением — нужно прежде всего их иметь.

Заиметь картинки как раз не проблема. Проблема — объяснить браузеру, что при таком-то масштабе я хотел бы использовать такую картинку, при сяком-то — другую. Я в вебе сильно плаваю (особенно в современном), но, вроде, кроме @media ничем другим такого не добиться. Ну и скриптами ещё, само собой. Ещё нагуглился img srcset, но это ещё более молодая технология, про IE7 тут и заикаться нечего.

MA> Можно попробовать задавать размеры картинок в других единицах css, вплоть до процентов (например оттолкнуться от шрифта в em). Я конкретно уже про IE7 не подскажу. Наверное надо добиться, что бы в нем это сначала приемлимо заработало, а потом уже это в chm втаскивать.


Про проценты я писал выше, с ними не получается. Задание размера картинки в em и в pt, вроде бы, масштабы состыковало нормально. Но задачу подстановки чёткой картинки нужного разрешения это не решает, просто получается увеличенная (или уменьшенная) мыльная копия исходного изображения, а мне это сильно не нравится.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: CHM и HiDPI — как?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 10.08.20 11:47
Оценка:
Здравствуйте, qaz77, Вы писали:

Q>Решал подобную задачу, но не для chm, а для интегрированного в приложение WebControl.

Q>Возможно, что этот способ и для htmlhelp сработает.

Q>В реестре можно задать некоторое количество параметров IE в разрезе имени exe:

Q>HKLM или HKCU \Software\Microsoft\Internet Explorer\Main\FeatureControl\<конкретная фича>

Q>За DPI awarness отвечает фича FEATURE_96DPI_PIXEL. Если такого ключа нет, то его надо создать.

Q>Далее создается параметр DWORD с именем MyApp.exe и значением 1.

Любое изменение системных настроек тут не катит, справка идёт отдельно, без инсталлятора. Требовать от пользователей ручками что-то там настраивать в реестре — нехорошо. Да тому же влияющее не конкретно на справку, а на саму чужую программу, эту справку использующую.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: CHM и HiDPI — как?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 10.08.20 11:51
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Конечно знает. Перейти на более современные форматы справки и способы ее отображения. Например, положиться на то, что у пользователя установлен современный браузер, и открывать справку в нем.


Программа сторонняя, выбор формата справки осуществляется не мной.
(И, кстати, как пользователь, я отношусь с громадным отвращением к браузерной справке. Очень неудобно по множеству причин.)
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[2]: CHM и HiDPI — как?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 10.08.20 11:53
Оценка:
Здравствуйте, VladCore, Вы писали:

VC>есть две настройки HiDPI — одна как в Windows 7 работает и там все легаси приложения без мыла. Но она глубоко спрятана. И действует на все мониторы и если их больше одного.


Из настроек я знаю только в десятке в диалоге свойств программы, выбор типа масштабирования. Но я выше писал, любое изменение настроек на стороне пользователя крайне нежелательно. А любое изменение, влияющее не только на нашу справку, но и на другие программы/справки, и вовсе недопустимо.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[3]: CHM и HiDPI — как?
От: VladCore  
Дата: 10.08.20 12:39
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

VC>>есть две настройки HiDPI — одна как в Windows 7 работает и там все легаси приложения без мыла. Но она глубоко спрятана. И действует на все мониторы и если их больше одного.


CF>Из настроек я знаю только в десятке в диалоге свойств программы, выбор типа масштабирования. Но я выше писал, любое изменение настроек на стороне пользователя крайне нежелательно. А любое изменение, влияющее не только на нашу справку, но и на другие программы/справки, и вовсе недопустимо.


ничего не понятно. если пользователь не менял настройку HiDPI то в чем тогда проблема

и что значит любое изменение настроек на стороне пользователя крайне нежелательно? я где то предлагал за пользователя менять настройки HiDPI?
Re[4]: CHM и HiDPI — как?
От: CaptainFlint Россия http://flint-inc.ru/
Дата: 10.08.20 13:09
Оценка: +1 -1
Здравствуйте, VladCore, Вы писали:

VC>>>есть две настройки HiDPI — одна как в Windows 7 работает и там все легаси приложения без мыла. Но она глубоко спрятана. И действует на все мониторы и если их больше одного.


CF>>Из настроек я знаю только в десятке в диалоге свойств программы, выбор типа масштабирования. Но я выше писал, любое изменение настроек на стороне пользователя крайне нежелательно. А любое изменение, влияющее не только на нашу справку, но и на другие программы/справки, и вовсе недопустимо.


VC>ничего не понятно. если пользователь не менял настройку HiDPI то в чем тогда проблема


VC>и что значит любое изменение настроек на стороне пользователя крайне нежелательно? я где то предлагал за пользователя менять настройки HiDPI?


DPI я предполагаю выставленным под нужды пользователя. Для меня это внешний рид-онли параметр, который меняется независимо от моих желаний, и мне надо под него подстраиваться.
Под модификацией настроек я понимаю всевозможные сценарии, где справка распространяется вместе с ридми, в котором говорится: "чтобы нормально читать нашу справку, зайдите в реестр и твикните такие-то ключили / откройте такой-то диалог и выставьте такие-то галочки / отредактируйте сякой-то системный INI-файлик / и т. д."
Из сообщения про "есть две настройки HiDPI" я сделал вывод, что в одном из этих режимов, возможно, автомасштабирование в CHM будет работать лучше, и мне предлагается заставить пользователя переключить свою систему в этот режим. Отсюда мой ответ про недопустимость подобных манипуляций. Если понял неправильно, то прошу разъяснить, что именно мне предлагалось сделать. Или это была просто ремарка о текущем положении дел, без каких-либо указаний на то, что с этим можно сделать?

Кстати говоря, фраза "все легаси приложения без мыла" вызывает у меня глубокий скепсис. Любое масштабирование изображений на LCD-экранах (кроме кратного) неизбежно вызовет замыление картинки. То есть чтобы было без мыла, надо картинки оставить немасштабированными — ну так именно это сейчас и происходит. Картинки чёткие, но слишком мелкие, пользоваться такой справкой некомфортно. Поэтому я ищу способы улучшить ситуацию.
Почему же, ё-моё, ты нигде не пишешь «ё»?
Re[3]: CHM и HiDPI — как?
От: Mystic Artifact  
Дата: 10.08.20 13:19
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Заиметь картинки как раз не проблема. Проблема — объяснить браузеру, что при таком-то масштабе я хотел бы использовать такую картинку, при сяком-то — другую. Я в вебе сильно плаваю (особенно в современном), но, вроде, кроме @media ничем другим такого не добиться. Ну и скриптами ещё, само собой. Ещё нагуглился img srcset, но это ещё более молодая технология, про IE7 тут и заикаться нечего.

Я помню что, что можно было что-то выиграть от meta viewport. Поведение может поменяться. (Правда саму задачу не решит.)

CF>Про проценты я писал выше, с ними не получается. Задание размера картинки в em и в pt, вроде бы, масштабы состыковало нормально. Но задачу подстановки чёткой картинки нужного разрешения это не решает, просто получается увеличенная (или уменьшенная) мыльная копия исходного изображения, а мне это сильно не нравится.

Прям сильно мыльная?

Насчет картинок тут проверь еще и сами картинки, какое у них указано разрешение, если это есть в их формате. Вдруг там ерунда указана.

Ну а так — поищи готовые полифилы для медиа квери.

Ну или добавь скрипт который на div разместит шрифт/букву с базовым размером который ты знаешь. Скриптом спрашиваешь размер этого div в пикселах. Тут по идее ты и сможешь вычислить масштаб и следовательно перейти на другие img, которые в ином качестве.

А еще лучше — поместить "референсную картинку" в див, и див с текстом который приблизительно равен ширине этой картинки. Ну и опять спрашиваешь браузер о размерах и получаешь отношение — и соотв. из отношения можно уже переключить на другой набор картинок.

Ну это просто идея, надо пробовать на практике на IE7 и в chm.

Add: Последний вариант возможно будет даже получше полифилов — не прийдется разбираться как они сделаны и делают ли то, что тебе нужно.
Отредактировано 10.08.2020 13:31 Mystic Artifact . Предыдущая версия . Еще …
Отредактировано 10.08.2020 13:29 Mystic Artifact . Предыдущая версия .
Re[5]: CHM и HiDPI — как?
От: alexzzzz  
Дата: 10.08.20 13:50
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

CF>Кстати говоря, фраза "все легаси приложения без мыла" вызывает у меня глубокий скепсис. Любое масштабирование изображений на LCD-экранах (кроме кратного) неизбежно вызовет замыление картинки. То есть чтобы было без мыла, надо картинки оставить немасштабированными — ну так именно это сейчас и происходит. Картинки чёткие, но слишком мелкие, пользоваться такой справкой некомфортно. Поэтому я ищу способы улучшить ситуацию.


Я сейчас поменял старый 24" 1920x1080 на 27" 4k и даже при 200% масштабировании в Windows наблюдаю какое-то мыло в старых приложениях. Такое, что при переключении масштабирования в 175% оно вроде увеличивается, но уже не так принципиально, чтобы использовать 200% вместо 175%.
Отредактировано 10.08.2020 16:40 alexzzzz . Предыдущая версия .
Re[5]: CHM и HiDPI — как?
От: VladCore  
Дата: 10.08.20 14:09
Оценка:
Здравствуйте, CaptainFlint, Вы писали:

есть две настройки HiDPI — одна как в Windows 7 работает и там все легаси приложения без мыла


CF>>>Из настроек я знаю только в десятке в диалоге свойств программы, выбор типа масштабирования. Но я выше писал, любое изменение настроек на стороне пользователя крайне нежелательно. А любое изменение, влияющее не только на нашу справку, но и на другие программы/справки, и вовсе недопустимо.


VC>>ничего не понятно. если пользователь не менял настройку HiDPI то в чем тогда проблема


VC>>и что значит любое изменение настроек на стороне пользователя крайне нежелательно? я где то предлагал за пользователя менять настройки HiDPI?


CF>DPI я предполагаю выставленным под нужды пользователя. Для меня это внешний рид-онли параметр, который меняется независимо от моих желаний, и мне надо под него подстраиваться.

CF>Под модификацией настроек я понимаю всевозможные сценарии, где справка распространяется вместе с ридми, в котором говорится: "чтобы нормально читать нашу справку, зайдите в реестр и твикните такие-то ключили / откройте такой-то диалог и выставьте такие-то галочки / отредактируйте сякой-то системный INI-файлик / и т. д."
CF>Из сообщения про "есть две настройки HiDPI" я сделал вывод, что в одном из этих режимов, возможно, автомасштабирование в CHM будет работать лучше, и мне предлагается заставить пользователя переключить свою систему в этот режим. Отсюда мой ответ про недопустимость подобных манипуляций. Если понял неправильно, то прошу разъяснить, что именно мне предлагалось сделать. Или это была просто ремарка о текущем положении дел, без каких-либо указаний на то, что с этим можно сделать?

CF>Кстати говоря, фраза "все легаси приложения без мыла" вызывает у меня глубокий скепсис. Любое масштабирование изображений на LCD-экранах (кроме кратного) неизбежно вызовет замыление картинки. То есть чтобы было без мыла, надо картинки оставить немасштабированными — ну так именно это сейчас и происходит. Картинки чёткие, но слишком мелкие, пользоваться такой справкой некомфортно. Поэтому я ищу способы улучшить ситуацию.


и кому нужны твой скепсис и фантазии про readme?

ты нашел обе опции где HiDPI задается? Найдеш поставь +. И сюда скринь скриншоты с мылом и без. бо я уже не первый раз вижу как народ в 10ке не может включить HiDPI для легаси
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.