freetype-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Git][freetype/freetype-demos][gsoc-2022-chariri-3] [ftinspect] Implemen


From: Charlie Jiang (@cqjjjzr)
Subject: [Git][freetype/freetype-demos][gsoc-2022-chariri-3] [ftinspect] Implement PostScript info for the Font Info tab.
Date: Wed, 17 Aug 2022 14:54:34 +0000

Charlie Jiang pushed to branch gsoc-2022-chariri-3 at FreeType / FreeType Demo Programs

Commits:

  • 79bd6e7e
    by Charlie Jiang at 2022-08-17T22:51:56+08:00
    [ftinspect] Implement PostScript info for the Font Info tab.
    
    * src/ftinspect/panels/info.cpp, src/ftinspect/panels/info.hpp:
      Implement PostScript info tab. Also do minor tweak to the SFNT table.
    
    * src/ftinspect/engine/engine.cpp, src/ftinspect/engine/engine.hpp:
      Add `currentFontPSInfo` and `currentFontPSPrivateInfo`.
    
    * src/ftinspect/engine/fontinfo.cpp, src/ftinspect/engine/fontinfo.hpp:
      Add `operator==`s for `PS_FontInfoRec` and `PS_PrivateRec`, but they're
      factually unused currently.
    

6 changed files:

Changes:

  • src/ftinspect/engine/engine.cpp
    ... ... @@ -469,6 +469,28 @@ Engine::currentSizeAscDescPx()
    469 469
     }
    
    470 470
     
    
    471 471
     
    
    472
    +bool
    
    473
    +Engine::currentFontPSInfo(PS_FontInfoRec& outInfo)
    
    474
    +{
    
    475
    +  if (!ftSize_)
    
    476
    +    return false;
    
    477
    +  if (FT_Get_PS_Font_Info(ftSize_->face, &outInfo) == FT_Err_Ok)
    
    478
    +    return true;
    
    479
    +  return false;
    
    480
    +}
    
    481
    +
    
    482
    +
    
    483
    +bool
    
    484
    +Engine::currentFontPSPrivateInfo(PS_PrivateRec& outInfo)
    
    485
    +{
    
    486
    +  if (!ftSize_)
    
    487
    +    return false;
    
    488
    +  if (FT_Get_PS_Font_Private(ftSize_->face, &outInfo) == FT_Err_Ok)
    
    489
    +    return true;
    
    490
    +  return false;
    
    491
    +}
    
    492
    +
    
    493
    +
    
    472 494
     QString
    
    473 495
     Engine::glyphName(int index)
    
    474 496
     {
    

  • src/ftinspect/engine/engine.hpp
    ... ... @@ -23,6 +23,7 @@
    23 23
     #include <freetype/ftcache.h>
    
    24 24
     #include <freetype/ftlcdfil.h>
    
    25 25
     #include <freetype/ftcolor.h>
    
    26
    +#include <freetype/t1tables.h>
    
    26 27
     
    
    27 28
     
    
    28 29
     // This structure maps the (font, face, instance) index triplet to abstract
    
    ... ... @@ -151,7 +152,9 @@ public:
    151 152
       FT_Pos currentFontTrackingKerning(int degree);
    
    152 153
       FT_Vector currentFontKerning(int glyphIndex, int prevIndex);
    
    153 154
       std::pair<int, int> currentSizeAscDescPx();
    
    154
    -  
    
    155
    +
    
    156
    +  bool currentFontPSInfo(PS_FontInfoRec& outInfo);
    
    157
    +  bool currentFontPSPrivateInfo(PS_PrivateRec& outInfo);
    
    155 158
       std::vector<CharMapInfo>& currentFontCharMaps() { return curCharMaps_; }
    
    156 159
       std::vector<PaletteInfo>& currentFontPalettes() { return curPaletteInfos_; }
    
    157 160
       std::vector<SFNTName>& currentFontSFNTNames() { return curSFNTNames_; }
    

  • src/ftinspect/engine/fontinfo.cpp
    ... ... @@ -7,6 +7,7 @@
    7 7
     #include "engine.hpp"
    
    8 8
     
    
    9 9
     #include <unordered_map>
    
    10
    +#include <utility>
    
    10 11
     #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    
    11 12
     #include <QTextCodec>
    
    12 13
     #else
    
    ... ... @@ -255,6 +256,67 @@ FontTypeEntries::get(Engine* engine)
    255 256
     }
    
    256 257
     
    
    257 258
     
    
    259
    +bool
    
    260
    +operator==(const PS_FontInfoRec& lhs,
    
    261
    +           const PS_FontInfoRec& rhs)
    
    262
    +{
    
    263
    +  // XXX: possible security flaw with `strcmp`?
    
    264
    +  return strcmp(lhs.version, rhs.version) == 0
    
    265
    +         && strcmp(lhs.notice, rhs.notice) == 0
    
    266
    +         && strcmp(lhs.full_name, rhs.full_name) == 0
    
    267
    +         && strcmp(lhs.family_name, rhs.family_name) == 0
    
    268
    +         && strcmp(lhs.weight, rhs.weight) == 0
    
    269
    +         && lhs.italic_angle == rhs.italic_angle
    
    270
    +         && lhs.is_fixed_pitch == rhs.is_fixed_pitch
    
    271
    +         && lhs.underline_position == rhs.underline_position
    
    272
    +         && lhs.underline_thickness == rhs.underline_thickness;
    
    273
    +}
    
    274
    +
    
    275
    +
    
    276
    +bool
    
    277
    +operator==(const PS_PrivateRec& lhs,
    
    278
    +           const PS_PrivateRec& rhs)
    
    279
    +{
    
    280
    +  return lhs.unique_id == rhs.unique_id
    
    281
    +         && lhs.lenIV == rhs.lenIV
    
    282
    +         && lhs.num_blue_values == rhs.num_blue_values
    
    283
    +         && lhs.num_other_blues == rhs.num_other_blues
    
    284
    +         && lhs.num_family_blues == rhs.num_family_blues
    
    285
    +         && lhs.num_family_other_blues == rhs.num_family_other_blues
    
    286
    +         && std::equal(std::begin(lhs.blue_values), std::end(lhs.blue_values),
    
    287
    +                       std::begin(rhs.blue_values))
    
    288
    +         && std::equal(std::begin(lhs.other_blues), std::end(lhs.other_blues),
    
    289
    +                       std::begin(rhs.other_blues))
    
    290
    +         && std::equal(std::begin(lhs.family_blues), std::end(lhs.family_blues),
    
    291
    +                       std::begin(rhs.family_blues))
    
    292
    +         && std::equal(std::begin(lhs.family_other_blues),
    
    293
    +                       std::end(lhs.family_other_blues),
    
    294
    +                       std::begin(rhs.family_other_blues))
    
    295
    +         && lhs.blue_scale == rhs.blue_scale
    
    296
    +         && lhs.blue_shift == rhs.blue_shift
    
    297
    +         && lhs.blue_fuzz == rhs.blue_fuzz
    
    298
    +         && std::equal(std::begin(lhs.standard_width), 
    
    299
    +                       std::end(lhs.standard_width),
    
    300
    +                       std::begin(rhs.standard_width))
    
    301
    +         && std::equal(std::begin(lhs.standard_height),
    
    302
    +                       std::end(lhs.standard_height),
    
    303
    +                       std::begin(rhs.standard_height))
    
    304
    +         && lhs.num_snap_widths == rhs.num_snap_widths
    
    305
    +         && lhs.num_snap_heights == rhs.num_snap_heights
    
    306
    +         && lhs.force_bold == rhs.force_bold
    
    307
    +         && lhs.round_stem_up == rhs.round_stem_up
    
    308
    +         && std::equal(std::begin(lhs.snap_widths), std::end(lhs.snap_widths),
    
    309
    +                       std::begin(rhs.snap_widths))
    
    310
    +         && std::equal(std::begin(lhs.snap_heights), std::end(lhs.snap_heights),
    
    311
    +                       std::begin(rhs.snap_heights))
    
    312
    +         && lhs.expansion_factor == rhs.expansion_factor
    
    313
    +         && lhs.language_group == rhs.language_group
    
    314
    +         && lhs.password == rhs.password
    
    315
    +         && std::equal(std::begin(lhs.min_feature), std::end(lhs.min_feature),
    
    316
    +                       std::begin(rhs.min_feature));
    
    317
    +}
    
    318
    +
    
    319
    +
    
    258 320
     bool
    
    259 321
     FontFixedSize::get(Engine* engine,
    
    260 322
                        std::vector<FontFixedSize>& list,
    

  • src/ftinspect/engine/fontinfo.hpp
    ... ... @@ -9,6 +9,7 @@
    9 9
     #include <QString>
    
    10 10
     #include <freetype/freetype.h>
    
    11 11
     #include <freetype/ftsnames.h>
    
    12
    +#include <freetype/t1tables.h>
    
    12 13
     
    
    13 14
     class Engine;
    
    14 15
     
    
    ... ... @@ -164,6 +165,14 @@ struct FontTypeEntries
    164 165
     };
    
    165 166
     
    
    166 167
     
    
    168
    +// For PostScript `PS_FontInfoRec` and `PS_PrivateRec`, we don't create our own
    
    169
    +// structs but direct use the ones provided by FreeType.
    
    170
    +// But we still need to provided `operator==`
    
    171
    +// No operator== for PS_FontInfoRec since there's little point to deep-copy it
    
    172
    +// bool operator==(const PS_FontInfoRec& lhs, const PS_FontInfoRec& rhs);
    
    173
    +bool operator==(const PS_PrivateRec& lhs, const PS_PrivateRec& rhs);
    
    174
    +
    
    175
    +
    
    167 176
     struct FontFixedSize
    
    168 177
     {
    
    169 178
       short height;
    

  • src/ftinspect/panels/info.cpp
    ... ... @@ -7,9 +7,16 @@
    7 7
     #include "../uihelper.hpp"
    
    8 8
     #include "../engine/engine.hpp"
    
    9 9
     
    
    10
    +#include <cstring>
    
    10 11
     #include <QStringList>
    
    11 12
     #include <QHeaderView>
    
    12 13
     
    
    14
    +
    
    15
    +#define GL2CRow(l, w) gridLayout2ColAddWidget(l,                \
    
    16
    +                                              w##PromptLabel_,  \
    
    17
    +                                              w##Label_)
    
    18
    +
    
    19
    +
    
    13 20
     InfoTab::InfoTab(QWidget* parent,
    
    14 21
                      Engine* engine)
    
    15 22
     : QWidget(parent), engine_(engine)
    
    ... ... @@ -199,6 +206,10 @@ GeneralInfoTab::createLayout()
    199 206
       setLabelSelectable(   trademarkLabel_);
    
    200 207
       setLabelSelectable(manufacturerLabel_);
    
    201 208
     
    
    209
    +     copyrightLabel_->setWordWrap(true);
    
    210
    +     trademarkLabel_->setWordWrap(true);
    
    211
    +  manufacturerLabel_->setWordWrap(true);
    
    212
    +
    
    202 213
       driverNamePromptLabel_ = new QLabel(tr("Driver:"), this);
    
    203 214
             sfntPromptLabel_ = new QLabel(tr("SFNT Wrapped:"), this);
    
    204 215
         fontTypePromptLabel_ = new QLabel(tr("Type:"), this);
    
    ... ... @@ -290,9 +301,6 @@ GeneralInfoTab::createLayout()
    290 301
       charMapLayout_     = new QHBoxLayout;
    
    291 302
       fixedSizesLayout_  = new QHBoxLayout;
    
    292 303
     
    
    293
    -#define GL2CRow(l, w) gridLayout2ColAddWidget(l          ,      \
    
    294
    -                                              w##PromptLabel_,  \
    
    295
    -                                              w##Label_)
    
    296 304
     #define BasicRow(w) GL2CRow(basicLayout_, w)
    
    297 305
     #define FTERow(w) GL2CRow(typeEntriesLayout_, w)
    
    298 306
     
    
    ... ... @@ -322,6 +330,9 @@ GeneralInfoTab::createLayout()
    322 330
       FTERow(           ulPos);
    
    323 331
       FTERow(     ulThickness);
    
    324 332
     
    
    333
    +        basicLayout_->setColumnStretch(1, 1);      
    
    334
    +  typeEntriesLayout_->setColumnStretch(1, 1);
    
    335
    +
    
    325 336
       charMapLayout_->addWidget(charMapsTable_);
    
    326 337
       fixedSizesLayout_->addWidget(fixedSizesTable_);
    
    327 338
     
    
    ... ... @@ -402,6 +413,11 @@ SFNTInfoTab::SFNTInfoTab(QWidget* parent,
    402 413
     void
    
    403 414
     SFNTInfoTab::reloadFont()
    
    404 415
     {
    
    416
    +  engine_->reloadFont();
    
    417
    +  auto size = engine_->currentFtSize();
    
    418
    +  if (!size || !FT_IS_SFNT(size->face))
    
    419
    +    setEnabled(false);
    
    420
    +
    
    405 421
       if (engine_->currentFontSFNTNames() != sfntNamesModel_->storage())
    
    406 422
       {
    
    407 423
         sfntNamesModel_->beginModelUpdate();
    
    ... ... @@ -480,12 +496,295 @@ PostScriptInfoTab::PostScriptInfoTab(QWidget* parent,
    480 496
                                          Engine* engine)
    
    481 497
     : QWidget(parent), engine_(engine)
    
    482 498
     {
    
    499
    +  std::memset(&oldFontPrivate_, 0, sizeof(PS_PrivateRec));
    
    500
    +  createLayout();
    
    501
    +}
    
    502
    +
    
    503
    +
    
    504
    +template<class T>
    
    505
    +QString genArrayString(T* arr, size_t size)
    
    506
    +{
    
    507
    +  // TODO: optimize
    
    508
    +  QString result = "[";
    
    509
    +  for (size_t i = 0; i < size; i++)
    
    510
    +  {
    
    511
    +    result += QString::number(arr[i]);
    
    512
    +    if (i < size - 1)
    
    513
    +      result += ", ";
    
    514
    +  }
    
    515
    +  return result + "]";
    
    483 516
     }
    
    484 517
     
    
    485 518
     
    
    486 519
     void
    
    487 520
     PostScriptInfoTab::reloadFont()
    
    488 521
     {
    
    522
    +  PS_FontInfoRec fontInfo;
    
    523
    +  auto hasInfo = engine_->currentFontPSInfo(fontInfo);
    
    524
    +  infoGroupBox_->setEnabled(hasInfo);
    
    525
    +  if (hasInfo)
    
    526
    +  {
    
    527
    +        versionLabel_->setText(QString::fromUtf8(fontInfo.version));
    
    528
    +         noticeLabel_->setText(QString::fromUtf8(fontInfo.notice));
    
    529
    +       fullNameLabel_->setText(QString::fromUtf8(fontInfo.full_name));
    
    530
    +     familyNameLabel_->setText(QString::fromUtf8(fontInfo.family_name));
    
    531
    +         weightLabel_->setText(QString::fromUtf8(fontInfo.weight));
    
    532
    +    italicAngleLabel_->setText(QString::number(fontInfo.italic_angle));
    
    533
    +     fixedPitchLabel_->setText(fontInfo.is_fixed_pitch ? "yes" : "no");
    
    534
    +          ulPosLabel_->setText(QString::number(fontInfo.underline_position));
    
    535
    +    ulThicknessLabel_->setText(QString::number(fontInfo.underline_thickness));
    
    536
    +  }
    
    537
    +  else
    
    538
    +  {
    
    539
    +        versionLabel_->clear();
    
    540
    +         noticeLabel_->clear();
    
    541
    +       fullNameLabel_->clear();
    
    542
    +     familyNameLabel_->clear();
    
    543
    +         weightLabel_->clear();
    
    544
    +    italicAngleLabel_->clear();
    
    545
    +     fixedPitchLabel_->clear();
    
    546
    +          ulPosLabel_->clear();
    
    547
    +    ulThicknessLabel_->clear();
    
    548
    +  }
    
    549
    +
    
    550
    +  PS_PrivateRec fontPrivate;
    
    551
    +  // Don't do zero-initialization since we need to zero out paddings
    
    552
    +  std::memset(&fontPrivate, 0, sizeof(PS_PrivateRec));
    
    553
    +  hasInfo = engine_->currentFontPSPrivateInfo(fontPrivate);
    
    554
    +  privateGroupBox_->setEnabled(hasInfo);
    
    555
    +  if (hasInfo)
    
    556
    +  {
    
    557
    +    if (std::memcmp(&fontPrivate, &oldFontPrivate_, sizeof(PS_PrivateRec)))
    
    558
    +    {
    
    559
    +      std::memcpy(&oldFontPrivate_, &fontPrivate, sizeof(PS_PrivateRec));
    
    560
    +      
    
    561
    +      uniqueIDLabel_->setText(QString::number(fontPrivate.unique_id));
    
    562
    +      blueShiftLabel_->setText(QString::number(fontPrivate.blue_shift));
    
    563
    +      blueFuzzLabel_->setText(QString::number(fontPrivate.blue_fuzz));
    
    564
    +      forceBoldLabel_->setText(fontPrivate.force_bold ? "true" : "false");
    
    565
    +      languageGroupLabel_->setText(QString::number(fontPrivate.language_group));
    
    566
    +      passwordLabel_->setText(QString::number(fontPrivate.password));
    
    567
    +      lenIVLabel_->setText(QString::number(fontPrivate.lenIV));
    
    568
    +      roundStemUpLabel_->setText(fontPrivate.round_stem_up ? "true" : "false");
    
    569
    +
    
    570
    +      familyBluesLabel_->setText(
    
    571
    +        genArrayString(fontPrivate.family_blues, fontPrivate.num_family_blues));
    
    572
    +      blueValuesLabel_->setText(
    
    573
    +        genArrayString(fontPrivate.blue_values, fontPrivate.num_blue_values));
    
    574
    +      otherBluesLabel_->setText(
    
    575
    +        genArrayString(fontPrivate.other_blues, fontPrivate.num_other_blues));
    
    576
    +      familyOtherBluesLabel_->setText(
    
    577
    +        genArrayString(fontPrivate.family_other_blues,
    
    578
    +        fontPrivate.num_family_other_blues));
    
    579
    +      stdWidthsLabel_->setText(
    
    580
    +        genArrayString(fontPrivate.standard_width,
    
    581
    +                       std::size(fontPrivate.standard_width)));
    
    582
    +      stdHeightsLabel_->setText(
    
    583
    +        genArrayString(fontPrivate.standard_height, 
    
    584
    +                       std::size(fontPrivate.standard_height)));
    
    585
    +      snapWidthsLabel_->setText(
    
    586
    +        genArrayString(fontPrivate.snap_widths, fontPrivate.num_snap_widths));
    
    587
    +      snapHeightsLabel_->setText(
    
    588
    +        genArrayString(fontPrivate.snap_heights, fontPrivate.num_snap_heights));
    
    589
    +      minFeatureLabel_->setText(
    
    590
    +        genArrayString(fontPrivate.min_feature,
    
    591
    +                       std::size(fontPrivate.min_feature)));
    
    592
    +
    
    593
    +      blueScaleLabel_->setText(
    
    594
    +        QString::number(fontPrivate.blue_scale / 65536.0 / 1000.0, 'f', 6));
    
    595
    +      expansionFactorLabel_->setText(
    
    596
    +        QString::number(fontPrivate.expansion_factor / 65536.0, 'f', 4));
    
    597
    +    }
    
    598
    +  }
    
    599
    +  else
    
    600
    +  {
    
    601
    +            uniqueIDLabel_->clear();
    
    602
    +          blueValuesLabel_->clear();
    
    603
    +          otherBluesLabel_->clear();
    
    604
    +         familyBluesLabel_->clear();
    
    605
    +    familyOtherBluesLabel_->clear();
    
    606
    +           blueScaleLabel_->clear();
    
    607
    +           blueShiftLabel_->clear();
    
    608
    +            blueFuzzLabel_->clear();
    
    609
    +           stdWidthsLabel_->clear();
    
    610
    +          stdHeightsLabel_->clear();
    
    611
    +          snapWidthsLabel_->clear();
    
    612
    +         snapHeightsLabel_->clear();
    
    613
    +           forceBoldLabel_->clear();
    
    614
    +       languageGroupLabel_->clear();
    
    615
    +            passwordLabel_->clear();
    
    616
    +               lenIVLabel_->clear();
    
    617
    +          minFeatureLabel_->clear();
    
    618
    +         roundStemUpLabel_->clear();
    
    619
    +     expansionFactorLabel_->clear();
    
    620
    +  }
    
    621
    +}
    
    622
    +
    
    623
    +
    
    624
    +void
    
    625
    +PostScriptInfoTab::createLayout()
    
    626
    +{
    
    627
    +      versionPromptLabel_  = new QLabel(tr("/version:"), this);
    
    628
    +       noticePromptLabel_  = new QLabel(tr("/Notice:"), this);
    
    629
    +     fullNamePromptLabel_  = new QLabel(tr("/FullName:"), this);
    
    630
    +   familyNamePromptLabel_  = new QLabel(tr("/FamilyName:"), this);
    
    631
    +       weightPromptLabel_  = new QLabel(tr("/Weight:"), this);
    
    632
    +  italicAnglePromptLabel_  = new QLabel(tr("/ItaticAngle:"), this);
    
    633
    +   fixedPitchPromptLabel_  = new QLabel(tr("/isFixedPitch:"), this);
    
    634
    +        ulPosPromptLabel_  = new QLabel(tr("/UnderlinePosition:"), this);
    
    635
    +  ulThicknessPromptLabel_  = new QLabel(tr("/UnderlineThickness:"), this);
    
    636
    +
    
    637
    +      versionLabel_ = new QLabel(this);
    
    638
    +       noticeLabel_ = new QLabel(this);
    
    639
    +     fullNameLabel_ = new QLabel(this);
    
    640
    +   familyNameLabel_ = new QLabel(this);
    
    641
    +       weightLabel_ = new QLabel(this);
    
    642
    +  italicAngleLabel_ = new QLabel(this);
    
    643
    +   fixedPitchLabel_ = new QLabel(this);
    
    644
    +        ulPosLabel_ = new QLabel(this);
    
    645
    +  ulThicknessLabel_ = new QLabel(this);
    
    646
    +
    
    647
    +  setLabelSelectable(    versionLabel_);
    
    648
    +  setLabelSelectable(     noticeLabel_);
    
    649
    +  setLabelSelectable(   fullNameLabel_);
    
    650
    +  setLabelSelectable( familyNameLabel_);
    
    651
    +  setLabelSelectable(     weightLabel_);
    
    652
    +  setLabelSelectable(italicAngleLabel_);
    
    653
    +  setLabelSelectable( fixedPitchLabel_);
    
    654
    +  setLabelSelectable(      ulPosLabel_);
    
    655
    +  setLabelSelectable(ulThicknessLabel_);
    
    656
    +
    
    657
    +          uniqueIDPromptLabel_  = new QLabel(tr("/UniqueID:"), this);
    
    658
    +        blueValuesPromptLabel_  = new QLabel(tr("/BlueValues:"), this);
    
    659
    +        otherBluesPromptLabel_  = new QLabel(tr("/OtherBlues:"), this);
    
    660
    +       familyBluesPromptLabel_  = new QLabel(tr("/FamilyBlues:"), this);
    
    661
    +  familyOtherBluesPromptLabel_  = new QLabel(tr("/FamilyOtherBlues:"), this);
    
    662
    +         blueScalePromptLabel_  = new QLabel(tr("/BlueScale:"), this);
    
    663
    +         blueShiftPromptLabel_  = new QLabel(tr("/BlueShift:"), this);
    
    664
    +          blueFuzzPromptLabel_  = new QLabel(tr("/BlueFuzz:"), this);
    
    665
    +         stdWidthsPromptLabel_  = new QLabel(tr("/StdHW:"), this);
    
    666
    +        stdHeightsPromptLabel_  = new QLabel(tr("/StdVW:"), this);
    
    667
    +        snapWidthsPromptLabel_  = new QLabel(tr("/StemSnapH:"), this);
    
    668
    +       snapHeightsPromptLabel_  = new QLabel(tr("/StemSnapV:"), this);
    
    669
    +         forceBoldPromptLabel_  = new QLabel(tr("/ForceBold:"), this);
    
    670
    +     languageGroupPromptLabel_  = new QLabel(tr("/LanguageGroup:"), this);
    
    671
    +          passwordPromptLabel_  = new QLabel(tr("/password:"), this);
    
    672
    +             lenIVPromptLabel_  = new QLabel(tr("/lenIV:"), this);
    
    673
    +        minFeaturePromptLabel_  = new QLabel(tr("/MinFeature:"), this);
    
    674
    +       roundStemUpPromptLabel_  = new QLabel(tr("/RndStemUp:"), this);
    
    675
    +   expansionFactorPromptLabel_  = new QLabel(tr("/ExpansionFactor:"), this);
    
    676
    +
    
    677
    +          uniqueIDLabel_ = new QLabel(this);
    
    678
    +        blueValuesLabel_ = new QLabel(this);
    
    679
    +        otherBluesLabel_ = new QLabel(this);
    
    680
    +       familyBluesLabel_ = new QLabel(this);
    
    681
    +  familyOtherBluesLabel_ = new QLabel(this);
    
    682
    +         blueScaleLabel_ = new QLabel(this);
    
    683
    +         blueShiftLabel_ = new QLabel(this);
    
    684
    +          blueFuzzLabel_ = new QLabel(this);
    
    685
    +         stdWidthsLabel_ = new QLabel(this);
    
    686
    +        stdHeightsLabel_ = new QLabel(this);
    
    687
    +        snapWidthsLabel_ = new QLabel(this);
    
    688
    +       snapHeightsLabel_ = new QLabel(this);
    
    689
    +         forceBoldLabel_ = new QLabel(this);
    
    690
    +     languageGroupLabel_ = new QLabel(this);
    
    691
    +          passwordLabel_ = new QLabel(this);
    
    692
    +             lenIVLabel_ = new QLabel(this);
    
    693
    +        minFeatureLabel_ = new QLabel(this);
    
    694
    +       roundStemUpLabel_ = new QLabel(this);
    
    695
    +   expansionFactorLabel_ = new QLabel(this);
    
    696
    +
    
    697
    +  setLabelSelectable(        uniqueIDLabel_);
    
    698
    +  setLabelSelectable(      blueValuesLabel_);
    
    699
    +  setLabelSelectable(      otherBluesLabel_);
    
    700
    +  setLabelSelectable(     familyBluesLabel_);
    
    701
    +  setLabelSelectable(familyOtherBluesLabel_);
    
    702
    +  setLabelSelectable(       blueScaleLabel_);
    
    703
    +  setLabelSelectable(       blueShiftLabel_);
    
    704
    +  setLabelSelectable(        blueFuzzLabel_);
    
    705
    +  setLabelSelectable(       stdWidthsLabel_);
    
    706
    +  setLabelSelectable(      stdHeightsLabel_);
    
    707
    +  setLabelSelectable(      snapWidthsLabel_);
    
    708
    +  setLabelSelectable(     snapHeightsLabel_);
    
    709
    +  setLabelSelectable(       forceBoldLabel_);
    
    710
    +  setLabelSelectable(   languageGroupLabel_);
    
    711
    +  setLabelSelectable(        passwordLabel_);
    
    712
    +  setLabelSelectable(           lenIVLabel_);
    
    713
    +  setLabelSelectable(      minFeatureLabel_);
    
    714
    +  setLabelSelectable(     roundStemUpLabel_);
    
    715
    +  setLabelSelectable( expansionFactorLabel_);
    
    716
    +
    
    717
    +  noticeLabel_->setWordWrap(true);
    
    718
    +  familyBluesLabel_->setWordWrap(true);
    
    719
    +  blueValuesLabel_->setWordWrap(true);
    
    720
    +  otherBluesLabel_->setWordWrap(true);
    
    721
    +  familyOtherBluesLabel_->setWordWrap(true);
    
    722
    +  stdWidthsLabel_->setWordWrap(true);
    
    723
    +  stdHeightsLabel_->setWordWrap(true);
    
    724
    +  snapWidthsLabel_->setWordWrap(true);
    
    725
    +  snapHeightsLabel_->setWordWrap(true);
    
    726
    +  minFeatureLabel_->setWordWrap(true);
    
    727
    +
    
    728
    +  infoGroupBox_ = new QGroupBox(tr("PostScript /FontInfo dictionary"), this);
    
    729
    +  privateGroupBox_ = new QGroupBox(tr("PostScript /Private dictionary"), this);
    
    730
    +
    
    731
    +  infoLayout_ = new QGridLayout;
    
    732
    +  privateLayout_ = new QGridLayout;
    
    733
    +
    
    734
    +#define PSI2Row(w) GL2CRow(infoLayout_, w)
    
    735
    +#define PSP2Row(w) GL2CRow(privateLayout_, w)
    
    736
    +
    
    737
    +  PSI2Row(    version);
    
    738
    +  PSI2Row(     notice);
    
    739
    +  PSI2Row(   fullName);
    
    740
    +  PSI2Row( familyName);
    
    741
    +  PSI2Row(     weight);
    
    742
    +  PSI2Row(italicAngle);
    
    743
    +  PSI2Row( fixedPitch);
    
    744
    +  PSI2Row(      ulPos);
    
    745
    +  PSI2Row(ulThickness);
    
    746
    +
    
    747
    +  PSP2Row(        uniqueID);
    
    748
    +  PSP2Row(      blueValues);
    
    749
    +  PSP2Row(      otherBlues);
    
    750
    +  PSP2Row(     familyBlues);
    
    751
    +  PSP2Row(familyOtherBlues);
    
    752
    +  PSP2Row(       blueScale);
    
    753
    +  PSP2Row(       blueShift);
    
    754
    +  PSP2Row(        blueFuzz);
    
    755
    +  PSP2Row(       stdWidths);
    
    756
    +  PSP2Row(      stdHeights);
    
    757
    +  PSP2Row(      snapWidths);
    
    758
    +  PSP2Row(     snapHeights);
    
    759
    +  PSP2Row(       forceBold);
    
    760
    +  PSP2Row(   languageGroup);
    
    761
    +  PSP2Row(        password);
    
    762
    +  PSP2Row(           lenIV);
    
    763
    +  PSP2Row(      minFeature);
    
    764
    +  PSP2Row(     roundStemUp);
    
    765
    +  PSP2Row( expansionFactor);
    
    766
    +
    
    767
    +  infoLayout_->addItem(new QSpacerItem(0, 0, 
    
    768
    +                                       QSizePolicy::Preferred, 
    
    769
    +                                       QSizePolicy::Expanding),
    
    770
    +                       infoLayout_->rowCount(), 0, 1, 2);
    
    771
    +  privateLayout_->addItem(new QSpacerItem(0, 0, 
    
    772
    +                                          QSizePolicy::Preferred, 
    
    773
    +                                          QSizePolicy::Expanding),
    
    774
    +                          privateLayout_->rowCount(), 0, 1, 2);
    
    775
    +
    
    776
    +     infoLayout_->setColumnStretch(1, 1);
    
    777
    +  privateLayout_->setColumnStretch(1, 1);
    
    778
    +
    
    779
    +  infoGroupBox_->setLayout(infoLayout_);
    
    780
    +  privateGroupBox_->setLayout(privateLayout_);
    
    781
    +  infoGroupBox_->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding);
    
    782
    +  privateGroupBox_->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding);
    
    783
    +
    
    784
    +  mainLayout_ = new QHBoxLayout;
    
    785
    +  mainLayout_->addWidget(infoGroupBox_);
    
    786
    +  mainLayout_->addWidget(privateGroupBox_);
    
    787
    +  setLayout(mainLayout_);
    
    489 788
     }
    
    490 789
     
    
    491 790
     
    

  • src/ftinspect/panels/info.hpp
    ... ... @@ -54,6 +54,11 @@ private:
    54 54
     };
    
    55 55
     
    
    56 56
     
    
    57
    +#define LabelPair(name) \
    
    58
    +  QLabel* name##Label_; \
    
    59
    +  QLabel* name##PromptLabel_;
    
    60
    +
    
    61
    +
    
    57 62
     class GeneralInfoTab
    
    58 63
     : public QWidget, public AbstractTab
    
    59 64
     {
    
    ... ... @@ -68,10 +73,6 @@ public:
    68 73
     private:
    
    69 74
       Engine* engine_;
    
    70 75
     
    
    71
    -#define LabelPair(name) \
    
    72
    -  QLabel* name##Label_; \
    
    73
    -  QLabel* name##PromptLabel_;
    
    74
    -
    
    75 76
       LabelPair(    numFaces)
    
    76 77
       LabelPair(      family)
    
    77 78
       LabelPair(       style)
    
    ... ... @@ -198,6 +199,47 @@ public:
    198 199
     
    
    199 200
     private:
    
    200 201
       Engine* engine_;
    
    202
    +
    
    203
    +  LabelPair(    version)
    
    204
    +  LabelPair(     notice)
    
    205
    +  LabelPair(   fullName)
    
    206
    +  LabelPair( familyName)
    
    207
    +  LabelPair(     weight)
    
    208
    +  LabelPair(italicAngle)
    
    209
    +  LabelPair( fixedPitch)
    
    210
    +  LabelPair(      ulPos)
    
    211
    +  LabelPair(ulThickness)
    
    212
    +
    
    213
    +  LabelPair(        uniqueID)
    
    214
    +  LabelPair(      blueValues)
    
    215
    +  LabelPair(      otherBlues)
    
    216
    +  LabelPair(     familyBlues)
    
    217
    +  LabelPair(familyOtherBlues)
    
    218
    +  LabelPair(       blueScale)
    
    219
    +  LabelPair(       blueShift)
    
    220
    +  LabelPair(        blueFuzz)
    
    221
    +  LabelPair(       stdWidths)
    
    222
    +  LabelPair(      stdHeights)
    
    223
    +  LabelPair(      snapWidths)
    
    224
    +  LabelPair(     snapHeights)
    
    225
    +  LabelPair(       forceBold)
    
    226
    +  LabelPair(   languageGroup)
    
    227
    +  LabelPair(        password)
    
    228
    +  LabelPair(           lenIV)
    
    229
    +  LabelPair(      minFeature)
    
    230
    +  LabelPair(     roundStemUp)
    
    231
    +  LabelPair( expansionFactor)
    
    232
    +
    
    233
    +  QGroupBox* infoGroupBox_;
    
    234
    +  QGroupBox* privateGroupBox_;
    
    235
    +
    
    236
    +  QGridLayout* infoLayout_;
    
    237
    +  QGridLayout* privateLayout_;
    
    238
    +  QHBoxLayout* mainLayout_;
    
    239
    +
    
    240
    +  PS_PrivateRec oldFontPrivate_;
    
    241
    +
    
    242
    +  void createLayout();
    
    201 243
     };
    
    202 244
     
    
    203 245
     
    


  • reply via email to

    [Prev in Thread] Current Thread [Next in Thread]