ID3V2 * ID3V2::parse(InputPlugin * input,const FXuchar * id) { FXuchar info[6]; if (input->read(info,6)!=6) return nullptr; const FXuchar & id3v2_flags = info[1]; FXint tagsize = ID3_SYNCSAFE_INT32(info+2); tagsize+=10; if (id3v2_flags&ID3V2::HAS_FOOTER) { tagsize+=10; } FXuchar * tagbuffer=nullptr; allocElms(tagbuffer,tagsize); if (input->read(tagbuffer+10,tagsize-10)!=tagsize-10){ freeElms(tagbuffer); return nullptr; } memcpy(tagbuffer,id,4); memcpy(tagbuffer+4,info,6); ID3V2 * id3v2 = new ID3V2(tagbuffer,tagsize); freeElms(tagbuffer); return id3v2; }
// Restore image from off-screen pixmap long ShutterBug::onCmdSnap(FXObject*,FXSelector,void*){ FXColor *pixels=NULL; // Try grab pixels if(snapRectangle(pixels,rectangle)){ // Construct file dialog FXFileDialog savedialog(this,tr("Save Image")); savedialog.setSelectMode(SELECTFILE_ANY); savedialog.setPatternList(patterns); savedialog.setCurrentPattern(fileformat); savedialog.setFilename(FXPath::absolute(filename)); // Run file dialog if(savedialog.execute()){ filename=savedialog.getFilename(); fileformat=savedialog.getCurrentPattern(); if(FXStat::exists(filename) && FXMessageBox::question(this,MBOX_YES_NO,tr("Overwrite File"),tr("Overwrite existing image file: %s?"),filename.text())!=MBOX_CLICKED_YES) goto x; if(!saveImage(filename,pixels,rectangle.w,rectangle.h)){ FXMessageBox::error(this,MBOX_OK,tr("Error Saving Image"),tr("Unable to save image to file: %s."),filename.text()); } } // Free pixels x: freeElms(pixels); } return 1; }
// We lost the selection somehow long ShutterBug::onClipboardLost(FXObject* sender,FXSelector sel,void* ptr){ FXShell::onClipboardLost(sender,sel,ptr); FXTRACE((1,"%s::onClipboardLost \n",getClassName())); freeElms(clipbuffer); clipwidth=0; clipheight=0; return 1; }
long GMSourceView::onDndSourceMotion(FXObject*,FXSelector,void*ptr){ FXEvent * event = static_cast<FXEvent*>(ptr); GMTreeItem * item = dynamic_cast<GMTreeItem*>(sourcelist->getItemAt(event->win_x,event->win_y)); if (item) { GMSource * src = static_cast<GMSource *>(item->getData()); FXDragType*types; FXuint ntypes; if (sourcelist->inquireDNDTypes(FROM_DRAGNDROP,types,ntypes)){ if (src->dnd_accepts(types,ntypes)){ sourcedrop=src; sourcelist->acceptDrop(DRAG_ACCEPT); freeElms(types); return 1; } freeElms(types); } } sourcedrop=nullptr; return 0; }
// Snapshot to clipboard long ShutterBug::onCmdSnapClipboard(FXObject*,FXSelector,void*){ freeElms(clipbuffer); clipwidth=0; clipheight=0; if(acquireClipboard(dndTypes,ARRAYNUMBER(dndTypes))){ if(snapRectangle(clipbuffer,rectangle)){ clipwidth=rectangle.w; clipheight=rectangle.h; } } return 1; }
// Try to guess at a suitable font - we only do this when // there is no "FontName" entry in the registry. static void FindFont(FXString &FontName) { FXFontDesc*fonts=NULL; FXuint numfonts=0; if (FXFont::listFonts(fonts,numfonts,FXString::null)) { // First, try each of the items in our "tryfonts" list... for (const char**tryfont=tryfonts; *tryfont; tryfont++) { for (FXuint i=0; i<numfonts; i++) { FXFontDesc fd=fonts[i]; if (strncasecmp(fd.face, *tryfont, strlen(*tryfont))==0) { FontName=fd.face; freeElms(fonts); return; } } } // keep looking... // Try to grab the first thing that is fixed-width and scalable. for (FXuint i=0; i<numfonts; i++) { FXFontDesc fd=fonts[i]; if ((fd.flags&FXFont::Fixed) && (fd.flags&FXFont::Scalable)) { FontName=fd.face; freeElms(fonts); return; } } // keep looking... // Try to grab the first thing that is fixed-width and reasonably sized. for (FXuint i=0; i<numfonts; i++) { FXFontDesc fd=fonts[i]; if ((fd.flags&FXFont::Fixed)&&(fd.size>=100)&&(fd.size<200)) { FontName=fd.face; freeElms(fonts); return; } } freeElms(fonts); } FontName="fixed"; // I give up! }
// Destroy main window ShutterBug::~ShutterBug(){ getApp()->removeTimeout(this,ID_RECORD_FRAME); getApp()->removeTimeout(this,ID_SNAPSHOT); freeElms(clipbuffer); delete snapper[0]; delete snapper[1]; delete snapper[2]; delete snapper[3]; delete bigicon; delete smallicon; delete weighticons[0]; delete weighticons[1]; delete weighticons[2]; delete weighticons[3]; delete weighticons[4]; delete weighticons[5]; }
// Record one frame long ShutterBug::onCmdRecordFrame(FXObject*,FXSelector,void*){ FXint curx,cury; FXuint state; FXColor *pointer=NULL; FXbool ok=false; FXWindow *root=getRoot(); filename=filenameFromFrame(filename,filecount); FXTRACE((1,"Snap Frame: %s\n",filename.text())); if(grabRectangle(pointer,rectangle)){ ok=saveImage(filename,pointer,rectangle.w,rectangle.h); freeElms(pointer); } root->getCursorPosition(curx,cury,state); if(ok && root->getX()<curx && curx+1<root->getWidth() && root->getY()<cury && cury+1<root->getHeight()){ getApp()->addTimeout(this,ID_RECORD_FRAME,rate); filecount++; } else{ showSnapRectangle(); show(); } return 1; }
void GMNotifyDaemon::notify(const FXchar * summary,const FXchar * body,FXint timeout,FXImage* image){ FXint iw,ih,is,ibps,ichannels,isize; dbus_bool_t ialpha; const FXchar * idata=NULL; DBusMessage * msg = method("Notify"); if (msg){ DBusMessageIter iter; DBusMessageIter array; DBusMessageIter dict; DBusMessageIter value; DBusMessageIter variant; DBusMessageIter data; dbus_message_iter_init_append(msg,&iter); gm_dbus_append_string(&iter,appname); dbus_message_iter_append_basic(&iter,DBUS_TYPE_UINT32,&msgid); if (image && (flags&IMAGE_WITHOUT_APPICON)) { FXString empty; gm_dbus_append_string(&iter,empty); } else { gm_dbus_append_string(&iter,appicon); } dbus_message_iter_append_basic(&iter,DBUS_TYPE_STRING,&summary); dbus_message_iter_append_basic(&iter,DBUS_TYPE_STRING,&body); dbus_message_iter_open_container(&iter,DBUS_TYPE_ARRAY,DBUS_TYPE_STRING_AS_STRING,&array); if (persistent) { if (GMPlayerManager::instance()->can_prev()) gm_dbus_append_string_pair(&array,"media-skip-backward","Previous"); if (GMPlayerManager::instance()->can_pause()) gm_dbus_append_string_pair(&array,"media-playback-pause","Pause"); else if (GMPlayerManager::instance()->can_play()) gm_dbus_append_string_pair(&array,"media-playback-start","Play"); if (GMPlayerManager::instance()->can_stop()) gm_dbus_append_string_pair(&array,"media-playback-stop","Stop"); if (GMPlayerManager::instance()->can_next()) gm_dbus_append_string_pair(&array,"media-skip-forward","Next"); } dbus_message_iter_close_container(&iter,&array); dbus_message_iter_open_container(&iter,DBUS_TYPE_ARRAY,"{sv}",&array); if (image && image->getData()) { // const FXchar * icon_data="icon_data"; /// spec 0.9 says "image_data". some use "icon_data" though.. // const FXchar * icon_data="image-data"; /// spec 0.9 says "image_data". some use "icon_data" though.. ialpha = true; iw = image->getWidth(); ih = image->getHeight(); is = iw*4; ibps = 8; ichannels = 4; isize = iw*ih*4; FXColor * bgra = NULL; allocElms(bgra,(iw*ih)); gm_bgra_to_rgba(image->getData(),bgra,(iw*ih)); idata = (const FXchar*)bgra; dbus_message_iter_open_container(&array,DBUS_TYPE_DICT_ENTRY,0,&dict); gm_dbus_append_string(&dict,icondata); dbus_message_iter_open_container(&dict,DBUS_TYPE_VARIANT,"(iiibiiay)",&variant); dbus_message_iter_open_container(&variant,DBUS_TYPE_STRUCT,NULL,&value); dbus_message_iter_append_basic(&value,DBUS_TYPE_INT32,&iw); dbus_message_iter_append_basic(&value,DBUS_TYPE_INT32,&ih); dbus_message_iter_append_basic(&value,DBUS_TYPE_INT32,&is); dbus_message_iter_append_basic(&value,DBUS_TYPE_BOOLEAN,&ialpha); dbus_message_iter_append_basic(&value,DBUS_TYPE_INT32,&ibps); dbus_message_iter_append_basic(&value,DBUS_TYPE_INT32,&ichannels); dbus_message_iter_open_container(&value,DBUS_TYPE_ARRAY,DBUS_TYPE_BYTE_AS_STRING,&data); dbus_message_iter_append_fixed_array(&data,DBUS_TYPE_BYTE,&idata,isize); dbus_message_iter_close_container(&value,&data); dbus_message_iter_close_container(&variant,&value); dbus_message_iter_close_container(&dict,&variant); dbus_message_iter_close_container(&array,&dict); freeElms(bgra); } //gm_dbus_dict_append_bool(&array,"transient",true); if (persistent) { // if (GMPlayerManager::instance()->playing()) gm_dbus_dict_append_bool(&array,"resident",true); // else // gm_dbus_dict_append_bool(&array,"transient",true); gm_dbus_dict_append_bool(&array,"action-icons",true); } dbus_message_iter_close_container(&iter,&array); dbus_message_iter_append_basic(&iter,DBUS_TYPE_INT32,&timeout); send(msg,this,ID_NOTIFY_REPLY); } }
BufferBase::~BufferBase(){ freeElms(begptr); }