static void color_pick_ok(int x, int y, unsigned char *pix, XtPointer data) { struct ida_coledit *me = data; int max; if (debug) fprintf(stderr,"color_pick_ok: +%d+%d %d/%d/%d\n", x,y, pix[0],pix[1],pix[2]); max = 0; if (max < pix[0]) max = pix[0]; if (max < pix[1]) max = pix[1]; if (max < pix[2]) max = pix[2]; XmToggleButtonSetState(me->toggle,False,True); me->red.parm.right = (int)255 * pix[0] / max; color_update(me,&me->red,1); me->green.parm.right = (int)255 * pix[1] / max; color_update(me,&me->green,1); me->blue.parm.right = (int)255 * pix[2] / max; color_update(me,&me->blue,1); if (debug) fprintf(stderr,"color_pick_ok: %d/%d/%d max=%d\n", me->red.parm.right, me->green.parm.right, me->blue.parm.right, max); }
static void color_text(Widget widget, XtPointer client_data, XtPointer calldata) { struct ida_coledit *me = client_data; int left,right,bottom,top; float gamma; if (widget == me->l && 1 == sscanf(XmTextGetString(me->l),"%d",&left) && left >= 0 && left <= me->cur->parm.right) { me->cur->parm.left = left; } if (widget == me->r && 1 == sscanf(XmTextGetString(me->r),"%d",&right) && me->cur->parm.left <= right && right <= 255) { me->cur->parm.right = right; } if (widget == me->b && 1 == sscanf(XmTextGetString(me->b),"%d",&bottom) && bottom <= me->cur->parm.top) { me->cur->parm.bottom = bottom; } if (widget == me->t && 1 == sscanf(XmTextGetString(me->t),"%d",&top) && me->cur->parm.bottom <= top) { me->cur->parm.top = top; } if (widget == me->g && 1 == sscanf(XmTextGetString(me->g),"%f",&gamma)) { me->cur->parm.gamma = gamma; } color_update(me,me->cur,0); }
static void color_vals(Widget widget, XtPointer client_data, XtPointer calldata) { struct ida_hist *cur = client_data; struct ida_coledit *me = cur->up; me->cur = cur; color_update(me,cur,2); }
void vdp_restore(uint8 *vdp_regs) { int i; for (i=0;i<0x20;i++) { reg_w(i, vdp_regs[i]); } /* reinitialize HVC tables */ vctab = (vdp_pal) ? ((reg[1] & 8) ? vc_pal_240 : vc_pal_224) : vc_ntsc_224; hctab = (reg[12] & 1) ? cycle2hc40 : cycle2hc32; /* reinitialize overscan area */ bitmap.viewport.x = config.overscan ? 14 : 0; bitmap.viewport.y = config.overscan ? (((reg[1] & 8) ? 0 : 8) + (vdp_pal ? 24 : 0)) : 0; bitmap.viewport.changed = 2; /* restore VDP timings */ fifo_latency = (reg[12] & 1) ? 27 : 30; if ((code & 0x0F) == 0x01) fifo_latency = fifo_latency * 2; /* remake cache */ for (i=0;i<0x800;i++) { bg_name_list[i]=i; bg_name_dirty[i]=0xFF; } bg_list_index=0x800; /* reinitialize palette */ color_update(0x00, *(uint16 *)&cram[border << 1]); for(i = 1; i < 0x40; i += 1) { color_update(i, *(uint16 *)&cram[i << 1]); } }
static void color_mouse(Widget widget, XtPointer client_data, XEvent *ev, Boolean *cont) { struct ida_hist *me = client_data; int x,y; switch (ev->type) { case ButtonPress: case ButtonRelease: { XButtonEvent *e = (XButtonEvent*)ev; x = e->x; y = e->y; break; } case MotionNotify: { XMotionEvent *e = (XMotionEvent*)ev; x = e->x; y = e->y; break; default: return; } } if (x > (me->parm.right + me->parm.left)/2) { me->parm.right = x; if (me->parm.right > 255) me->parm.right = 255; if (me->parm.right < me->parm.left) me->parm.right = me->parm.left; } else { me->parm.left = x; if (me->parm.left < 0) me->parm.left = 0; if (me->parm.left > me->parm.right) me->parm.left = me->parm.right; } color_update(me->up,me,1); }
void color_init(struct ida_image *img) { Widget menu,push,rc; struct ida_coledit *me; Arg args[2]; me = malloc(sizeof(*me)); memset(me,0,sizeof(*me)); color_calchist(img,me); /* dialog shell */ me->dlg = XmCreatePromptDialog(app_shell,"color",NULL,0); XmdRegisterEditres(XtParent(me->dlg)); XtUnmanageChild(XmSelectionBoxGetChild(me->dlg,XmDIALOG_SELECTION_LABEL)); XtUnmanageChild(XmSelectionBoxGetChild(me->dlg,XmDIALOG_HELP_BUTTON)); XtUnmanageChild(XmSelectionBoxGetChild(me->dlg,XmDIALOG_TEXT)); me->form = XtVaCreateManagedWidget("form",xmFormWidgetClass, me->dlg,NULL); XtAddCallback(XtParent(me->dlg),XmNdestroyCallback,color_destroy,me); XtAddCallback(me->dlg,XmNokCallback,color_button_cb,me); XtAddCallback(me->dlg,XmNcancelCallback,color_button_cb,me); /* histograms */ XtVaCreateManagedWidget("hist",xmLabelWidgetClass, me->form,NULL); color_createhist(me->form,"red", x11_red, &me->red); color_createhist(me->form,"green",x11_green,&me->green); color_createhist(me->form,"blue", x11_blue, &me->blue); me->red.up = me; me->green.up = me; me->blue.up = me; XtVaCreateManagedWidget("map",xmLabelWidgetClass, me->form,NULL); /* control */ me->toggle = XtVaCreateManagedWidget("lock",xmToggleButtonWidgetClass, me->form,NULL); XtAddCallback(me->toggle,XmNvalueChangedCallback,color_lock,me); menu = XmCreatePulldownMenu(me->form,"valsM",NULL,0); XtSetArg(args[0],XmNsubMenuId,menu); me->vals = XmCreateOptionMenu(me->form,"vals",args,1); XtManageChild(me->vals); push = XtVaCreateManagedWidget("red",xmPushButtonWidgetClass,menu,NULL); XtAddCallback(push,XmNactivateCallback,color_vals,&me->red); push = XtVaCreateManagedWidget("green",xmPushButtonWidgetClass,menu,NULL); XtAddCallback(push,XmNactivateCallback,color_vals,&me->green); push = XtVaCreateManagedWidget("blue",xmPushButtonWidgetClass,menu,NULL); XtAddCallback(push,XmNactivateCallback,color_vals,&me->blue); /* in range */ rc = XtVaCreateManagedWidget("in",xmRowColumnWidgetClass,me->form,NULL); XtVaCreateManagedWidget("label",xmLabelWidgetClass,rc,NULL); me->l = XtVaCreateManagedWidget("left",xmTextWidgetClass,rc,NULL); XtAddCallback(me->l,XmNvalueChangedCallback,color_text,me); me->r = XtVaCreateManagedWidget("right",xmTextWidgetClass,rc,NULL); XtAddCallback(me->r,XmNvalueChangedCallback,color_text,me); /* out range */ rc = XtVaCreateManagedWidget("out",xmRowColumnWidgetClass,me->form,NULL); XtVaCreateManagedWidget("label",xmLabelWidgetClass,rc,NULL); me->b = XtVaCreateManagedWidget("bottom",xmTextWidgetClass,rc,NULL); XtAddCallback(me->b,XmNvalueChangedCallback,color_text,me); me->t = XtVaCreateManagedWidget("top",xmTextWidgetClass,rc,NULL); XtAddCallback(me->t,XmNvalueChangedCallback,color_text,me); /* gamma */ rc = XtVaCreateManagedWidget("gamma",xmRowColumnWidgetClass,me->form,NULL); XtVaCreateManagedWidget("label",xmLabelWidgetClass,rc,NULL); me->g = XtVaCreateManagedWidget("gamma",xmTextWidgetClass,rc,NULL); XtAddCallback(me->g,XmNvalueChangedCallback,color_text,me); /* testing stuff */ rc = XtVaCreateManagedWidget("pick",xmRowColumnWidgetClass,me->form,NULL); push = XtVaCreateManagedWidget("white",xmPushButtonWidgetClass,rc,NULL); XtAddCallback(push,XmNactivateCallback,color_pick,me); XtManageChild(me->dlg); me->cur = &me->red; color_update(me,me->cur,2); XmToggleButtonSetState(me->toggle,True,True); }
bool color_field(bool update=true) { if(update || color_middle==-1){color_update();} if(color_now==2){return true;}else{return false;} }
bool color_backround(bool update=true) { if(update || color_middle==-1){color_update();} if(color_now==0){return true;}else{return false;} }