|  | @@ -22,7 +22,7 @@ laWidget _LA_WIDGET_VALUE_METER_2D={0,LA_TEXT_ALIGN_CENTER};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_FLOAT={0};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_FLOAT_PLAIN={0, LA_UI_FLAGS_PLAIN};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_FLOAT_COLOR={0};
 | 
	
		
			
				|  |  | -laWidget _LA_WIDGET_FLOAT_HCY={0};
 | 
	
		
			
				|  |  | +laWidget _LA_WIDGET_FLOAT_COLOR_HCY={0};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_ENUM_SELECTOR={0};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_ENUM_SELECTOR_ICON={0, LA_UI_FLAGS_ICON};
 | 
	
		
			
				|  |  |  laWidget _LA_WIDGET_ENUM_CYCLE={0, LA_UI_FLAGS_CYCLE};
 | 
	
	
		
			
				|  | @@ -62,7 +62,7 @@ laWidget *LA_WIDGET_VALUE_METER_2D=&_LA_WIDGET_VALUE_METER_2D;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_FLOAT=&_LA_WIDGET_FLOAT;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_FLOAT_PLAIN=&_LA_WIDGET_FLOAT_PLAIN;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_FLOAT_COLOR=&_LA_WIDGET_FLOAT_COLOR;
 | 
	
		
			
				|  |  | -laWidget *LA_WIDGET_FLOAT_HCY=&_LA_WIDGET_FLOAT_HCY;
 | 
	
		
			
				|  |  | +laWidget *LA_WIDGET_FLOAT_COLOR_HCY=&_LA_WIDGET_FLOAT_COLOR_HCY;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_ENUM_SELECTOR=&_LA_WIDGET_ENUM_SELECTOR;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_ENUM_SELECTOR_ICON=&_LA_WIDGET_ENUM_SELECTOR_ICON;
 | 
	
		
			
				|  |  |  laWidget *LA_WIDGET_ENUM_CYCLE=&_LA_WIDGET_ENUM_CYCLE;
 | 
	
	
		
			
				|  | @@ -125,7 +125,8 @@ int la_EnumGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  int la_ColorPickerGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  | -    return 7;
 | 
	
		
			
				|  |  | +    if(!ui->Extra->HeightCoeff) ui->Extra->HeightCoeff=7;
 | 
	
		
			
				|  |  | +    return ui->Extra->HeightCoeff;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  int la_SymbolGetHeight(laUiItem *ui){
 | 
	
		
			
				|  |  |      //if (!ui->State)
 | 
	
	
		
			
				|  | @@ -1119,6 +1120,9 @@ void la_ColorCircleDrawHCY(laUiItem *ui, int h){
 | 
	
		
			
				|  |  |      tnsVertexArray2d(verts, 2);
 | 
	
		
			
				|  |  |      tnsPackAs(GL_LINES);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    if(ui->Extra->HeightCoeff>=0)
 | 
	
		
			
				|  |  | +        tnsDrawStringAuto("◿",laThemeColor(bt,LA_BT_BORDER),ui->R-LA_RH, ui->R, ui->B-bt->BM-LA_RH, LA_TEXT_ALIGN_CENTER);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      tnsFlush();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  void la_MenuItemDraw(laUiItem *ui, int h){
 | 
	
	
		
			
				|  | @@ -1428,10 +1432,10 @@ void la_RegisterUiTypesBasic(){
 | 
	
		
			
				|  |  |      _LA_UI_FLOAT_COLOR = la_RegisterUiType("LA_real_color", LA_PROP_FLOAT | LA_PROP_ARRAY, "LA_real_color_operator",
 | 
	
		
			
				|  |  |                          &_LA_THEME_VALUATOR, la_FloatArrayColorDraw, 0, la_GeneralUiInit, la_GeneralUiDestroy);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    LA_WIDGET_FLOAT_HCY->Type=
 | 
	
		
			
				|  |  | -    _LA_UI_FLOAT_HCY = la_RegisterUiType("LA_real_hcy", LA_PROP_FLOAT | LA_PROP_ARRAY, "LA_real_hcy_operator",
 | 
	
		
			
				|  |  | +    LA_WIDGET_FLOAT_COLOR_HCY->Type=
 | 
	
		
			
				|  |  | +    _LA_UI_FLOAT_COLOR_HCY = la_RegisterUiType("LA_real_hcy", LA_PROP_FLOAT | LA_PROP_ARRAY, "LA_real_hcy_operator",
 | 
	
		
			
				|  |  |                          &_LA_THEME_VALUATOR, la_ColorCircleDrawHCY, la_ColorPickerGetHeight, la_GeneralUiInit, la_GeneralUiDestroy);
 | 
	
		
			
				|  |  | -    _LA_UI_FLOAT_HCY->GetMinWidth = la_ColorPickerGetMinWidth;
 | 
	
		
			
				|  |  | +    _LA_UI_FLOAT_COLOR_HCY->GetMinWidth = la_ColorPickerGetMinWidth;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      LA_WIDGET_ENUM_SELECTOR->Type=LA_WIDGET_ENUM_SELECTOR_ICON->Type=LA_WIDGET_ENUM_CYCLE->Type=LA_WIDGET_ENUM_HIGHLIGHT->Type=
 | 
	
		
			
				|  |  |      _LA_UI_ENUM_SELECTOR = la_RegisterUiType("LA_enum_selector", LA_PROP_ENUM, "LA_enum_selector_operator",
 | 
	
	
		
			
				|  | @@ -1940,7 +1944,7 @@ int OPMOD_FloatColor(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |          p = laEnableEmptyPropertyPanel(a->ToPanel, a, GX, GX + 150, GY, 500, e);{
 | 
	
		
			
				|  |  |              uil = &p->UI;
 | 
	
		
			
				|  |  |              col = laFirstColumn(uil);
 | 
	
		
			
				|  |  | -            laShowItemFull(uil, col, &ui->PP, 0, LA_WIDGET_FLOAT_HCY, 0, 0, 0);
 | 
	
		
			
				|  |  | +            laShowItemFull(uil, col, &ui->PP, 0, LA_WIDGET_FLOAT_COLOR_HCY, 0, 0, 0);
 | 
	
		
			
				|  |  |              laShowItemFull(uil, col, &ui->PP, 0, LA_WIDGET_FLOAT, 0, 0, 0)->Flags=LA_UI_FLAGS_TRANSPOSE;
 | 
	
		
			
				|  |  |              laEnclosePanelContent(p, uil);
 | 
	
		
			
				|  |  |          }
 | 
	
	
		
			
				|  | @@ -1958,38 +1962,43 @@ int OPMOD_FloatColor(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |  int OPMOD_ColorHCY(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |      laUiItem *ui = a->Instance;
 | 
	
		
			
				|  |  |      laBoxedTheme *bt = (*ui->Type->Theme);
 | 
	
		
			
				|  |  | -    laGeneralUiExtraData *uit = a->CustomData;
 | 
	
		
			
				|  |  | +    laGeneralUiExtraData *es = a->CustomData;
 | 
	
		
			
				|  |  |      int Away = 0;
 | 
	
		
			
				|  |  | -    real c = (real)((ui->R + ui->L) / 2) - LA_RH / 2; /*- bt->RM;*/
 | 
	
		
			
				|  |  | -    real r = (ui->B - ui->U - bt->TP - bt->BP) / 2;
 | 
	
		
			
				|  |  |      int i = 0;
 | 
	
		
			
				|  |  |      real hcy[3] = {0};
 | 
	
		
			
				|  |  |      real Color[4] = {0};
 | 
	
		
			
				|  |  |      real PickerPos[2];
 | 
	
		
			
				|  |  |      real abso;
 | 
	
		
			
				|  |  | -    real dx = e->x - c, dy = e->y - (ui->U + r + bt->TP);
 | 
	
		
			
				|  |  | -    real dist = sqrt(dx * dx + dy * dy);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (!laIsInUiItem(ui, e->x, e->y)){
 | 
	
		
			
				|  |  | +    if (!laIsInUiItem(ui, e->x, e->y) && !es->Dragging){
 | 
	
		
			
				|  |  |          return LA_FINISHED_PASS;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (e->Type == LA_L_MOUSE_DOWN){
 | 
	
		
			
				|  |  | -        ui->State = LA_UI_ACTIVE;
 | 
	
		
			
				|  |  | -        laRedrawCurrentPanel();
 | 
	
		
			
				|  |  | -        //return LA_RUNNING;
 | 
	
		
			
				|  |  | +    if(e->Type == LA_L_MOUSE_DOWN && es->HeightCoeff>=0 && e->x>ui->R-bt->RM-LA_RH && e->y>ui->B-bt->BM-LA_RH){
 | 
	
		
			
				|  |  | +        es->Dragging=3; es->LastX=e->x; es->LastY=e->y; es->TargetIndexVali=es->HeightCoeff; return LA_RUNNING;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | -    if (e->Type == LA_L_MOUSE_UP){
 | 
	
		
			
				|  |  | -        ui->State = LA_UI_NORMAL;
 | 
	
		
			
				|  |  | -        laRedrawCurrentPanel();
 | 
	
		
			
				|  |  | +    if(es->Dragging==3){
 | 
	
		
			
				|  |  | +        if(e->Type==LA_MOUSEMOVE){ es->HeightCoeff=es->TargetIndexVali+((real)e->y-es->LastY+0.5)/LA_RH;
 | 
	
		
			
				|  |  | +            if(es->HeightCoeff<1)es->HeightCoeff=1; laRecalcCurrentPanel();}
 | 
	
		
			
				|  |  | +        elif(e->Type==LA_L_MOUSE_UP){ es->Dragging=0; }
 | 
	
		
			
				|  |  | +        elif(e->Type==LA_R_MOUSE_DOWN){
 | 
	
		
			
				|  |  | +            es->Dragging=0; es->HeightCoeff=es->TargetIndexVali; laRecalcCurrentPanel(); }
 | 
	
		
			
				|  |  |          return LA_RUNNING;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if (e->Type & LA_MOUSE_EVENT && LA_UI_NORMAL != ui->State){
 | 
	
		
			
				|  |  | +    real c = (real)((ui->R + ui->L) / 2) - LA_RH / 2; /*- bt->RM;*/
 | 
	
		
			
				|  |  | +    real r = (ui->B - ui->U - bt->TP - bt->BP) / 2;
 | 
	
		
			
				|  |  | +    real dx = e->x - c, dy = e->y - (ui->U + r + bt->TP);
 | 
	
		
			
				|  |  | +    real dist = sqrt(dx * dx + dy * dy);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (e->Type == LA_L_MOUSE_DOWN){ ui->State = LA_UI_ACTIVE; laRedrawCurrentPanel(); es->Dragging=(dist<=r)?1:2; }
 | 
	
		
			
				|  |  | +    if (e->Type == LA_L_MOUSE_UP){ ui->State = LA_UI_NORMAL; es->Dragging=0; laRedrawCurrentPanel(); return LA_RUNNING_PASS; }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    if (e->Type & LA_MOUSE_EVENT && es->Dragging){
 | 
	
		
			
				|  |  |          laGetFloatArray(&ui->PP, Color);
 | 
	
		
			
				|  |  |          tnsLogToLinear(Color, MAIN.Gamma);
 | 
	
		
			
				|  |  |          tnsRGBtoHCY(Color, hcy);
 | 
	
		
			
				|  |  | -        if (dist < r){
 | 
	
		
			
				|  |  | +        if (es->Dragging==1){
 | 
	
		
			
				|  |  |              abso = fabs(atan((real)dy / (real)dx));
 | 
	
		
			
				|  |  |              hcy[0] = abso / TNS_PI / 2;
 | 
	
		
			
				|  |  |              if (dx > 0){
 | 
	
	
		
			
				|  | @@ -2001,7 +2010,7 @@ int OPMOD_ColorHCY(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |                      hcy[0] += 0.5;
 | 
	
		
			
				|  |  |                  }
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            hcy[1] = dist / r;
 | 
	
		
			
				|  |  | +            hcy[1] = dist / r; TNS_CLAMP(hcy[1],0,1);
 | 
	
		
			
				|  |  |              //printf("hcy[1] = %d -> ",hcy[1]);
 | 
	
		
			
				|  |  |              //if (MAIN.ColorAccessCorrectGamma) {
 | 
	
		
			
				|  |  |              //tnsSingleLogToLinear(&hcy[1], 2.2);
 | 
	
	
		
			
				|  | @@ -2009,7 +2018,7 @@ int OPMOD_ColorHCY(laOperator *a, laEvent *e){
 | 
	
		
			
				|  |  |              //printf("%d\n", hcy[1]);
 | 
	
		
			
				|  |  |          }else if (dist < r + LA_RH * 2 && dx > 0){
 | 
	
		
			
				|  |  |              abso = -atan((real)dy / (real)dx) / TNS_PI * 2 + 0.5;
 | 
	
		
			
				|  |  | -            hcy[2] = abso;
 | 
	
		
			
				|  |  | +            hcy[2] = abso; TNS_CLAMP(hcy[2],0,1);
 | 
	
		
			
				|  |  |              //if (MAIN.ColorAccessCorrectGamma) {
 | 
	
		
			
				|  |  |              //    tnsSingleLogToLinear(&hcy[2], MAIN.Gamma);
 | 
	
		
			
				|  |  |              //}
 |