хромая логика
От: Кодт Россия  
Дата: 01.12.16 15:38
Оценка:
Из исходников хромиума.

Базовая библиотека геометрии, всё просто и понятно, пастораль и идиллия...
// gfx/geometry/point.h

class GFX_EXPORT Point {
 public:
  constexpr Point() : x_(0), y_(0) {}
  constexpr Point(int x, int y) : x_(x), y_(y) {}
  . . .

// gfx/geometry/size.h

class GFX_EXPORT Size {
 public:
  constexpr Size() : width_(0), height_(0) {}
  constexpr Size(int width, int height)
  . . .

// gfx/geometry/rect.h

class GFX_EXPORT Rect {
 public:
  constexpr Rect() = default;
  constexpr Rect(int width, int height) : size_(width, height) {}
  constexpr Rect(int x, int y, int width, int height)
  . . .


И тут внезапно
// gfx/geometry/insets.h

class GFX_EXPORT Insets {
 public:
  constexpr Insets() : top_(0), left_(0), bottom_(0), right_(0) {}
  constexpr explicit Insets(int all)
      : top_(all), left_(all), bottom_(all), right_(all) {}
  constexpr Insets(int vertical, int horizontal)
      : top_(vertical),
        left_(horizontal),
        bottom_(vertical),
        right_(horizontal) {}
  constexpr Insets(int top, int left, int bottom, int right)
      : top_(top), left_(left), bottom_(bottom), right_(right) {}
  . . .


Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание?
Перекуём баги на фичи!
Re: хромая логика
От: IID Россия  
Дата: 01.12.16 15:43
Оценка:
Здравствуйте, Кодт, Вы писали:

К>И тут внезапно

К>
К>// gfx/geometry/insets.h

К>class GFX_EXPORT Insets {
К> public:
К>  constexpr Insets() : top_(0), left_(0), bottom_(0), right_(0) {}
К>  constexpr explicit Insets(int all)
К>      : top_(all), left_(all), bottom_(all), right_(all) {}
К>  constexpr Insets(int vertical, int horizontal)
К>      : top_(vertical),
К>        left_(horizontal),
К>        bottom_(vertical),
К>        right_(horizontal) {}
К>  constexpr Insets(int top, int left, int bottom, int right)
К>      : top_(top), left_(left), bottom_(bottom), right_(right) {}
К>  . . .
К>


К>Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание?


Длинный (в символах) список инициализации порезали по строкам. А короткий не порезали.
Неаккуратненько ?
kalsarikännit
Re: хромая логика
От: ononim  
Дата: 01.12.16 15:45
Оценка:
К> Базовая библиотека геометрии, всё просто и понятно, пастораль и идиллия...
согласно педивикии пастораль выглядит так:
https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%81%D1%82%D0%BE%D1%80%D0%B0%D0%BB%D1%8C#/media/File:Fiesta_campestre.jpg
так что все нормально

К> constexpr Rect(int x, int y, int width, int height)

К> constexpr Insets() : top_(0), left_(0), bottom_(0), right_(0) {}
Вместо x/y/width/height стали юзать top/left/bottom/right? Порядок аргументов придает особую пикантность.
Как много веселых ребят, и все делают велосипед...
Отредактировано 01.12.2016 15:48 ononim . Предыдущая версия . Еще …
Отредактировано 01.12.2016 15:47 ononim . Предыдущая версия .
Re[2]: хромая логика
От: Кодт Россия  
Дата: 01.12.16 15:48
Оценка: +1
Здравствуйте, ononim, Вы писали:

O>вместо x/y/width/height стали юзать left/top/right/bottom?


вместо x/y стали юзать TOP / LEFT.
а вместо width/height — vertical/horizontal, соответственно
Перекуём баги на фичи!
Re[3]: хромая логика
От: ononim  
Дата: 01.12.16 15:49
Оценка:
O>>вместо x/y/width/height стали юзать left/top/right/bottom?
К>вместо x/y стали юзать TOP / LEFT.
К>а вместо width/height — vertical/horizontal, соответственно
да перевернутый порядок я позже приметил и подредактировал мессагу
Как много веселых ребят, и все делают велосипед...
Re: хромая логика
От: Maniacal Россия  
Дата: 01.12.16 15:49
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Из исходников хромиума.


  Скрытый текст
К>Базовая библиотека геометрии, всё просто и понятно, пастораль и идиллия...
К>
К>// gfx/geometry/point.h

К>class GFX_EXPORT Point {
К> public:
К>  constexpr Point() : x_(0), y_(0) {}
К>  constexpr Point(int x, int y) : x_(x), y_(y) {}
К>  . . .

К>// gfx/geometry/size.h

К>class GFX_EXPORT Size {
К> public:
К>  constexpr Size() : width_(0), height_(0) {}
К>  constexpr Size(int width, int height)
К>  . . .

К>// gfx/geometry/rect.h

К>class GFX_EXPORT Rect {
К> public:
К>  constexpr Rect() = default;
К>  constexpr Rect(int width, int height) : size_(width, height) {}
К>  constexpr Rect(int x, int y, int width, int height)
К>  . . .
К>


К>И тут внезапно

К>
К>// gfx/geometry/insets.h

К>class GFX_EXPORT Insets {
К> public:
К>  constexpr Insets() : top_(0), left_(0), bottom_(0), right_(0) {}
К>  constexpr explicit Insets(int all)
К>      : top_(all), left_(all), bottom_(all), right_(all) {}
К>  constexpr Insets(int vertical, int horizontal)
К>      : top_(vertical),
К>        left_(horizontal),
К>        bottom_(vertical),
К>        right_(horizontal) {}
К>  constexpr Insets(int top, int left, int bottom, int right)
К>      : top_(top), left_(left), bottom_(bottom), right_(right) {}
К>  . . .
К>

К>Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание?

Отвечает Александр Друзь!
Re[2]: хромая логика
От: Кодт Россия  
Дата: 01.12.16 15:50
Оценка:
Здравствуйте, IID, Вы писали:

IID>Длинный (в символах) список инициализации порезали по строкам. А короткий не порезали.

IID>Неаккуратненько ?

особенности хромовского стайлгайда (макс. 80 символов в строке), плюс неудачно длинные идентификаторы аргументов.
это неважно, важно — какие там аргументы.
Перекуём баги на фичи!
Re[3]: хромая логика
От: Dair Россия  
Дата: 01.12.16 16:18
Оценка: 1 (1) +1
Здравствуйте, Кодт, Вы писали:

O>>вместо x/y/width/height стали юзать left/top/right/bottom?

К>вместо x/y стали юзать TOP / LEFT.
К>а вместо width/height — vertical/horizontal, соответственно


Так это ж insets, у них ну ладно ещё x/y (вместо left/top, а что писать вместо right/bottom?), но width/height у них точно нет.

Николай, не очень понял

Разные классы, разные свойства, названия тоже разные, вполне отражающие смысл.
Re: хромая логика
От: Skorodum Россия  
Дата: 01.12.16 16:29
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание?


Ни разу не знаток, но попробую:
0. Зачем Insets? У него какие-то отличные от Rect свойства есть?
1. Не последовательное применение explicit
2. У Insets нет конструктора который принимает Point, Rect.
3. Дефолтный конструктор Rect не инициализирует переменные, а Point, Size и Insets — инициализирует нулями.
Re[2]: хромая логика
От: Dair Россия  
Дата: 01.12.16 16:37
Оценка:
Здравствуйте, Skorodum, Вы писали:

К>>Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание?

S>0. Зачем Insets? У него какие-то отличные от Rect свойства есть?
Примерно все. Два можно притянуть за уши к x и y у rect'а.


S>2. У Insets нет конструктора который принимает Point, Rect.

Каков физический (в данном случае — геометрический) смысл такого конструктора?


S>3. Дефолтный конструктор Rect не инициализирует переменные, а Point, Size и Insets — инициализирует нулями.

Rect состоит из Point и Size — для них вызываются дефолтные конструкторы.
Re[3]: хромая логика
От: Skorodum Россия  
Дата: 01.12.16 16:53
Оценка:
Здравствуйте, Кодт, Вы писали:

К>вместо x/y стали юзать TOP / LEFT.

К>а вместо width/height — vertical/horizontal, соответственно

По такой логике этот конструктор вообще бред какой-то, т.к. мешает координаты и расстояния:

Insets(int vertical, int horizontal)
: top_(vertical),
left_(horizontal),
bottom_(vertical),
right_(horizontal) {}


Там скорее всего top, left, bottom, right — это смещения, которые будут применены к какой-то центральной точке. Тогда все выглядит логично
Re[3]: хромая логика
От: Skorodum Россия  
Дата: 01.12.16 16:57
Оценка:
Здравствуйте, Dair, Вы писали:

D>Примерно все. Два можно притянуть за уши к x и y у rect'а.

Понял уже, и имена параметров вполне преднамеренно сделаны такими.

S>>2. У Insets нет конструктора который принимает Point, Rect.

D>Каков физический (в данном случае — геометрический) смысл такого конструктора?
Ну я это написал под впечатлением комментария Кодта
Автор: Кодт
Дата: 01.12.16
, теперь думаю, что он немного неправильно понял смысл класса Insets.

S>>3. Дефолтный конструктор Rect не инициализирует переменные, а Point, Size и Insets — инициализирует нулями.

D>Rect состоит из Point и Size — для них вызываются дефолтные конструкторы.
Если так, то согласен, но этого не видно по приведенному коду.
Re[4]: хромая логика
От: ononim  
Дата: 01.12.16 16:58
Оценка: +2
S>По такой логике этот конструктор вообще бред какой-то, т.к. мешает координаты и расстояния:
S>

S> Insets(int vertical, int horizontal)
S> : top_(vertical),
S> left_(horizontal),
S> bottom_(vertical),
S> right_(horizontal) {}

Здесь все ок. За исключением заботливо подложенных граблей с порядком координат.
Как много веселых ребят, и все делают велосипед...
Re[4]: хромая логика
От: ononim  
Дата: 01.12.16 17:00
Оценка:
D>Так это ж insets, у них ну ладно ещё x/y (вместо left/top, а что писать вместо right/bottom?), но width/height у них точно нет.
D>Николай, не очень понял
Основной прикол в том что ордината идете впереди абсцисс, пардон май френч.
 constexpr Insets(int top, int left, int bottom, int right)
Как много веселых ребят, и все делают велосипед...
Re: хромая логика
От: andrey.desman  
Дата: 01.12.16 17:13
Оценка: +1
Здравствуйте, Кодт, Вы писали:

К>Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание?


//
// An insets represents the borders of a container (the space the container must
// leave at each of its edges).
//


Единственная странность, это то, что у них порядок не как в CSS (top, right, bottom, left), а совсем наоборот. Может им так удобнее, но в общем он не имеет значения для структуры, которая описывает insets.
Re[4]: хромая логика
От: andrey.desman  
Дата: 01.12.16 17:15
Оценка:
Здравствуйте, Skorodum, Вы писали:

S>Там скорее всего top, left, bottom, right — это смещения, которые будут применены к какой-то центральной точке. Тогда все выглядит логично


Это всякие border-width, padding, margin и т.д.
Re[4]: хромая логика
От: Кодт Россия  
Дата: 01.12.16 17:50
Оценка:
Здравствуйте, Dair, Вы писали:

D>Разные классы, разные свойства, названия тоже разные, вполне отражающие смысл.


Insets — это прямоугольник наоборот. Пачка координат для описания отступов от края прямоугольника.

И эти классы все взаимодействуют, а не просто так лежат в одной папке.
class Rect {
  . . .
  // Shrink the rectangle by the given insets.
  void Inset(const Insets& insets);

  // Shrink the rectangle by the specified amount on each side.
  void Inset(int left, int top, int right, int bottom);

  // Move the rectangle by a horizontal and vertical distance.
  void Offset(int horizontal, int vertical);
  void Offset(const Vector2d& distance) { Offset(distance.x(), distance.y()); }
  void operator+=(const Vector2d& offset);
  void operator-=(const Vector2d& offset);

  Insets InsetsFrom(const Rect& inner) const;
  . . .

Как видно, во второй сигнатуре аргументы идут в естественном порядке.

Там ещё есть класс смещений, Vector2D, — чтобы случайно не смешивать вектор точки, вектор размера и вектор смещения.
Перекуём баги на фичи!
Re[5]: хромая логика
От: ononim  
Дата: 01.12.16 18:06
Оценка:
К>Как видно, во второй сигнатуре аргументы идут в естественном порядке.
Я так подозреваю оно и с Inset юзается во многих местах в естественном порядке. В конце концов это лишь названия переменных) Буду удивлен если это не так..
Как много веселых ребят, и все делают велосипед...
Re: хромая логика
От: Слава  
Дата: 01.12.16 18:07
Оценка: +3
Здравствуйте, Кодт, Вы писали:

К>Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание?


Потому что шутки на С++ доступны только Кодту. Остальные такого уровня просветления не достигли.
Re[2]: хромая логика
От: ononim  
Дата: 01.12.16 18:14
Оценка: -1
К>>Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание?
С>Потому что шутки на С++ доступны только Кодту. Остальные такого уровня просветления не достигли.
Остальным доступен лишь пошлый юмор про то как во время секса приезжает сборщик мусора и требут выкинуть презерватив..
Как много веселых ребят, и все делают велосипед...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.