diff --git a/entry/src/main/ets/pages/CustomPopupTest.ets b/entry/src/main/ets/pages/CustomPopupTest.ets index c293f174ccd12c8e3dc3dace9f3a9e15777b4ffc..ac5f6f2bcd9734a9a3806a674bde431d92126b4c 100644 --- a/entry/src/main/ets/pages/CustomPopupTest.ets +++ b/entry/src/main/ets/pages/CustomPopupTest.ets @@ -1,12 +1,24 @@ -import { DialogHub, DialogBackPressResult, AnimationType } from 'hadss_dialog'; +import { DialogHub, DialogBackPressResult, AnimationType, InfPopup } from 'hadss_dialog'; @Entry @Component struct CustomPopupTest { private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + private popupDialog?: InfPopup aboutToAppear(): void { DialogHub.init(this.getUIContext()) + this.popupDialog = DialogHub + .getPopup() + .setTextContent('sdfsdfsdf') + .setComponentTargetId('cwq') + .setAnimation({ dialogAnimation: AnimationType.FADE_IN_AND_OUT }) + // .setStyle({ arrowOffset: 1000 }) + .setConfig({ + dialogPosition: { preferPlacement: Placement.Right, offset: { dx: 0, dy: 0 } }, + dialogBehavior: { autoDismiss: true } + }) + .build(); } onBackPress(): boolean | void { @@ -19,44 +31,66 @@ struct CustomPopupTest { build() { Column() { - List({ space: 20, initialIndex: 0 }) { - ForEach(this.arr, (item: number) => { - ListItem() { - Text('' + item) - .width('100%') - .height(100) - .fontSize(16) - .textAlign(TextAlign.Center) - .borderRadius(10) - .backgroundColor(0xFFFFFF) - .id('cwq' + item) - .gesture(LongPressGesture().onAction(() => { - let popupDialog = DialogHub - .getPopup() - .setTextContent('sdfsdfsdf') - .setComponentTargetId('cwq' + item) - .setAnimation({ dialogAnimation: AnimationType.FADE_IN_AND_OUT }) - .setConfig({ - dialogPosition: { preferPlacement: Placement.Top, offset: { dx: 0, dy: 0 } }, - dialogBehavior: { autoDismiss: true } - }) - .build(); - popupDialog.show() - })) - } - }, (item: string) => item) - } - .listDirection(Axis.Vertical) // 排列方向 - .scrollBar(BarState.Off) - .friction(0.6) - .divider({ - strokeWidth: 2, - color: 0xFFFFFF, - startMargin: 20, - endMargin: 20 - }) // 每行之间的分界线 - .edgeEffect(EdgeEffect.Spring) // 边缘效果设置为Spring - .width('100%') + Text('cwq')// .width('100%') + .height(100) + .fontSize(16) + .textAlign(TextAlign.Center) + .borderRadius(10) + .backgroundColor("#afa") + .id('cwq') + .gesture(LongPressGesture().onAction(() => { + // let popupDialog = DialogHub + // .getPopup() + // .setTextContent('sdfsdfsdf') + // .setComponentTargetId('cwq') + // .setAnimation({ dialogAnimation: AnimationType.FADE_IN_AND_OUT }) + // .setStyle({ arrowOffset: 0 }) + // .setConfig({ + // dialogPosition: { preferPlacement: Placement.Left, offset: { dx: 0, dy: 0 } }, + // dialogBehavior: { autoDismiss: true } + // }) + // .build(); + this.popupDialog?.show() + })) + // List({ space: 20, initialIndex: 0 }) { + // ForEach(this.arr, (item: number) => { + // ListItem() { + // Text('' + item) + // .width('100%') + // .height(100) + // .fontSize(16) + // .textAlign(TextAlign.Center) + // .borderRadius(10) + // .backgroundColor(0xFFFFFF) + // .id('cwq' + item) + // .gesture(LongPressGesture().onAction(() => { + // let popupDialog = DialogHub + // .getPopup() + // .setTextContent('sdfsdfsdf') + // .setComponentTargetId('cwq' + item) + // .setAnimation({ dialogAnimation: AnimationType.FADE_IN_AND_OUT }) + // .setStyle({ arrowOffset: 10 }) + // .setConfig({ + // dialogPosition: { preferPlacement: Placement.Left, offset: { dx: 0, dy: 0 } }, + // dialogBehavior: { autoDismiss: true } + // }) + // .build(); + // popupDialog.show() + // })) + // } + // }, (item: string) => item) + // } + // .listDirection(Axis.Vertical) // 排列方向 + // .scrollBar(BarState.Off) + // .friction(0.6) + // .divider({ + // strokeWidth: 2, + // color: 0xFFFFFF, + // startMargin: 20, + // endMargin: 20 + // }) // 每行之间的分界线 + // .edgeEffect(EdgeEffect.Spring) // 边缘效果设置为Spring + // .width('100%') } .justifyContent(FlexAlign.Center) .alignItems(HorizontalAlign.Center) diff --git a/entry/src/main/ets/pages/Index.ets b/entry/src/main/ets/pages/Index.ets index e5b6a5991f907e2c18b8e7f1c8508c8a5ac73e67..02da8fcfd75c0af7bfe1aa7a6448206e0c84e121 100644 --- a/entry/src/main/ets/pages/Index.ets +++ b/entry/src/main/ets/pages/Index.ets @@ -1,4 +1,4 @@ -import { router } from '@kit.ArkUI' +import { display, router } from '@kit.ArkUI' import { DialogHub } from 'hadss_dialog'; @Entry diff --git a/hadss_dialog/src/main/ets/common/been/config/PopupConfig.ets b/hadss_dialog/src/main/ets/common/been/config/PopupConfig.ets index c5a54722f4663ad4d9dd95899d578a9e593e17d9..e78c3a60a9d6d10d4b5b8b6ca0f59d32f8228cd8 100644 --- a/hadss_dialog/src/main/ets/common/been/config/PopupConfig.ets +++ b/hadss_dialog/src/main/ets/common/been/config/PopupConfig.ets @@ -1,9 +1,9 @@ import { DialogConfig, DialogPosition } from "./DialogConfig"; -export interface PopupConfig extends DialogConfig{ +export interface PopupConfig extends DialogConfig { dialogPosition?: PopupPostion } -export interface PopupPostion extends DialogPosition{ - preferPlacement?:Placement +export interface PopupPostion extends DialogPosition { + preferPlacement?: Placement } \ No newline at end of file diff --git a/hadss_dialog/src/main/ets/common/been/option/base/PopupOption.ets b/hadss_dialog/src/main/ets/common/been/option/base/PopupOption.ets index 4c61a4083b9f9243a24dc44af32bef9968aaf7c3..339a2ff69cfdeb56c5117d2240a41670c024c4fa 100644 --- a/hadss_dialog/src/main/ets/common/been/option/base/PopupOption.ets +++ b/hadss_dialog/src/main/ets/common/been/option/base/PopupOption.ets @@ -26,8 +26,9 @@ export class PopupOption extends CustomOption { preferPlacement: Placement = Placement.Top enableArrow: boolean = true // 是否展示popup弹窗的箭头 arrowOffset: Length = 0 - arrowWidth: Dimension = 16 - arrowHeight: Dimension = 9 - // 待绑定的目标组件唯一ID属性 + arrowWidth: Length = 18 + arrowHeight: Length = 18 + // 待绑定的目标组件ID属性 与 组件的uniqueId targetCompId?: string; + targetCompUniqueId?: string; } \ No newline at end of file diff --git a/hadss_dialog/src/main/ets/common/been/style/PopupStyle.ets b/hadss_dialog/src/main/ets/common/been/style/PopupStyle.ets index 574ef7651b39e818063a10f52c6d1b48eef3dc0c..97a9dad484c3f6a2e4ffaa6e36dd3c2f0c5a480f 100644 --- a/hadss_dialog/src/main/ets/common/been/style/PopupStyle.ets +++ b/hadss_dialog/src/main/ets/common/been/style/PopupStyle.ets @@ -1,8 +1,8 @@ import { DialogStyle } from "./DialogStyle"; export interface PopupStyle extends DialogStyle { - enableArrow?:boolean // 是否展示popup弹窗的箭头 - arrowOffset?:Length - arrowWidth?:Dimension - arrowHeight?:Dimension + enableArrow?: boolean // 是否展示popup弹窗的箭头 + arrowOffset?: Length + arrowWidth?: Dimension + arrowHeight?: Dimension } \ No newline at end of file diff --git a/hadss_dialog/src/main/ets/common/util/DimensionUtils.ets b/hadss_dialog/src/main/ets/common/util/DimensionUtils.ets index 1eeddbc7456261a046b0c1d989f1e9665287080a..f28212f55b4c4efdde53a05863b948700b1e47e7 100644 --- a/hadss_dialog/src/main/ets/common/util/DimensionUtils.ets +++ b/hadss_dialog/src/main/ets/common/util/DimensionUtils.ets @@ -1,19 +1,19 @@ import { display } from '@kit.ArkUI'; export class DimensionUtils { - public static length2px(length: Length, isPortrait: boolean = true): number { + public static length2px(length: Length, reference?: number): number { if (typeof (length) == "string") { - return DimensionUtils.stirng2Px(length as string, isPortrait); + return DimensionUtils.stirng2Px(length as string, reference); } else if (typeof (length) == "object") { return DimensionUtils.resource2Px(length as Resource); } return vp2px(length as number); } - public static stirng2Px(str: string, isPortrait: boolean = true): number { + public static stirng2Px(str: string, reference?: number): number { if (str.indexOf("%") >= 0) { - let defaultDisplay = display.getDefaultDisplaySync(); - return (isPortrait ? defaultDisplay.height : defaultDisplay.width) * parseInt(str) / 100; + reference = reference ?? 0; + return (reference * (parseInt(str) / 100)); } else if (str.indexOf("px") >= 0) { return parseInt(str); } else if (str.indexOf("fp") >= 0) { diff --git a/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts b/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts index f3ee1ac90f74861ac726aa2a8a4c471fde4bc287..b9823fd95b0cca40388de448ea75c05379981dc2 100644 --- a/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts +++ b/hadss_dialog/src/main/ets/common/util/ObjectUtils.ts @@ -2,4 +2,14 @@ export class ObjectUtils { public static areSameClassPrototype(obj1: any, obj2: any): boolean { return Object.getPrototypeOf(obj1) === Object.getPrototypeOf(obj2); } + + public static shallowClone(source: object) { + var target = {}; + for (var i in source) { + if (source.hasOwnProperty(i)) { + target[i] = source[i]; + } + } + return target; + } } \ No newline at end of file diff --git a/hadss_dialog/src/main/ets/components/base/PopupComponent.ets b/hadss_dialog/src/main/ets/components/base/PopupComponent.ets index d86e348f4fdc117fc0e1a5d400aad3a199202f45..edc96af75d5eac93928594b2864492be488a4961 100644 --- a/hadss_dialog/src/main/ets/components/base/PopupComponent.ets +++ b/hadss_dialog/src/main/ets/components/base/PopupComponent.ets @@ -12,14 +12,33 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { PopupOption } from "../../common/been/option/base/PopupOption" +import { drawing } from "@kit.ArkGraphics2D" @Builder -export function PopupComponent(text?: string) { +export function PopupComponent(params: Record) { + Flex({ direction: params.alignDirection as FlexDirection }) { + PopupContent(params.text as string) + Image(params.arrowSrc as Resource) + .colorFilter(drawing.ColorFilter.createBlendModeColorFilter({ + red: 0, + green: 0, + blue: 0, + alpha: 136, + }, drawing.BlendMode.SRC_IN)) + .width(params.arrowWidth as Dimension) + .height(params.arrowHeight as Dimension) + .visibility((params.enableArrow as boolean) ? Visibility.Visible : Visibility.Hidden) + .offset(params.arrowOffset) + }.width('auto').height('auto') +} + +@Builder +function PopupContent(text?: string) { Row() { Text(text).fontColor(Color.White).fontSize(18) } .padding(10) .borderRadius(5) - .backgroundColor("#88000000") + .backgroundColor("rgba(0,0,0,0.533)") + .id('PopupContent') } \ No newline at end of file diff --git a/hadss_dialog/src/main/ets/model/adapter/proxy/base/PopupProxy.ets b/hadss_dialog/src/main/ets/model/adapter/proxy/base/PopupProxy.ets index 5364f7567eb07c99ee9049229f532b58907bb48d..ba325eda69dd0184ed24ac5a08e521a94cfe498a 100644 --- a/hadss_dialog/src/main/ets/model/adapter/proxy/base/PopupProxy.ets +++ b/hadss_dialog/src/main/ets/model/adapter/proxy/base/PopupProxy.ets @@ -40,21 +40,32 @@ export class PopupProxy extends CustomProxy { setTextContent(text: string) { // 优先判定customContent是否有值 this.builderOptions.customContent = wrapBuilder(PopupComponent); - this.builderOptions.customContentParam = text; + this.builderOptions.customContentParam = { + 'text': text, + 'preferPlacement': this.builderOptions.preferPlacement, + 'enableArrow': this.builderOptions.enableArrow, + 'arrowSrc': $r('app.media.popup_arrow_bottom'), + 'alignDirection': undefined, + 'arrowOffset': this.builderOptions.arrowOffset, + 'arrowWidth': this.builderOptions.arrowWidth, + 'arrowHeight': this.builderOptions.arrowHeight + } return this; } setStyle(style: PopupStyle) { super.setStyle(style); + this.builderOptions.enableArrow = style.enableArrow ?? this.builderOptions.enableArrow; + this.builderOptions.arrowOffset = style.arrowOffset ?? this.builderOptions.arrowOffset; + this.builderOptions.arrowWidth = style.arrowWidth ?? this.builderOptions.arrowWidth; + this.builderOptions.arrowHeight = style.arrowHeight ?? this.builderOptions.arrowHeight; return this } setConfig(config: PopupConfig) { super.setConfig(config); - if (config.dialogPosition?.preferPlacement) { - this.builderOptions.preferPlacement = config.dialogPosition?.preferPlacement - } + this.builderOptions.preferPlacement = config.dialogPosition?.preferPlacement ?? 0 return this } diff --git a/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets b/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets index 47294cbc48a029c2d8ac98be7a1efb2bf54d9a0c..1999f65ed65d22c9081ec9b5d7ca11011a15ef0f 100644 --- a/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets +++ b/hadss_dialog/src/main/ets/model/dialog/base/PopupDialog.ets @@ -17,19 +17,40 @@ import { InfPopup } from '../interface/InfPopup'; import { CustomDialog } from './CustomDialog'; import { DimensionUtils } from '../../../common/util/DimensionUtils'; import { DialogLifeCycle } from '../../lifecycle/DialogLifeCycle'; +import { ObjectUtils } from '../../../common/util/ObjectUtils'; +import { display, inspector } from '@kit.ArkUI'; /** * 基于系统CommonDialog封装对外提供的customDialog,支持更新自定义内容 * */ export class PopupDialog extends CustomDialog implements InfPopup { private uiContext: UIContext; + private targetCompListener?: inspector.ComponentObserver; + private dialogCompListener?: inspector.ComponentObserver; + private onTargetCompLayoutComplete: () => void = (): void => { + this.updateDialogPosition(); + this.targetCompListener?.off("layout", this.onTargetCompLayoutComplete) + } + private onDialogCompLayoutComplete: () => void = (): void => { + this.updateArrowStyle(); + this.targetCompListener?.off("layout", this.onDialogCompLayoutComplete) + } constructor(uiContext: UIContext, options: PopupOption, lifeCycle: DialogLifeCycle) { super(uiContext, options, lifeCycle); this.uiContext = uiContext; + this.observeDialogComponent(); + this.updateArrowStyle(); this.updateDialogPosition(); } + private observeDialogComponent() { + this.targetCompListener = inspector.createComponentObserver((this.builderOptions as PopupOption).targetCompId); + this.targetCompListener?.on('layout', this.onTargetCompLayoutComplete); + this.dialogCompListener = inspector.createComponentObserver(this.dialogId); + this.dialogCompListener?.on('layout', this.onDialogCompLayoutComplete); + } + public updateDialogPosition() { let compId = (this.builderOptions as PopupOption).targetCompId; if (!compId) { @@ -40,8 +61,8 @@ export class PopupDialog extends CustomDialog implements InfPopup { (this.builderOptions as PopupOption).alignment = DialogAlignment.TopStart; let markAnchorX: Length = 0; let markAnchorY: Length = 0; - let positionX: number = rectangle.screenOffset.x; - let positionY: number = rectangle.screenOffset.y; + let positionX: number = rectangle.localOffset.x; + let positionY: number = rectangle.localOffset.y; switch ((this.builderOptions as PopupOption).preferPlacement) { case Placement.Left: positionY += rectangle.size.height / 2; @@ -95,12 +116,95 @@ export class PopupDialog extends CustomDialog implements InfPopup { break } (this.builderOptions as PopupOption).position = { - x: px2vp(positionX) + DimensionUtils.length2px((this.builderOptions as PopupOption).offset?.x ?? 0), - y: px2vp(positionY) + DimensionUtils.length2px((this.builderOptions as PopupOption).offset?.y ?? 0) + x: px2vp(positionX) + DimensionUtils.length2px((this.builderOptions as PopupOption).offset?.x ?? 0, + display.getDefaultDisplaySync().width), + y: px2vp(positionY) + DimensionUtils.length2px((this.builderOptions as PopupOption).offset?.y ?? 0, + display.getDefaultDisplaySync().height) }; (this.builderOptions as PopupOption).markAnchor = { x: markAnchorX, y: markAnchorY }; this.update(['alignment', 'position', 'markAnchor']) } -} \ No newline at end of file + + private updateArrowStyle() { + let rectangle = this.uiContext.getComponentUtils().getRectangleById(this.dialogId); + let arrowOffsetX: Length = 0; + let arrowOffsetY: Length = 0; + let alignDirection: FlexDirection = FlexDirection.Column; + switch ((this.builderOptions as PopupOption).preferPlacement) { + case Placement.Left: + arrowOffsetY = this.getValidOffset(rectangle.size.height); + alignDirection = FlexDirection.Row; + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_right'); + break; + case Placement.Right: + arrowOffsetY = this.getValidOffset(rectangle.size.height); + alignDirection = FlexDirection.RowReverse; + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_left'); + break; + case Placement.Bottom: + arrowOffsetX = this.getValidOffset(rectangle.size.width); + alignDirection = FlexDirection.ColumnReverse; + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_top'); + break; + case Placement.TopLeft: + arrowOffsetX = this.getValidOffset(rectangle.size.width); + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_bottom'); + break; + case Placement.TopRight: + arrowOffsetX = this.getValidOffset(rectangle.size.width); + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_bottom'); + break; + case Placement.LeftTop: + alignDirection = FlexDirection.ColumnReverse; + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_top'); + break; + case Placement.RightTop: + alignDirection = FlexDirection.ColumnReverse; + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_top'); + break; + case Placement.BottomLeft: + arrowOffsetX = this.getValidOffset(rectangle.size.width); + alignDirection = FlexDirection.ColumnReverse; + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_top'); + break; + case Placement.LeftBottom: + arrowOffsetX = this.getValidOffset(rectangle.size.width); + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_bottom'); + break; + case Placement.RightBottom: + arrowOffsetX = this.getValidOffset(rectangle.size.width); + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_bottom'); + break; + case Placement.BottomRight: + arrowOffsetX = this.getValidOffset(rectangle.size.width); + alignDirection = FlexDirection.ColumnReverse; + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_top'); + break; + case Placement.Top: + default: + arrowOffsetX = this.getValidOffset(rectangle.size.width); + this.builderOptions.customContentParam.arrowSrc = $r('app.media.popup_arrow_bottom'); + break + } + this.builderOptions.customContentParam.arrowOffset = { x: arrowOffsetX, y: arrowOffsetY }; + this.builderOptions.customContentParam.alignDirection = alignDirection; + this.builderOptions.customContentParam.preferPlacement = (this.builderOptions as PopupOption).preferPlacement; + this.builderOptions.customContentParam.enableArrow = (this.builderOptions as PopupOption).enableArrow; + this.builderOptions.customContentParam.arrowWidth = (this.builderOptions as PopupOption).arrowWidth; + this.builderOptions.customContentParam.arrowHeight = (this.builderOptions as PopupOption).arrowHeight; + this.updateContent>(this.builderOptions.customContentParam); + } + + private getValidOffset(maxValue: number) { + let defaultOffset = DimensionUtils.length2px((this.builderOptions as PopupOption).arrowOffset, maxValue); + let arrowWidth = DimensionUtils.length2px((this.builderOptions as PopupOption).arrowWidth, + display.getDefaultDisplaySync().width); + let afterOffset = (maxValue- arrowWidth) / 2 + defaultOffset; // 默认居中,在居中上偏移,如不默认居中,不需要此行代码 + let maxOffset = maxValue - arrowWidth - vp2px(5); + let validOffset = px2vp(Math.max(Math.min(maxOffset, afterOffset), vp2px(5))); + return validOffset; + } +} + diff --git a/hadss_dialog/src/main/ets/model/dialog/executor/OverlayExecutor.ets b/hadss_dialog/src/main/ets/model/dialog/executor/OverlayExecutor.ets index 6d494f35abc146a8340e06a3848deb860ce1d42d..6fb12f086a893ec9ab2cd98b4dab299fba5da0bc 100644 --- a/hadss_dialog/src/main/ets/model/dialog/executor/OverlayExecutor.ets +++ b/hadss_dialog/src/main/ets/model/dialog/executor/OverlayExecutor.ets @@ -1,5 +1,5 @@ import { DialogExecutor } from "./DialogExecutor"; -import { ComponentContent, OverlayManager } from "@kit.ArkUI"; +import { ComponentContent, FrameNode, OverlayManager, typeNode } from "@kit.ArkUI"; import { CustomOption } from "../../../common/been/option/base/CustomOption"; import { BaseDialogComponent } from "../../../components/base/BaseDialogComponent"; import { BaseOption } from "../../../common/been/option/base/BaseOption"; diff --git a/hadss_dialog/src/main/resources/base/media/popup_arrow_bottom.png b/hadss_dialog/src/main/resources/base/media/popup_arrow_bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..7eccbf7a19ded7aaf22e60e27b938971f8b4bb99 Binary files /dev/null and b/hadss_dialog/src/main/resources/base/media/popup_arrow_bottom.png differ diff --git a/hadss_dialog/src/main/resources/base/media/popup_arrow_left.png b/hadss_dialog/src/main/resources/base/media/popup_arrow_left.png new file mode 100644 index 0000000000000000000000000000000000000000..b5bd53ed43ef2691ae654d742a5af2994b7d5e0e Binary files /dev/null and b/hadss_dialog/src/main/resources/base/media/popup_arrow_left.png differ diff --git a/hadss_dialog/src/main/resources/base/media/popup_arrow_right.png b/hadss_dialog/src/main/resources/base/media/popup_arrow_right.png new file mode 100644 index 0000000000000000000000000000000000000000..d5e9287a583bb912bd3f981f7c19dc74a1a79cd4 Binary files /dev/null and b/hadss_dialog/src/main/resources/base/media/popup_arrow_right.png differ diff --git a/hadss_dialog/src/main/resources/base/media/popup_arrow_top.png b/hadss_dialog/src/main/resources/base/media/popup_arrow_top.png new file mode 100644 index 0000000000000000000000000000000000000000..89f8f554d27ee2c452c150f13a6939260065bfa2 Binary files /dev/null and b/hadss_dialog/src/main/resources/base/media/popup_arrow_top.png differ