Имеется справка в CHM-формате. В связи с распространением HiDPI-мониторов возник вопрос, как эта справка работает у пользователей сих девайсов. Поработав за компом с масштабированием 150%, я понял: хреново работает. Про 4K с 200% даже думать страшно. Шрифты-то масштабируются автоматически (если для них выставлены размеры в пунктах), а вот картинки остаются в родном размере в пикселях, всё мелко. Возник вопрос: а как это дело можно улучшить? Положим, сами картинки-то в разных размерах переделать несложно, но как заставить справочную систему отображать нужный вариант изображения в зависимости от текущего масштаба? Распространять 3 раздельных CHM-файла как-то не тянет.
Насколько я понял, в современном вебе для этого используются CSS-правила @media. Вот только движок IE7, на котором работает CHM, про эти правила знать не знает, так что эта идея отпала. Также я рассматривал возможность внедрить JS, который будет динамически высчитывать масштаб и подменять картинки. PoC сработал нормально, но я смутно помню, что JS в CHM считается злом (то ли на каких-то системах или при каких-то настройках он блокируется, то ли ещё что-то в этом роде; точно знаю только, что у пользователей древнего Макстона скрипты в CHM вызывали лишние запросы подтверждения от какой-то системы безопасности). В общем, по возможности хотелось бы обойтись без JS. Нашёл также интересный хак, позволяющий внедрить JS-код прямо внутрь CSS, но думается мне, это принципиально не отличается от честного выполнения JS из кода страницы.
Не знает ли многоуважаемый all каких-нибудь других способов решения задачи?
Здравствуйте, CaptainFlint, Вы писали:
CF>Не знает ли многоуважаемый all каких-нибудь других способов решения задачи?
Я сварщик фронтендер не настоящий, поэтому, быть может, скажу глупость...
А что если:
— всегда класть картинки с максимальным разрешением
— указывать размеры изображения не в пикселах, а например, относительно ширины окна
Здравствуйте, Михаил Романов, Вы писали:
CF>>Не знает ли многоуважаемый all каких-нибудь других способов решения задачи? МР>Я сварщик фронтендер не настоящий, поэтому, быть может, скажу глупость... МР>А что если: МР>- всегда класть картинки с максимальным разрешением МР>- указывать размеры изображения не в пикселах, а например, относительно ширины окна
Сейчас размеры картинок вообще не указываются, и картинки просто вставляются в "базовом" размере. Если начать вставлять туда относительные размеры, то вылезает сразу несколько проблем:
1. Если указывать размеры относительно окна, то когда пользователь растягивает окно, все картинки будут растягиваться вместе с ним (причём непропорционально).
2. Если засунуть их, скажем, в DIV фиксированного размера (равного базовому размеру картинки) и указывать размер картинки в процентах от этого блока, то DIV продолжит занимать место, и вокруг картинки останется пустое поле.
3. Независимо от выбранного способа, перемасштабирование картинки даёт мыло, которого хотелось бы избежать. Особенно с учётом того, что масштаб 100% — это всё-таки пока что мейнстрим, и он должен быть в хорошем качестве. Если 100% превратить в 200 ещё можно было бы дублированием пикселей, избежав мыла (и то ещё вопрос, как движок IE7 будет осуществлять масштабирование), то нецелые масштабы и тем более уменьшение размеров неизбежно приводят к ухудшению качества. Поскольку это не фотографии, а скриншоты с чёткими линиями, значками и текстом, то разница очень ощутима.
Здравствуйте, netch80, Вы писали:
N>Открывается okularʼом с управлением масштабированием. Есть сборка под Windows. N>Ещё есть приложение для Хрома.
К сожалению, этот вариант не подходит. Справка пишется для сторонней программы и распространяется для произвольного круга лиц. Заставить всех пересесть на альтернативный просмотрщик невозможно. Кроме того, сама программа вызывает справку с использованием HTMLHelp API, что приводит к использованию стандартного системного движка.
Здравствуйте, CaptainFlint, Вы писали:
CF>Не знает ли многоуважаемый all каких-нибудь других способов решения задачи?
Вектор туда кинуть?
IE7 не понимает .svg (уточнить), но понимает какой-то VML Наверное, есть конвертеры.
Получить скриншот в векторе сложно, но можно.
Можно попытаться подменив рисовалку.
В Qt это через QSvgGenerator, в обычном GDI это через метафайлы, зайдёт это всё только без двойной буферизации.
Или -- распознать текст и линии OCR.
Здравствуйте, Alexander G, Вы писали:
AG>Вектор туда кинуть?
AG>IE7 не понимает .svg (уточнить), но понимает какой-то VML Наверное, есть конвертеры.
Скриншот в векторе — идея, конечно, нестандартная…
Впрочем, из любопытства посмотрел, что с ними можно сделать. Но ни SVG, ни VML движок CHM принимать не захотел, показывает заглушку несуществующей картинки. (Сами файлы в CHM, разумеется, присутствуют.)
Здравствуйте, CaptainFlint, Вы писали:
CF>Насколько я понял, в современном вебе для этого используются CSS-правила @media.
В современном веб px это reference pixel, который в идеале 1/96 дюйма, но реальное соотношение может прыгать, в зависимости от реализации и сколько ошибок насобирать. Поэтому, размеры в пикселах не идеальны, но во многих случаев этого достаточно, и никакие медиа-квери не нужны и они будут физически (в дюймах) более-менее одинаковы.
@media нужны для более забористых случаев, но в значительной части используются для адаптации контента под конкретные размеры экранов. А что касается картинок, то, что бы их заменять на другие, с большим разрешением — нужно прежде всего их иметь.
Можно попробовать задавать размеры картинок в других единицах css, вплоть до процентов (например оттолкнуться от шрифта в em). Я конкретно уже про IE7 не подскажу. Наверное надо добиться, что бы в нем это сначала приемлимо заработало, а потом уже это в chm втаскивать.
Здравствуйте, 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.
Здравствуйте, 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 работает и там все легаси приложения без мыла. Но она глубоко спрятана. И действует на все мониторы и если их больше одного.
Здравствуйте, CaptainFlint, Вы писали:
CF>Не знает ли многоуважаемый all каких-нибудь других способов решения задачи?
Конечно знает. Перейти на более современные форматы справки и способы ее отображения. Например, положиться на то, что у пользователя установлен современный браузер, и открывать справку в нем.
Здравствуйте, Mystic Artifact, Вы писали:
CF>>Насколько я понял, в современном вебе для этого используются CSS-правила @media. MA> В современном веб px это reference pixel, который в идеале 1/96 дюйма, но реальное соотношение может прыгать, в зависимости от реализации и сколько ошибок насобирать. Поэтому, размеры в пикселах не идеальны, но во многих случаев этого достаточно, и никакие медиа-квери не нужны и они будут физически (в дюймах) более-менее одинаковы. MA> @media нужны для более забористых случаев, но в значительной части используются для адаптации контента под конкретные размеры экранов. А что касается картинок, то, что бы их заменять на другие, с большим разрешением — нужно прежде всего их иметь.
Заиметь картинки как раз не проблема. Проблема — объяснить браузеру, что при таком-то масштабе я хотел бы использовать такую картинку, при сяком-то — другую. Я в вебе сильно плаваю (особенно в современном), но, вроде, кроме @media ничем другим такого не добиться. Ну и скриптами ещё, само собой. Ещё нагуглился img srcset, но это ещё более молодая технология, про IE7 тут и заикаться нечего.
MA> Можно попробовать задавать размеры картинок в других единицах css, вплоть до процентов (например оттолкнуться от шрифта в em). Я конкретно уже про IE7 не подскажу. Наверное надо добиться, что бы в нем это сначала приемлимо заработало, а потом уже это в chm втаскивать.
Про проценты я писал выше, с ними не получается. Задание размера картинки в em и в pt, вроде бы, масштабы состыковало нормально. Но задачу подстановки чёткой картинки нужного разрешения это не решает, просто получается увеличенная (или уменьшенная) мыльная копия исходного изображения, а мне это сильно не нравится.
Здравствуйте, 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.
Любое изменение системных настроек тут не катит, справка идёт отдельно, без инсталлятора. Требовать от пользователей ручками что-то там настраивать в реестре — нехорошо. Да тому же влияющее не конкретно на справку, а на саму чужую программу, эту справку использующую.
Здравствуйте, wildwind, Вы писали:
W>Конечно знает. Перейти на более современные форматы справки и способы ее отображения. Например, положиться на то, что у пользователя установлен современный браузер, и открывать справку в нем.
Программа сторонняя, выбор формата справки осуществляется не мной.
(И, кстати, как пользователь, я отношусь с громадным отвращением к браузерной справке. Очень неудобно по множеству причин.)
Здравствуйте, VladCore, Вы писали:
VC>есть две настройки HiDPI — одна как в Windows 7 работает и там все легаси приложения без мыла. Но она глубоко спрятана. И действует на все мониторы и если их больше одного.
Из настроек я знаю только в десятке в диалоге свойств программы, выбор типа масштабирования. Но я выше писал, любое изменение настроек на стороне пользователя крайне нежелательно. А любое изменение, влияющее не только на нашу справку, но и на другие программы/справки, и вовсе недопустимо.
Здравствуйте, CaptainFlint, Вы писали:
VC>>есть две настройки HiDPI — одна как в Windows 7 работает и там все легаси приложения без мыла. Но она глубоко спрятана. И действует на все мониторы и если их больше одного.
CF>Из настроек я знаю только в десятке в диалоге свойств программы, выбор типа масштабирования. Но я выше писал, любое изменение настроек на стороне пользователя крайне нежелательно. А любое изменение, влияющее не только на нашу справку, но и на другие программы/справки, и вовсе недопустимо.
ничего не понятно. если пользователь не менял настройку HiDPI то в чем тогда проблема
и что значит любое изменение настроек на стороне пользователя крайне нежелательно? я где то предлагал за пользователя менять настройки HiDPI?
Здравствуйте, VladCore, Вы писали:
VC>>>есть две настройки HiDPI — одна как в Windows 7 работает и там все легаси приложения без мыла. Но она глубоко спрятана. И действует на все мониторы и если их больше одного.
CF>>Из настроек я знаю только в десятке в диалоге свойств программы, выбор типа масштабирования. Но я выше писал, любое изменение настроек на стороне пользователя крайне нежелательно. А любое изменение, влияющее не только на нашу справку, но и на другие программы/справки, и вовсе недопустимо.
VC>ничего не понятно. если пользователь не менял настройку HiDPI то в чем тогда проблема
VC>и что значит любое изменение настроек на стороне пользователя крайне нежелательно? я где то предлагал за пользователя менять настройки HiDPI?
DPI я предполагаю выставленным под нужды пользователя. Для меня это внешний рид-онли параметр, который меняется независимо от моих желаний, и мне надо под него подстраиваться.
Под модификацией настроек я понимаю всевозможные сценарии, где справка распространяется вместе с ридми, в котором говорится: "чтобы нормально читать нашу справку, зайдите в реестр и твикните такие-то ключили / откройте такой-то диалог и выставьте такие-то галочки / отредактируйте сякой-то системный INI-файлик / и т. д."
Из сообщения про "есть две настройки HiDPI" я сделал вывод, что в одном из этих режимов, возможно, автомасштабирование в CHM будет работать лучше, и мне предлагается заставить пользователя переключить свою систему в этот режим. Отсюда мой ответ про недопустимость подобных манипуляций. Если понял неправильно, то прошу разъяснить, что именно мне предлагалось сделать. Или это была просто ремарка о текущем положении дел, без каких-либо указаний на то, что с этим можно сделать?
Кстати говоря, фраза "все легаси приложения без мыла" вызывает у меня глубокий скепсис. Любое масштабирование изображений на LCD-экранах (кроме кратного) неизбежно вызовет замыление картинки. То есть чтобы было без мыла, надо картинки оставить немасштабированными — ну так именно это сейчас и происходит. Картинки чёткие, но слишком мелкие, пользоваться такой справкой некомфортно. Поэтому я ищу способы улучшить ситуацию.
Здравствуйте, CaptainFlint, Вы писали:
CF>Заиметь картинки как раз не проблема. Проблема — объяснить браузеру, что при таком-то масштабе я хотел бы использовать такую картинку, при сяком-то — другую. Я в вебе сильно плаваю (особенно в современном), но, вроде, кроме @media ничем другим такого не добиться. Ну и скриптами ещё, само собой. Ещё нагуглился img srcset, но это ещё более молодая технология, про IE7 тут и заикаться нечего.
Я помню что, что можно было что-то выиграть от meta viewport. Поведение может поменяться. (Правда саму задачу не решит.)
CF>Про проценты я писал выше, с ними не получается. Задание размера картинки в em и в pt, вроде бы, масштабы состыковало нормально. Но задачу подстановки чёткой картинки нужного разрешения это не решает, просто получается увеличенная (или уменьшенная) мыльная копия исходного изображения, а мне это сильно не нравится.
Прям сильно мыльная?
Насчет картинок тут проверь еще и сами картинки, какое у них указано разрешение, если это есть в их формате. Вдруг там ерунда указана.
Ну а так — поищи готовые полифилы для медиа квери.
Ну или добавь скрипт который на div разместит шрифт/букву с базовым размером который ты знаешь. Скриптом спрашиваешь размер этого div в пикселах. Тут по идее ты и сможешь вычислить масштаб и следовательно перейти на другие img, которые в ином качестве.
А еще лучше — поместить "референсную картинку" в див, и див с текстом который приблизительно равен ширине этой картинки. Ну и опять спрашиваешь браузер о размерах и получаешь отношение — и соотв. из отношения можно уже переключить на другой набор картинок.
Ну это просто идея, надо пробовать на практике на IE7 и в chm.
Add: Последний вариант возможно будет даже получше полифилов — не прийдется разбираться как они сделаны и делают ли то, что тебе нужно.
Здравствуйте, CaptainFlint, Вы писали:
CF>Кстати говоря, фраза "все легаси приложения без мыла" вызывает у меня глубокий скепсис. Любое масштабирование изображений на LCD-экранах (кроме кратного) неизбежно вызовет замыление картинки. То есть чтобы было без мыла, надо картинки оставить немасштабированными — ну так именно это сейчас и происходит. Картинки чёткие, но слишком мелкие, пользоваться такой справкой некомфортно. Поэтому я ищу способы улучшить ситуацию.
Я сейчас поменял старый 24" 1920x1080 на 27" 4k и даже при 200% масштабировании в Windows наблюдаю какое-то мыло в старых приложениях. Такое, что при переключении масштабирования в 175% оно вроде увеличивается, но уже не так принципиально, чтобы использовать 200% вместо 175%.
есть две настройки HiDPI — одна как в Windows 7 работает и там все легаси приложения без мыла
CF>>>Из настроек я знаю только в десятке в диалоге свойств программы, выбор типа масштабирования. Но я выше писал, любое изменение настроек на стороне пользователя крайне нежелательно. А любое изменение, влияющее не только на нашу справку, но и на другие программы/справки, и вовсе недопустимо.
VC>>ничего не понятно. если пользователь не менял настройку HiDPI то в чем тогда проблема
VC>>и что значит любое изменение настроек на стороне пользователя крайне нежелательно? я где то предлагал за пользователя менять настройки HiDPI?
CF>DPI я предполагаю выставленным под нужды пользователя. Для меня это внешний рид-онли параметр, который меняется независимо от моих желаний, и мне надо под него подстраиваться. CF>Под модификацией настроек я понимаю всевозможные сценарии, где справка распространяется вместе с ридми, в котором говорится: "чтобы нормально читать нашу справку, зайдите в реестр и твикните такие-то ключили / откройте такой-то диалог и выставьте такие-то галочки / отредактируйте сякой-то системный INI-файлик / и т. д." CF>Из сообщения про "есть две настройки HiDPI" я сделал вывод, что в одном из этих режимов, возможно, автомасштабирование в CHM будет работать лучше, и мне предлагается заставить пользователя переключить свою систему в этот режим. Отсюда мой ответ про недопустимость подобных манипуляций. Если понял неправильно, то прошу разъяснить, что именно мне предлагалось сделать. Или это была просто ремарка о текущем положении дел, без каких-либо указаний на то, что с этим можно сделать?
CF>Кстати говоря, фраза "все легаси приложения без мыла" вызывает у меня глубокий скепсис. Любое масштабирование изображений на LCD-экранах (кроме кратного) неизбежно вызовет замыление картинки. То есть чтобы было без мыла, надо картинки оставить немасштабированными — ну так именно это сейчас и происходит. Картинки чёткие, но слишком мелкие, пользоваться такой справкой некомфортно. Поэтому я ищу способы улучшить ситуацию.
и кому нужны твой скепсис и фантазии про readme?
ты нашел обе опции где HiDPI задается? Найдеш поставь +. И сюда скринь скриншоты с мылом и без. бо я уже не первый раз вижу как народ в 10ке не может включить HiDPI для легаси