# ColorPicker

> रंग (hue) × संतृप्ति (saturation) मैट्रिक्स + चमक स्लाइडर द्वारा रंग का चयन।

Source: https://crossfly.dev/hi/docs/ui/widgets/colorpicker — CrossFly documentation. Full docs as one file: https://crossfly.dev/llms-full.txt

# ColorPicker

`ColorPicker` एक **रंग** चुनता है, hue×saturation के 2-D मैट्रिक्स और एक चमक स्लाइडर के माध्यम से। यह पिकर पैटर्न का अनुसरण करता है (देखें [`Picker`](/docs/ui/widgets/picker)) और **alpha चैनल रहित** एक `Integer` ARGB लौटाता है।

> 🟡 · **पैकेज:** `dev.crossfly.ui.picker` · **विस्तार करता है:** `Picker` · **चयन:** आंतरिक `ColorMatrix`

## कब उपयोग करें
- उपयोगकर्ता को एक रंग चुनने देना (थीम, हाइलाइट, लेबल)।

## दिखावट
स्क्रीन के 80%×80% वाली विंडो, जिसमें hue×saturation मैट्रिक्स मुख्य भाग भरता है, एक चमक स्लाइडर, और **Cancel** तथा **Select** बटन (Select hex दिखाता है और चुने गए रंग से ही रंगा जाता है)।

## संपूर्ण उदाहरण (कॉपी करें, पेस्ट करें और चलाएँ)
```java
package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.picker.*;

/** चलाने योग्य मुख्य स्क्रीन। launcher (classname) की ओर संकेत करें और चलाएँ: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
   @Override
   public void onShow() throws Exception
   {
      super.onShow();
      setLayout(new VerticalLayout());

      Button abrir = new Button("Escolher cor");
      // चुने हुए रंग को ही बटन के बैकग्राउंड के रूप में उपयोग करता है
      abrir.onAction(c ->
      {
         ColorPicker cp = new ColorPicker(0xFF3366CC);
         cp.show(answer ->
         {
            int argb = 0xFF000000 | (Integer) answer;  // alpha जोड़ता है (बिना alpha वाला रंग)
            abrir.style(abrir.getStyle().copy().backColor(argb));
         });
      });
      add(LAY_AUTO, abrir);
   }
}
```

> नीचे दिए गए स्निपेट **केवल मूल भाग** दिखाते हैं (जो `onShow()` के अंदर जाता है)। चलाने के लिए, इन्हें ऊपर दिए `MainWindow` कंकाल में रखें।

## बुनियादी उपयोग
```java
ColorPicker cp = new ColorPicker(0xFF3366CC);
cp.show(answer ->
{
   int rgb = (Integer) answer;    // 0x00RRGGBB (बिना alpha)
   int argb = 0xFF000000 | rgb;   // अपारदर्शी रंग के रूप में उपयोग करने हेतु alpha जोड़ें
   botao.style(botao.getStyle().copy().backColor(argb));
});
```

## कंस्ट्रक्टर
| कंस्ट्रक्टर | विवरण |
|---|---|
| `ColorPicker(int defaultColor)` | खोलने पर दिखाया जाने वाला प्रारंभिक ARGB रंग। |

## गुण और अनुकूलन
| सदस्य | प्रकार | क्या करता है |
|---|---|---|
| `choosenColor` | `int` (सार्वजनिक) | वर्तमान रंग (alpha रहित RGB); रद्द होने पर `-1`। |
| `ColorPicker.selectStr` (स्थैतिक) | `String` | Select बटन के लेबल का उपसर्ग (`"Select color "`)। |

## कॉलबैक और इवेंट
| कॉलबैक | कब ट्रिगर होता है |
|---|---|
| `show(onAnswer)` | पुष्टि (Select) पर, `Integer` (alpha रहित RGB) देता है। |

## परिणाम (महत्वपूर्ण)
`getAnswer()` `Integer` लौटाता है (**alpha रहित** RGB रंग, `& 0x00FFFFFF` से मास्क किया हुआ), या रद्द होने पर `null`। प्रकार `Integer` है (`int` नहीं) ठीक इसलिए ताकि यह `null` हो सके।

> ⚠️ **रंग में alpha चैनल नहीं है।** यदि आपको अपारदर्शी रंग चाहिए तो `0xFF000000 |` लागू करें।

## अवस्थाएँ
- **Select** → `answer = choosenColor` और बंद होता है।
- **Cancel** → `answer = null`, `choosenColor = -1` और बंद होता है (`onAnswer` ट्रिगर **नहीं** होता)।

### चुने गए रंग को बटन की पृष्ठभूमि के रूप में उपयोग करना
```java
ColorPicker cp = new ColorPicker(0xFF3366CC);
cp.show(answer ->
{
   int argb = 0xFF000000 | (Integer) answer;
   botao.style(botao.getStyle().copy().backColor(argb));
});
```

## अच्छे तरीके
- परिणाम को अपारदर्शी रंग के रूप में उपयोग करते समय **alpha जोड़ना** याद रखें (`0xFF000000 |`)।
- रद्दीकरण में `null` की सिमेंटिक्स न खोने के लिए `Integer` (न कि `int`) में cast करें।

## सामान्य गलतियाँ
- **परिणाम को alpha रहित उपयोग करना** — पारदर्शी निकलता है (`0x00RRGGBB`)।
- **रद्दीकरण में `onAnswer` की अपेक्षा करना** — ट्रिगर नहीं होता (`answer = null`)।

## यह भी देखें
- क्षेत्र गाइड: [`ui/`](/docs/ui) · रेसिपी: [`cookbook/`](/docs/cookbook)
- पैटर्न का आधार: [`Picker`](/docs/ui/widgets/picker)
