From 2e212854d4dc5e995778b2903db0749e903a4e81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Or=C5=82=C3=B3w?= <adrian.orlow@fishbrain.com> Date: Fri, 17 Nov 2023 16:29:56 +0100 Subject: [PATCH] fix: esthetics of the pin rendering --- .../Map/MapViewer/utils/config/getCanvasIcon.ts | 11 +++++++---- .../Map/MapViewer/utils/config/useOlMapPinsLayer.ts | 3 ++- src/constants/dividers.ts | 2 ++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/components/Map/MapViewer/utils/config/getCanvasIcon.ts b/src/components/Map/MapViewer/utils/config/getCanvasIcon.ts index 163511b5..0229e86b 100644 --- a/src/components/Map/MapViewer/utils/config/getCanvasIcon.ts +++ b/src/components/Map/MapViewer/utils/config/getCanvasIcon.ts @@ -1,5 +1,5 @@ import { PIN_PATH2D, PIN_SIZE } from '@/constants/canvas'; -import { HALF, QUARTER, THIRD } from '@/constants/dividers'; +import { HALF, ONE_AND_HALF, QUARTER, THIRD, TWO_AND_HALF } from '@/constants/dividers'; import { DEFAULT_FONT_FAMILY } from '@/constants/font'; import { Point } from '@/types/map'; import { getCanvas } from '@/utils/canvas/getCanvas'; @@ -7,6 +7,7 @@ import { getFontSizeToFit } from '@/utils/canvas/getFontSizeToFit'; const SMALL_TEXT_VALUE = 1; const MEDIUM_TEXT_VALUE = 10; +const BIG_TEXT_VALUE = 100; interface Args { color: string; @@ -25,14 +26,16 @@ const getTextWidth = (value: number): number => { return PIN_SIZE.width / QUARTER; case value < MEDIUM_TEXT_VALUE: return PIN_SIZE.width / THIRD; - default: + case value < BIG_TEXT_VALUE: return PIN_SIZE.width / HALF; + default: + return PIN_SIZE.width / ONE_AND_HALF; } }; const getTextPosition = (textWidth: number, textHeight: number): Point => ({ x: (PIN_SIZE.width - textWidth) / HALF, - y: (PIN_SIZE.height - textHeight) / QUARTER, + y: (PIN_SIZE.height - textHeight) / TWO_AND_HALF, }); const drawNumberOnCanvas = ({ value }: Args, ctx: CanvasRenderingContext2D): void => { @@ -41,7 +44,7 @@ const drawNumberOnCanvas = ({ value }: Args, ctx: CanvasRenderingContext2D): voi const textWidth = getTextWidth(value); const fontSize = getFontSizeToFit(ctx, text, DEFAULT_FONT_FAMILY, textWidth); - const textHeight = textMetrics.actualBoundingBoxAscent + textMetrics.actualBoundingBoxDescent; + const textHeight = textMetrics.fontBoundingBoxAscent + textMetrics.fontBoundingBoxDescent; const { x, y } = getTextPosition(textWidth, textHeight); ctx.fillStyle = 'white'; diff --git a/src/components/Map/MapViewer/utils/config/useOlMapPinsLayer.ts b/src/components/Map/MapViewer/utils/config/useOlMapPinsLayer.ts index 701a25c1..275a28d3 100644 --- a/src/components/Map/MapViewer/utils/config/useOlMapPinsLayer.ts +++ b/src/components/Map/MapViewer/utils/config/useOlMapPinsLayer.ts @@ -1,4 +1,5 @@ /* eslint-disable no-magic-numbers */ +import { PIN_SIZE } from '@/constants/canvas'; import { allBioEntitesSelectorOfCurrentMap } from '@/redux/bioEntity/bioEntity.selectors'; import { usePointToProjection } from '@/utils/map/usePointToProjection'; import { Feature } from 'ol'; @@ -31,7 +32,7 @@ export const useOlMapPinsLayer = (): BaseLayer => { const style = new Style({ image: new Icon({ - displacement: [0, 32], + displacement: [0, PIN_SIZE.height], anchorXUnits: 'fraction', anchorYUnits: 'pixels', img: getCanvasIcon({ diff --git a/src/constants/dividers.ts b/src/constants/dividers.ts index c73dd7aa..402936ad 100644 --- a/src/constants/dividers.ts +++ b/src/constants/dividers.ts @@ -1,3 +1,5 @@ +export const ONE_AND_HALF = 1.5; export const HALF = 2; +export const TWO_AND_HALF = 2.5; export const THIRD = 3; export const QUARTER = 4; -- GitLab