working on label image resize fix
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
import { useEffect, useState } from "react"
|
||||
import { Layouts } from "../../../canvas/constants/layouts"
|
||||
import Tools from "../../../canvas/constants/tools"
|
||||
import { convertObjectToKeyValueString } from "../../../utils/common"
|
||||
import { getPythonAssetPath } from "../../utils/pythonFilePath"
|
||||
@@ -10,6 +12,7 @@ class Label extends TkinterWidgetBase{
|
||||
static widgetType = "label"
|
||||
static displayName = "Label"
|
||||
|
||||
static requiredCustomPyFiles = ["imageLabel"]
|
||||
|
||||
constructor(props) {
|
||||
super(props)
|
||||
@@ -55,6 +58,34 @@ class Label extends TkinterWidgetBase{
|
||||
value: "",
|
||||
onChange: (value) => this.setAttrValue("imageUpload", value)
|
||||
},
|
||||
imageSize: {
|
||||
label: "Image size",
|
||||
display: "horizontal",
|
||||
// width: {
|
||||
// label: "Width",
|
||||
// tool: Tools.NUMBER_INPUT, // the tool to display, can be either HTML ELement or a constant string
|
||||
// toolProps: { placeholder: "width", max: 3000, min: 1 },
|
||||
// value: 150,
|
||||
// onChange: (value) => this.setWidgetSize(value, null)
|
||||
// },
|
||||
// height: {
|
||||
// label: "Height",
|
||||
// tool: Tools.NUMBER_INPUT,
|
||||
// toolProps: { placeholder: "height", max: 3000, min: 1 },
|
||||
// value: 150,
|
||||
// onChange: (value) => this.setWidgetSize(null, value)
|
||||
// },
|
||||
mode: {
|
||||
label: "Image mode",
|
||||
tool: Tools.SELECT_DROPDOWN,
|
||||
options: ["fit", "cover"].map((val) => ({value: val, label: val})),
|
||||
value: "cover",
|
||||
onChange: (value) => {
|
||||
|
||||
this.setAttrValue("imageSize.mode", value)
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,10 +123,28 @@ class Label extends TkinterWidgetBase{
|
||||
const config = super.getConfigCode()
|
||||
|
||||
const anchor = this.getAttrValue("styling.anchor")
|
||||
const fitWidth = this.state.fitContent.width
|
||||
const fitHeight = this.state.fitContent.height
|
||||
|
||||
const {width, height} = this.getSize()
|
||||
|
||||
const {layout} = this.getParentLayout()
|
||||
|
||||
if (anchor)
|
||||
config['anchor'] = `"${anchor}"`
|
||||
|
||||
// LABEL width and height are not pixel based instead its character based
|
||||
// if (layout !== Layouts.PLACE){
|
||||
// if (!fitWidth){
|
||||
// config['width'] = width
|
||||
// }
|
||||
|
||||
// if (!fitHeight){
|
||||
// config['height'] = height
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
return config
|
||||
}
|
||||
|
||||
@@ -155,36 +204,53 @@ class Label extends TkinterWidgetBase{
|
||||
center: { justifyContent: 'center', alignItems: 'center' }
|
||||
}
|
||||
|
||||
return anchorStyles[anchor] || anchorStyles["w"];
|
||||
return anchorStyles[anchor] || anchorStyles["center"];
|
||||
}
|
||||
|
||||
renderContent(){
|
||||
|
||||
//FIXME: label image causing issues
|
||||
const image = this.getAttrValue("imageUpload")
|
||||
|
||||
const imageMode = this.getAttrValue("imageSize.mode") || "cover"
|
||||
|
||||
const imgClassName = imageMode === "fit" ? "tw-object-contain" : (imageMode === "cover" ? "tw-object-cover" : "")
|
||||
|
||||
return (
|
||||
<div className="tw-w-flex tw-flex-col tw-w-full tw-content-start tw-h-full tw-rounded-md tw-overflow-hidden"
|
||||
style={{
|
||||
flexGrow: 1, // Ensure the content grows to fill the parent
|
||||
minWidth: '100%', // Force the width to 100% of the parent
|
||||
minHeight: '100%', // Force the height to 100% of the parent
|
||||
}}
|
||||
<div className="tw-flex tw-flex-col tw-w-full tw-relative tw-content-start tw-h-full tw-rounded-md tw-overflow-hidden"
|
||||
// style={{
|
||||
// flexGrow: 1, // Ensure the content grows to fill the parent
|
||||
// minWidth: '100%', // Force the width to 100% of the parent
|
||||
// minHeight: '100%', // Force the height to 100% of the parent
|
||||
// }}
|
||||
>
|
||||
<div className="tw-p-2 tw-w-full tw-h-full tw-flex tw-place-content-center tw-place-items-center "
|
||||
<div className="tw-p-2 tw-w-full tw-h-full tw-overflow-hidden tw-flex tw-place-content-center tw-place-items-center"
|
||||
ref={this.styleAreaRef}
|
||||
style={this.getInnerRenderStyling()}>
|
||||
{/* {this.props.children} */}
|
||||
{
|
||||
image && (
|
||||
<img src={image.previewUrl} className="tw-bg-contain tw-w-full tw-h-full" />
|
||||
)
|
||||
}
|
||||
<div className={`tw-flex ${!image ? "tw-w-full tw-h-full" : ""}`} style={{
|
||||
color: this.getAttrValue("styling.foregroundColor"),
|
||||
...this.getAnchorStyle(this.getAttrValue("styling.anchor"))
|
||||
}}>
|
||||
{this.getAttrValue("labelWidget")}
|
||||
</div>
|
||||
{/* {this.props.children} */}
|
||||
{
|
||||
image ? (
|
||||
<div className="tw-relative tw-w-full tw-h-full tw-overflow-hidden">
|
||||
<img src={image.previewUrl}
|
||||
className={`${imgClassName}`}
|
||||
alt={this.getAttrValue("widgetName")}
|
||||
style={{
|
||||
width: "100%",
|
||||
height: "100%",
|
||||
position: "absolute",
|
||||
top: '0px',
|
||||
left: '0px',
|
||||
|
||||
}}
|
||||
// className="tw-object-cover"
|
||||
/>
|
||||
</div>
|
||||
) : null
|
||||
}
|
||||
<div className={`tw-flex ${!image ? "tw-w-full tw-h-full" : ""}`} style={{
|
||||
color: this.getAttrValue("styling.foregroundColor"),
|
||||
...this.getAnchorStyle(this.getAttrValue("styling.anchor"))
|
||||
}}>
|
||||
{this.getAttrValue("labelWidget")}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
@@ -193,4 +259,44 @@ class Label extends TkinterWidgetBase{
|
||||
}
|
||||
|
||||
|
||||
function LabelImage({imageSrc, alt, styleAreaRef}){
|
||||
|
||||
const [size, setSize] = useState({
|
||||
width: 0,
|
||||
height: 0
|
||||
})
|
||||
|
||||
useEffect(() => {
|
||||
if (!styleAreaRef.current) return;
|
||||
|
||||
// Function to update size
|
||||
const updateSize = () => {
|
||||
const boundingBox = styleAreaRef.current.getBoundingClientRect();
|
||||
setSize({ width: boundingBox.width, height: boundingBox.height });
|
||||
};
|
||||
|
||||
// Initial size update
|
||||
updateSize();
|
||||
|
||||
// Observe size changes
|
||||
const resizeObserver = new ResizeObserver(updateSize);
|
||||
resizeObserver.observe(styleAreaRef.current);
|
||||
|
||||
return () => resizeObserver.disconnect();
|
||||
}, [styleAreaRef])
|
||||
|
||||
return (
|
||||
<img src={imageSrc} alt={alt} className="tw-object-cover"
|
||||
style={{
|
||||
position: "absolute",
|
||||
top: '0px',
|
||||
left: '0px',
|
||||
width: "100%", // Prevent overflow
|
||||
height: "100%", // Prevent overflow
|
||||
}}
|
||||
/>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
export default Label
|
||||
Reference in New Issue
Block a user