Ignore:
Timestamp:
Apr 17, 2019, 12:58:41 AM (5 years ago)
Author:
chronos
Message:
  • Modified: Propagate project build mode options to used packages.
  • Added: Check memory leaks using heaptrc.
  • Modified: Update BGRABitmap package.
Location:
GraphicTest
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GraphicTest

    • Property svn:ignore
      •  

        old new  
        88GraphicTest.lps
        99GraphicTest.dbg
         10heaptrclog.trc
  • GraphicTest/Packages/bgrabitmap/bgraunits.pas

    r494 r521  
    4747    property DefaultUnitHeight: TFloatWithCSSUnit read GetDefaultUnitHeight;
    4848  public
    49     function Convert(xy: single; sourceUnit, destUnit: TCSSUnit; dpi: single): single;
    50     function ConvertWidth(x: single; sourceUnit, destUnit: TCSSUnit): single;
    51     function ConvertHeight(y: single; sourceUnit, destUnit: TCSSUnit): single;
    52     function ConvertWidth(AValue: TFloatWithCSSUnit; destUnit: TCSSUnit): TFloatWithCSSUnit;
    53     function ConvertHeight(AValue: TFloatWithCSSUnit; destUnit: TCSSUnit): TFloatWithCSSUnit;
    54     function ConvertCoord(pt: TPointF; sourceUnit, destUnit: TCSSUnit): TPointF; virtual;
    55     class function parseValue(AValue: string; ADefault: TFloatWithCSSUnit): TFloatWithCSSUnit;
    56     class function formatValue(AValue: TFloatWithCSSUnit; APrecision: integer = 7): string;
    57     class function formatValue(AValue: single; APrecision: integer = 7): string;
     49    function Convert(xy: single; sourceUnit, destUnit: TCSSUnit; dpi: single; containerSize: single = 0): single;
     50    function ConvertWidth(x: single; sourceUnit, destUnit: TCSSUnit; containerWidth: single = 0): single; overload;
     51    function ConvertHeight(y: single; sourceUnit, destUnit: TCSSUnit; containerHeight: single = 0): single; overload;
     52    function ConvertWidth(AValue: TFloatWithCSSUnit; destUnit: TCSSUnit; containerWidth: single = 0): TFloatWithCSSUnit; overload;
     53    function ConvertHeight(AValue: TFloatWithCSSUnit; destUnit: TCSSUnit; containerHeight: single = 0): TFloatWithCSSUnit; overload;
     54    function ConvertCoord(pt: TPointF; sourceUnit, destUnit: TCSSUnit; containerWidth: single = 0; containerHeight: single = 0): TPointF; virtual;
     55    class function parseValue(AValue: string; ADefault: TFloatWithCSSUnit): TFloatWithCSSUnit; overload;
     56    class function parseValue(AValue: string; ADefault: single): single; overload;
     57    class function formatValue(AValue: TFloatWithCSSUnit; APrecision: integer = 7): string; overload;
     58    class function formatValue(AValue: single; APrecision: integer = 7): string; overload;
    5859    property DpiX: single read GetDpiX;
    5960    property DpiY: single read GetDpiY;
     
    135136
    136137function TCSSUnitConverter.Convert(xy: single; sourceUnit, destUnit: TCSSUnit;
    137   dpi: single): single;
     138  dpi: single; containerSize: single): single;
    138139var sourceFactor, destFactor: integer;
    139140begin
     
    144145    result := xy
    145146  else
     147  if sourceUnit = cuPercent then
     148  begin
     149    result := xy/100*containerSize;
     150  end else
    146151  if sourceUnit = cuFontEmHeight then
    147152  begin
     
    185190
    186191function TCSSUnitConverter.ConvertWidth(x: single; sourceUnit,
    187   destUnit: TCSSUnit): single;
     192  destUnit: TCSSUnit; containerWidth: single): single;
    188193begin
    189194  if sourceUnit = destUnit then
     
    192197  with DefaultUnitWidth do
    193198  begin
    194     result := x*ConvertWidth(value,CSSUnit, destUnit)
     199    result := x*ConvertWidth(value,CSSUnit, destUnit, containerWidth)
    195200  end
    196201  else if destUnit = cuCustom then
     
    202207      result := x/value;
    203208  end else
    204     result := Convert(x, sourceUnit, destUnit, DpiX);
     209    result := Convert(x, sourceUnit, destUnit, DpiX, containerWidth);
    205210end;
    206211
    207212function TCSSUnitConverter.ConvertHeight(y: single; sourceUnit,
    208   destUnit: TCSSUnit): single;
     213  destUnit: TCSSUnit; containerHeight: single): single;
    209214begin
    210215  if sourceUnit = cuCustom then
    211216  with DefaultUnitHeight do
    212217  begin
    213     result := y*ConvertHeight(value,CSSUnit, destUnit)
     218    result := y*ConvertHeight(value,CSSUnit, destUnit, containerHeight)
    214219  end
    215220  else if destUnit = cuCustom then
     
    221226      result := y/value;
    222227  end else
    223     result := Convert(y, sourceUnit, destUnit, DpiY);
     228    result := Convert(y, sourceUnit, destUnit, DpiY, containerHeight);
    224229end;
    225230
    226231function TCSSUnitConverter.ConvertWidth(AValue: TFloatWithCSSUnit;
    227   destUnit: TCSSUnit): TFloatWithCSSUnit;
     232  destUnit: TCSSUnit; containerWidth: single): TFloatWithCSSUnit;
    228233begin
    229234  result.CSSUnit := destUnit;
    230   result.value:= ConvertWidth(AValue.value,AValue.CSSUnit,destUnit);
     235  result.value:= ConvertWidth(AValue.value,AValue.CSSUnit,destUnit,containerWidth);
    231236end;
    232237
    233238function TCSSUnitConverter.ConvertHeight(AValue: TFloatWithCSSUnit;
    234   destUnit: TCSSUnit): TFloatWithCSSUnit;
     239  destUnit: TCSSUnit; containerHeight: single): TFloatWithCSSUnit;
    235240begin
    236241  result.CSSUnit := destUnit;
    237   result.value:= ConvertHeight(AValue.value,AValue.CSSUnit,destUnit);
     242  result.value:= ConvertHeight(AValue.value,AValue.CSSUnit,destUnit,containerHeight);
    238243end;
    239244
    240245function TCSSUnitConverter.ConvertCoord(pt: TPointF; sourceUnit,
    241   destUnit: TCSSUnit): TPointF;
    242 begin
    243   result.x := ConvertWidth(pt.x, sourceUnit, destUnit);
    244   result.y := ConvertHeight(pt.y, sourceUnit, destUnit);
     246  destUnit: TCSSUnit; containerWidth: single; containerHeight: single): TPointF;
     247begin
     248  result.x := ConvertWidth(pt.x, sourceUnit, destUnit, containerWidth);
     249  result.y := ConvertHeight(pt.y, sourceUnit, destUnit, containerHeight);
    245250end;
    246251
     
    266271end;
    267272
     273class function TCSSUnitConverter.parseValue(AValue: string; ADefault: single): single;
     274var
     275  errPos: integer;
     276begin
     277  AValue := trim(AValue);
     278  val(AValue,result,errPos);
     279  if errPos <> 0 then
     280    result := ADefault;
     281end;
     282
    268283class function TCSSUnitConverter.formatValue(AValue: TFloatWithCSSUnit; APrecision: integer = 7): string;
    269284begin
Note: See TracChangeset for help on using the changeset viewer.