|
@@ -169,6 +169,15 @@ void ourui_Brush(laUiList *uil, laPropPack *This, laPropPack *DetachedProps, laC
|
|
|
laEndRow(uil,b);
|
|
|
}laEndCondition(uil,b1);
|
|
|
}
|
|
|
+void ourui_ColorItemSimple(laUiList *uil, laPropPack *This, laPropPack *DetachedProps, laColumn *UNUSED, int context){
|
|
|
+ laColumn* c=laFirstColumn(uil);
|
|
|
+ laShowItemFull(uil,c,This,"color",LA_WIDGET_FLOAT_COLOR,0,0,0)->Flags|=LA_UI_FLAGS_NO_EVENT;
|
|
|
+}
|
|
|
+void ourui_Pallette(laUiList *uil, laPropPack *This, laPropPack *DetachedProps, laColumn *UNUSED, int context){
|
|
|
+ laColumn* c=laFirstColumn(uil);
|
|
|
+ laUiItem* ui=laShowItemFull(uil,c,This,"colors",0,0,ourui_ColorItemSimple,0);ui->SymbolID=7;
|
|
|
+ ui->Flags|=LA_UI_FLAGS_NO_DECAL;
|
|
|
+}
|
|
|
void ourui_BrushSimple(laUiList *uil, laPropPack *This, laPropPack *DetachedProps, laColumn *UNUSED, int context){
|
|
|
laColumn* c=laFirstColumn(uil);
|
|
|
laUiItem* b=laBeginRow(uil,c,0,0);
|
|
@@ -286,6 +295,27 @@ void ourui_ColorPanel(laUiList *uil, laPropPack *This, laPropPack *DetachedProps
|
|
|
laShowItem(uil,c,0,"our.current_color")->Expand=1;
|
|
|
laEndRow(uil,b);
|
|
|
}
|
|
|
+void ourui_PallettesPanel(laUiList *uil, laPropPack *This, laPropPack *DetachedProps, laColumn *UNUSED, int context){
|
|
|
+ laColumn* c=laFirstColumn(uil); laUiItem* b,*b1,*b2;
|
|
|
+ b=laBeginRow(uil,c,0,0);
|
|
|
+ laShowItemFull(uil,c,0,"our.tools.pallettes",LA_WIDGET_COLLECTION_SELECTOR,0,laui_IdentifierOnly,0)->Flags|=LA_UI_COLLECTION_SIMPLE_SELECTOR;
|
|
|
+ laUiItem* ui=laShowInvisibleItem(uil,c,0,"our.tools.current_pallette");
|
|
|
+ b1=laOnConditionThat(uil,c,laPropExpression(&ui->PP,""));{
|
|
|
+ laUiItem* name=laShowItem(uil,c,&ui->PP,"name");name->Flags|=LA_UI_FLAGS_NO_DECAL; name->Expand=1;
|
|
|
+ laShowItem(uil,c,0,"OUR_new_pallette")->Flags|=LA_UI_FLAGS_ICON;
|
|
|
+ laEndRow(uil,b);
|
|
|
+ laShowItemFull(uil,c,0,"our.tools.current_pallette",LA_WIDGET_COLLECTION_SINGLE,0,ourui_Pallette,0);
|
|
|
+ b2=laBeginRow(uil,c,0,0);
|
|
|
+ laShowItem(uil,c,0,"OUR_pallette_new_color")->Expand=1;
|
|
|
+ laUiList* muil=laMakeMenuPage(uil,c,"☰"); laColumn* mc=laFirstColumn(muil);{
|
|
|
+ laShowItem(muil,mc,0,"OUR_remove_pallette");
|
|
|
+ }
|
|
|
+ laEndRow(uil,b2);
|
|
|
+ }laElse(uil,b1);{
|
|
|
+ laShowItem(uil,c,0,"OUR_new_pallette")->Expand=1;
|
|
|
+ laEndRow(uil,b);
|
|
|
+ }laEndCondition(uil,b1);
|
|
|
+}
|
|
|
void ourui_BrushPage(laUiList *uil, laPropPack *This, laPropPack *DetachedProps, laColumn *UNUSED, int context){
|
|
|
laColumn* c=laFirstColumn(uil); laColumn* cl,*cr; laSplitColumn(uil,c,0.5); cl=laLeftColumn(c,0);cr=laRightColumn(c,15);
|
|
|
|
|
@@ -1806,6 +1836,54 @@ int ourinv_CropToRef(laOperator* a, laEvent* e){
|
|
|
return LA_FINISHED;
|
|
|
}
|
|
|
|
|
|
+OurColorPallette* our_NewPallette(char* Name){
|
|
|
+ OurColorPallette* cp=memAcquireHyper(sizeof(OurColorPallette));
|
|
|
+ strSafeSet(&cp->Name,Name); lstAppendItem(&Our->Pallettes,cp); memAssignRef(Our,&Our->CurrentPallette,cp);
|
|
|
+ return cp;
|
|
|
+}
|
|
|
+OurColorItem* our_PalletteNewColor(OurColorPallette* cp,tnsVector3d Color){
|
|
|
+ OurColorItem* ci=memAcquire(sizeof(OurColorItem)); memAssignRef(ci,&ci->Parent,cp);
|
|
|
+ tnsVectorSet3v(ci->Color,Color); lstAppendItem(&cp->Colors,ci); return ci;
|
|
|
+}
|
|
|
+void our_PalletteRemoveColor(OurColorItem* ci){
|
|
|
+ lstRemoveItem(&ci->Parent->Colors,ci); memLeave(ci);
|
|
|
+}
|
|
|
+void our_RemovePallette(OurColorPallette* cp){
|
|
|
+ strSafeDestroy(&cp->Name); while(cp->Colors.pFirst){ our_PalletteRemoveColor(cp->Colors.pFirst); }
|
|
|
+ if(Our->CurrentPallette==cp){
|
|
|
+ if(cp->Item.pNext){ memAssignRef(Our,&Our->CurrentPallette,cp->Item.pNext); }
|
|
|
+ else { memAssignRef(Our,&Our->CurrentPallette,cp->Item.pPrev); }
|
|
|
+ }
|
|
|
+ lstRemoveItem(&Our->Pallettes,cp); memLeave(cp);
|
|
|
+}
|
|
|
+
|
|
|
+int ourinv_NewPallette(laOperator* a, laEvent* e){
|
|
|
+ our_NewPallette("Our Pallette");
|
|
|
+ laNotifyUsers("our.tools.current_pallette"); laNotifyUsers("our.tools.pallettes"); laRecordInstanceDifferences(Our,"our_tools"); laPushDifferences("Add pallette",0);
|
|
|
+ return LA_FINISHED;
|
|
|
+}
|
|
|
+int ourinv_RemovePallette(laOperator* a, laEvent* e){
|
|
|
+ OurColorPallette* cp=Our->CurrentPallette; if(a->This && a->This->EndInstance){ cp=a->This->EndInstance; }
|
|
|
+ if(!cp) return LA_FINISHED;
|
|
|
+ our_RemovePallette(cp);
|
|
|
+ laNotifyUsers("our.tools.current_pallette"); laNotifyUsers("our.tools.pallettes"); laRecordInstanceDifferences(Our,"our_tools"); laPushDifferences("Remove pallette",0);
|
|
|
+ return LA_FINISHED;
|
|
|
+}
|
|
|
+int ourinv_PalletteNewColor(laOperator* a, laEvent* e){
|
|
|
+ OurColorPallette* cp=Our->CurrentPallette; if(a->This && a->This->EndInstance){ cp=a->This->EndInstance; }
|
|
|
+ if(!cp) return LA_FINISHED;
|
|
|
+ our_PalletteNewColor(cp,Our->CurrentColor);
|
|
|
+ laNotifyUsers("our.tools.current_pallette"); laNotifyUsers("our.tools.pallettes"); laRecordInstanceDifferences(Our,"our_tools"); laPushDifferences("Add color",0);
|
|
|
+ return LA_FINISHED;
|
|
|
+}
|
|
|
+int ourinv_PalletteRemoveColor(laOperator* a, laEvent* e){
|
|
|
+ OurColorItem* ci=0; if(a->This && a->This->EndInstance){ ci=a->This->EndInstance; }
|
|
|
+ if(!ci) return LA_FINISHED;
|
|
|
+ our_PalletteRemoveColor(ci);
|
|
|
+ laNotifyUsers("our.tools.current_pallette"); laNotifyUsers("our.tools.pallettes"); laRecordInstanceDifferences(Our,"our_tools"); laPushDifferences("Remove pallette",0);
|
|
|
+ return LA_FINISHED;
|
|
|
+}
|
|
|
+
|
|
|
void ourget_CanvasIdentifier(void* unused, char* buf, char** ptr){
|
|
|
*ptr="Main canvas";
|
|
|
}
|
|
@@ -1815,6 +1893,9 @@ void* ourget_FirstLayer(void* unused, void* unused1){
|
|
|
void* ourget_FirstBrush(void* unused, void* unused1){
|
|
|
return Our->Brushes.pFirst;
|
|
|
}
|
|
|
+void* ourget_FirstPallette(void* unused, void* unused1){
|
|
|
+ return Our->Pallettes.pFirst;
|
|
|
+}
|
|
|
void* ourget_our(void* unused, void* unused1){
|
|
|
return Our;
|
|
|
}
|
|
@@ -1905,6 +1986,14 @@ void ourset_CurrentBrush(void* unused, OurBrush* b){
|
|
|
void ourset_CurrentLayer(void* unused, OurLayer*l){
|
|
|
memAssignRef(Our, &Our->CurrentLayer, l); laNotifyUsers("our.canvas");
|
|
|
}
|
|
|
+void ourset_CurrentPallette(void* unused, OurColorPallette* cp){
|
|
|
+ memAssignRef(Our,&Our->CurrentPallette,cp);
|
|
|
+ laNotifyUsers("our.tools.current_pallette"); laNotifyUsers("our.tools.pallettes");
|
|
|
+}
|
|
|
+void ourset_PalletteColor(void* unused, OurColorItem* ci){
|
|
|
+ tnsVectorSet3v(Our->CurrentColor,ci->Color);
|
|
|
+ laNotifyUsers("our.current_color");
|
|
|
+}
|
|
|
void ourset_ShowRef(void* unused, int c){ Our->ShowRef=c; laNotifyUsers("our.canvas"); }
|
|
|
void ourset_RefCategory(void* unused, int c){ Our->RefCategory=c; laNotifyUsers("our.canvas"); }
|
|
|
void ourset_RefSize(void* unused, int c){ Our->RefSize=c; laNotifyUsers("our.canvas"); }
|
|
@@ -2056,11 +2145,17 @@ void ourRegisterEverything(){
|
|
|
|
|
|
laCreateOperatorType("OUR_crop_to_ref","Crop To Ref","Crop to reference lines",ourchk_CropToRef,0,0,ourinv_CropToRef,0,0,0);
|
|
|
|
|
|
+ laCreateOperatorType("OUR_new_pallette","New Pallette","New pallette",0,0,0,ourinv_NewPallette,0,'+',0);
|
|
|
+ laCreateOperatorType("OUR_remove_pallette","Remove Pallette","Remove selected pallette",0,0,0,ourinv_RemovePallette,0,U'🗴',0);
|
|
|
+ laCreateOperatorType("OUR_pallette_new_color","New Color","New color in this pallette",0,0,0,ourinv_PalletteNewColor,0,'+',0);
|
|
|
+ laCreateOperatorType("OUR_pallette_remove_color","Remove Color","Remove this color from the pallette",0,0,0,ourinv_PalletteRemoveColor,0,U'🗴',0);
|
|
|
+
|
|
|
laRegisterUiTemplate("panel_canvas", "Canvas", ourui_CanvasPanel, 0, 0,"Our Paint", GL_RGBA16F,25,25);
|
|
|
laRegisterUiTemplate("panel_layers", "Layers", ourui_LayersPanel, 0, 0,0, 0,10,15);
|
|
|
laRegisterUiTemplate("panel_tools", "Tools", ourui_ToolsPanel, 0, 0,0, 0,10,20);
|
|
|
laRegisterUiTemplate("panel_brushes", "Brushes", ourui_BrushesPanel, 0, 0,0, 0,10,15);
|
|
|
laRegisterUiTemplate("panel_color", "Color", ourui_ColorPanel, 0, 0,0, GL_RGBA16F,0,0);
|
|
|
+ laRegisterUiTemplate("panel_pallettes", "Pallettes", ourui_PallettesPanel, 0, 0,0, GL_RGBA16F,0,0);
|
|
|
laRegisterUiTemplate("panel_brush_nodes", "Brush Nodes", ourui_BrushPage, 0, 0,0, 0,25,30);
|
|
|
|
|
|
pc=laDefineRoot();
|
|
@@ -2124,6 +2219,9 @@ void ourRegisterEverything(){
|
|
|
sp=laAddSubGroup(pc,"brushes","Brushes","Brushes","our_brush",0,0,ourui_Brush,offsetof(OurPaint,CurrentBrush),0,0,0,ourset_CurrentBrush,0,0,offsetof(OurPaint,Brushes),0);
|
|
|
sp->UiFilter=ourfilter_BrushInPage;
|
|
|
laAddSubGroup(pc,"current_brush","Current Brush","Current brush","our_brush",0,0,0,offsetof(OurPaint,CurrentBrush),ourget_FirstBrush,0,laget_ListNext,ourset_CurrentBrush,0,0,0,LA_UDF_REFER);
|
|
|
+ sp=laAddSubGroup(pc,"pallettes","Pallettes","Pallettes","our_pallette",0,0,ourui_Pallette,offsetof(OurPaint,CurrentPallette),0,0,0,ourset_CurrentPallette,0,0,offsetof(OurPaint,Pallettes),0);
|
|
|
+
|
|
|
+ laAddSubGroup(pc,"current_pallette","Current Pallette","Current pallette","our_pallette",0,0,0,offsetof(OurPaint,CurrentPallette),ourget_FirstPallette,0,laget_ListNext,ourset_CurrentPallette,0,0,0,LA_UDF_REFER);
|
|
|
|
|
|
pc=laAddPropertyContainer("our_brush","Our Brush","OurPaint brush",0,0,sizeof(OurBrush),0,0,2);
|
|
|
laAddStringProperty(pc,"name","Name","Name of the brush",0,0,0,0,1,offsetof(OurBrush,Name),0,0,0,0,LA_AS_IDENTIFIER);
|
|
@@ -2166,11 +2264,19 @@ void ourRegisterEverything(){
|
|
|
p=laAddEnumProperty(pc, "show_in_pages","Pages","Show in pages",0,0,0,0,0,0,0,0,3,0,ourset_BrushShowInPages,ourget_BrushShowInPages,0,0,0,0);
|
|
|
laAddEnumItemAs(p,"NONE","None","Don't show brush in this page",0,' ');
|
|
|
laAddEnumItemAs(p,"SHOWN","Shown","Show brush in this page",1,'*');
|
|
|
-
|
|
|
laAddOperatorProperty(pc,"move","Move","Move brush","OUR_move_brush",0,0);
|
|
|
laAddOperatorProperty(pc,"remove","Remove","Remove brush","OUR_remove_brush",U'🗴',0);
|
|
|
laAddOperatorProperty(pc,"duplicate","Duplicate","Duplicate brush","OUR_duplicate_brush",U'⎘',0);
|
|
|
|
|
|
+ pc=laAddPropertyContainer("our_pallette","Our Pallette","OurPaint pallette",0,0,sizeof(OurColorPallette),0,0,2);
|
|
|
+ laAddStringProperty(pc,"name","Name","Name of this pallette",0,0,0,0,1,offsetof(OurColorPallette,Name),0,0,0,0,LA_AS_IDENTIFIER);
|
|
|
+ laAddSubGroup(pc,"colors","Colors","Colors in this pallette","our_color_item",0,0,0,-1,0,0,0,ourset_PalletteColor,0,0,offsetof(OurColorPallette,Colors),0);
|
|
|
+
|
|
|
+ pc=laAddPropertyContainer("our_color_item","Our Color Item","OurPaint pallette color item",0,0,sizeof(OurColorItem),0,0,1);
|
|
|
+ laAddFloatProperty(pc,"color","Color","Color",LA_WIDGET_FLOAT_COLOR,0,0,0,0,0,0,0,offsetof(OurColorItem,Color),0,0,3,0,0,0,0,0,0,0,LA_PROP_IS_LINEAR_SRGB);
|
|
|
+ laAddSubGroup(pc,"parent","Parent","Parent pallette","our_pallette",0,0,0,offsetof(OurColorItem,Parent),0,0,0,0,0,0,0,LA_UDF_REFER|LA_READ_ONLY);
|
|
|
+ laAddOperatorProperty(pc,"remove","Remove","Remove this color item","OUR_pallette_remove_color",U'🗴',0);
|
|
|
+
|
|
|
pc=laAddPropertyContainer("our_canvas","Our Canvas","OurPaint canvas",0,0,sizeof(OurPaint),ourpost_Canvas,0,1);
|
|
|
laPropContainerExtraFunctions(pc,0,ourreset_Canvas,0,0,0);
|
|
|
Our->CanvasSaverDummyProp=laPropContainerManageable(pc, offsetof(OurPaint,CanvasSaverDummyList));
|