Changeset 521 for GraphicTest/Packages/bgrabitmap/bgraunits.pas
- Timestamp:
- Apr 17, 2019, 12:58:41 AM (5 years ago)
- Location:
- GraphicTest
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
GraphicTest
- Property svn:ignore
-
old new 8 8 GraphicTest.lps 9 9 GraphicTest.dbg 10 heaptrclog.trc
-
- Property svn:ignore
-
GraphicTest/Packages/bgrabitmap/bgraunits.pas
r494 r521 47 47 property DefaultUnitHeight: TFloatWithCSSUnit read GetDefaultUnitHeight; 48 48 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; 58 59 property DpiX: single read GetDpiX; 59 60 property DpiY: single read GetDpiY; … … 135 136 136 137 function TCSSUnitConverter.Convert(xy: single; sourceUnit, destUnit: TCSSUnit; 137 dpi: single ): single;138 dpi: single; containerSize: single): single; 138 139 var sourceFactor, destFactor: integer; 139 140 begin … … 144 145 result := xy 145 146 else 147 if sourceUnit = cuPercent then 148 begin 149 result := xy/100*containerSize; 150 end else 146 151 if sourceUnit = cuFontEmHeight then 147 152 begin … … 185 190 186 191 function TCSSUnitConverter.ConvertWidth(x: single; sourceUnit, 187 destUnit: TCSSUnit ): single;192 destUnit: TCSSUnit; containerWidth: single): single; 188 193 begin 189 194 if sourceUnit = destUnit then … … 192 197 with DefaultUnitWidth do 193 198 begin 194 result := x*ConvertWidth(value,CSSUnit, destUnit )199 result := x*ConvertWidth(value,CSSUnit, destUnit, containerWidth) 195 200 end 196 201 else if destUnit = cuCustom then … … 202 207 result := x/value; 203 208 end else 204 result := Convert(x, sourceUnit, destUnit, DpiX );209 result := Convert(x, sourceUnit, destUnit, DpiX, containerWidth); 205 210 end; 206 211 207 212 function TCSSUnitConverter.ConvertHeight(y: single; sourceUnit, 208 destUnit: TCSSUnit ): single;213 destUnit: TCSSUnit; containerHeight: single): single; 209 214 begin 210 215 if sourceUnit = cuCustom then 211 216 with DefaultUnitHeight do 212 217 begin 213 result := y*ConvertHeight(value,CSSUnit, destUnit )218 result := y*ConvertHeight(value,CSSUnit, destUnit, containerHeight) 214 219 end 215 220 else if destUnit = cuCustom then … … 221 226 result := y/value; 222 227 end else 223 result := Convert(y, sourceUnit, destUnit, DpiY );228 result := Convert(y, sourceUnit, destUnit, DpiY, containerHeight); 224 229 end; 225 230 226 231 function TCSSUnitConverter.ConvertWidth(AValue: TFloatWithCSSUnit; 227 destUnit: TCSSUnit ): TFloatWithCSSUnit;232 destUnit: TCSSUnit; containerWidth: single): TFloatWithCSSUnit; 228 233 begin 229 234 result.CSSUnit := destUnit; 230 result.value:= ConvertWidth(AValue.value,AValue.CSSUnit,destUnit );235 result.value:= ConvertWidth(AValue.value,AValue.CSSUnit,destUnit,containerWidth); 231 236 end; 232 237 233 238 function TCSSUnitConverter.ConvertHeight(AValue: TFloatWithCSSUnit; 234 destUnit: TCSSUnit ): TFloatWithCSSUnit;239 destUnit: TCSSUnit; containerHeight: single): TFloatWithCSSUnit; 235 240 begin 236 241 result.CSSUnit := destUnit; 237 result.value:= ConvertHeight(AValue.value,AValue.CSSUnit,destUnit );242 result.value:= ConvertHeight(AValue.value,AValue.CSSUnit,destUnit,containerHeight); 238 243 end; 239 244 240 245 function 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; 247 begin 248 result.x := ConvertWidth(pt.x, sourceUnit, destUnit, containerWidth); 249 result.y := ConvertHeight(pt.y, sourceUnit, destUnit, containerHeight); 245 250 end; 246 251 … … 266 271 end; 267 272 273 class function TCSSUnitConverter.parseValue(AValue: string; ADefault: single): single; 274 var 275 errPos: integer; 276 begin 277 AValue := trim(AValue); 278 val(AValue,result,errPos); 279 if errPos <> 0 then 280 result := ADefault; 281 end; 282 268 283 class function TCSSUnitConverter.formatValue(AValue: TFloatWithCSSUnit; APrecision: integer = 7): string; 269 284 begin
Note:
See TracChangeset
for help on using the changeset viewer.